1、2、フィズ、4、バズ


148

前書き

標準プログラミング演習用の最短ソリューションのカタログを収集するための最近の取り組みで、PPCGの最初のバニラFizzBu​​zzチャレンジがここにあります。他のカタログの課題を見たい場合は、「Hello World!」があります。そして「この数は素数であります?」

チャレンジ

1から100までの10進数を出力するプログラムを作成します。しかし、3の倍数の場合は数字ではなく「フィズ」、5の倍数の場合は「バズ」が印刷されます。3と5の両方の倍数である数字の場合、「FizzBu​​zz」と印刷します。

出力

出力は、改行(\nまたは\r\n)で区切られた数字(およびFizzes、Buzzes、FizzBu​​zzes)のリストになります。末尾の改行は使用できますが、先頭の改行は使用できません。改行の選択とは別に、出力は次のようになります。

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

この規則の唯一の例外は、挨拶、ANSIカラーコード、インデントなど、抑制できない言語のインタープリターの一定の出力です。

さらなるルール

  • これは、FizzBu​​zzをプレイするための最短のアプローチで言語を見つけることではなく、すべての言語で最短のアプローチを見つけることです。したがって、回答は承認済みとしてマークされません。

  • 提出物は、適切な既存のエンコーディングでバイト単位でスコアリングされます。通常は(必ずしもそうではありませんが)UTF-8です。Foldersなどの一部の言語は、スコアリングが少し難しいです。疑問がある場合は、Metaで質問してください。

  • STDERRには何も印刷できません。

  • 通常のルールとは異なり、このチャレンジよりも新しい言語(または言語バージョン)を自由に使用できます。空のプログラムがFizzBu​​zz出力を生成する言語を作成することでこれを悪用したい場合は、非常に退屈な答えへの道を開くことを祝福します。

    提出物をテストできるように、通訳が必要であることに注意してください。以前に実装されていない言語用にこのインタープリターを自分で作成することは許可されています(さらには推奨されています)。

  • 選択した言語が、すでに答えを持っている別の(潜在的により人気のある)言語の些細なバリアントである場合(BASICまたはSQL方言、Unixシェル、またはAlphuckや???のような些細なBrainfuck派生語を考えてください)、既存のものにメモを追加することを検討してください同じまたは非常に類似したソリューションは、他の言語でも最短であると答えてください。

  • 出力が固定されているため、出力をハードコーディングできます(ただし、これは最短のオプションではない場合があります)。

  • プログラムの元の作者を信用する限り、既存のソリューションを使用できます。

  • それ以外の場合、標準の抜け穴は許可されません。

補足として、ゴルフにそれほど価値のない言語では、退屈な(しかし有効な)答えに投票しないでください。これらは、カタログを可能な限り完全にコンパイルしようとするので、この質問には依然として有用です。しかし、著者が実際にコードをゴルフすることに努力しなければならなかった言語では、主に回答を支持してください。

カタログ

var QUESTION_ID=58615;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk";var OVERRIDE_USER=30525;var answers=[],answers_hash,answer_ids,answer_page=1,more_answers=true,comment_page;function answersUrl(index){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(index,answers){return"https://api.stackexchange.com/2.2/answers/"+answers.join(';')+"/comments?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){answers.push.apply(answers,data.items);answers_hash=[];answer_ids=[];data.items.forEach(function(a){a.comments=[];var id=+a.share_link.match(/\d+/);answer_ids.push(id);answers_hash[id]=a});if(!data.has_more)more_answers=false;comment_page=1;getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){data.items.forEach(function(c){if(c.owner.user_id===OVERRIDE_USER)answers_hash[c.post_id].comments.push(c)});if(data.has_more)getComments();else if(more_answers)getAnswers();else process()}})}getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;var OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(a){return a.owner.display_name}function process(){var valid=[];answers.forEach(function(a){var body=a.body;a.comments.forEach(function(c){if(OVERRIDE_REG.test(c.body))body='<h1>'+c.body.replace(OVERRIDE_REG,'')+'</h1>'});var match=body.match(SCORE_REG);if(match)valid.push({user:getAuthorName(a),size:+match[2],language:match[1],link:a.share_link,});else console.log(body)});valid.sort(function(a,b){var aB=a.size,bB=b.size;return aB-bB});var languages={};var place=1;var lastSize=null;var lastPlace=1;valid.forEach(function(a){if(a.size!=lastSize)lastPlace=place;lastSize=a.size;++place;var answer=jQuery("#answer-template").html();answer=answer.replace("{{PLACE}}",lastPlace+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link);answer=jQuery(answer);jQuery("#answers").append(answer);var lang=a.language;lang=jQuery('<a>'+lang+'</a>').text();languages[lang]=languages[lang]||{lang:a.language,lang_raw:lang.toLowerCase(),user:a.user,size:a.size,link:a.link}});var langs=[];for(var lang in languages)if(languages.hasOwnProperty(lang))langs.push(languages[lang]);langs.sort(function(a,b){if(a.lang_raw>b.lang_raw)return 1;if(a.lang_raw<b.lang_raw)return-1;return 0});for(var i=0;i<langs.length;++i){var language=jQuery("#language-template").html();var lang=langs[i];language=language.replace("{{LANGUAGE}}",lang.lang).replace("{{NAME}}",lang.user).replace("{{SIZE}}",lang.size).replace("{{LINK}}",lang.link);language=jQuery(language);jQuery("#languages").append(language)}}
body{text-align:left!important}#answer-list{padding:10px;width:290px;float:left}#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table>


1
Nothing can be printed to STDERR. これは、実行時のみ、またはコンパイル時にも当てはまりますか(別のステップと仮定しますか?)
AShelly

@AShelly実行時のみ
ベータ崩壊

100をチャレンジにハードコーディングしたという事実が好きかどうかはわかりません。このように、予想される出力を生成するだけのプログラムは有効なエントリですが、この課題には興味がありません。課題は、プログラムが出力するアイテムの数を入力することを期待すべきだと思います。
ティムウィ

6
@Timwi(少しだけ)より面白くすることに同意しますが、FizzBu​​zzを厳密に1から100(WikipediaやRosetta Codeなどで)と非常によく見ています。目標が「標準的な」FBチャレンジを持つことである場合、それは理にかなっています。
ジオビット

58
「バニラ・フィズバズ」は美味しそうです。
iamnotmaynard

回答:


76

Python 2、56

i=0;exec"print i%3/2*'Fizz'+i%5/4*'Buzz'or-~i;i+=1;"*100

6
ダン、それは血まみれの天才だ。文字列にmod-resultを掛けるというアイデアを盗むことはできますか?
AdmBorkBork

@TimmyDどうぞ。
feersum

