今回は、2015年12月8日(火)より開始いたしましたpaizaオンラインハッカソン Vol.7「プログラミングで彼女をつくる」の結果レポートをお届けします。
https://twitter.com/kirikabuobake/status/675595373298106368
https://twitter.com/co_para7_/status/680073259434418176
彼女できてしまった・・・!
— TOME@職業プログラマー (@shinhirota) 2015年12月24日
/今日家にやってきたアンドロイド彼女……。『POH7「プログラミングで彼女をつくる」』 https://t.co/cjXmTIF0e7 #_poh pic.twitter.com/hS8M0JX8IM
皆様、かわいい彼女はつくれましたでしょうか??
今回は、「プログラミングで彼女をつくる」の各集計結果や模範解答のご紹介をしたいと思います。
できた彼女をツイートして抽選でAmazonギフト券プレゼントへの応募期間は終了いたしましたが、プログラミング問題や彼女づくりには引き続き挑戦できますので、「そんなんやってたって今知ったわ」という方もぜひ遊んでみてくださいね!!
■paizaオンラインハッカソン Vol.7「プログラミングで彼女をつくる」各集計結果
◆人気アイテムランキング
アイテムゲットチャレンジの総提出数のランキングです。
順位 | アイテム名 | 提出数 |
1位 | 水着 | 33753 提出 |
2位 | つり目セット | 17310 提出 |
3位 | 眼帯 | 10907 提出 |
4位 | ショートヘアセット | 10839 提出 |
5位 | ロングヘアセット | 10090 提出 |
6位 | めがね | 9220 提出 |
7位 | セーラー服セット | 8491 提出 |
8位 | カーディガンセット | 8120 提出 |
9位 | ポニーテールセット | 7677 提出 |
10位 | ツインテールセット | 7674 提出 |
11位 | サンタ服 | 5318 提出 |
12位 | 縞ニーソセット | 4373 提出 |
正直な結果ですね……。
◆言語別集計
言語別の提出数等の集計です。
言語 | 提出数 | 平均実行時間 | 提出コードバイト数 |
Java | 20453 提出 | 0.1 秒 | 742 byte |
PHP | 9080 提出 | 0.06 秒 | 329 byte |
Ruby | 9646 提出 | 0.15 秒 | 210 byte |
Python2 | 13560 提出 | 0.06 秒 | 420 byte |
Perl | 2602 提出 | 0.04 秒 | 265 byte |
C | 28541 提出 | 0.01 秒 | 372 byte |
C++ | 21842 提出 | 0.01 秒 | 437 byte |
C# | 10180 提出 | 0.05 秒 | 646 byte |
JavaScript | 7174 提出 | 0.12 秒 | 534 byte |
Objective-C | 127 提出 | 0.02 秒 | 1085 byte |
Scala | 479 提出 | 0.4 秒 | 340 byte |
Go | 430 提出 | 0.02 秒 | 413 byte |
Haskell(Beta) | 1088 提出 | 0.01 秒 | 313 byte |
CoffeeScript(Beta) | 112 提出 | 0.18 秒 | 405 byte |
Bash(Beta) | 430 提出 | 0.02 秒 | 82 byte |
Erlang(Beta) | 46 提出 | 1.37 秒 | 516 byte |
R(Beta) | 251 提出 | 0.17 秒 | 246 byte |
COBOL(Beta) | 121 提出 | 0.01 秒 | 1683 byte |
VB(Beta) | 423 提出 | 0.04 秒 | 493 byte |
F#(Beta) | 111 提出 | 0.07 秒 | 377 byte |
Python3 | 4268 提出 | 0.06 秒 | 301 byte |
Clojure(Beta) | 229 提出 | 1.24 秒 | 365 byte |
D(Beta) | 275 提出 | 0.02 秒 | 455 byte |
Swift | 2303 提出 | 0.01 秒 | 420 byte |
POHは割と毎回C++、Cでのご参加が多かったのですが、今回はJavaでのご参加も多かったです!
◆Swiftオープン トップ10
今回、POH開催直前にSwiftがオープンソース化されたということで、「めがね」ゲットチャレンジの提出コードバイト数&タイムラインキングをさりげなく(?)表示しておりました。挑戦していただいた中で10位までの皆様の結果をご紹介いたします。
順位 | ニックネーム | 平均実行時間 | 提出コードバイト数 |
1位 | ishioka | 0.01 秒 | 54 byte |
2位 | fine | 0.01 秒 | 64 byte |
3位 | np01767 | 0.01 秒 | 68 byte |
4位 | kei_q | 0.01 秒 | 70 byte |
5位 | takunoko | 0.01 秒 | 71 byte |
6位 | balkm | 0.01 秒 | 72 byte |
7位 | m702299745 | 0.01 秒 | 83 byte |
8位 | formula | 0.01 秒 | 182 byte |
9位 | ebi5126 | 0.01 秒 | 192 byte |
10位 | Rose_Line | 0.01 秒 | 206 byte |
1位は57byteのコードを書いてくださったishiokaさんです!!すごすぎる……………………。
やり込んでくださった皆様ありがとうございました!!
ツイッターの@paiza_runでも、趣向を凝らした140字以内のコードをいつも見ておりますが、コードの短さを競うというのも楽しいですね!
■「プログラミングで彼女をつくる」レア問題の模範解答
以下、問題の難易度が高めだったレアアイテム3問の模範解答です。
「どうしても水着がほしい!!でも問題が難しくてどうしても自力では解けない!!」という方は、模範解答やユーザーの皆様が公開されている回答コードを参考に再チャレンジしてみるのも手です!!
(※こちらは全てPythonのコードです)
◆メガネゲットチャレンジ
paiza事務局作成コード
#coding:utf-8 n = m = 0 data = pattern = [] #y, xを起点として画像がパターンと一致しているかをチェックする関数 def is_matched(y, x): for j in range(m): for i in range(m): if y + j < n and x + i < n: if data[y+j][x+i] != pattern[j][i]: return False return True if __name__ == "__main__": #値の入力 n = int(raw_input()) data = [map(int, raw_input().split()) for _ in range(n)] m = int(raw_input()) pattern = [map(int, raw_input().split()) for _ in range(m)] #画像各点からパターンと一致している点を探す for y in range(n - m + 1): for x in range(n - m + 1): if is_matched(y, x): print y, x exit()
◆サンタ服ゲットチャレンジ
paiza事務局作成コード
#coding:utf-8 #入力処理 x, y, z, n = map(int, raw_input().split()) cut_x = [0, x] # カットされた位置 x cut_y = [0, y] # カットされた位置 y for i in range(n): d, a = map(int, raw_input().split()) if d == 0: cut_x.append(a) if d == 1: cut_y.append(a) #x方向のカットをソートしてカットされた区間のうち最小のものをmin_xに入れる処理 min_x = 101 cut_x = sorted(cut_x) for i in range(len(cut_x)-1): cut_size = cut_x[i+1] - cut_x[i] if min_x > cut_size: min_x = cut_size #y方向のカットをソートしてカットされた区間のうち最小のものをmin_yに入れる処理 min_y = 101 cut_y = sorted(cut_y) for i in range(len(cut_y)-1): cut_size = cut_y[i+1] - cut_y[i] if min_y > cut_size: min_y = cut_size #3辺をかけ算して回答を出力 print min_x * min_y * z
◆水着ゲットチャレンジ
paiza事務局作成コード
#coding:utf-8 N = input() ans = 1 #5の倍数になる数を探し5で割れる回数を数える five = 0 for i in range(1, N+1): n = i while n % 5 == 0: n = n / 5 five += 1 ans = 1 for i in range(1, N+1): n = i #5の倍数ならばiを5で割り切れなくなるまで割る while n % 5 == 0: n = n / 5 #割り切れなくなった数が2の倍数で、5の倍数が残ってれば2で割り #最初で数えた5で割れる回数から1引く while n % 2 == 0 and five > 0: n = n / 2 five -= 1 #9桁になるように余りを取る ans = ans * n ans = ans % 1000000000 print ans
■コード公開について
「もっといろんな言語でいろんなコードが見てみたいんや!!」という方は、たくさんの方々がブログ等で解法や回答コードを公開してくださっていますので、ぜひ探してみてください。
公開してくださった方の記事をほんの一部ですがご紹介いたします!
http://ameblo.jp/3snorc/entry-12105637040.htmlameblo.jp
POHは毎回「ブログやSNS等でコードを公開していただいて構いません!」というスタンスで開催しているオンラインイベントですので、解法や回答コードを公開していただけるのはとても嬉しいです!!
後日、こちらのブログでもレア問題の解説やSwiftオープンの上位コードを公開させていただきたいと思っております。
■壁紙プレゼントについて
paizaに会員登録すると、下記の壁紙3種類がダウンロードできます!是非お気軽にご登録下さい!
paizaは、技術を追い続けることが仕事につながり、スキルのある人がきちんと評価される場を作ることで、日本のITエンジニアの地位向上を目指したいと考えています。
「paiza新卒」は、ITエンジニアを目指す人たちのための、IT/Webエンジニア求人に100%特化した就職サービスです。プログラミングスキルチェック(コーディングのテスト)を受けて、スコアが一定基準を超えれば、ES選考なしで複数の企業へ応募ができます。
まずはスキルチェックだけ、という使い方もできます。自分のプログラミングスキルを客観的に知ることができますので、興味がある方はぜひ一度ご覧ください。
また、paiza新卒をご利用いただいている企業や、paiza新卒を使って就職に成功した方へのインタビューもございます。こちらもぜひチェックしてみてください。
詳しくはこちら