スペースモラトリアムノカミサマ

日記+コメント付きブックマーク+他人にも役に立つかもしれない情報など。
(更新情報: RSS(ツッコミ付き) / RSS(ツッコミ抜き) / LIRS)

最近の TrackBack:
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|06|07|08|09|10|
2011|01|02|03|07|10|11|
2012|02|03|04|07|08|09|
2013|01|06|07|
2014|02|08|09|11|
2015|09|
2016|01|05|
2017|07|
2018|05|07|
2019|07|
2020|08|09|10|12|
2021|05|
2022|03|

2011/02/05

_ [プログラミング][Perl] FizzBuzz を試してみた

元ネタは3年以上前のどうしてプログラマに・・・プログラムが書けないのか?でその時はスルーしてたんだけど、最近になって某Y!社の新卒には入社までに、FizzBuzzを61byte,エンジニアは30byteでつくってこいという課題があるというネタで再度目にしたので試してみることにした。

出題には何で区切れという要求はないようだけど、自主的に改行で区切るという前提とした。

愚直に書くと…

#!/usr/bin/perl
for (1..100) {
	if ($_ % 3 == 0 && $_ % 5 == 0) { print 'FizzBuzz'; }
	elsif ($_ % 3 == 0) { print 'Fizz'; }
	elsif ($_ % 5 == 0) { print 'Buzz'; }
	else { print $_; }
	print "\n";
}

198バイト。

簡潔に書き直すと…

#!/usr/bin/perl
for (1..100) {
	my $s;
	$s = 'Fizz' if $_ % 3 == 0;
	$s .= 'Buzz' if $_ % 5 == 0;
	print $s ? "$s\n" : "$_\n";
}

128バイト。

空白や記号をできる限り詰めてワンライナーにすると、

perl -e'for(1..100){my$s;$s=Fizz if$_%3==0;$s.=Buzz if$_%5==0;print$s?"$s\n":"$_\n"}'

85バイト。perl -e を除いても76バイト。

この辺が自分の限界らしい。Y! には到底届かない。

他のコマンドを組み合わせるのはちょっと反則っぽい感じがするので、Perl でまともな方法だと TAKESAKO さんの56バイト (perl -e 抜きだと47バイト) が限界なのかな。

はまちや2@Hamachiya2

34byteでFizzBuzz書いたよ。ブラウザのURL欄にコピペすれば実行される → 『javascript:open('http://3.ly/fiz')』 http://togetter.com/li/92612

[Twitter:Hamachiya2/30509429350727681より引用]

ある種の反則技使っても34バイト。

30バイトってのは何なんだろう…。x86 コード直接なら可能なの? 無理そうな予感がプンプンするけど…いや、anarchy golf - FizzBuzz によると x86 の最短は99バイトらしく、FlogScript の36バイトが最短らしい。結局30バイト以内ってのはネタなんだろうか。