15
(から56のための別の方法、ここi=1;exec"print'FizzBuzz'[i%-3&4:12&8-i%5]or i;i+=1;"*100。検索式をブルートフォースしてビットバッシングを最適化しようとする人はいますか?
xnor

1
非常に素晴らしいテクニックです。モジュロ結果を除算してバイナリにするのが大好きです!私が持っている改善);(それは〜95%のあなたの答えだから)もちろん、私はあなたの許可なしに答えとしてそれを投稿しません...ダウン54文字になるようにあなたの方法を取得するために
Tersosauros

2
@Tersosauros先に進みます...私の方法は見つけるのがそれほど難しくなく、多くの人が独自に発見したことは間違いありません。
フェールサム

76

六角形、91バイト

報奨金をありがとう:)

うわー、私はマーティンの六角形の解決策を打ち負かすことができるとは想像していなかったでしょう。しかし、誰がそれをサンクしたでしょうか、私はそれをやり遂げました。数日間の失敗の後、私は解決策をチェックするためにHexagonyの着色剤もEsotericIDEも持っていなかった。仕様のいくつかの側面が間違っていたため、ペンと紙とテキストエディターを使用して、いくつかの間違った「解決策」を作成しました。さて、ついに怠を克服し、両方のリポジトリのクローンを作成し、VisualStudioをダウンロードしてコンパイルしました。なんと便利なツールなのでしょう!あなたが見ることができるように、私はあなたがプログラマーと呼ぶだろうとは程遠いです(つまり、来てください!私はVisualStudioさえインストールしておらず、プログラムをコンパイルする方法についてほとんど手がかりがありません);)

実用的な解決策を見つけるのにまだ時間がかかりました、そしてそれは非常にぎゅうぎゅうで混chaとしていますが、ここではすべての栄光があります:

サイズ6の六角形のFizzbuzz:

3}1"$.!$>)}g4_.{$'))\<$\.\.@\}F\$/;z;u;<%<_>_..$>B/<>}))'%<>{>;e"-</_%;\/{}/>.\;.z;i;..>(('

六角形のレイアウト:

      3 } 1 " $ .
     ! $ > ) } g 4
    _ . { $ ' ) ) \
   < $ \ . \ . @ \ }
  F \ $ / ; z ; u ; <
 % < _ > _ . . $ > B /
  < > } ) ) ' % < > {
   > ; e " - < / _ %
    ; \ / { } / > .
     \ ; . z ; i ;
      . . > ( ( '

そして、TimwiのHexagony Colorerによる美しい演出:

Colorized Hexagony FizzBuzz solution

したがって、2 fpsでの110秒のGIFアニメーションは、最初の6つの数字1, 2, Fizz, 4, Buzz, Fizz、プログラムの最初の220ティックの間のプログラムフローを示しています(フルサイズの画像をクリックします)。

enter image description here

Natron合成ソフトウェアのおかげで、ポインターのアニメーションを作成するのは面倒でしたが、管理しやすいものでした。メモリの260個の画像を保存するのは面白くありませんでした。残念ながら、EsotericIDEはそれを自動的に行うことはできません。とにかく、アニメーションをお楽しみください!

結局、記憶モデルと六角形の境界を横切るパスのやや直感に反するラッピングに頭を包むと、Hexagonyはそれほど難しくありません。しかし、ゴルフはお尻が痛くなることがあります。;)

楽しかった!


1
非常に素晴らしい!:)サイドレングス6を自分で試してみるのを忘れたのはそれです。;)(ただし、私のソリューションがサイドレングス6により簡単に収まるかどうかを確認するのは興味深いでしょう。)
マーティンエンダー

@MartinBüttner私はそれを見たいです:)
ML

2
Visual Studioとは何ですか?:P
Rɪᴋᴇʀ

5
残念ながら、EsotericIDEはそれを自動的に行うことはできません。—先に進んで機能の提案提出してください。いつかそれを行うことができるかもしれません:)
Timwi

1
(最後の返信の6か月後にこれが発生します)灰色のパスを1バイトシフトし、オレンジのパスに「3}1"$.!$>)}g4_'{$))}\<$\.\.@\;F\$/;z;u;<%<_>_..$>B/<>}))'%<>{>;e"-</_%;\/{}/>.\)(z;i;..>('Cancelling op」を配置することにより、プログラムの最後から1バイトをゴルフすることができます。(zの後、aで「キャンセル」できます)またはzをそこに配置します。今では1つの目盛り後にオレンジ色のパス上のすべてのコマンドをプッシュし、バックところで私もちょうどHexagony Colorerと密教IDEのためのVisual Studioをインストールして3行目にあったノーオペレーションとなっている)である:P
サニーしゃれ

44

ラビリンス、94バイト

"):_1
\ } 01/3%70.105
" :   @ "     .
"  =";_""..:221
+  _
"! 5%66.117
_:= "     .
="*{"..:221

サブ100!これは楽しいものでした。

説明

Labyrinthの簡単な入門書から始めましょう。すでに基本に精通している場合は、これをスキップしてください。

  • ラビリンスには、メインスタックと補助スタックの2つのスタックがあります。両方のスタックの下部には無限の数のゼロがあります。たとえば+、空のスタックでは2つのゼロが追加され、ゼロがプッシュされます。

  • ラビリンスの制御フローはジャンクションによって決定されます。ジャンクションはスタックの最上部を見て、次に進むべき場所を決定します。負の場合は左に曲がり、0の場合はまっすぐ進むことを意味し、正の場合は右に曲がることを意味しますが、壁にぶつかった場合は方向を逆にします。たとえば、まっすぐ前に曲がって左に曲がるだけで、スタックの一番上が正の場合、右に曲がれないので、代わりに左に曲がります。

  • Labyrinthの数字pop xおよびpush 10*x + <digit>。これにより、大きな数字を簡単に作成できます。ただし、これは_、ラビリンスにある新しい番号を開始するために0をプッシュする命令が必要であることを意味します。

それでは実際のコードを見てみましょう!

enter image description here

実行は"NOPである左上隅から開始されます。次は)、スタックの最上部をインクリメントし、最初のパスで1をプッシュし、次のパスでインクリメントnします。

次に、で複製n:ます。nが正であるため、右に曲がって}(メインスタックの上部を補助にシフト)およびを実行し:ます。行き止まりになったので、振り返って実行し}:もう一度スタックを残します

Main [ n n | n n ] Aux

もう一度、nポジティブであり、我々は実行、右折_101/分割するn場合は101でn、その後101であるn/101 = 1と我々はに変わり@、プログラムを終了します。そうでなければ、現在の状況は

Main [ n 0 | n n ] Aux

オレンジ1(mod 3)

3上のゼロを3(10*0 + 3 = 3)に変換し%、モジュロを実行します。n%3が正の場合、黄色に変わり"ます。それ以外の場合は70.105.122:..、を実行しますFizz。この場合ゼロだった_ので、新しいゼロをプッシュする必要がないことに注意してくださいn%3。したがって、スタックの下部にある無限のゼロを活用できます。両方のパスが水色で再び合流します。

