Cozy Ozy このページをアンテナに追加 RSSフィード

2016-02-21

バイバイマン

バイバイマンメモ バイバイマンメモを含むブックマーク

MAGAZINEの記事は時間がかかるので、こちらにまとめておきます。

ランキングのニックネームと、twitterのニックネーム(やid)を見比べて、「たぶんこの人だろなー」って感じで書いてありますので、もし別人ならごめんなさい。

『ワシもコード(もしくは記事)公開してんのに載ってないゾー!』という方は、ご一報いただけると大変助かります。

原稿が仕上がるまで、逐次更新予定です。


ランキング

http://d.hatena.ne.jp/Ozy/20160202#p1


挑戦者の皆さんの解説記事

順番は目についた順で、適当です。

m.ukaiさん

http://d.hatena.ne.jp/m-ukai/20160219

れのあさん

http://renor.hatenablog.jp/entry/2016/02/20/210614

eijitさん

http://qiita.com/eijit/items/36f1a72f10bd8973ef0d

あいべくうさん

http://ibeckuu.hatenablog.com/entry/2016/02/19/011840

angelさん

http://ange1.hateblo.jp/entry/2016/02/18/144326

matarilloさん

https://gist.github.com/matarillo/8c37857f974fd73fec11

Yasu.Hara.さん

http://yas.tea-nifty.com/blog/2016/02/post-8211.html


挑戦者の皆さんのコード

順番は目についた順で、適当です。

如之丈さん
f a d b c e=a+b+c+d+e:f(d+e)e(a+d)b c;main=mapM_ print$take 100$f 1 0 0 0 0;

https://twitter.com/gotoki_no_joe/status/700603494751825920


舞葉さん
long long a=1,b[9],s;main(z){for(;99+z;a=(b[z&3]+=a)-a+b[--z&3])printf("%lld\n",s+=a);}

https://gist.github.com/buyoh/795505808dd657893701


rotary-oさん

【Perl6】

# エンタープライズ版ideone(rakudo-2010.08) : 29B
# (1 xx 4,*+*-*+*...7e10)>>.say
# 1 xx 4は、ドキュメントに書かれておらず、現在のバージョンでは不可。
# ...7e10は、ドキュメントによると通り過ぎてしまうはずだが、このバージョンではOK。
# >>.sayは、ドキュメントによると出力順序が不定だが、このバージョンではOK。
# 
# ideone(rakudo-2014.07) : 33B
# .say for(1 xx 4,*+*-*+*...*>6e10)
# ドキュメントに書かれているとおり、>>.sayだと出力順序が不定になる。
# 
# 手元の環境(rakudo-2016.01) : 32B
# (1,1,1,1,*+*-*+*...*>6e10)>>.say
# 手元の環境だと、>>.sayでも大丈夫。
# >>.sayがだめだとすると、35B
# .say for (1,1,1,1,*+*-*+*...*>6e10)
# forの後のスペースが必要。
.say for(1 xx 4,*+*-*+*...*>6e10)

https://ideone.com/Mnq31t

Ruby

# 40Bいろいろ
#
# 提出したもの
# a=c=1,1,1,2;100.times{a<<p(c)+2*c=a[-4]}
#
# 初期値をずらした
# c=0;a=[1]*4;100.times{a<<c+2*p(c=a[-4])}
#
# evalでループ
# a=c=1,1,1,2;eval'a<<p(c)+2*c=a[-4];'*100
# c=0;a=[1]*4;eval'a<<c+2*p(c=a[-4]);'*100
#
# evalだとこんなのもOK
# eval'a,b,c,d=b,c,d,a ?d-c+b+p(a):1;'*104
eval'a,b,c,d=b,c,d,a ?d-c+b+p(a):1;'*104

https://ideone.com/a37cTK


hogeover30さん

C++

double a,*b=&a;main(){for(;*b<2e10;__builtin_printf("%.f\n",b[5]=*b+++2**b?:1));}

https://twitter.com/hogeover30/status/700341209802350592


ロベールさん

Ruby

a=[1]*4;b=0;100.times{a<<b+p(b=a[-4])*2}

https://twitter.com/robert_cpp/status/700276136677249024


tailsさん

Perl

print$$_=${$_-5}+${$_-4}*2||1,$/for-99..0

http://ideone.com/edXHxQ

use bigint;print 1e11**$_%(9x55-2e11)/1e11%(9x11),$/for 1..100

http://ideone.com/zIfftP

Bash

eval 'set $['{0..99}'<4|$5+$40/5] $@;echo $1;'

http://ideone.com/SHted3

Ruby

x=2**40 # any big number you like
[*1..100].each{|n|p x**n%(x**5-x*2-1)/x%(x-1)}

http://ideone.com/39QK9W


yetterbiumさん

Haskell

f=1:1:1:1:[2*f!!n+(0:f)!!n|n<-[0..95]]
main=mapM print f

https://twitter.com/kunio_Yb/status/700196729660944384


gmkさん

Ruby

(a=2,*[1]*99).map{a=2*a[3]+p(a[4]),*a}

https://twitter.com/g_m_k/status/700168650800500736

COBOL

	IDENTIFICATION DIVISION.PROGRAM-ID.F.DATA DIVISION.
	WORKING-STORAGE SECTION. 1 X. 2 A PIC 9(11) OCCURS 110 VALUE 1.
	2 I PIC 999. PROCEDURE DIVISION. M. MOVE 0 TO A(1)ADD 1 TO I
	DISPLAY A(1+I)(FUNCTION INTEGER(12 -FUNCTION LOG10(.1+A(1+I))):)
	COMPUTE A(5+I)=2*A(1+I)+A(I)IF I<100 GO TO M.

https://ideone.com/ok2Ad8


antimon2さん

【Perl6】

(1 xx 4,*+*-*+*...7e10)>>.say

Ruby

a=[1]*4;n=0;100.times{a<<n+2*p(n=a[-4])}

Haskell

s=1:1:1:1:[(0:s)!!n+s!!n*2|n<-[0..95]];main=mapM print s

https://gist.github.com/antimon2/5712563dbdb8a90f2e91


wonderful_pandaさん

Python

a=[1]*4+[2]
for i in a*20:a+=[a[0]+a[1]*2];print a.pop(0)

https://twitter.com/wonderful_panda/status/700154059630612482


ebicochinealさん

Python

a=b=c=d=1;exec'print a;a,b,c,d=b,c,d,d-c+b+a;'*100

http://ideone.com/4vHte0

C#

class C{static void Main(){for(long a=1,b=1,c=1,d=1,x;b%37>0;a=b,b=c,c=d,d+=x+a-b)System.Console.WriteLine(x=a);}}

http://ideone.com/Js3CpV


stephen_doleさん

Perl

print$_[@_]=$_[-5]+2*$_[-4]||1,$/for 1..<>

http://ideone.com/1HjW22


Noiminさん

Python

a=4*[0]+[1];exec"print sum(a);a=a[1:4]+[a[4]+a[0],a[1]+a[0]];"*100

https://twitter.com/noimin_kousen/status/701373658166460416

Prolog

m(A,B,C,D,E,N):-N>0,F is A+B,format('~d~n',F+C+D+E),m(B,C,D,A+E,F,N-1).
:-m(0,0,0,0,1,100).

https://twitter.com/noimin_kousen/status/701374147755020288


mbspさん

PHP

<?php for(;$i<100;)echo${$i+5}=${$i++}+2*$$i?:1,"\n";
 
//実行君用のコード(49B)
//<?for(;$i<100;)echo${$i+5}=${$i++}+2*$$i?:1,"\n";

http://ideone.com/zj4Zyq


JavaScript(rhino, spidermonkey)】

for(a=i=[0];i++<100;)print(a[i]=a[i-4]*2+a[i-5]||1)

http://ideone.com/bDFovm

※対象外の言語(Whitespace)のコードも以下にあります。

http://ideone.com/Ccg7Ly


leaさん

Ruby

a=1;b=c=d=e=0;100.times{p a+b+c+d+e;a,b,c,d,e=d+e,a+d,b,e,c}

https://twitter.com/xiao_dawn_/status/702489878903193600


takeさん

Python

C=[2]+[1]*4;exec'print C[4];C=[C[4]+2*C[3]]+C;'*10

【Python3】

C=[2]+[1]*4;exec('print(C[4]);C=[C[4]+2*C[3]]+C;'*100)

【Go】

package main
import "fmt";func main(){a:=[200]uint64{1,1,1,1,2}
for i:=0;i<100;i++{fmt.Println(a[i])
a[i+5]=a[i]+2*a[i+1])}}

【Scala】

object Main extends App{var a=Seq(1L,1,1,1,2);for(i<-0 to 99){println(a(i));a=a:+a(i)+2*a(i+1)}}

https://gist.github.com/takoika/1c90994f735015de5a09

