AIZU Online Judgeの『文章中に隠れた数字の合算 Secret Number』をRuby/Python/c++で解いてみました。
c++だと、可読性を上げつつ、グローバル変数使わないように…とかで結構悩みました。でもプログラムを普段よりも幅広い側面で考えられるので、結構楽しいです^^
😸 AOJ問題
Secret Number
Aizu Online Judge。メモされた文章を読み込んで、その中にある数字を合算した結果の「暗証番号」
🐡 Rubyコード
arr = [] while gets arr += $_.chomp.scan(/[0-9]+/) end puts arr.map(&:to_i).inject(:+)
|
🎳 Pythonコード
import re
sum = 0 while True: try: str = raw_input() r = re.compile(r'[0-9]+') arr = r.findall(str) for a in arr: sum += int(a) except: break
print sum
|
Pythonの正規表現、早く覚えないと。。
[python]正規表現 - コンパイル、マッチング、マッチした部分の取り出し
🐝 c++コード
#include using namespace std;
int addCharNum(string s, int *i){ int n = 0; int j; for (j = *i; '0' <= s[j] && <="'9'=> && j < s.size(); j++){ n *= 10; n += s[j] - '0'; } *i = j; return n; }
int main() { int sum = 0; int i; string s; while(cin>>s) { for(i = 0; i < s.size() ; i++) { if('0' <= s[i] && <="'9'=>) { sum += addCharNum(s, &i); } } } cout << sum << endl; }
|
いろいろ書いていて悩んでいたusing namespace std
の意味。
c++では、iostream.hはiostreamになって、古いヘッダファイルをインクルードしている既存のプログラムをエラーにせず、 新しいヘッダをインクルードすることで名前空間に包んだ安全な関数を呼び出せるようにするために書く。
using namespace std;の是非
🎂 GitHubリポジトリ
当面はAOJを解きながら、アルゴリズムの再勉強をしていくつもりです。Ruby/PythonでのAOJの回答は下のリポジトリに保存しておきます。もしツッコミとかあればぜひ^^
morizyun/aoj-ruby-python - GitHub
🖥 VULTRおすすめ
「VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。
最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!