ライトブルー

スタックの一番上は現在n%3、である可能性があります。そのため、_;はゼロを押してすぐにポップし、に変わるのではなく、まっすぐ進むようにし@ます。次に=、メインスタックと補助スタックの上部を交換して、次のものを使用します。

Main [ n | n%3 n ] Aux

オレンジ2(mod 5)

これは以前と同様の状況ですが、66.117.122:..出力さBuzzれるのはn%5はゼロです。

濃紺

前のセクションでは、スタックは次のようになります

Main [ n%5 | n%3 n ] Aux

{シフトn%3メインスタックに背をし、*2つのモジュロを乗算します。

どちらかのモジュロがゼロの場合、積はゼロなので、すぐに黄色になります。=スタックの先頭を交換し_、ゼロをプッシュして、まっすぐ進むようにします。

Main [ n 0 | 0 ] Aux

そうでなく、両方のモジュロが非ゼロの場合、積は非ゼロであり、右に緑色に変わります。=スタックのトップを交換して、

Main [ n | (n%5)*(n%3) ] Aux

その後:、複製nに使用し、右に曲がってを使用!して出力しますn

紫の

この時点で、メインスタックには、どのパスが使用されたかに応じて、1つまたは2つのアイテムがあります。黄色のパスからゼロを取り除く必要があり+、それを行うにn + 0は、両方のケースで何らかの順序で実行します。最後に、\、改行を出力し、最初に戻りました。

反復ごとに余分な(n%5)*(n%3)ものが補助スタックにプッシュされますが、そうでない場合は同じことを繰り返します。


7
説明を愛する。
-The_Basset_Hound

29

Perl 5、49バイト

46バイトのスクリプト+ 3バイト -E"..."

say必須-E"...")を使用すると、say自動的に改行が追加されるため、これをさらに46バイトに減らすことができます(ありがとう@Dennis!):

say'Fizz'x!($_%3).Buzz x!($_%5)||$_ for 1..100

Perl 5、50バイト

print'Fizz'x!($_%3).Buzz x!($_%5)||$_,$/for 1..100

を使用すると、数バイトを節約できますsay
デニス

スコアボードを壊した...
LegionMammal978

@ LegionMammal978はい。はい、私はそうしました...それからタイトルを書き直します!ああ!
ドムヘイスティングス

-E"..."8バイトではないですか?スペース+ダッシュ+オプション+引数(+引用)。
エリックアウトゴルファー

1
@EriktheGolferなので、これを投稿してからコンセンサスは-E0バイトですが、primoの答えは引用符を除いて採点されたので、私はそれを公平にし、私の引用符と+1に引用符を含めることにしました-E。それがフリーとして受け入れられている理由は、Perlは通常経由perl -eで実行され、perl -Eもうバイトではないということです(私も考え-M5.010たりuse 5.010、フリーにすることもできますが、おそらくメタ投稿を再読み込みしません)。を追加する場合、-pまたは-nこれはで実行する場合と同様に+1としてカウントされますperl -pe。お役に立てば幸いです!メタリファレンス:meta.codegolf.stackexchange.com/a/7539
Dom Hastings

27

ルビー、50バイト

ゴルファーの間で人気があると思われるバージョン1.8が必要です。

1.upto(?d){|n|puts'FizzBuzz
'[i=n**4%-15,i+13]||n}

現代のRubyでは、51バイトのソリューションに置き換え?dられます100

これは世界記録のようです。


1
それは悪魔です、大好きです。
カムデンNarzt

?dただ100です。FizzBuzz文字列がその中に改行を持っている、これはRubyで有効です。string[i, s]文字i(0 から始まる)で始まるスライスで、文字に対して継続しs、文字列の外側を指すインデックスを無視します。の引数にputsすでに改行がある場合は、切り捨てられます。数式は読みやすくする必要がありますか?ここですべての作業を行います。本当にプロのルビーゴルファーの助けがなければ、私はそれを見つけられなかっただろう。
リン

補足:入力の先頭に0を追加できる場合(そうでない場合)、?e.times代わりに使用することで2バイトを保存できます。
Shelvacu

その[i=n**4%-15,i+13]部分について説明してください。頭を包み込むことができないようです
Piccolo

2
@Piccolo このスニペットは役立ちますか?i==-14スライスが範囲外の場合、を取得しnilます。場合i==-9我々はスライスi+13==4ので、終わりから9番目の文字から始まる文字を'Fizz'。場合はi==-5、私たちはそう、最後から5番目の文字から始まる8つの文字をスライス'Buzz\n'。(8をスライスしようとしますが、5しかありませんので、5になります。)など。
リン

26

Java、130バイト

これは、最新のJavaバージョン(7以降)用です。古いものでは、このenumトリックを使用してもう少し削ることができますが、ロジックがこれより短くなるとは思いません(内部86 main)。

class F{public static void main(String[]a){for(int i=0;i++<100;)System.out.println((i%3<1?"Fizz":"")+(i%5<1?"Buzz":i%3<1?"":i));}}

この質問では空のstderrが指定されているため、ここではイニシャライザーブロックのトリックは役に立たないと思います。
feersum

うーん。静的なトリックがstderrに出力されることは知っていますが、enumは正常に実行されたと思いました。知っておきたいこと:)
Geobits

4
私を14バイト倒しました!== 0の代わりに<1を使用することは、保存に最適な方法です。
ESP