y_konishiy_konishi 2016/02/23 00:28 hogeover30さんのコードをみてCが1バイト縮むことに気付いたが後の祭り。

y_konishiy_konishi 2016/02/23 08:28 と思ったけどideonではダメでしたorz...

トラックバック - http://d.hatena.ne.jp/Ozy/20160221

2016-02-02 バイバイマンを数えよう 〜順位表〜

[][]バイバイマンを数えよう 〜順位表〜 バイバイマンを数えよう 〜順位表〜を含むブックマーク

バイバイマンを数えよう

2月18日10時0分をもって挑戦終了いたしました。挑戦者数325名・総提出数1986になりました。挑戦してくださった皆さま、ありがとうございました。


ご提出いただいたコードについて

後日CodeIQ MAGAZINE(掲載後にリンクを張ります)に、最終順位表とともに、ご提出いただいたコードの中からいくつかご紹介させていただく予定です。すべてのコードを紹介することは難しいですから、本問に挑戦していただいた方は自由に公開してください(CodeIQ MAGAZINEが公開される前でも問題ありません)。Twitterや個人ブログ等で公開される場合、このエントリのコメントやTwitterのOzyアカウント@ozy4dmまでご連絡いただければ、CodeIQ MAGAZINEの記事内でリンクさせていただきます


言語別順位表

挑戦締切時点での順位表です(同一挑戦者でニックネームを変更している場合は、最短記録のみ表示しています)

全言語通じての最短コードは、antimon2さん, rotary-oさん29B(Perl6)でした!

Perl 6】(4名)
1位(29B)antimon2, rotary-o
2位(41B)mbsp
3位(98B)Leonardone @ NEETSDKASU

Ruby】(83名)
1位(37B)chat
2位(38B)gmk, notogawa
3位(40B)antimon2, rotary-o, むぎゅう, robert
4位(41B)angel, おじけん, atetubou
5位(42B)ciel
6位(43B)hogeover30
7位(44B)kazutomi
8位(45B)あいべくう, PIN
9位(46B)R修行中
10位(47B)kazu82
11位(48B)kimiyuki, mbsp, Yasu.Hara.
12位(49B)Mattsun
13位(50B)tomwot, Azicore
14位(54B)uru
15位(57B)todaemon, Leonardone @ NEETSDKASU
16位(58B)oda1979, eigh, uiro_uri
17位(59B)小指が強い人, Lexical
18位(60B)iehn, L.star, lea
19位(62B)yoichi
20位(63B)hirokazu1020, みけCAT
21位(64B)ttakuru88
22位(67B)fine_
23位(68B)pavlocat
24位(72B)mdken
25位(73B)れのあ
26位(77B)スタジオ鉄
27位(81B)hir
28位(91B)にぃちぇ
29位(92B)akicho8
30位(106B)みのる
31位(108B)simanman
32位(110B)tnkayu
33位(137B)MH35
34位(144B)yk9JafCn
35位(151B)世界のまっきぃ
36位(185B)あらざし
37位(199B)_cympfh_
38位(202B)manman
39位(206B)risuoku
40位(215B)fukayanegi
41位(235B)nipoko
42位(257B)asanon
43位(260B)HK17
44位(282B)parroty
45位(304B)tama_mononoke
46位(317B)池田
47位(319B)koturn
48位(322B)hieta
49位(329B)terryleonhart
50位(333B)kanetai
51位(356B)せろり
52位(366B)chrome
53位(373B)fujimiyasensei
54位(385B)クサガメ
55位(399B)渋いぞひろし
56位(409B)たんでー
57位(452B)nagisa314
58位(474B)a5atou
59位(505B)tyfkda
60位(548B)むっしー
61位(569B)Richie
62位(613B)tic40
63位(727B)_Rei
64位(761B)niwatori
65位(796B)パッソル
66位(1102B)i_yuna

Perl】(15名)
1位(41B)tails
2位(42B)stephen_dole, mbsp
3位(58B)mn109
4位(73B)yamule, Yuchan
5位(76B)%20
6位(91B)planula
7位(104B)Leonardone @ NEETSDKASU
8位(107B)Hakuyume
9位(118B)KAMDA
10位(141B)moyomoto
11位(144B)Nyagoking
12位(180B)df
13位(436B)パパンダ

【bc】(5名)
1位(44B)m-ukai
2位(58B)gmk
3位(59B)todaemon
4位(73B)Leonardone @ NEETSDKASU
5位(789B)kanetai

Bash】(5名)
1位(46B)tails
2位(54B)ciel
3位(61B)todaemon
4位(107B)Leonardone @ NEETSDKASU
5位(790B)kanetai

【Groovy】(5名)
1位(48B)gmk
2位(50B)rotary-o
3位(57B)ciel
4位(73B)firebrick26
5位(75B)Leonardone @ NEETSDKASU

【Falcon】(3名)
1位(49B)angel
2位(69B)Leonardone @ NEETSDKASU
3位(793B)kanetai

Python】(36名)
1位(50B)notogawa, ebicochineal, だいじゅ
2位(51B)gmk, take, eijit
3位(53B)R修行中
4位(56B)hirosuzuki
5位(58B)wonderful_panda
6位(62B)uszjpy
7位(65B)orisano, ciel, yoichi
8位(66B)nkmctky, Noimin
9位(70B)Leonardone @ NEETSDKASU
10位(71B)juchi
11位(72B)knightrogen
12位(79B)a992571
13位(81B)pavlocat
14位(88B)SHIRAKATA Hisashi
15位(89B)taba
16位(123B)norman-k
17位(124B)あばばばばー
18位(142B)Hakuyume
19位(143B)しぐまる
20位(153B)kurenaissance
21位(155B)rakaxa
22位(180B)banta
23位(208B)VanVan
24位(257B)roiti46
25位(261B)20dice
26位(366B)ボヤッキー
27位(418B)ひびきね
28位(559B)hakkoku
29位(750B)nishinishinishi

JavaScript (rhino)】(10名)
1位(51B)Mattsun, Theodore, ebicochineal, hogeover30, mbsp
2位(70B)Leonardone @ NEETSDKASU
3位(77B)A1807
4位(105B)HimaJyun
5位(220B)ryo88c
6位(409B)SB15

JavaScript (spidermonkey)】(11名)
1位(51B)chat, Mattsun, Theodore, ebicochineal, hogeover30, mbsp
2位(54B)Azicore
3位(65B)mdken
4位(70B)Rose Line, Leonardone @ NEETSDKASU
5位(72B)ばくだん

PHP】(13名)
1位(51B)PIN
2位(54B)mbsp
3位(86B)Leonardone @ NEETSDKASU
4位(88B)gmk
5位(131B)HimaJyun
6位(163B)Amorosamente
7位(203B)ryo88c
8位(438B)14番
9位(446B)SB15
10位(480B)babyloos, いさむ、
11位(783B)まさふみ
12位(964B)toku-mori

Python 3】(31名)
1位(53B)notogawa, ebicochineal, だいじゅ
2位(54B)R修行中, take, gmk
3位(59B)wonderful_panda
4位(66B)ciel
5位(68B)yoichi
6位(69B)Noimin, 徒狐, synchro
7位(71B)Leonardone @ NEETSDKASU
8位(74B)べーにー, ほげはげ
9位(75B)Space Core
10位(82B)pavlocat
11位(85B)ボヤッキー
12位(87B)wassen
13位(90B)rokusuke
14位(117B)Count0
15位(155B)ryom917
16位(261B)びえせい
17位(274B)ikatakos
18位(296B)牛丼
19位(335B)Yusukebkk0318
20位(417B)ちゅうそん
21位(444B)soliton_at_evolve
22位(452B)jamad
23位(550B)ゲルググ
24位(1463B)ぱふらりんちょ

AWK (gawk)】(6名)
1位(55B)todaemon
2位(56B)MasWag
3位(59B)planula
4位(76B)Noimin
5位(208B)Leonardone @ NEETSDKASU
6位(872B)kanetai

Haskell】(18名)
1位(56B)notogawa, yetterbium, henkma, antimon2, koyama41
2位(58B)cojna
3位(76B)tanakh, 如之丈, Leonardone @ NEETSDKASU
4位(81B)わど
5位(84B)gmk
6位(101B)ioc
7位(102B)Bern
8位(144B)ツワブキ
9位(293B)yudedako
10位(375B)クサガメ
11位(920B)erin
12位(1126B)シフィ

【Node.js】(17名)
1位(57B)chat, Theodore, ebicochineal
2位(58B)notogawa
3位(76B)Rose Line, Leonardone @ NEETSDKASU
4位(78B)見習いコーダー01
5位(80B)ydr, mahaman
6位(195B)はるまき
7位(204B)ゆん2
8位(309B)riririusei99
9位(411B)soilblue2000
10位(546B)Myaake
11位(548B)タンゴ
12位(708B)AKISAN
13位(877B)amegan

