サイの陽

よっこらせ

Paiza Online Hackathon (POH)に参加した

      2016/12/11

1か月ほど前に Paiza Online Hackathon(https://paiza.jp/poh/ando)に参加してきました。

 

プログラミングをして画面の中の彼女と仲良くなるサービス?です。

用意されている問題を解くと彼女に着せられる服やアクセサリーなどが増えていく仕様で、僕はこの内の「つり目」、「ショートヘア」、「メガネ」、「水着」の問題を解きました。

POHのトップページに飛ぶと分かる通り、メガネ問題だけランキングが用意されてます。やらざるを得ませんね。

で、これswiftで問題を解かないとランキングに乗らない訳ですよ。でもswiftやったこと無いし分からないのでまずCで書きました。

 

 

————————————————

i,n[10001],m[101],j,A;
a(*n){
    for(i=-1;++i<=*n**n;)
        scanf(\"%d\",n+i);
}

main(){
    for(a(n),a(m),A=*n-*m+1,i=A*A;i--;)
        for(j=*m**m;j--&&n[i/A**n+i%A+j/ *m**n+j%*m+1]==m[j+1];)if(!j)printf(\"%d %d\",i/A,i%A);

}

———————————————–

 

 

全力でコードの長さを削った結果は195バイトでした(https://t.co/t6HXYsSbP8)。最初は500バイトくらいだった(多分)ので、大きな進歩です。

 

ここでランキングを見たら1位の人が71バイトでした。はぁ?頭おかしい。とりあえず普通にswiftで作りました。

 

 

————————————————


extension String:CollectionType{}
var i=0,j=0,n=[Int](),m=[Int]()
func a(inout s:[Int]){
    i=0
    repeat{
        s+=readLine()!.split(\" \").map{Int($0)!}
        i++
    }while i<=s[0]
}
a(&n)
a(&m)
for(var N=n[0],M=m[0],A=N-M+1,i=0;i<A*A;i++){
    for(j=0;j<M && n[i/A*N+i%A+j*N+1...i/A*N+i%A+j*N+M]==m[j*M+1...j*M+M];j++) {
        if(j==M-1){print(i/A,i%A)}
    }
}

————————————————

 

 

302バイトが限界です(https://paiza.jp/poh/ando/share/11320ee8)。

takunoko氏によると1行目のあたりを削減できるらしいですが、調べるのが面倒で変えてません。

 

71バイトを達成する方法はtakunoko氏が考案し、見事71バイトに届いて2位になりました。

バイト数が同じだと、先にそのバイト数に達した人の順位が上になるみたいですね。

この後71バイトを突破する変態が現れました。(・_・)

 - 未分類