2
class F{public static-> interface F{staticJava 8の場合
-TheNumberOne

1
それはありません非常に列挙型がどのように働きますか。するenum F{;public...必要があるので、実際にはバイトを保存しません。
ハイパーニュートリノ

23

Pyth、30

VS100|+*!%N3"Fizz"*!%N5"Buzz"N

ここで試してみてください

説明:

VS100|+*!%N3"Fizz"*!%N5"Buzz"N
VS100                            : for N in range(1,101)
     |                           : logical short-circuiting or
      +*!%N3"Fizz"               : add "Fizz" * not(N % 3)
                                 : Since not gives True/False this is either "" or "Fizz"
                  *!%N5"Buzz"    : Same but with 5 and Buzz
                             N   : Otherwise N
                                 : The output of the | is implicitly printed with a newline

23

網膜317 139 134 132 70 63 60 55バイト

.100{`^
_
*\(a`(___)+
Fi;$&
\b(_{5})+$
Bu;
;_*
zz
'_&`.

オンラインでお試しください!

説明

.100{`^
_

.プログラムの終了時に暗黙的な出力をオフグローバルサイレントフラグです。100{プログラムの残りを100回の繰り返しで実行されるループにラップします。最後に、ステージ自体は単に_は文字列の先頭にを、単項ループカウンターを効果的にインクリメントします。

*\(a`(___)+
Fi;$&

より多くの構成。*\(プログラムの残りの部分をグループにラップし、その結果を後続の改行で出力しますが、グループ全体をドライランにします。つまり、結果は印刷後に破棄されるため、ループカウンターは実際には変更されません。 。aは、文字列全体に正規表現を固定するカスタム正規表現修飾子です(これにより、使用時^$明示的にバイトを節約できます)。

アトミックステージ自体が面倒を見ていFizzます。による除算3は単項式で簡単にチェックできます___。数値がの繰り返しとして記述できるかどうかをテストするだけです。この場合、Fi;文字列の先頭に追加します。セミコロンは、次のステージの番号の前にまだ単語の境界があるようになっています。我々はにラインを有効にした場合Fizz___...との間に位置zし、_正規表現は、両方の文字を扱い、単語の文字としてアンダーので、境界とはみなされません。しかし、セミコロンも削除する私たちを可能にするzzから重複をFizzし、Buzz

\b(_{5})+$
Bu;

我々はによって可分の正確な同じことを行う5Bu;、我々は維持する必要はありませんが、_この間 s。したがって、次のような結果が得られます

_
__
Fi;___
____
Bu;
Fi;______
...
Fi;Bu;
...

これによりFizz、を含む行のアンダースコアのみを削除することが非常に簡単になりますzz

;_*
zz

つまり、各セミコロンを有効にしますが、その直後にzzすべての_s も使用します。この時点で、FizzBu​​zzを単項で完了しました。しかし、この課題では10進数の出力が必要です。

'_&`.

&条件付きを示します。このステージは、文字列にアンダースコアが含まれる場合にのみ実行されます。したがって、FizzBuzzおよびFizzBuzz反復がそのまま残されています。他のすべての反復(3または5で割り切れない反復)では、文字数をカウントし、結果を10進数に変換します。


20

GS2、1

f

gs2の作成者であるMaurisからの引用

私は1枚のgorubyの1バイトが欲しかったHello, world!ので...これが印刷され"1\n2\nFizz\n4\nBuzz\n..."ます。:)

更新:を使用しない27バイトの回答を追加しましたf


20

Perl 5、45バイト

say((Fizz)[$_%3].(Buzz)[$_%5]or$_)for+1..100

-E1としてカウントされるオプションが必要です。これは、コマンドラインから実行する必要があります。つまり:

perl -Esay((Fizz)[$_%3].(Buzz)[$_%5]or$_)for+1..100

コマンドの前後に引用符は、1つのスペースを使用して回避した場合、不要な、またはコマンドラインセパレータとして作用することができる任意の他の文字(|<>&、など)。


Perl 5、48バイト

print+(Fizz)[$_%3].(Buzz)[$_%5]||$_,$/for 1..100

コマンドラインオプションが1つずつカウントされる場合、-l1バイト節約されます(置き換えて$/)。クラシックPerlgolfルールについて1:ただし、これは3カウントだろう-、のための1 l、および必要なスペースのための1つを。


編集距離が1〜のスイッチでを使用できるためsay、1バイトとしてカウントする必要があります。-E-e
デニス

ちょっとプリモ、私は使用するための私の答えでごまかしているように感じますsay、私-E-eそれを代わりに使用することができると仮定しました。46ではなく44にダウンします。あなたとは異なり、好ましいスコアリングメカニズムは何ですか?私は通常printこれを避けるために使用します!コンセンサスに最も近いのはこれでしょうか?
ドムヘイスティングス

私の個人的な見解は、コマンドラインのすべての追加バイトが1を獲得することです。特に、sayOSセパレーターを避けてコードを1行で記述できる場合は、1を獲得し-Eます。-E"$a||$b"スコア3などの引用符を使用する必要がある場合、1行で取得できない場合は、5をスコアし-M5.01ます。しかし、その時点で、おそらくを使用し-lたほうがよいでしょう。2つの理由から、デフォルトで無料であるべきだとは思いません。1)改善が些細で面白くないこと、および2)デフォルトで有効になっているインタープリターのバージョンがないこと。
プリモ

20

蜜蝋104 89 81バイト

高密度のパッキングにより、さらに8バイトをカットできます。

最短のソリューション(81バイト)、同じプログラムフロー、異なるパッキング。

p?@<
p?{@b'gA<
p@`zzuB`d'%~5F@<f`z`<
 >~P"#"_"1F3~%'d`Fiz`b
 d;"-~@~.<
>?N@9P~0+d

概念を変更することで、コードを15バイト削減できました。ソリューションのダブルmod 5テストを削除したかったので、フラグを実装しました。

簡単な説明:

場合n%3=0フィズは、印刷されます、そしてフラグが設定されます。フラグは、単純に最上位のlstack値をgstackにプッシュすることで実現されます(命令f)。

の場合n%5=0n%3=0(FizzBu​​zzの場合)またはn%3>0(Buzzの場合)。どちらの場合も、バズが印刷され、空になるまでスタックをポップすることでフラグがリセットされます(命令?)。

興味深いケース:

の場合n%5>0n%3=0(Fizzケースを印刷する場合、nを印刷してはいけません)またはn%3>0(Fizzを印刷しなかったため、nを印刷する必要があります)。フラグをチェックする時間。これは、gstackの長さをgstackの上にプッシュすることで実現されます(命令A)。その場合n%3 was 0、gstackの長さは> 0です。の場合n%3 was >0、gstackの長さは0です。単純な条件付きジャンプにより、gstackの長さが0の場合にのみnが出力されるようになります。

繰り返しますが、n、Fizz、および/またはBuzzと改行のいずれかを印刷した後、gstackが2回ポップされ、空であることを確認します。gstackはemptyで[][0]命令後A(gstackでgstackのプッシュ長さ)になるか[0]、ゼロが含まれます(n%3の結果)。[0 1][0]の長さは1です。空のスタックはスタックを変更しないため、2回ポップしても安全です。

よく見ると、原則として私が折りたたんでいることがわかります

>      q
d`Fizz`f>

<f`z`<
d`Fiz`b

これは、以下の古いソリューションの次の行の間A<最後の無駄なスペースをすべて取り除くのに役立ちます。

q?{@b'gA<       p      <

アニメーションの説明を含む新しいコンセプトソリューション(89バイト):

q?@ <
 q?{@b'gA<       p      <
p?<@`zzuB`b'%~5F@<f`zziF`b'<
>N@9P~0+.~@~-";~P"#"_"1F3~%d

六角形のレイアウト:

   q ? @   <
    q ? { @ b ' g A <               p             <
 p ? < @ ` z z u B ` b ' % ~ 5 F @ < f ` z z i F ` b ' <
> N @ 9 P ~ 0 + . ~ @ ~ - " ; ~ P " # " _ " 1 F 3 ~ % d

ローカルおよびグローバルスタックを使用した2 fpsでの最初の326ティックのアニメーション、およびSTDOUTへの出力。

beeswax FizzBuzz animation


比較のために、古い、より複雑なソリューションのパスオーバーレイを以下に示します。たぶんそれは視覚的な観点から見ればきれいなソリューションでもあります;)

Program with path overlay


2
これはHexagonyと同じくらいクレイジーで美しいです。+1を持っている!
ETHproductions

@ETHproductions私はまだHexagonyを試してみる必要がありますが、言語仕様からわかることから、私の蜜蝋はHexagonyの狂気にさえ近づいていません。
ML


それらのアニメーションをどのように作成していますか?
baordog

18

> <>68 66 65 64バイト

1\2+2foooo "Buzz"<
o>:::3%:?!\$5%:?!/*?n1+:aa*)?;a
o.!o"Fizz"/oo

唯一のトリックは、数値印刷の条件として剰余を掛けることです。そうすれば、そのうちの1つが0の場合、数値は出力されません。

ここで試してみることができます

Sp3000のおかげで1バイト、randomraのおかげでもう1バイト節約できました。どうもありがとう!


1
ゴルフがとても上手なので、1行目の「\」と2行目の「\」の再利用が大好きです。
コール

1
o2行目の最後を行の最初の空のスペースに移動すると、-1バイトになります。
Sp3000

@ Sp3000実際、私はこれをゴルフに費やしましたが、これがどのように思い浮かんだのかわかりません
アーロン

1
あなたが持つことができるとき、誰がフィズバズを必要としますfoooo Buzzか?
ケアニコインヘリンガー

17

GS228 27(なしf

六角:

1b 2f fe cc 04 46 69 7a 7a 09 07 42 75 7a 7a 19 06 27 2d d8 62 32 ec 99 dc 61 0a

説明:

1b    100
2f    range1 (1..n)
fe    m: (map rest of program)

cc    put0 (pop and store in register 0)
04    string-begin
Fizz
09    9
07    string-separator
Buzz
19    25
06    string-end-array (result: ["Fizz"+chr(9) "Buzz"+chr(25)])

27    right-uncons
2d    sqrt
d8    tuck0 (insert value of register 0 under top of stack)
62    divides
32    times (string multiplication)
ec    m5 (create block from previous 5 tokens, then call map)

99    flatten
dc    show0 (convert register 0 to string and push it)
61    logical-or
0a    newline

\x05文字列リテラルを終了するため、文字列定数への3と5の埋め込みは機能しません。

注:この問題は、組み込みのを使用してgs2 で1バイトで解決できますf


16

C、85バイト

i;main(){for(;i++<=99;printf("%s%s%.d\n",i%3?"":"Fizz",i%5?"":"Buzz",(i%3&&i%5)*i));}

-squeamishに感謝します。


ここでコンパイルしようとしましたがgcc、文字列内の新しい行を\ nとして認識しません。コンパイルエラーが発生します。コンパイラにパラメーターを渡す必要がありますか?ところで、あなた<=はあなたの投稿で見逃しました(私は<= ...で88バイトを数えたので、それが欠落していると仮定しています)。
wendelbsilva

おっと。警告のエラーを見逃しました。2文字を追加します。
AShelly

グローバル変数はゼロに初期化されるため、の代わりにmain(i)tryを使用しi;main()ます。その後i--for()ループの開始時に削除できます。改行も必要ありません。これにより、バイト数が85に減ります。
減ります

2
取得したいUBに応じて、73、74、または75バイトを実行できます。ここにあります私の74バイトの答えがあります。
リン

1
OMG私はこのことを1バイト小さくするために、おそらく3時間を費やしました。どうぞ。交換する(i%3&&i%5)*ii%3*i%5?i:0、私はベッドに行きますよ
アルバート・レンショウ

16

CJam、35バイト

100{)_[Z5]f%:!"FizzBuzz"4/.*s\e|N}/

CJamインタープリターでオンラインで試してください。

使い方

100{)_[Z5]f%:!"FizzBuzz"4/.*s\e|N}/
100{                             }/  For each integer I between 0 and 99:
    )_                                 Increment I and push a copy.
      [Z5]                             Push [3 5].
          f%                           Map % to push [(I+1)%3 (I+1)%5].
            :!                         Apply logical NOT to each remainder.
              "FizzBuzz"4/             Push ["Fizz" "Buzz"].
                          .*           Vectorized string repetition.
                            s\         Flatten the result and swap it with I+1.
                              e|       Logical OR; if `s' pushed an empty string,
                                       replace it with I+1.
                                N      Push a linefeed.

3
より簡単なソリューション:100{):I3%!"Fizz"*I5%!"Buzz"*+Ie|N}/
aditsu

16

ムンプス、56 54バイト

f i=1:1:100 w:i#5=0 "Fizz" w:i#3=0 "Buzz" w:$X<3 i w !

これは何ですかw:$X<3 i、あなたは尋ねますか?$X出力カーソルの水平位置を(端末の左端からの文字数として)格納するマジック変数(「組み込み」)です。wの省略形ですWRITEコマンドの。構文command:condition argsは事後条件です-"if condition、then do command args"。

だから我々は、出力カーソルが(少なくとも1のことを意味する以上の2つの文字進んでいるかどうかをチェックしている"Fizz"かを"Buzz"書いて、端末に書き込まれている)を、そうでない場合i、端末に。$X変数-従って、端末から深い不可分のこの種は、 - MUMPSのファーストクラスの特徴です。うわぁ。


15

ゼリー24 20 バイト

³µ3,5ḍTị“¡Ṭ4“Ụp»ȯµ€G

オンラインでお試しください!

使い方

³µ3,5ḍTị“¡Ṭ4“Ụp»ȯµ€G  Main link. No input.

³                     Yield 100.
 µ                    Begin a new, monadic chain.
                 µ€   Apply the preceding chain to all integers n in [1, ..., 100].
  3,5ḍ                Test n for divisibility by 3 and 5.
      T               Get all truthy indices.
                      This yields [1] (mult. of 3, not 5), [2] (mult. of 5, not 3),
                      [1, 2] (mult. of 15) or [].
        “¡Ṭ4“Ụp»      Yield ['Fizz', 'Buzz'] by indexing in a dictionary.
       ị              Retrieve the strings at the corr. indices.
                ȯ     Logical OR hook; replace an empty list with n.
                   G  Grid; join the list, separating by linefeeds.

再び、誰も出て(HQ9 +スタイルの回答を除く)デニスをgolfedない
noɥʇʎԀʎzɐɹƆ

15

brainfuck、206バイト

++>+++++>>>>>++++++++++[>+>>+>>+>+<<<[++++<-<]<,<,-<-<++<++++[<++>++++++>]++>>]>
[+[[<<]<[>>]+++<[<.<.<..[>]]<<-[>>>[,>>[<]>[--.++<<]>]]+++++<[+[-----.++++<<]>>+
..<-[>]]<[->>,>+>>>->->.>]<<]<[>+<<<,<->>>+]<]

フォーマット済み:

++>+++++>>>>>
++++++++++[>+>>+>>+>+<<<[++++<-<]<,<,-<-<++<++++[<++>++++++>]++>>]
>
[
  +
  [
    [<<]
    <[>>]
    +++<
    [
      Fizz
      <.<.<..
      [>]
    ]
    <<-
    [
      >>>
      [
        ,>>[<]
        >[--.++<<]
        >
      ]
    ]
    +++++<
    [
      Buzz
      +[-----.++++<<]
      >>+..
      <-
      [>]
    ]
    <[->>,>+>>>->->.>]
    <<
  ]
  <[>+< <<,<->>>+]
  <
]

オンラインで試す

メモリレイアウトは

0 a 122 105 70 b f 0 t d1 s d2 c d 10 0

ここでf、3によってサイクルをb、5によるサイクルd1、もの桁であるd2十の位で、s十の位、印刷するかどうかをするためのフラグでありd、10でサイクルcするコピースペースでdt0又はジャンクデータを保持するスペースかどうかのフラグを働いています-divisible-by-3 a。バズが20回印刷された後、ポインターをオフセットすることにより、プログラムの終了を決定します。


14

C位、128の 126 125 124バイト

class A{static void Main(){for(var i=0;i++<100;)System.Console.Write("{0:#}{1:;;Fizz}{2:;;Buzz}\n",i%3*i%5>0?i:0,i%3,i%5);}}

定型コードなしの89バイト。

C#の条件付き書式の使用を終了

2つのセクション区切り文字を使用すると;、条件の値がゼロの場合、FizzまたはBuzzが印刷されます。


@ RubberDuck、@ Timwi、および@Riokmijのおかげで合計4バイトを節約できました。


Write改行を呼び出して文字列に直接追加する方が短いでしょう?
ラバーダック

また、のi%3*i%5>0?i:0代わりに1バイト短くなりますi%3*i%5==0?0:i
ティムウィ

あなたは上の別のバイトを保存することができますfor使用して声明for(var i=0;i++<100;)
Najkin

1
あなたは活用することで、さらに3つのバイトを保存することができます文字列補間を(例えば、文字列自体にフォーマット引数をC#6.0からと埋め込み$"{(i%3*i%5>0?i:0):#}...\n"
LiamK

1
今日121バイトでできることclass A{static void Main(){for(var i=0;i<100;)System.Console.Write($"{(++i%3*i%5<1?0:i):#}{i%3:;;Fizz}{i%5:;;Buzz}\n");}}
Jerri Kangasniemi

14

Clojureは、113の 106 101 100 91バイト

私の最初のゴルフ!

(dotimes[i 100](println(str({2'Fizz}(mod i 3))({4'Buzz}(mod i 5)({2""}(mod i 3)(inc i))))))

ゴルフをしていない:

(dotimes [i 100] ; account for off-by-one later
  (println (str ({2 'Fizz} ; str converts symbols to strings
                 (mod i 3))
                ({4 'Buzz} ; 4 instead of 0 because of off-by-one
                 (mod i 5)
                 ({2 ""} ; shortest way to write when-not
                  (mod i 3)
                  (inc i))))))

1
Javaソリューションprintlnと同じ方法で処理することにより、5文字を削除できます。(doall(map #(let[t(=(mod % 3)0)](println(str(if t"Fizz""")(if(=(mod % 5)0)"Buzz"(if t""%)))))(range 1 101)))
15

1
@resuemanありがとう!に(if t"Fizz""")簡略化できるため、実際には7になりました(if t"Fizz")。:)
サムエステップ

+1すてきなモジュロトリック、最初はオフバイワンエラーがありましたが。
コアダンプ

14

brainfuck411の350 277 258バイト

編集:

  • 「Fizz Buzz」の値を「BuziF」「BuziG」として保存し、番号印刷セクションをやり直して-61バイト。

  • -71バイト、モジュロ数値印刷セクションの再実行、ループカウンターと数値カウンターの分割、および改行値セルのmod値としての再利用など

  • FizzBu​​zz番号に0がないことを認識して-19バイト。説明も追加

+[-[>+<<]>-]>--[>+>++>++>++++++>+>>>++++++[<<<]>-]<+++++[>+>+>->>->++>>>-->>>++[<<<]>>>-]>[>]+++>>[>+<<<-[<]<[>+++>+<<-.+<.<..[<]<]>>-[<<]>[.>.>..>>>>+[<]+++++<]>[>]>>[[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[-<+>]>,>[>]<[>-[<+>-----]<---.,<]++++++++++>]<.<<<<,>-]

オンラインでお試しください!

数字自体が5または3で割り切れるかどうかをチェックする代わりに、数字のモジュロを追跡する2つのカウンターがあり、数字ごとにそれらをデクリメントし、0に達したときに対応する単語を出力しました。

使い方:

+[-[>+<<]>-]>--  Generate the number 61
[>+>++>++>++++++>+>>>++++++[<<<]>-] Set the tape to multiples of 61
TAPE: 0 0' 61  122 122 110 61  0 0 110
           "=" "z" "z" "n" "="
<+++++[>+>+>->>->++>>>-->>>++[<<<]>>>-]>[>]+++>> Modify values by multiples of 5
TAPE: 0' 5 66  117 122 105 71  3 0 100' 0 0 10
           "B" "u" "z" "i" "G"
Some info:
  5     - Buzz counter
  "Buz" - Buzz printing
  "ziG" - Fizz printing. Modifying the G in the loop is shorter than modifying it outside
  3     - Fizz counter
  0     - This is where the Fizz|Buzz check will be located
  100   - Loop counter
  0     - Number counter. It's not worth it to reuse the loop counter as this.
  0     - Sometimes a zero is just a zero
  10    - Value as a newline and to mod the number by

[ Loop 100 times
  >+<<<  Increment number counter
  -[<]<  Decrement Fizz counter
  [ If Fizz counter is 0
    >+++ Reset the Fizz counter to 3
    >+<< Set the Fizz|Buzz check to true
    -.+<.<.. Print "Fizz"
  [<]<] Sync pointers
  >>-[<<]> Decrement Buzz counter
  [ If Buzz counter is 0
    .>.>.. Print "Buzz"
    >>>>+  Set the Fizz|Buzz check to true
    [<]+++++< Reset the Buzz counter to 5
  ]
  >[>]>> Go to Fizz|Buzz check
  [ If there was no Fizz or Buzz for this number
    TAPE: 3% BuziG 5% 0 Loop Num' 0 10
    [->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]  Mod the number counter by 10
    TAPE: 3% BuziG 5% 0 Loop 0' Num 10-Num%10 Num%10 Num/10
    >[-<+>] Move Num back in place
    >,>[>]< Reset 10-Num%10
    [ For both Num/10 (if it exists) and Num%10
      >-[<+>-----]<--- Add 48 to the number to turn it into the ASCII equivilent
      .,< Print and remove
    ]
    ++++++++++> Add the 10 back
  ]
  <. Print the newline
  <<<<, Remove Fizz|Buzz check
  >- Decrement Loop counter
]

よくやったジョー!私はいつかそれを打ち負かすことを試みるかもしれない:)
フォーセントヴィンティア

13

PowerShell、78 68 61 54バイト

1..100|%{(($t="Fizz"*!($_%3)+"Buzz"*!($_%5)),$_)[!$t]}

編集:おかげで10バイトを保存しました feersumの

編集2:feersumのトリックで、$ tをコードブロックの文字列として定式化する必要がなくなったことを認識しました

Edit3:おかげでさらに7バイトを保存しました ダンコ・

ストックロゼッタコードに似た精神 回答かなり落ち着きました。

説明

1..100|%{...} 1〜100のコレクションを作成し、そのコレクション内のfor-eachオブジェクトを作成します。

(...,$_)2つの要素の新しいコレクションを作成します。0)$t=...変数$tを文字列に等しく設定します。1)$_ループの現在の番号

"Fizz"*!($_%3)our-current-numberを取得し、3で変更し、結果ではありません。それを「Fizz」で乗算し、それを文字列に追加します(5でも同様です)。PowerShellは、ゼロ以外の数値を次のように扱います$TRUEため、のNOTは0です。つまり、our-current-numberが3の倍数である場合にのみ、文字列に「Fizz」が追加されます。

[!$t] 文字列の値に基づいて、作成したばかりのコレクションにインデックスを付けます $t -空ではない、それを印刷する、そうでなければour-current-numberを印刷する


または、54バイト

1..100|%{'Fizz'*!($_%3)+'Buzz'*!($_%5)-replace'^$',$_}

おかげで TesselatingHeckler

同様の概念で、これはインライン-replace演算子と正規表現を使用して空の文字列をスワップアウトします^$をour-current-numberに置き換えます。文字列が空でない場合、スワップされません。


または、54バイト

1..100|%{($_,('Fizz'*!($_%3)+'Buzz'*!($_%5))|sort)[1]}

これは上記と同じループ構造ですが、内部ではペア(n、文字列)を並べ替え、空の文字列は数字の前に並べ替えられますが、FizzBu​​zz文字列は数字の後に並べ替えられます。次に、2番目のソート結果にインデックスを付けます。


余談ですが、||C#のようにPowerShellが演算子を実装した場合、PowerShellで非常に重要な特別な演算子である1..100|%{"Fizz"*!($_%3)+"Buzz"*!($_%5)||$_}ため、|...
AdmBorkBork

1
どの程度1..100|%{'Fizz'*!($_%3)+'Buzz'*!($_%5)-replace'^$',$_}54のために?
TessellatingHeckler

if($t){$t}else{$_}次のようなものに置き換えることができます($t,$_)[!$t]
ダンコ

1
...だから、1..100|%{(($t="Fizz"*!($_%3)+"Buzz"*!($_%5)),$_)[!$t]}これも@TessellatingHecklerの提案のように54になります
ダンコドゥルビッチ

@TessellatingHeckler PowerShellは、柔軟性がなければ何もありません。
AdmBorkBork

13

JavaScript、62バイト

for(i=0;++i<101;console.log(i%5?f||i:f+'Buzz'))f=i%3?'':'Fizz'

私はこれが現在最短のJavascriptソリューションだと思います。


わあ、わあ!しかし、他のすべてのJS回答はを使用しconsole.logます。100個のポップアップボックスを連続して「OK」を押すよりもずっと面倒です。これを変更してもらえますか?それはたった62バイトですが、それでも私の3バイトよりも良いです。
ETHproductions

私はすでに自分の投稿の5を編集しているし、もう編集することはできませんように私は...、明日そうする必要があります
ママ楽しいロール

2
ああ、編集に制限があることに気づかなかった
...-ETHproductions

12

C、74バイト

main(i){for(;i<101;puts(i++%5?"":"Buzz"))printf(i%3?i%5?"%d":0:"Fizz",i);}

への0引数printf代わりに""魚ですが、私はそれを試してくださいほとんどのプラットフォーム上で動作するようです。putsただし、同じことをしようとするとセグメンテーション違反が発生します。これがないと、75バイトになります。

アナーキーゴルフで機能する73バイトのソリューションがあり、インターネット上の適切な場所を掘り下げていることがわかりましたが、プラットフォーム固有の動作に依存しています。(ご想像のとおり、これは何らかの形式puts("Buzz"±...)です。)


引数なしの場合(argc = 1)にi = 1を取得するための素敵なトリック。それは機能です:あなたが実行して、任意のポイントからシーケンスを開始することができます./fizzbuzz $(seq 40):P
ピーター・コルド

12

スクラッチ、203 185バイト

このメタ投稿ごとに、ゴルフのテキスト表現からカウントされたバイト数。スクラッチはスペース効率がよくありません。

sayScratchの標準出力に最も近いのは、スプライトが言っていることを含む吹き出しを表示することです。実際には、wait n secsブロックは、実際にこの出力を読み取るために必要とされるであろうが、この挑戦のために、このコードは、要件を満たしています。


y =(両方の場合)の後に数字がありません
ベータ崩壊

@BetaDecayごめんなさい?従わない
-timothymh

繰り返しループ内で、set y to ...値が欠落しています
ベータ崩壊

1
@BetaDecayそれは空の文字列です。:)画像をクリックすると、実際に画像を見ることができます!
timothymh

あなたを疑って申し訳ありません;)
ベータ崩壊

12

R、88 83 77 71 70バイト

これは改善できると確信しています...そして、@ flodelのおかげです。@njnnjaからの提案と@ J.Doeからの提案のおかげで、さらに数バイト節約されました

x=y=1:100;y[3*x]='Fizz';y[5*x]='Buzz';y[15*x]='FizzBuzz';write(y[x],1)

猫の答え。マウスは上にあります:)
シルビウブルセア

1
私は少し良くなった:x=1:100;i=!x%%3;j=!x%%5;x[i]="Fizz";x[j]="Buzz";x[i&j]="FizzBuzz";cat(x,sep="\n")
flodel

@njnnja提案をありがとう。それwriteよりcatもむしろ
-MickyT

2
ここでネクロマンシー!write呼び出しは、代わりに空の文字列の1を取ることができますので、x=y=1:100;y[3*x]='Fizz';y[5*x]='Buzz';y[15*x]='FizzBuzz';write(y[x],1)70バイトのための些細な1つのバイトのゴルフです。
J.Doe

68バイト。バイトカウントには3つの印刷できないバックスペースが含まれており、TIOでは正しく機能しません。
-J.Doe

12

Haskell、84バイト

main=mapM f[1..100]
f n|d<-drop.(*4).mod n=putStrLn$max(show n)$d 3"Fizz"++d 5"Buzz"

henkmaの81バイトに近づいていますが、まだ完全ではありません。

d = drop.(*4).mod nここで重要なのは:d 3 "Fizz"ですdrop (n`mod`3 * 4) "Fizz"。これは"Fizz"when n `mod` 3が0であり、""それ以外の場合です。


82にゴルフを再配置すると、私は思う:(%)=drop.(*4).mod n;main=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100]]
CRドロス

待ってからn、スコープ内にありません。ふむ
CR Drost

うん、それは動作しませんが、私はそれのようにたくさん見える代替85バイトのソリューションヒットしました:main=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100],(%)<-[drop.(*4).mod n]]
リン

なぜ改行を使用しないのですか?セミコロンと同じくらい短いですが、判読しにくいです。
dfeuer

1
コードゴルフのウェブサイトで読みやすいコードを探すことを再検討することをお勧めします:)
リン

11

PHP、54バイト

<?for(;$i++<100;)echo[Fizz][$i%3].[Buzz][$i%5]?:$i,~õ;

v5.5以降で有効。õ文字245、反転ビットであります\n

iniがないため、デフォルトのインタープリター設定を想定しています。あなたがわからない場合、あなたがあなたの地元のiniを無効にすること-nのようにphp -n fizzbuzz.php

絶対にすべての構成ファイルでエラーなしで実行されるバージョンは62バイトです。

<?php
for(;$i++<100;)echo@([Fizz][$i%3].[Buzz][$i%5]?:$i),"
";

STFU演算子@は、コードにエラーがないことを必ずしも意味しません。
シチルジュ


@Kzqai ideone.com/0zRA9e short_open_tagはオフ、E_NOTICEオンです。どちらもデフォルト設定ではありません。
プリモ

3v4l.orgで大量のエラーが発生しています
コーダー

@acoderに関連するメタ投稿。3v4l.orgは便利そうです。
プリモ

11

80386マシンコード+ DOS、75バイト

コードのHexdump:

0D 0A 24 B1 64 33 C0 BA-03 05 BB 00 01 40 50 FE
CE 75 0C 83 EB 04 66 C7-07 42 75 7A 7A B6 05 FE
CA 75 0C 83 EB 04 66 C7-07 46 69 7A 7A B2 03 84
FF 74 0C D4 0A 04 30 4B-88 07 C1 E8 08 75 F4 52
8B D3 B4 09 CD 21 5A 58-E2 C0 C3

ソースコード(TASM構文):

    .MODEL TINY

    .CODE
    .386
    org 100h

MAIN PROC
    db 13, 10, '$'
    mov cl, 100
    xor ax, ax
    mov dx, 503h

main_loop:
    mov bx, 100h
    inc ax
    push ax

    dec dh
    jnz short buzz_done
    sub bx, 4
    mov dword ptr [bx], 'zzuB'
    mov dh, 5
buzz_done:

    dec dl
    jnz short fizz_done
    sub bx, 4
    mov dword ptr [bx], 'zziF'
    mov dl, 3
fizz_done:

    test bh, bh
    jz short num_done

decimal_loop:
    aam;
    add al, '0'
    dec bx
    mov [bx], al
    shr ax, 8
    jnz decimal_loop

num_done:
    push dx
    mov dx, bx;
    mov ah, 9
    int 21h
    pop dx
    pop ax

    loop main_loop
    ret

MAIN ENDP
    END MAIN

このコードは1から100までカウントしax、出力メッセージを最後から最初まで構築します。メッセージの終わり(改行と$DOSがメッセージの終わりフラグに使用する文字)は、コードの最初に表示されます。

db 10, 10, '$'

無害な命令として実行されます(or ax, 240ah)。コードの終了後など、より一般的な場所に置くこともできますが、アドレス0x100に置くことには利点があります。

また、コードは2つの追加のカウンターを使用します。

  • 3から0にカウント dl
  • 5〜0でカウント dh

カウンターが0に達すると、ストリングをプッシュします FizzまたはBuzz出力メッセージの最後にます。これが発生bxすると、減少し、bhゼロになります。これは、数値を10進数形式で出力するための条件として使用されます。

注:ここでは32ビットデータを使用しています。これは、386より前のコンピューターでは機能しません。


TASMは実際にNASMとは逆の順序でマルチバイト文字定数を処理しますか?NASMでは、ディレクティブに一致する順序でメモリmov [mem], 'Fizz'に保存するように記述します。参照してください。例えば、私のovercomplicated「効率的」YASM FizzBu​​zzをFizzdb
ピーターコーデス

1
それを使用するために、任意のバイトを保存していstdた後、stosb/ stosd?あなたは交換する必要があるだろうtest bh,bhcmp di, 100hか何か。ALにカウンターを保存/復元する代わりに、BLに保持し、いつでも好きなときにclobber eaxすることができます。例えばsub bx, 4/ mov dword ptr [bx], 'zzuB'右、3 + 7バイトのですか? mov eax, 'zzuB' / stosd6 + 2バイト(両方のオペランドサイズのプレフィックス)です。解答に逆アセンブリが含まれていて、命令のサイズが見えるようになっていると便利です。
ピーターコーデス

1
これは素晴らしい答えです。データに対する良性の命令を悪用し、未使用のPSPメモリ空間を使用します。@PeterCordes私はあなたの提案を使ってプレイしましstosdたが、スコアの減少を自分で探し出すことはできませんでした。以来stosdデクリメントしDI、その後、あなたが失うことを得ることはありませんsub di, 4し、その後、あなたが持っているDI最後に4つのバイトをオフにします。私は-6 bytes別のいくつかのマイナーな調整を使用することができましたが、それを別の回答として投稿することになりました(すべてのコメントに収まらない可能性があるためです)。称賛!
640KB

11

dc、 64 62バイト

[[Fizz]P]sI[[Buzz]P]sU[dn]sNz[zdd3%d0=Ir5%d0=U*0<NAPz9B>L]dsLx

ゴルフをしていない:

[[Fizz]P]sI  # macro I: print "Fizz"
[[Buzz]P]sU  # macro U: print "Buzz"
[dn]sN       # macro N: print current stack depth

z            # increase stack depth

[            # Begin macro
  zdd           # Get current stack depth and ducplicate it twice
  3%d0=I        # Check modulo 3 and leave a duplicate. If it's 0, run macro I
  r             # Rotate top two elements, bringing up the stack depth again
  5%d0=U        # Check modulo 5 and leave a duplicate. It it's 0, run macro U
  *             # Multiply the duplicates of modulos of 3 and 5 ...
  0<N           # ... if it's not 0, run macro N
  AP            # Print a newline (`A` is 10)
                # The macro leaves the stack with one more element each time
  z9B>L      # Run macro L if stack depth is less than "ninety eleven" (101)
]         # End macro

dsLx  # store the macro in register L and execute it
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.