【PARI/GP】(3名)
1位(63B)gmk
2位(66B)ciel
3位(72B)Leonardone @ NEETSDKASU

Octave】(6名)
1位(63B)あしぇる
2位(64B)gmk, えちごやえちぜん
3位(81B)Leonardone @ NEETSDKASU
4位(120B)ciel
5位(792B)kanetai

【R】(4名)
1位(63B)gmk
2位(82B)Leonardone @ NEETSDKASU
3位(118B)やまさん
4位(788B)kanetai

Lua】(6名)
1位(64B)gmk, ebicochineal
2位(70B)ciel
3位(88B)Leonardone @ NEETSDKASU
4位(430B)ずみ太郎
5位(791B)kanetai

AWK (mawk)】(2名)
1位(64B)todaemon
2位(183B)Leonardone @ NEETSDKASU

【Forth】(3名)
1位(65B)ciel
2位(152B)Leonardone @ NEETSDKASU
3位(1481B)kanetai

【C】(52名)
1位(69B)tails, chat, y_konishi
2位(70B)notogawa, hogeover30, henkma
3位(73B)こもも
4位(80B)m-ukai
5位(81B)angel, climpet
6位(82B)atetubou
7位(85B)R修行中
8位(87B)舞葉, Yasu.Hara., たむらひろし, あしぇる
9位(88B)ebicochineal
10位(90B)konjo
11位(92B)mbsp
12位(93B)yukim
13位(96B)orisano, 曉
14位(98B)Mattsun
15位(100B)kazutomi
16位(101B)御手洗康彦, Leonardone @ NEETSDKASU, みけCAT
17位(102B)norman-k
18位(109B)MasWag
19位(110B)naonao
20位(129B)スタジオ鉄
21位(132B)ないてくるー
22位(133B)zeosutt
23位(162B)Lay
24位(185B)miura
25位(288B)みすと
26位(394B)はしと
27位(459B)noginogi46
28位(512B)ツワブキ
29位(578B)hiroshun
30位(676B)mesop
31位(726B)d0mybest
32位(741B)ぽぼぺの
33位(772B)Nucky
34位(999B)woo
35位(1044B)働く男
36位(1192B)ekoc
37位(1208B)東海村のハイジ
38位(1223B)REON-on-CIQ
39位(1476B)ギブソン
40位(2317B)touran7
41位(7300B)robotww

Common Lisp (clisp)】(4名)
1位(70B)ciel
2位(105B)Leonardone @ NEETSDKASU
3位(192B)なななな
4位(798B)kanetai

Ocaml】(4名)
1位(75B)m-ukai
2位(132B)pocarist
3位(162B)Leonardone @ NEETSDKASU
4位(797B)kanetai

Clojure】(5名)
1位(77B)gmk
2位(85B)hisocu
3位(99B)Leonardone @ NEETSDKASU
4位(338B)asacraft
5位(793B)kanetai

【F#】(4名)
1位(77B)m-ukai
2位(80B)matarillo
3位(98B)Leonardone @ NEETSDKASU
4位(796B)kanetai

C++11】(18名)
1位(81B)hogeover30
2位(106B)Yasu.Hara.
3位(113B)舞葉
4位(114B)yetterbium
5位(121B)Leonardone @ NEETSDKASU
6位(140B)和丸
7位(150B)小指が強い人
8位(177B)Lay
9位(209B)びろんぬ
10位(213B)らじうむ
11位(400B)まさふみ
12位(415B)utsubo
13位(434B)dosuken123
14位(606B)桜小路こいし
15位(748B)Ugly
16位(1028B)kuroy
17位(1152B)侍マーケット
18位(1430B)pera

C++】(30名)
1位(81B)hogeover30
2位(91B)notogawa
3位(99B)m-ukai
4位(106B)Yasu.Hara.
5位(108B)舞葉
6位(114B)yetterbium
7位(119B)harukasan
8位(121B)Leonardone @ NEETSDKASU
9位(132B)mbsp
10位(151B)小指が強い人
11位(177B)Lay
12位(193B)Bern
13位(227B)HimaJyun, びろんぬ
14位(289B)リーシェル
15位(294B)hotpepsi
16位(363B)もず
17位(385B)
18位(394B)桃村
19位(445B)danyboy
20位(492B)MNDhorme
21位(555B)heyhey
22位(566B)bitbite
23位(590B)MRRRRRRX
24位(650B)KASA
25位(877B)K.Kawamura
26位(1004B)tnakao
27位(1143B)airis
28位(1335B)ゲルググ
29位(1422B)kenj4

【Nimrod】(5名)
1位(83B)ebicochineal
2位(88B)ciel
3位(105B)ばくだん
4位(109B)Leonardone @ NEETSDKASU
5位(789B)kanetai

【Tcl】(4名)
1位(86B)ciel
2位(124B)Leonardone @ NEETSDKASU
3位(291B)なななな
4位(788B)kanetai

【Icon】(4名)
1位(88B)gmk
2位(89B)ciel
3位(118B)Leonardone @ NEETSDKASU
4位(818B)kanetai

Fortran】(3名)
1位(88B)だいじゅ
2位(123B)Leonardone @ NEETSDKASU
3位(2500B)kanetai

Objective-C】(2名)
1位(88B)ebicochineal
2位(101B)Leonardone @ NEETSDKASU

Prolog (swi)】(3名)
1位(92B)Noimin
2位(114B)Leonardone @ NEETSDKASU
3位(943B)kanetai

【Scala】(10名)
1位(96B)take
2位(137B)ecdsa2024_
3位(139B)Leonardone @ NEETSDKASU
4位(178B)noriok
5位(246B)zniq
6位(488B)fujimiyasensei
7位(509B)mishokazta
8位(597B)ysugawara
9位(708B)ymotchi
10位(1702B)ぞーたけ

【D (dmd)】(3名)
1位(98B)ebicochineal
2位(137B)Leonardone @ NEETSDKASU
3位(825B)kanetai

【Pike】(3名)
1位(99B)Leonardone @ NEETSDKASU
2位(165B)ciel
3位(805B)kanetai

【Factor】(3名)
1位(105B)ciel
2位(142B)Leonardone @ NEETSDKASU
3位(868B)kanetai

【C99 strict】(7名)
1位(109B)hogeover30
2位(128B)みけCAT
3位(135B)Kouki_Hoshi
4位(165B)Leonardone @ NEETSDKASU
5位(227B)HimaJyun
6位(505B)can110
7位(906B)srt

Nemerle】(3名)
1位(109B)Leonardone @ NEETSDKASU
2位(237B)ciel
3位(891B)kanetai

Smalltalk】(2名)
1位(111B)Leonardone @ NEETSDKASU
2位(3181B)kanetai

【Nice】(2名)
1位(111B)Leonardone @ NEETSDKASU
2位(840B)kanetai

C#】(18名)
1位(114B)ebicochineal
2位(115B)chat
3位(117B)matarillo
4位(129B)あしぇる
5位(139B)Rose Line
6位(142B)planula
7位(169B)Leonardone @ NEETSDKASU
8位(187B)deriy
9位(609B)JyoJyo
10位(903B)ぶれぼ
11位(950B)みのる
12位(1122B)JI
13位(1252B)澤戸うい
14位(1328B)うりMk-2
15位(1364B)HogeFugaGSR400
16位(1532B)Hatsee
17位(1865B)とんぺぇ
18位(2177B)ちかざ

Scheme (guile)】(3名)
1位(122B)Leonardone @ NEETSDKASU
2位(725B)kisugi
3位(795B)kanetai

