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


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

🐡 AOJ問題

Card Game

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);
}

🐹 Javaコード

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
final static Integer[] CARDS = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String tmp = br.readLine();
if (tmp == null) {
break;
}
List<Integer> list = Arrays.stream(tmp.split(" ")).map(x -> Integer.valueOf(x)).collect(Collectors.toList());
List<Integer> remain = Arrays.asList(CARDS).stream().filter(x -> !list.contains(x)).collect(Collectors.toList());
List<Integer> within20 = remain.stream().filter(x -> (x + list.get(0) + list.get(1) <= 20)).collect(Collectors.toList());
float rate = (float) within20.size() / 7.0f;
if (rate >= 0.5) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
}

🗻 GitHubリポジトリ

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

morizyun/aoj-ruby-python - GitHub

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