paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

【結果発表】プログラミングで彼女ができた人続出!?その方法とは

f:id:paiza:20151214193117p:plain
今回は、2015年12月8日(火)より開始いたしましたpaizaオンラインハッカソン Vol.7「プログラミングで彼女をつくる」の結果レポートをお届けします。

皆様、かわいい彼女はつくれましたでしょうか??

今回は、「プログラミングで彼女をつくる」の各集計結果や模範解答のご紹介をしたいと思います。

できた彼女をツイートして抽選でAmazonギフト券プレゼントへの応募期間は終了いたしましたが、プログラミング問題や彼女づくりには引き続き挑戦できますので、「そんなんやってたって今知ったわ」という方もぜひ遊んでみてくださいね!!

paiza.jp


■paizaオンラインハッカソン Vol.7「プログラミングで彼女をつくる」各集計結果

f:id:paiza:20151214193128p:plain

◆人気アイテムランキング

アイテムゲットチャレンジの総提出数のランキングです。

順位 アイテム名 提出数
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字以内のコードをいつも見ておりますが、コードの短さを競うというのも楽しいですね!

■「プログラミングで彼女をつくる」レア問題の模範解答

f:id:paiza:20160118154220p:plain
以下、問題の難易度が高めだったレアアイテム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

■コード公開について

「もっといろんな言語でいろんなコードが見てみたいんや!!」という方は、たくさんの方々がブログ等で解法や回答コードを公開してくださっていますので、ぜひ探してみてください。

公開してくださった方の記事をほんの一部ですがご紹介いたします!

qiita.com

qiita.com

jajagacchi.jugem.jp

parrot.hatenadiary.jp

ameblo.jp

qiita.com

qiita.com

POHは毎回「ブログやSNS等でコードを公開していただいて構いません!」というスタンスで開催しているオンラインイベントですので、解法や回答コードを公開していただけるのはとても嬉しいです!!

後日、こちらのブログでもレア問題の解説やSwiftオープンの上位コードを公開させていただきたいと思っております。

■壁紙プレゼントについて

paizaに会員登録すると、下記の壁紙3種類がダウンロードできます!是非お気軽にご登録下さい!
f:id:paiza:20160118152811j:plain
f:id:paiza:20160118152826j:plain
f:id:paiza:20160118152837j:plain




paizaではスキルのあるエンジニアがきちんと評価されるようにし、技術を追い続ける事が仕事につながるようにする事で、日本のITエンジニアの地位向上を図っていければと考えています。特にpaizaではWebサービス提供企業などでもとめられる、システム開発力や、テストケースを想定できるかの力(テストコードを書く力)などが問われる問題を出題しています。

テストの結果によりS・A・B・C・D・Eの6段階でランクが分かります。自分のプログラミングスキルを客観的に知りたいという方は是非チャレンジしてみてください。

http://paiza.jp