186
\$\begingroup\$

Introduction

In our recent effort to collect catalogues of shortest solutions for standard programming exercises, here is PPCG's first ever vanilla FizzBuzz challenge. If you wish to see other catalogue challenges, there is "Hello World!" and "Is this number a prime?".

Challenge

Write a program that prints the decimal numbers from 1 to 100 inclusive. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.

Output

The output will be a list of numbers (and Fizzes, Buzzes and FizzBuzzes) separated by a newline (either \n or \r\n). A trailing newline is acceptable, but a leading newline is not. Apart from your choice of newline, the output should look exactly like this:

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

The only exception to this rule is constant output of your language's interpreter that cannot be suppressed, such as a greeting, ANSI color codes or indentation.

Further Rules

  • This is not about finding the language with the shortest approach for playing FizzBuzz, this is about finding the shortest approach in every language. Therefore, no answer will be marked as accepted.

  • Submissions are scored in bytes in an appropriate preexisting encoding, usually (but not necessarily) UTF-8. Some languages, like Folders, are a bit tricky to score--if in doubt, please ask on Meta.

  • Nothing can be printed to STDERR.

  • Feel free to use a language (or language version) even if it's newer than this challenge. If anyone wants to abuse this by creating a language where the empty program generates FizzBuzz output, then congrats for paving the way for a very boring answer.

    Note that there must be an interpreter so the submission can be tested. It is allowed (and even encouraged) to write this interpreter yourself for a previously unimplemented language.

  • If your language of choice is a trivial variant of another (potentially more popular) language which already has an answer (think BASIC or SQL dialects, Unix shells or trivial Brainfuck derivatives like Alphuck and ???), consider adding a note to the existing answer that the same or a very similar solution is also the shortest in the other language.

  • Because the output is fixed, you may hardcode the output (but this may not be the shortest option).

  • You may use preexisting solutions, as long as you credit the original author of the program.

  • Standard loopholes are otherwise disallowed.

As a side note, please don't downvote boring (but valid) answers in languages where there is not much to golf; these are still useful to this question as it tries to compile a catalogue as complete as possible. However, do primarily upvote answers in languages where the authors actually had to put effort into golfing the code.

Catalogue

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>

\$\endgroup\$
12
  • 1
    \$\begingroup\$ Nothing can be printed to STDERR. Is this true only when running, or also when compiling (assuming that is a separate step?) \$\endgroup\$
    – AShelly
    Sep 24, 2015 at 20:47
  • 1
    \$\begingroup\$ @AShelly Only when running \$\endgroup\$
    – Beta Decay
    Sep 24, 2015 at 20:48
  • 1
    \$\begingroup\$ I’m not sure I like the fact that you hardcoded the 100 into the challenge. That way, a program that just generates the expected output is a valid entry, but is not interesting for this challenge. I think the challenge should expect the program to input the number of items to output. \$\endgroup\$
    – Timwi
    Sep 24, 2015 at 23:28
  • 9
    \$\begingroup\$ @Timwi While I agree that it would make it (only slightly) more interesting, I've very often seen FizzBuzz as strictly 1 to 100 (on Wikipedia and Rosetta Code, for example). If the goal is to have a "canonical" FB challenge, it makes sense. \$\endgroup\$
    – Geobits
    Sep 25, 2015 at 0:50
  • 72
    \$\begingroup\$ A "vanilla fizzbuzz" sounds delicious. \$\endgroup\$ Sep 25, 2015 at 15:12

395 Answers 395

1
10 11 12 13
14
0
\$\begingroup\$

V (vlang.io), 137 bytes

fn main(){for i in 1..101{if i%15==0{println('FizzBuzz')}else if i%3==0{println('Fizz')}else if i%5==0{println('Buzz')}else{println(i)}}}

Try it online!

Ungolfed code:

fn main () {
  mut i := 1
  for i < 101 {
    match true {
      i % 15 == 0 {
        println('FizzBuzz')
      } i % 3 == 0 {
        println('Fizz')
      } i % 5 == 0 {
        println('Buzz')
      } else {
        println(i)
      }
    }
    i++
  }
}
\$\endgroup\$
0
\$\begingroup\$

Fig, \$31\log_{256}(96)\approx\$ 25.517 bytes

jcnnna100 5'"Buzz"3'FOa9+"Fizz"

Try it online!

Hmm yes irrational bytes. "It'll be shorter" they said. "It's the future of golf".

8.5 bytes longer than legitimate vybuzz, 5.5 more than Jelly, 15.5 more than the optimal vybuzz/Fact fizzbuzz.

Explained

jcnnna100 5'"Buzz"3'FOa9+"Fizz"
    na100 5'"Buzz"               # Every 5th item of the range [1, 100] replaced with "Buzz"
   n              3'             # To every 3rd item of that:
                        +"Fizz"  #   Prepend the word "Fizz"
                    FOa9         #   And remove all digits from it. This should just be FcD (because cD is allegedly all digits), but turns out that cD is [A-z0-9], which is allegedly what cN is supposed to be, but cN errors out. Thanks Seggan very cool.