【Java7】(23名)
1位(124B)ebicochineal, notogawa
2位(125B)Azicore
3位(134B)gmk
4位(135B)mbsp
5位(137B)ばいくさーちどっとじぇーぴー
6位(140B)foldori
7位(141B)カニ戯(ry
8位(149B)Leonardone @ NEETSDKASU
9位(152B)planula
10位(153B)kid_shelted
11位(170B)9級
12位(192B)A1807
13位(195B)HimaJyun
14位(301B)まゆたん
15位(378B)かずねぎ
16位(401B)ぶるべあ
17位(723B)And_Snow
18位(850B)ゆゆーま
19位(1209B)ゼキ
20位(1461B)kohshoi
21位(1838B)hama_rtc
22位(3507B)ふじいり

【Java8】(26名)
1位(124B)ebicochineal, notogawa
2位(131B)gmk
3位(135B)mbsp
4位(137B)ばいくさーちどっとじぇーぴー
5位(140B)foldori
6位(146B)すず(春), yamule
7位(147B)Mattsun
8位(148B)mahaman
9位(149B)Leonardone @ NEETSDKASU
10位(152B)planula
11位(182B)kazu82
12位(242B)まゆたん
13位(628B)かんさい
14位(830B)Myaake
15位(835B)ぞうさん
16位(852B)Shogo_zin
17位(882B)TomohiroSato
18位(962B)shoek
19位(985B)オッポレ
20位(1086B)もりたつ
21位(1193B)nomuzou
22位(1210B)smallsmallworld123
23位(1626B)kou665
24位(3478B)SB15

【Go】(2名)
1位(127B)take
2位(133B)Leonardone @ NEETSDKASU

VB.NET】(6名)
1位(127B)ebicochineal
2位(132B)えちごやえちぜん
3位(140B)Leonardone @ NEETSDKASU
4位(275B)ciel
5位(882B)わたるん!
6位(2174B)yamaike

【Oz】(3名)
1位(143B)ciel
2位(153B)Leonardone @ NEETSDKASU
3位(888B)kanetai

Pascal (fpc)】(3名)
1位(145B)Leonardone @ NEETSDKASU
2位(151B)Mattsun
3位(1121B)kanetai

Pascal (gpc)】(1名)
1位(149B)Leonardone @ NEETSDKASU

Erlang】(2名)
1位(154B)Leonardone @ NEETSDKASU
2位(847B)kanetai

SQL】(3名)
1位(253B)pocarist
2位(632B)Leonardone @ NEETSDKASU
3位(870B)kanetai

【Brainf**k】(5名)
1位(267B)angel
2位(2049B)ゆん2
3位(2095B)えちごやえちぜん
4位(2791B)Leonardone @ NEETSDKASU
5位(3435B)kanetai

COBOL】(3名)
1位(298B)gmk
2位(545B)Leonardone @ NEETSDKASU
3位(2313B)kanetai

Prolog (gnu)】(2名)
1位(335B)Leonardone @ NEETSDKASU
2位(835B)kanetai

COBOL 85】(2名)
1位(345B)gmk
2位(772B)Leonardone @ NEETSDKASU

【Ada】(2名)
1位(542B)Leonardone @ NEETSDKASU
2位(3516B)kanetai

【Assembler】(3名)
1位(548B)Yasu.Hara.
2位(1285B)Leonardone @ NEETSDKASU
3位(1970B)kanetai

【CLIPS】(2名)
1位(550B)Leonardone @ NEETSDKASU
2位(1428B)kanetai

【Unlambda】(3名)
1位(1866B)みけCAT
2位(1944B)Leonardone @ NEETSDKASU
3位(1948B)kanetai

【Intercal】(1名)
1位(4547B)Leonardone @ NEETSDKASU

https://codeiq.jp/q/2593

eijiteijit 2016/02/19 00:13 今回の取り組みでコード短縮について考えた内容も含めて自コードの解説を書きました。
http://qiita.com/eijit/items/36f1a72f10bd8973ef0d

OzyOzy 2016/02/19 11:41 おお、すばらしいですね!
ありがとうございます、CodeIQ MAGAZINEの記事で紹介させていただきます!!

2016-01-31 バイバイマンの増え方

[]バイバイマンの増え方 バイバイマンの増え方を含むブックマーク

CodeIQで公開中の問題「バイバイマンを数えよう」の出力例がわかりにくいかもしれないので、9日目までを具体的に書いておきます。

1日目

f:id:Ozy:20160131121643j:image

名前はバイバイマンAとしましょう。初期サイズは「1」です。

2日目

f:id:Ozy:20160131121644j:image

バイバイマンAのサイズは1×2で「2」になりました。

3日目

f:id:Ozy:20160131121645j:image

バイバイマンAのサイズは2×2で「4」になりました。

4日目

f:id:Ozy:20160131121647j:image

バイバイマンAのサイズは4×2で「8」になりました。

5日目

バイバイマンAのサイズは8×2で「16」になり、10を超えたので分裂します。

f:id:Ozy:20160131121643j:imagef:id:Ozy:20160131121646j:image

十の位が1なのでサイズ「1」のバイバイマンB、一の位は6なのでサイズ「6」のバイバイマンCが新たに生まれます。


5日目で、バイバイマンの数は『2体』になりました。

6日目

f:id:Ozy:20160131121644j:image

バイバイマンBのサイズは1×2で「2」になりました。


バイバイマンCのサイズは6×2で「12」になり、10を超えたので分裂します。

f:id:Ozy:20160131121643j:imagef:id:Ozy:20160131121644j:image

十の位が1なのでサイズ「1」のバイバイマンD、一の位は2なのでサイズ「2」のバイバイマンEが新たに生まれます。


6日目で、バイバイマンの数は『3体』になりました。

7日目

f:id:Ozy:20160131121645j:image

バイバイマンBのサイズは2×2で「4」になりました。


f:id:Ozy:20160131121644j:image

バイバイマンDのサイズは1×2で「2」になりました。


f:id:Ozy:20160131121645j:image

バイバイマンEのサイズは2×2で「4」になりました。


バイバイマンの数は『3体』のままです。

8日目

f:id:Ozy:20160131121647j:image

バイバイマンBのサイズは4×2で「8」になりました。


f:id:Ozy:20160131121645j:image

バイバイマンDのサイズは2×2で「4」になりました。


f:id:Ozy:20160131121647j:image

バイバイマンEのサイズは4×2で「8」になりました。

バイバイマンの数は『3体』のままです。

9日目

バイバイマンBのサイズは8×2で「16」になり、10を超えたので分裂します。

f:id:Ozy:20160131121643j:imagef:id:Ozy:20160131121646j:image

十の位が1なのでサイズ「1」のバイバイマンF、一の位は6なのでサイズ「6」のバイバイマンGが新たに生まれます。


f:id:Ozy:20160131121647j:image

バイバイマンDのサイズは4×2で「8」になりました。


バイバイマンEのサイズは8×2で「16」になり、10を超えたので分裂します。

f:id:Ozy:20160131121643j:imagef:id:Ozy:20160131121646j:image

十の位が1なのでサイズ「1」のバイバイマンH、一の位は6なのでサイズ「6」のバイバイマンIが新たに生まれます。


9日目で、バイバイマンの数は『5体』になりました。

トラックバック - http://d.hatena.ne.jp/Ozy/20160131

2016-01-19 CodeIQでの出題について

[][]CodeIQでの出題について(2016年1月〜3月末) CodeIQでの出題について(2016年1月〜3月末)を含むブックマーク

ここに書かれた内容は、出題者名「Ozy」の問題に限った内容です

CodeIQ公式のルールではありませんのでご注意ください。

コードゴルフ問題について

CodeIQ自体が一般的なプログラマ向けのサービスであるということを考慮して、表向きは普通の問題として出題し、こっそりと「コードゴルフ」のタグをつけておきます。出題者名が「Ozy」で、タグに「コードゴルフ」が付いている場合、CodeIQの自動採点システムによる正解・不正解の判定に加え、コードサイズの測定を行います。現状の自動採点システムではソースファイルを直接アップロードすることができず、フォームに直接書いたり貼り付けたりしたものがテキストファイルに変換されます。

このテキストファイルのサイズを記録し、(自動採点システムにより正解と判定された解答のみ)コードサイズの小さい順で順位づけを行います。

正解者の一覧は本ブログとCodeIQ MAGAZINEで公開され、挑戦者のニックネーム・使用したプログラミング言語・コードサイズが表示されます。また、正解者一覧はコードサイズの順位表を元に、コードサイズの小さい方から順に表示されます。

ショートコーダーバッジ

出題者名が「Ozy」で、「コードゴルフ」タグの付いた問題では、正解者に付与されるバッジに加えて「ショートコーダーバッジ」が付与されます。ショートコーダーバッジは正解者の中で、特に短いコードを書いた挑戦者にのみ付与されます。

バッジ付与の条件

まず、言語毎の最短コードサイズから言語の順位表を作成します。

例えば、過去の問題での順位表(http://d.hatena.ne.jp/Ozy/20151107#p1)を元にすると、

順位言語コードサイズ
1Perl133
2Ruby136
3JavaScript (spidermonkey)178
4Python182
5C194
6Scala198
7Haskell201
8Python 3202
9C++11214
10Nimrod219
11AWK (gawk)247
12AWK (mawk)247
13C++281
14PHP286
15D (dmd)289
16Pike300
17C99 strict301
18C#320
19Fortran323
20VB.NET340
21Go344
22Node.js346
23R352
24Java8362
25Nemerle368
26Pascal (fpc)393
27Java7421
28Lua 460
29Brainf**k1794

のようになります。このうち上位20位までの言語(上記の表ではVB.NETまで)では、各言語の最短記録保持者に「ショートコーダー『神』バッジ」・2位以下で上位30%以内の記録保持者には「ショートコーダー『おとな』バッジ」を付与します。21位以下の言語では、最短記録もしくは上位30%以内の記録保持者に「ショートコーダー『おとな』バッジ」を付与します。ただし、『神』・『おとな』両方の条件を満たしている場合は『神』バッジのみ付与されます。

その他

CodeIQの運営方針やシステムの変化と挑戦者の皆さまのご要望を考慮しながらルールの改良を繰り返していく予定です。

ご意見等ございましたら、コメント欄やOzyのtwitterアカウントにメッセージください。

トラックバック - http://d.hatena.ne.jp/Ozy/20160119

2015-12-28 これはフィクションですって言っとけば大丈夫だよね!

これはフィクションですって言っとけば大丈夫だよね! これはフィクションですって言っとけば大丈夫だよね!を含むブックマーク

フィクションだからね!

1.糞火

授業中、一人の女子生徒が駆け込んできた。


「せんせ」

「どうしたの?」

「といれあふれてきた」

「えっ」


トイレに向かうとトイレの床が水浸しだ。生徒に声をかける。


「キミは濡れてない?大丈夫?」

「だいじょうぶ」

「そうか、じゃあ教室に戻っていて。気にしなくて良いから」


ひとまず、近くにあったタオルや雑巾を床に投げつけ足で踏みつける。

コピー用紙の裏に『トイレ故障中』と、右手に握っていた赤のマーカーで殴り書きし、扉に張り付けた。

うん。授業に集中しよう。そうしよう。

何事もなかったかのように授業を始めようとすると、一人の生徒が話しかけてきた。


「何かあったんですか?www」

「いや、ちょっとトイレが詰まっているみたいでね、水が溢れてきたらしい」

「えええwwwキモいwwwww」

「見た感じだと、トイレットペーパーの流し過ぎみたいだなぁ…。」

「あwwわたしもwそれwwよくやってwwwお母さんにw怒られるwwww」

「(完全にお前やん)そ、そう…。とりあえず直るまでは立ち入り禁止ということで」

「了解っすwww」


そういえばこの子、やたらトイレに行くし、そのたんびにトイレットペーパーを激しく巻き取る音が響いてくるよな。

教室の扉閉め忘れて授業してたら、ガラガラガラガラ!って轟音がしてるもんなぁ。


うん、完全にお前だ。


…と本人に言うわけにもいかず、生徒たちにはトイレが故障中で使えないので気をつけてという内容の話だけをして一日の業務を終えた。

さすがにアルバイトや他の先生にさせるのも気の毒なので、全員が帰った後、一人で現場に行くことにした。

溢れた水はタオルやら雑巾で吸い取られ、これらをビニール袋で掴んでまとめて処分することでスッキリ片付いた。

水量も少し減っているようで、いくらかは流れている。これなら詰まりさえなんとかすれば大丈夫だなと思い、

バケツの水を使って溢れない程度に水圧をかけ、詰まりを解消しようと考えた。


バシャ!


うん、なんとなく流れている!この調子だ!そう思った瞬間、ゴボゴボゴボとものすごい音が聞こえた。

しかも便器からではなく、トイレの外から。外に出てみると、洗面所に設置された室内洗濯パン(洗濯機を置くところ)の排水口から大量の汚水…!

幸い洗濯パンにはいくらかの深さがあり、汚水はその範囲に留まっている。

しかし、そこに広がる茶褐色の海を目の当たりにした私は、寒気と吐き気に襲われ眩暈した。今日はもう駄目だ…!撤退!!


晩ごはんはハヤシライスだった。

食べずに眠った。



2.決戦

昨日放り出した仕事を片付けながら、ハヤシライスを食べる。

朝から雨が降っていた。

ゴミ出しに出かけると、ごみは収集された後だった。今日はイヤな日だ。

しかし行かねばならない。

早朝から降り続く雨はさらに強くなった。折れそうな心に重くのしかかる。こんなに憂鬱な日はいつ以来であろうか。


コーヒーショップに立ち寄り、ホットのカフェモカを注文する。

少しの間だけ、忘れよう。

口を付けずに、ただ行き交う人々を眺める。

飲み終わることが、現実にもどることと同じように思えたのだ。

少し時間が経って、雨足が弱まり、日が差してきた。


…やらねばならない。


決断の時が来た。冷めたカフェモカを一気に飲み干し、店を飛び出す。

ゴム手袋・雑巾・ラバーカップ・配管洗浄剤・漂白剤・トイレ用洗剤・ゴミ袋・スポンジ・古紙……装備は完ぺきだ。

すべての換気扇をONにしておいたお陰か、扉を開けてもそれほど苦痛ではなかった。


今の自分は落ち着いている。きっとやれる!


自分を奮い立たせ、扉を開けた。

洗濯パンに広がる海は干潮を迎えていた。

今にもムツゴロウが顔を出しそうな干潟にはトイレットペーパーの塊が覗き、強烈な異臭を放っていた。

状況は惨憺たるものだが、予測の範囲内ではあった。


まずは室内のすべてのモノを室外に移動させた。

上着を入れるために買ったロッカーは、一人で運ぶにはとても重く、一息で10センチメートルずつ、

半ば引きずるようにして動かしながら、とにかく無心でいることを心がけた。

そうしなければ、涙が溢れそうになるのだ。


すべての荷物を運び出し、大量の古紙を持ち運んだ。

瓦礫を撤去するには、ある程度の強度を持ち、それでいて使い捨て出来るものが必要であった。新聞紙は柔らかすぎる。

そうだ、コピー用紙だ。裏紙ボックスから大量に用紙を取りだし、数枚を束ねてさらに二つ折りにしたものを左手に、

四つ折りしたものを右手に持ち両上段で構える。勝負だ。


勝利は確信していたが、思っていたよりも水分が多い。

十分に水気を切りながら始末していくには相応の技術が必要であった。

無心で。慎重に。慎重に…。完ぺきな戦略であった。

イメージ通りに事が進んでゆく。…あともう一息。そう思った瞬間、雑念が生まれた。

早く終わらせたいという潜在意識が、少しだけ左手の動く速度を速めた。


ピチャ


鼻先と唇に冷たいものが触れた。

両手のゴム手袋を脱ぎ棄て、ティッシュペーパーを探す…無い。

教室に飛び込む…無い。

自分の机に向かう…無い。

半狂乱に陥り、辺りを駆け回る。ほんの数十秒が、とてつもなく長い時間に思えた。

自分の荷物の陰に隠れたティッシュペーパーの箱を見つけ、何度も顔を拭く。

洗面台の排水管と下水管は繋がっていて、水を出すことができないのだ。


何度も何度も口元を拭きながら、発狂しそうになるのを必死に耐えた。

落ち着きを取り戻してから、同じ過ちを犯さぬよう、丹念に処理を進める。20分で作業の第一段階―瓦礫の撤去が完了した。


第2段階は詰まりを無くす作業だ。これには最も危険を伴う。

下水管の詰まりを除去する方法は大きな圧力を短時間で加えなければならない。

加える圧力の方が詰まりの強さより大きければ私の勝利だ。しかし圧力が足りない場合、

自分の攻撃を自身で受け止める羽目になる可能性がある。

もしそうなれば、先程の失敗とは比較にならないくらい大きなダメージを受けるどころか、

下手をすれば近隣に損害を与える結果にもなりかねない。


まずは最も汚染された洗濯パンだ。慎重にラバーカップをセットしつつ、

爆発の可能性がある穴という穴を丹念に塞ぎ、祈りを込めて最初の一撃を加える。


グボォ


確かな手ごたえがあった。

感触を確かめると同時に、他の火口を見渡し噴火の兆候を探る。

噴火は無さそうだ。これは行ける!続けて第2、第3の攻撃を加える。

いいぞいいぞ!第4撃の瞬間、汚水が飛び散った。

幸い、横方向への飛散だったため、悲惨な結果にはならなかった。

しかしまたしても気の緩みが大事故を起こしそうになった。冷静にならなければ。


別の火口からも圧を加えることにする。

次はトイレ本体だ。おそらくここからの攻撃で決まる。

失敗すれば洗濯パンから大噴火が起こる。

一度深呼吸し、洗濯パンを横目で見ながら左手を押しこむ。


ゴボォオ


さっきより手ごたえが大きい。やはりここなのか。

一回一回、ラバーカップの位置を確認して、確実に圧を掛ける。数回繰り返したところで、手ごたえが無くなった。

洗濯パン側からやってみても、やはり手ごたえはない。


戦いは終わった。


私は勝利をかみしめながら、洗面所、トイレの清掃を丹念に行い、昨日からのことを振り返る。

孤独な闘いであった。すべてが終わった時には、正午を1時間以上も過ぎていた。

自宅に帰って風呂に入り、着替えてこよう。


外に出ると、雨は降り続いていた。

トラックバック - http://d.hatena.ne.jp/Ozy/20151228

2015-11-23 tailsさんとclimpetさんのものすごいC

[][]tailsさんのものすごいC tailsさんのものすごいCを含むブックマーク

CodeIQ MAGAZINEの記事にはすべて書けないかもしれませんので、まずはこちらのエントリで。

コードゴルフ参加者の皆さんはすでにランキングとか、angelさんによるシンプル・ライフゲーム tailsさんコード解析Perl最短コード解説を見ておしっこちびってるかもしれませんが、Cの194Bコードも素晴らしいです。コードを見ても全く意味がワカラナイよ!という方もいらっしゃると思いますので、簡単に解説しておきます。

i;j;
char a[1<<16];
main(n,h,w,s,t){
  for(scanf("%d%d%d %[^0]",&n,&h,&w,a),s=++w*h;i/s<n;a[i+s]=a[i++]^4&t)
    for(t=67196,j=17;j;t/=a[--j<9?i/s*s+(i/w-j/3-~h)%h*w+(i%w-j%3+w)%~-w:i]/5-7);
  j/=puts(a+i);
}

基本的なテクニックは、

C言語によるショートコーディング入門編解説その1〜中級の壁を突破するために

C言語によるショートコーディング入門編解説その2〜上級の壁を突破するために

あたりをご覧ください。


データ構造と入出力

Cの上位陣はおそらく共通していると思いますが、文字列データは「(世代数N)×(フィールド縦H)×(フィールド横W+1)」が収まる程度の1次元配列で持ち入力はscanf1回、出力はputs1回で済ませています。W+1としているのは、改行文字の分も必要だからです。

1次元の文字配列は、コピーや書き換えを行わず、世代ごとに新しい領域に書き込んでいきます。

scanf("%d%d%d %[^0]",&n,&h,&w,a)

の部分も工夫されていますね。

%[.*\n]

のように読み込みたい文字に改行文字を含むと複数行をまとめて読み込むことができますが、

%[^X]

のようにX以外の文字を読み込むように指定し、Xを'.', '*', '\n'以外にしておくとうまく読み込むことができますし、改行文字も文字列の中に入っていますから出力はputs関数を1回呼ぶだけで済みます。

forループ2回

普通に書こうとすると、(1)世代数・(2)フィールド縦・(3)フィールド横・(4)近傍上下・(5)近傍左右の5重ループを要するはずですが、(1)(2)(3)と(4)(5)をそれぞれまとめて2重ループに収めています。最初のループは割と書きやすいですが、2番目のループ内では改行文字を上手くかわした上で生死判定を行う必要があり、高度な技術が必要となります。

XOR4

'*'と'.'のASCIIコードはそれぞれ42と46で、4との排他的論理和を取ることで相互に変換が可能です。

a[i+s]=a[i++]^4&t

この部分で、tをフラグとして4のon/offを行う仕組みです。

生死判定

どのような条件でビットのon/offを行うかを整理しておきましょう。

対象のセルが正の場合

周囲に生のセルが2, 3以外、つまり0, 1, 4, 5, 6, 7, 8の場合、死に切り替える

対象のセルが死の場合

周囲に生のセルが3つある場合、生に切り替える

この情報をビットベクトルとして保持したものが、67196という値です。

67196

67196を2進表記すると

10000011001111100

になっています。下位2ビットは4との排他的論理和を得るのに不要ですから、0でも1でもかまいません。もう少しわかりやすく書くと、上位2ビット分の0を補って

00100000 110011111 00

のように左の8文字が死→生、その隣の8文字が生->死のフラグになっています。

t/=a[--j<9?i/s*s+(i/w-j/3-~h)%h*w+(i%w-j%3+w)%~-w:i]/5-7

の部分で、'.'=46, '*'=42, '\n'=10をそれぞれ5で割ると、9, 8, 2(小数点以下は切り捨てられる)となり、さらに7を引くと、2, 1, -5となります。'.'の場合は、計算結果が2で割ることになり、1ビット右シフトを行うのと同様の結果が得られます。'*'の場合は1で割ることになり、ビットシフトを行わない場合と同様の結果が得られます。Perlのコードでは改行文字を気にしなくても良いので、もっと簡単にシフトできるのですが、Cの場合は改行文字を考慮しなければなりません。そこで、改行文字の場合に絶対値が2より大きな値になるようにすることで、tの値が必ず0になるようにしているのです。また、対象のセルが'*'の場合は8回余分に右ビットシフトを行うようにしています。jの初期値が9ではなく17になっているのはこのためです。

[][]climpetさんのものすごいC climpetさんのものすごいCを含むブックマーク

climpetさんも194Bのコードを公開してくださっているので、紹介しておきます。

char z['÷'];
i,j,c,n,w;
main(h){
  scanf("%d%d%d %[^_]",&n,&h,&w,z);
  for(h*=++w;i<n*h;++i)
    for(c=j=9;j--;z[h+i]=~i%w?c-15&&z[i]%c?46:42:10)
      c+=z[(i%w-j%3+w)%~-w+(i/w-j/3-~h)*w%h+i/h*h]%3;
  n=!puts(z+i);
}

全体的にはtailsさんと同じですが、配列サイズに'÷'という定数を用いています。'÷'はUTF-8でC3B7(50103)で、今回はn, h, wの最大値がそれぞれ30, 40, 35ですので、30×40×35=42000あれば良いので十分な大きさです。

特に素晴らしいのはやはり生死判定の部分ですね。カウンタ変数cの初期化コストを抑えるため、近傍走査のためのループ変数jと同じ値(9)をセットしています。'.', '*'のASCIIコードはそれぞれ46, 42で、これらに対してで3の剰余を計算するとそれぞれ1, 0になることから、死んでいるセルをカウントしています。このようにすると、

  • 中心セルが「死」で周囲3セルが「生」の場合、cは6加算
  • 中心セルが「生」で周囲2セルが「生」の場合もcが6加算

されることになります。つまり、これら2つの条件はcが9+6=15であるかどうかの判定だけで済みます。残りの条件の判定を行うため、同じようにcの値を見てみると

  • 中心セルが「生」で周囲3セルが「生」の場合、cは5加算

なので、cの値は9+5=14になります。しかし、今度は14かどうかの判定をしようとすると、

  • 中心セルが「死」で周囲5セルが「生」の場合もcが5加算

となり、14かどうかを調べるだけでは判定できません。これらの区別するのに、'.'と'*'のASCIIコードすなわち46と42を利用しています。

  • 中心セルが「死」の場合はASCIIコードが46で、14で割り切れない
  • 中心セルが「生」の場合はASCIIコードが42で、14で割り切れる

これを上手く利用しています。cの初期値が9であることと、死んでいるセルをカウントするということ、ASCIIコードの値の調和がたまらないコードですね!!

トラックバック - http://d.hatena.ne.jp/Ozy/20151123

2015-11-07 【コードゴルフ】シンプル・ライフゲーム 〜順位表〜

[]【コードゴルフ】シンプル・ライフゲーム 〜順位表〜 【コードゴルフ】シンプル・ライフゲーム 〜順位表〜を含むブックマーク

11月19日10時0分をもって挑戦終了いたしました。挑戦者数101名・総提出数865になりました。挑戦してくださった皆さま、ありがとうございました。


ご提出いただいたコードについて

後日CodeIQ MAGAZINE(掲載後にリンクを張ります)に、最終順位表とともに、ご提出いただいたコードの中からいくつかご紹介させていただく予定です。すべてのコードを紹介することは難しいですから、本問に挑戦していただいた方は自由に公開してください(CodeIQ MAGAZINEが公開される前でも問題ありません)。Twitterや個人ブログ等で公開される場合、このエントリのコメントやTwitterのOzyアカウント@ozy4dmまでご連絡いただければ、CodeIQ MAGAZINEの記事内でリンクさせていただきます

また、本問では問題ページにもある通り、基本的に解答コードが公開される可能性があることを前提としていますが、どうしても公開してほしくない!という方は何らかの方法で私Ozyにこっそりご連絡ください。ただし、ご連絡を見逃してうっかり公開してしまうことがあるかもしれませんが、それはご容赦ください

12月4日17時、CodeIQ MAGAZINEの記事が公開されました。最終順位表とともに、ご提出いただいたコードの中からいくつかご紹介させていただいております。

言語別順位表

挑戦締切時点での順位表です(同一挑戦者でニックネームを変更している場合は、最短記録のみ表示しています)

全言語通じての最短コードは、tailsさん133Bでした!

☆ tailsさんのコードはangelさん解説してくださっています!! ☆

☆ Rubyで最短記録のsimanmanさんRubyでの最短コードを解説してくださっています! ☆


Ruby
1位(136B)simanman, rotary-o
2位(145B)shinh
3位(150B)kura07
4位(155B)akouryy
5位(160B)gmk
6位(161B)kimiyuki
7位(166B)n2_
8位(170B)ciel
9位(175B)y azshe
10位(186B)youchan
11位(189B)uru
12位(194B)hirokazu1020
13位(195B)gom
14位(204B)todaemon
15位(211B)tomwot
16位(216B)kazu82
17位(220B)iehn
18位(234B)tmpvar
19位(248B)diskkid
20位(262B)なおう
21位(279B)oda1979
22位(293B)uiro
23位(317B)miyo
24位(354B)tnakao
25位(490B)GreenGiant
26位(512B)terryleonhart
27位(629B)はみるとん
28位(757B)takuk
29位(953B)noriok
30位(958B)elm200
31位(1077B)Iwayama
32位(1226B)sonoshou
33位(1371B)ReiLeiLei

【C】
1位(194B)tails
2位(195B)climpet
3位(208B)コッキー
4位(239B)ushsh
5位(246B)shinh
6位(247B)iwashi31
7位(252B)hirokazu1020
8位(256B)Mattsun, みけCAT
9位(259B)830D54F8
10位(291B)Yasu.Hara.
11位(316B)唐澤貴洋
12位(327B)おーやさん
13位(372B)MasWag
14位(394B)tanutarou
15位(422B)ゲルググ
16位(440B)ライカ
17位(444B)_cympfh_
18位(445B)t0mb0y
19位(500B)ニクチュン
20位(1402B)masaka531

Python
1位(182B)hirosuzuki
2位(196B)だいじゅ
3位(206B)roiti46
4位(283B)a992571
5位(288B)juchi
6位(315B)ぬるまぽ
7位(331B)獏(ばく)
8位(568B)しら
9位(705B)yamamototetsuya
10位(1319B)xrv

C++
1位(281B)hirokazu1020
2位(284B)みけCAT
3位(286B)Mattsun
4位(293B)Yasu.Hara.
5位(348B)あいべくう
6位(357B)Smartweed
7位(1135B)MasWag

C#
1位(320B)chat, えちごやえちぜん
2位(392B)mg57888
3位(427B)ciel
4位(489B)donguri
5位(4906B)アール
6位(6784B)プロフィール登録

Python 3】
1位(202B)だいじゅ
2位(204B)べーにー
3位(229B)てへん
4位(258B)ebicochineal
5位(302B)みすじ
6位(3431B)saruhei

【Java7】
1位(421B)gmk
2位(451B)みけCAT, Mattsun
3位(1598B)A1807
4位(4921B)m-aoi

【Node.js】
1位(346B)みけCAT
2位(511B)soilblue2000
3位(921B)がんもどきっくす
4位(1638B)ゆん2
5位(8460B)Roughsea

Perl
1位(133B)tails
2位(143B)angel
3位(159B)rotary-o
4位(287B)パパンダ
5位(393B)Yuchan

【Scala】
1位(198B)rotary-o
2位(203B)akouryy
3位(211B)ushsh
4位(285B)L.star

JavaScript (spidermonkey)】
1位(178B)Azicore
2位(188B)chat
3位(513B)lightpurplewisteria

C++11】
1位(214B)climpet
2位(284B)みけCAT
3位(549B)np01767

Haskell
1位(201B)sysysysy
2位(202B)akouryy
3位(389B)スクィーラ

【Java8】
1位(362B)chat
2位(451B)みけCAT, Mattsun

AWK (gawk)】
1位(247B)todaemon
2位(275B)みけCAT
3位(567B)やまさん

【R】
1位(352B)pazworld
2位(510B)なななな

Pascal (fpc)】
1位(393B)pik
2位(659B)au2010

VB.NET
1位(340B)えちごやえちぜん
2位(406B)ciel

【Brainf**k】
1位(1794B)angel
2位(2328B)だいじゅ

PHP
1位(286B)みけCAT
2位(2106B)らぶだま

AWK (mawk)】
1位(247B)todaemon
2位(275B)みけCAT

Lua
1位(460B)瞬希

【C99 strict】
1位(301B)みけCAT

【D (dmd)】
1位(289B)ciel

【Pike】
1位(300B)ciel

Nemerle
1位(368B)ciel

Fortran
1位(323B)だいじゅ

【Nimrod】
1位(219B)ciel

【Go】
1位(344B)y azshe

https://codeiq.jp/q/2407

TOMTOM 2016/08/26 11:46 突然失礼します。
「世界で闘うプログラミング力を鍛える150問」で勉強させてもらっているのですが、Chap2の解答で出てくるLinkedListのコードが見当たらなくて、困っています。
2.5以前ではChap2の冒頭にある簡単な実装のことだと思っていたのですが、2.5の解説で引数を3つ取るコンストラクタやsetNextメソッドなどが出現しており、これらのコードが見れないのは非常に気持ちが悪いです。
さんざん探したのですが、見つけることができませんでした。
LinkedListの実装は一体どこに載っているのでしょうか?
お忙しいとは存じますが、教えていただければ幸いです。

TOMTOM 2016/08/26 14:31 すいません。
自己解決しました。
気になさらないで下さい。

TOMTOM 2016/08/26 14:31 すいません。
自己解決しました。
気になさらないで下さい。

2015-03-12 【神現る】ショートコーディング:きのこ危機一髪 〜順位表〜

[]ショートコーディング:きのこ危機一髪 〜最終順位表〜 ショートコーディング:きのこ危機一髪 〜最終順位表〜を含むブックマーク

挑戦者数111名・総提出数392でした。たくさんの挑戦ありがとうございました!

1位(44B)rotary-o, えちごやえちぜん, SARU, hogeover30, みけCAT
2位(45B)hirokazu1020, naoki_kp, climpet, nus_miz, chibi314, tails, orisano, ぶん, ふぉぐ, ushsh, winterboum
3位(46B)tomwot, zeosutt, R修行中, カニ戯(ry, amama, ぅいす, Azicore, akouryy, mbsp, キャロットフレーク, NeoCat, simbelmyn, clotz_sugar, lpha, ciel, torus711, おじけん, Mattsun, ない, Hec, Theodore, y_konishi, 桃ソロ, tak_u, nyuki, だいじゅ, tresportacasi
4位(47B)morio1129, gmk, angel, e.t., モンジサン, haruya, yukim, iro3k, あしぇる, ei1333, corvvs, painfulness, STN, himox_x, hoi, todaemon
5位(48B)iehn, さむいも, K_Ryo
6位(51B)oda1979, リーシェル, iseeku
7位(70B)debiru
8位(72B)MasWag
9位(75B)kabio7
10位(76B)tosaka2
11位(77B)mamekin
12位(79B)macrin
13位(82B)11, おーし
14位(85B)あうらまつだ
15位(86B)suppy193
16位(87B)ウッキー竹脇
17位(89B)giguru, あいべくう
18位(92B)kemoto
19位(95B)なおゆら
20位(99B)haraduka
21位(100B)Mu
22位(104B)tkzw
23位(115B)eruba
24位(118B)mInarI, gasbombe
25位(129B)hattori
26位(139B)omu
27位(163B)ぱいお
28位(168B)Handen
29位(171B)tnakao
30位(198B)kasukabe
31位(204B)ae89jca0b
32位(206B)ioc
33位(224B)kurenaissance
34位(232B)ヨシダシンジ
35位(248B)BATEL
36位(262B)火星たこ
37位(266B)ゆず216
38位(268B)nishima
39位(293B)ボヤッキー
40位(322B)EEL733
41位(331B)さりなが
42位(539B)あたご工房
43位(566B)takuseno

※付与されるバッジのタイプは、1位・2〜4位・5位〜20位・21位〜で分かれます。

https://codeiq.jp/q/1376

shosho 2015/08/18 23:45 So do you ozy have an email? :) (im not a japanese so i speak english here)

shosho 2015/08/18 23:45 So do you ozy have an email? :) (im not a japanese so i speak english here)

トラックバック - http://d.hatena.ne.jp/Ozy/20150312

2015-03-11 ショートコーディング問題の評価手順

[]ショートコーディング問題の評価手順 ショートコーディング問題の評価手順を含むブックマーク

CodeIQで現在出題中の、ショートコーディング:きのこ危機一髪について、1バイトを削るために悩んでおられる方も多数いらっしゃるかもしれませんので、コードサイズの判定方法とジャッジ方法の詳しい説明を書いておきます。

前処理について

まず、ご提出いただいたテキストファイル(仮に"src.c"とします)に対して、

wc -c src.c

コマンドを実行し、ファイルサイズを取得します。この後のコンパイル・実行テストに通れば、これが記録として認定されます。

ファイルサイズを取得後、Ideone.comで実行するために、テキストファイルのエンコーディングを"UTF-8"に変換します。また、変換にはnkfコマンドを用いています。

$ nkf -v
Network Kanji Filter Version 2.1.3 (2013-11-22)
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa).
Copyright (C) 1996-2013, The nkf Project.

