カードゲームの判定 | アルゴリズム [AOJ 0060][Ruby/Python/c++]


引き続きプログラミングの基礎体力づくりと、Python/c++の勉強を兼ねてアルゴリズムを勉強中です。今回は『カードゲームの判定』について勉強しました。AIZU Online Judgeで対応している問題は、『Card Game』です。c++は最近購入したアルゴリズム本の解説ソースがc++なのでついでに勉強中ですが、やはり処理速度が全然違いますね〜


😸 AOJ問題

The Balance of the World

Aizu Online Judge。与えられる文字列は、丸括弧(“( )”)と角括弧(“[ ]”)の二種類の括弧を含むことがある。この括弧対応関係が正しいかをチェックする問題。

😼 Rubyコード

while gets do
c1, c2, c3 = $_.chomp.split(' ').map(&:to_i)
rem = (1..10).to_a - [c1, c2, c3]
per = rem.map{ |i| c1 + c2 + i <= 20 ? 1 : 0 }.inject(:+)/7.0
puts per >= 0.5 ? 'YES' : 'NO'
end

🐞 Pythonコード

while True:
try:
count = 0
c1, c2, c3 = map(int, raw_input().split())
for i in range(1, 11):
if i in [c1, c2, c3]: continue
if c1 + c2 + i <= 20: count += 1
if count/7.0 >= 0.5:
print 'YES'
else:
print 'NO'
except:
break

🗻 c++コード

#include <iostream>
using namespace std;
int main() {
int i;
int c1, c2, c3;
int count;
int sum = 0;
while (cin >> c1 >> c2 >> c3) {
count = 0;
for(i = 1; i < 11; i++) {
if (c1 == i || c2 == i) {
continue;
} else if (c1 + c2 + i <= 20) {
count++;
}
}
if ((double)count/7.0 >= 0.5) {
cout<<"YES"<<endl;
} else {
cout<<"NO"<<endl;
}
}
return(0);
}

👽 GitHubリポジトリ

当面はAOJを解きながら、アルゴリズムの再勉強をしていくつもりです。Ruby/PythonでのAOJの回答は下のリポジトリに保存しておきます。もしツッコミとかあればぜひ^^

morizyun/aoj-ruby-python - GitHub

📚 おすすめの書籍