jcn                              # Join all that on newlines
\$\endgroup\$
7
  • \$\begingroup\$ Not amused. After fixing about 8 bugs I got the n solution one char shorter smh \$\endgroup\$
    – Seggan
    Sep 8 at 2:29
  • \$\begingroup\$ this prints BuzzFizz \$\endgroup\$
    – Steffan
    Sep 8 at 3:30
  • \$\begingroup\$ @Seggan well the jokes on you because I got it 3 characters shorter \$\endgroup\$
    – lyxal
    Sep 8 at 3:53
  • \$\begingroup\$ Golfing in somebody else's language as a means of bragging about your own language is in very poor taste, IMO. \$\endgroup\$
    – DLosc
    Sep 8 at 4:15
  • \$\begingroup\$ @DLosc maybe, but in this case, it's more along the lines of friendly banter \$\endgroup\$
    – lyxal
    Sep 8 at 4:17
0
\$\begingroup\$

Convex, 35 bytes

A²´{__3%!"Fizz"*\5%!"Buzz"*+\e|}%N*

Try it online!

Why must older golfing languages not having automatically vectorising operations?

Explained

A²´{__3%!"Fizz"*\5%!"Buzz"*+\e|}%N*
A²´{                           }%   e# to the range [1, 100]:
    __                              e#   Triplicate the item
      3%!"Fizz"*                    e#   Repeat the string "Fizz" (!item % 3) times
                \5%!"Buzz"*         e#   Repeat the string "Buzz" (!item % 5) times
                           +\e|     e#   Add the two strings together and logical or with the item
                                 N* e# Join that on newlines
\$\endgroup\$
0
\$\begingroup\$

Whitespace(v0.3 on ideone.com), 210 bytes

code visualized with replacing space,tab,newline to 's','t','n':

sssnnsssnssstntssssnsssststtstsstnsstttnnstnssstttstttststnssttstnnstntssnntstnsnstnstnsstnssststsnsnssnstnsstssntsstnttsnnnnnssnstssttnsnttsttnttssnsnssssttsssstntstttnsstnsssssttttstsnsnstnsstnsssssnnssssnntn

Show result on ideone

Notice: This code works fine on ideone.com, though, has a wrong result on tio.com because of a difference in behavior of "putc" with a large number ( > 255 ).
Show wrong result on tio.com

Without the rule "Nothing can be printed to STDERR", this code can be shortened to 207 bytes with omitting an "end"(nnn) instruction.

Here is the disassembled code ( created with my original tool ).

push +0(0b)   # 0000: ss-s-n
mark +0(0b)   # 0004: nss-s-n
push +1(1b)   # 0009: ss-st-n
add           # 0014: tsss
dup           # 0018: sns
push +361(9b)  # 0021: ss-ststtstsst-n
push -3(2b)   # 0034: ss-ttt-n
call null     # 0040: nst--n
push +1909(11b)  # 0044: ss-stttstttstst-n
push -5(3b)   # 0059: ss-ttst-n
call null     # 0066: nst--n
mul           # 0070: tssn
jzero -0(0b)  # 0074: nts-t-n
dup           # 0079: sns
puti          # 0082: tnst
mark -0(0b)   # 0086: nss-t-n
push +10(4b)  # 0091: ss-ststs-n
dup           # 0099: sns
dup           # 0102: sns
putc          # 0105: tnss
mul           # 0109: tssn
sub           # 0113: tsst
jneg +0(0b)   # 0117: ntt-s-n
end           # 0122: nnn
mark null     # 0125: nss--n
copy +3(2b)   # 0129: sts-stt-n
swap          # 0136: snt
mod           # 0139: tstt
jneg +0(1b)   # 0143: ntt-ss-n
dup           # 0149: sns
push +97(7b)  # 0152: ss-sttsssst-n
mod           # 0163: tstt
putc          # 0167: tnss
putc          # 0171: tnss
push +122(7b)  # 0175: ss-sttttsts-n
dup           # 0186: sns
putc          # 0189: tnss
putc          # 0193: tnss
push +0(0b)   # 0197: ss-s-n
mark +0(1b)   # 0201: nss-ss-n
ret           # 0207: ntn
\$\endgroup\$
-1
\$\begingroup\$

Fortran (GFortran), 187 bytes

DO I=1,100
IF(MOD(I,3)==0.AND.MOD(I,5)==0)THEN;PRINT'(A)','FizzBuzz'
ELSEIF(MOD(I,3)==0)THEN;PRINT'(A)','Fizz'
ELSEIF(MOD(I,5)==0)THEN;PRINT'(A)','Buzz'
ELSE;PRINT'(I0)',I
ENDIF;ENDDO;END

Try it online!

\$\endgroup\$
1
1
10 11 12 13
14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.