Ideone.comではソースコード名が"prog.c"になっているので名前を合わせておくと、たとえば

$ nkf -g src.c
Shift_JIS

となれば、

$ nkf -Sw src.c > prog.c

nkfコマンドを実行します。エンコーディングが"ASCII"であったり、すでに"UTF-8"になっているものは、単に

$ cp src.c prog.c

のようにコピーします。この結果、"ASCII"や"UTF-8"でご提出いただいたコードは何ら問題ないはずですが、そうでない場合は変換前後でファイルサイズが変化するケースが出てしまいます。ファイルサイズが変化してしまっても、あくまで記録は提出されたファイルのサイズということを強調しておきます。


コンパイル・実行テスト

変換が終わったら、ローカルサーバやらIdeone.comにSubmitしていきます。Ideone.com上で実行する場合、出題初期の頃はAPIを呼び出すRubyのコードと、ブラウザ上(コピペ)で動かくことを併用していたのですが、エンコーディング絡みの問題が出てきてしまいましたので、Ideone.com向けにエンコーディングを変更する操作をnkfコマンドで行うことにしました。また、混乱や誤操作を避けるため、Ideone.comへのSubmitはAPI経由に一本化しました。そんなわけで、不正解になった方で出力内容が書かれていますが、この記事を書く前にご提出いただいた分のフィードバックメッセージには、ブラウザコピペとAPI経由で出力結果が混在している場合があります。混乱された方もいらっしゃるかもしれませんが、申し訳ないです。それからテストケースについてですが、

