LoginSignup
14
7

More than 3 years have passed since last update.

PHPでFizzbuzz最短43バイト

Last updated at Posted at 2020-02-19

今回は解決できてませんし、解決の糸口すら掴めていません。

PHPのFizzBuzz最短は長らく56バイトでした。

<?while($i++<100)echo$i%3?!$$i=$i:Fizz,$i%5?$$i:Buzz,~ ;
<?for(;$i++<100;)echo$i%3?!$$i=$i:Fizz,$i%5?$$i:Buzz,~ ;

ところで先日なんとなくshinh.orgを見てみたんですよ。

01.png

43?????????

他の回答者がみな56バイトで横並びになっているところに突然3/4の長さですよ。
しかもここ、もはや古代語と言って差し支えないPHP5.3.8ですからね。
一体全体どうなってんだ?
完全に理解の範疇を超えています。

さらに目を引くのが0B / 30B / 13Bという文字の使用割合です。
これは基準が公開されていて、順にバイナリ0バイト、英数30バイト、記号13バイトを使っているという意味になります。

56バイト達成者は全員1B / 26B / 29Bとか1B / 28B / 27Bのような割合になっているので、43バイト達成者は記号が圧倒的に少ないです。
さらに改行を表すchr(245)のバイナリを使っていません。

しかしですねここまでくると、最低限必要そうな記号を上げていくだけで、
・PHP開始タグ<?
・ループwhile($i++<100)
・改行および末尾"\n";

これだけで既に記号を12文字使ってるのですよ。
記号の削減は、小手先の変更でどうにかなるレベルではありません。
どうやら根本的に考え方を変えなければならないようです。

が、正直何一つ思いつきません。

私にはもう、<?=file_get_contents("path/to/fizzbuzz");みたいな何らかの回避ルートを見つけ出したとしか考えられません。
まあ、最近の他のコンテストを見てみると見事に何かされた形跡があるので、それが正解なのかもしれませんけどね。

ちょっと私のレベルではどうにもできなかったので、誰か答えよろ。

14
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
7