Ideone.comで使用するテストケースは何種類かありますが非公表とさせてください。

ローカルサーバでのテストは、1から10000すべての値を用いています。

追記:

gccのオプション書き忘れてましたね。

gcc -O2 -lm -Wall

です。

以上、また必要に応じて更新するかもしれません。

OzyOzy 2015/03/25 07:59 > winterboumさん

コメントは読ませていただきました(※ネタバレにつながる要素であるため削除しましたが、内容自体は保存してあります)。

まず、不正解としているのは7回目ではなく10回目の解答だと思いますが、そのように表示されていなければお知らせください。
エンコーディングにつきましては仰ることはよく理解できます。だからこそ、今回はこのようなルールとしました。まだ問題掲載期間中ですので具体的なことを述べることはできませんが、winterboumさんと同じような考えをお持ちになる方も多数いらっしゃることは容易に想像できます。最終的な救済措置として検討事項にはしていますが、現時点ではシステムが正解と判定するもののみを正解とみなしています。

winterboumwinterboum 2015/03/26 20:33 丁寧なご返事ありがとうございます。多分その十回です。こんなにがんばれると思っていなかったので、何回出したか和からなくなっていました。
今回はそういうルールで始めているのですから、それで構わないとおもいます。
もうすこし探しやすい場所にルールが書かれていたらもっと良かったかとはおもいますが。
しかし、、、、
リニューアルして分かりにくくなりました。。。。ね

OzyOzy 2015/03/26 20:52 わかりづらくてすみません…。
リニューアル後はいろいろと問題が生じておりまして、修正・改善を申し入れているところです。
HTMLタグが使えないのは非常に痛いです。

トラックバック - http://d.hatena.ne.jp/Ozy/20150311

2015-03-10 ショートコーディング問題の微妙なルールについて

[]ショートコーディング問題の微妙なルールについて ショートコーディング問題の微妙なルールについてを含むブックマーク

CodeIQで現在出題中の、ショートコーディング:きのこ危機一髪について、毎度あいまいなルールになってしまって申し訳ないのですが、基本的にシステムテストが通ればOKです。

ただし、これまで(ideone.comを利用した場合)の経験上「さすがにこれをOKにすると良くないかなー」という、以下の場合を禁止としています。


シェルコマンドを使う系

Ideone.comのCではsystem関数が使えてしまうことと、実行マシンにperlが入っていることから、問題によっては

main(){system("perl -e 'Perlのコード'");}

と書いた方が短くなるようなケースが考えられます。これだと完全にPerlゴルフじゃん!ってなってしまうので、さすがにこれはNGでしょう。


通信しちゃう系

今でも可能かはわかりませんが、外部サーバに解答・あるいは解答プログラムを設置し、そこからインターネットを経由して解を得るというコードを書くことができました。これも問題の趣旨とは違いますので、NGとしました。


サーバ乗っ取り系

これについてはいろいろなケースがあると思いますが、要はジャッジシステム自体に何らかの方法で手を加えて、本来とは異なる実行結果を得るような行為全般です。できるだけ短いコードを目指すという趣旨からは外れてしまいますから、これもNGです。


それ以外

こんなご質問をいただきました。

内容というかルールについてなんですが、機械語やアセンブリ言語というのは「ほかの言語」には含まれないんですか?

https://twitter.com/akouryy1/status/575221165838356481

先に説明した「シェルコマンドを使う系」の例のように、実質他の言語になっちゃうんじゃないの?ということになりそうですから、かなり微妙な問題になります。たしかにCの場合はインラインアセンブリが書けますし、関数の呼び出し先のアドレスに機械語コードを書きこんでおくことでそのコードを実行できる場合もあります。ただ、コードを丸々機械語で書くなんてことは大変なことで、ましてや短く書くなんて、よほど単純な問題でないと無理なんじゃないかと思います。普通にCで書いたコードよりも機械語埋め込みで短くなるんなら、是非観てみたいですね。というわけで、あえて禁止とはしませんので、チャレンジしたいと思う方はどうぞどうぞという感じです。


バイナリ埋め込み?

もし『バイナリ埋め込み』という技法が魔法のような技術だと思っている方がいれば、おそらく間違いです。実際にやろうとするともんのすごく冗長になりますし、そこそこのサイズでちゃんと動くものというのは本当に難しいので、そういう意味ではshinhさんのqsort hack(http://shinh.hatenablog.com/entry/20070124/1169569752)なんかはホント素晴らしいテクニックですよね。これはバイナリ埋め込みがすごいんじゃなくて、それを見つけて・実際にやった人がスゴイだけです。バイナリにしたからって無敵になるわけではありません。…と、この文章を書きながら、31バイトでつくるアセンブラプログラミング ?アセンブラ短歌の世界?という書籍のことを思い出しました。それなりに意味のある短いバイナリコードを作るのは大変ですが、やっぱり面白いですね。


今回出題の問題について

基本的にヒントになるようなことは書きたくない(挑戦者の思考に影響を与えてしまう)のですが、今回のテスト環境を作成したのは出題者である私自身で、「ちょっと不味かったかなー」と思う部分が無きにしも非ずということで、少しだけ書いておきます。挑戦してくださっている方でフィードバックを受け取っている方にフィードバックメッセージとして書いてありますが、コードサイズのチェックにはご提出いただいたコードに対して

wc -c 提出されたファイル

としているだけで、あとはローカルのサーバやIdeone.com上で実行しています。この辺りの過程でちょっと抜け道がありまして、…と、これ以上は書けませんね。とにかく、コンパイルや実行テストは自動化されますので、コードを提出してシステムが正解と判定すればそのとき提出したソースコードのサイズが記録になる、ということだけです。「こんなんどうかな?」と思ったら、ご遠慮なくコードを送りつけてください。


のんびりいきましょう

まだ出題期間中ですのであれこれと書くことはできませんが、技術的には「おそらく世界で数人しかわからないんではないか」みたいなものはないでしょうし、要は知識・技術・観察力・根性みたいな要素の集まりでしかないんですよね。あまり深刻に考えすぎてもダメなときはダメですし、何かのきっかけで簡単にできてしまったりすることもあります。仕事や勉強の合間にちょっと考えてみて、試してみて、を繰り返し、締め切り後には上位のコードや解説を見て楽しんでいただけたらと思います。

締め切り後にまたきちんとした記事を書きますので、問題に挑戦した方もそうでない方も、ご意見等ご遠慮なくおっしゃってください。


問題になりそうなこと(メモ)

今回はプレゼント付問題ということで、少なからず金品が絡んでいます。ということで、問題になりそうなことをメモしておきます。

書籍の抽選対象に関してはコードサイズが関係ありませんので、特に問題が生じることはなさそうです。バッジ付与については多少の問題が起こる可能性がありますね。その辺は挑戦期間終了後に検討することになると思います。よくよく考えると、出題してまだ5日くらいしか経っておらず、さらに予想もつかないテクニックで記録が更新される可能性があります。それが看過できないような問題であれば何らかの対策が必要でしょう。しかし予測できない以上、現時点ではどうしようもないですね。なんにせよ、最終的には出題者個人の責任で、できるだけ皆が納得できる対処をしたいと思います。

トラックバック - http://d.hatena.ne.jp/Ozy/20150310