# 1, 2, Fizz, 4, Buzz

## 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>

• Nothing can be printed to STDERR. Is this true only when running, or also when compiling (assuming that is a separate step?) Sep 24, 2015 at 20:47
• @AShelly Only when running Sep 24, 2015 at 20:48
• 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. Sep 24, 2015 at 23:28
• @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. Sep 25, 2015 at 0:50
• A "vanilla fizzbuzz" sounds delicious. Sep 25, 2015 at 15:12

# Vyxal, Hj, 2519 12 bytes

-6 bytes thanks to Aaron
-7 bytes thanks to lyxal

Flagless 15 bytes
Longer than lyxal's answer, but uses a different technique

ƛ₃kf*n₅kb*+∴               stack is preset to a 100 because of the H flag

ƛ                          lambda map with variable n
₃                         push 1 if n%3 == 0 (we'll call the return a)
kf                       push constant Fizz to the stack
*                      push a*kF
n                     push n
₅                    push 1 if n%5 == 0 (we'll call it b)
kb                  push Buzz to the stack
*                 push b*kB
+                add last two elements of the stack ""/Fizz/Buzz
∴               push the maximum of n and ""/Fizz/Buzz/FizzBuzz

Vyxal prints out the last element of the stack by default (the j flag joins the list with new lines)


Try it Online!

• You can use the register instead of variables, and the H flag, for 19 bytes Jun 27, 2021 at 17:30
• Try it Online! for 16 bytes using the register, H flag and string multiplication instead of if statements Jun 27, 2021 at 23:01
• Try it Online! for 12 Jun 28, 2021 at 1:34
• @lyxal and Aaron Thanks! Jun 28, 2021 at 14:35
• @lyxal would you please check the explanation? I didn't get the last part so i guessed Jun 28, 2021 at 15:34

# Perl 6, 109 93 bytes

for$i(1..100){if($i%3<1){say"Fizz"};if($i%5<1){say"Buzz"};if($i%3>0&&$i%5>0){say$i};say"\n";}


There might be some more golfing potential here.
Takes advantage the fact that 0 is the only way x % y can be less than 1 (thanks to Alex. A for shaving off 4 bytes with this) and Perl 6's say keyword.

• I didn't spot this somehow... Sorry, If you'd like to adopt some of the ideas in my answer you can save more bytes! say is available in Perl 5 too for free (meta.codegolf.stackexchange.com/q/273#answer-274) and it includes a newline (which would further shorten mine by 5 bytes). Happy to remove mine (since it's newer than yours). Sep 24, 2015 at 20:26

# PowerShell, 59 58 bytes

Original used array selection, but was one byte longer than a minor variation of TimmyD's answer

old: 1..100|%{@($_,"Fizz","Buzz","FizzBuzz")[!($_%3)+2*!($_%5)]} new: 1..100|%{"Fizz"*!($_%3)+"Buzz"*!($_%5)+"$_"*!!($_%3*$_%5)}


The only real trick involving use of double negation to make anything non-zero a 1 while leaving a zero a zero.

I would have left this as a comment on TimmyD's answer, but I lack the reputation.

EDIT: GAH! I see, now, that the original array implementation was naive insofar as my not having read through the other solutions and realizing that it was already in use ... multiple times over. I leave it here, but shamefacedly admit my ignorance.

• Welcome to PPCG! Nice to see another PowerShell user around. Neat trick with the array-indexing, and further proof that PowerShell is nothing if not flexible. Note that, in this particular instance, you don't need to prepend the @ symbol, since PowerShell treats any comma-separated list as an array, saving a byte on that guy and making the two the same length. See an update on my answer as well, incorporating other suggestions. Sep 25, 2015 at 13:08

# SWI-Prolog, 109 bytes

forall(between(1,100,I),((I mod 3<1,print('Fizz');1=1),(I mod 5<1,print('Buzz');I mod 3>0,print(I);1=1),nl)).

• How is this supposed to be run? I would suggest +X:-print(X)., but it appears this is run from the REPL. Néanmoins, I mod 3>0,print(I);1=1 can become I mod 3<1;print(I). Also anagol has 87 bytes (in anagol, the m/0 predicate is run) for FizzBuzz golf.shinh.org/p.rb?FizzBuzz#Prolog Dec 14, 2019 at 10:51

# awk, 62

END{for(x="Fizz";i<100;y="Buzz")print++i%15?i%5?i%3?i:x:y:x y}


Pretty sure there's no surprises here.

### Call

awk 'END{for(x="Fizz";i<100;y="Buzz")print++i%15?i%5?i%3?i:x:y:x y}'


then press Ctrl-D to signal end of input.

• I'm curious if the Ctrl-D should be included in the byte-count. Using a BEGIN block and rearranging the operators a bit adds 1 byte, i.e. BEGIN{for(x="Fizz";i<100;y="Buzz")print++i%3?i%5?i:y:i%5?x:x y} May 30, 2017 at 16:19

# Beam, 307 288 bytes

And now for the longest solution. I think I could compress this a bit more, but the brain is getting a little fried. I'm pretty happy I got it working though. Rearranged it slightly to gain a few.

+P'++P'++P'''''''>++ \/+)@'''''>+++++++)@' \
vP'''----(+++++++++/+/P+++'L@@++(+++++<''/
>'p-n'''''''>++++++++/
^    >'P'p-n'         >'p-n'''''''''''>++++++)@'''''''>++ \
^       <    >p:L''p-       >''Pv
^      HuP-p'''L@++++++++++LP+p  <P+++++''L@@+++++@++(+++++/


var ITERS_PER_SEC = 100000;
var TIMEOUT_SECS = 50;
var ERROR_INTERRUPT = "Interrupted by user";
var ERROR_TIMEOUT = "Maximum iterations exceeded";
var ERROR_LOSTINSPACE = "Beam is lost in space";

var code, store, beam, ip_x, ip_y, dir, input_ptr, mem;
var input, timeout, width, iterations, running;

function clear_output() {
document.getElementById("output").value = "";
document.getElementById("stderr").innerHTML = "";
}

function stop() {
running = false;
document.getElementById("run").disabled = false;
document.getElementById("stop").disabled = true;
document.getElementById("clear").disabled = false;
document.getElementById("timeout").disabled = false;
}

function interrupt() {
error(ERROR_INTERRUPT);
}

function error(msg) {
document.getElementById("stderr").innerHTML = msg;
stop();
}

function run() {
clear_output();
document.getElementById("run").disabled = true;
document.getElementById("stop").disabled = false;
document.getElementById("clear").disabled = true;
document.getElementById("input").disabled = false;
document.getElementById("timeout").disabled = false;

code = document.getElementById("code").value;
input = document.getElementById("input").value;
timeout = document.getElementById("timeout").checked;

code = code.split("\n");
width = 0;
for (var i = 0; i < code.length; ++i){
if (code[i].length > width){
width = code[i].length;
}
}
console.log(code);
console.log(width);

running = true;
dir = 0;
ip_x = 0;
ip_y = 0;
input_ptr = 0;
beam = 0;
store = 0;
mem = [];

input = input.split("").map(function (s) {
return s.charCodeAt(0);
});

iterations = 0;

beam_iter();
}

function beam_iter() {
while (running) {
var inst;
try {
inst = code[ip_y][ip_x];
}
catch(err) {
inst = "";
}
switch (inst) {
case ">":
dir = 0;
break;
case "<":
dir = 1;
break;
case "^":
dir = 2;
break;
case "v":
dir = 3;
break;
case "+":
++beam;
break;
case "-":
--beam;
break;
case "@":
document.getElementById("output").value += String.fromCharCode(beam);
break;
case ":":
document.getElementById("output").value += beam;
break;
case "/":
dir ^= 2;
break;
case "\\":
dir ^= 3;
break;
case "!":
if (beam != 0) {
dir ^= 1;
}
break;
case "?":
if (beam == 0) {
dir ^= 1;
}
break;
case "|":
switch (dir) {
case 2:
dir = 3;
break;
case 3:
dir = 2;
break;
}
break;
case "_":
switch (dir) {
case 0:
dir = 1;
break;
case 1:
dir = 0;
break;
}
break;
case "H":
stop();
break;
case "S":
store = beam;
break;
case "L":
beam = store;
break;
case "s":
mem[beam] = store;
break;
case "g":
store = mem[beam];
break;
case "P":
mem[store] = beam;
break;
case "p":
beam = mem[store];
break;
case "u":
if (beam != store) {
dir = 2;
}
break;
case "n":
if (beam != store) {
dir = 3;
}
break;
case "":
--store;
break;
case "'":
++store;
break;
case ")":
if (store != 0) {
dir = 1;
}
break;
case "(":
if (store != 0) {
dir = 0;
}
break;
case "r":
if (input_ptr >= input.length) {
beam = 0;
} else {
beam = input[input_ptr];
++input_ptr;
}
break;
}
// Move instruction pointer
switch (dir) {
case 0:
ip_x++;
break;
case 1:
ip_x--;
break;
case 2:
ip_y--;
break;
case 3:
ip_y++;
break;
}
if (running && (ip_x < 0 || ip_y < 0 || ip_x >= width || ip_y >= code.length)) {
error(ERROR_LOSTINSPACE);
}
++iterations;
if (iterations > ITERS_PER_SEC * TIMEOUT_SECS) {
error(ERROR_TIMEOUT);
}
}
}
<div style="font-size:12px;font-family:Verdana, Geneva, sans-serif;">Code:
<br>
<textarea id="code" rows="6" style="overflow:scroll;overflow-x:hidden;width:90%;">+P'++P'++P'''''''>++ \/+)@'''''>+++++++)@' \
vP'''----(+++++++++/+/P+++'L@@++(+++++<''/
>'p-n'''''''>++++++++/
^    >'P'p-n'         >'p-n'''''''''''>++++++)@'''''''>++ \
^       <    >p:L''p-       >''Pv
^      HuP-p'''L@++++++++++LP+p  <P+++++''L@@+++++@++(+++++/
</textarea>
<br>
<input id="run" type="button" value="Run" onclick="run()">
<input id="stop" type="button" value="Stop" onclick="interrupt()" disabled="disabled">
<input id="clear" type="button" value="Clear" onclick="clear_output()">&nbsp; <span id="stderr" style="color:red"></span>
</p>Output:
<br>
<textarea id="output" rows="6" style="overflow:scroll;width:90%;"></textarea>
<br>Input:
<br>
<textarea id="input" rows="1" style="overflow:scroll;overflow-x:hidden;width:90%;"></textarea>
<p>Timeout:
<input id="timeout" type="checkbox" checked="checked">&nbsp;
<br>    </div>

Explanation

+P'++P'++P'''''''>++ \
vP'''----(+++++++++/


Initializes the program, presetting values in memory
Memory 0, value 1, count incrementer
Memory 1, value 3, div 3 decrementer
Memory 2, value 5, div 5 decrementer
Memory 3, value 99, loop decrementer

>'p-n
>'P'p-n
>p:L''p-


Gets value from Memory 1, decrements it, sets Store to 0. If value <> 0 change direction down, otherwise pass though.
Do the same with Memory 2. Finally if it gets down there, print out the current counter from memory 0.

                       /+)@'''''>+++++++)@' \
+/P+++'L@@++(+++++<''/
'''''''>++++++++/


Prints Fizz and resets memory slot 1 to 3.

                    >'p-n'''''''''''>++++++)@'''''''>++ \

P+++++''L@@+++++@++(+++++/


Another div 5 checker to catch FizzBuzzs. Prints out Buzz and resets memory slot 2 to 5.

                              >''Pv
HuP-p'''L@++++++++++LP+p  <


Increments the counter, prints a newline, decrements the loop counter and exits if required.

## Lua, 88 86 bytes

Saved 2 bytes thanks to @Mauris

I'm sure this can be golfed more, any suggestions are welcome.

for i=1,100 do n=(i%3<1 and"Fizz"or"")..(i%5<1 and"Buzz"or"")print(n~=""and n or i)end

• Try i%3<1 and i%5<1?
– Lynn
Sep 26, 2015 at 22:25
• 82 bytes: for i=1,100 do s=('Fizz'):sub(i%3*5)..('Buzz'):sub(i%5*5)print(s==''and i or s)end
– Lynn
Sep 27, 2015 at 21:56
• I posted a 72-byte solution that ties the record on anarchy golf.
– Lynn
Sep 27, 2015 at 22:19

# Python 3, 59 bytes

for i in range(100):print(i%3//2*"fizz"+i%5//4*"buzz"or-~i)

• looks like this has the wrong capitalization May 8, 2020 at 6:57

# C (83 characters)

Because misusing a (POSIX conformant) printf is not that bad, after all:

i;main(){while(++i<101)printf(i%3?i%5?"%2$d\n":"%s\n":"Fizz%s\n",i%5?"":"Buzz",i);}  # Perl 6, 46 bytes say "Fizz"x$_%%3~"Buzz"x $_%%5||$_ for 1..100

• You can remove the spaces after x
– Jo King
Jan 6, 2019 at 3:27

# Python 2 REPL, 54

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


Based on this answer by feersum. Essentially the same technique, only using Python's underscore variable to save 2 chars at the start.

## Seriously, 36 bytes

2╤R;;3@%Y"Fizz"*)5@%Y"Buzz"*(+;IMi


Explanation:

2╤   push the value 10**2 (100)
R       pop a: push range(1,a+1)
       start function literal
;;      duplicate the top of the stack twice
3       push the value 3
@       swap the top 2 values
%       pop a,b: push a%b
Y       pop a: push 1 if a==0, else 0
"Fizz"  push the string "Fizz"
*       pop a,b: push a*b (in this case, "Fizz" repeated b times)
)       rotate the stack right by one ([a,b,c] -> [c,a,b])
5@%Y"Buzz"*   Do the same thing as above, but with divisibility testing for 5 and using "Buzz"
(       rotate the stack left by one
+       pop a,b: push a+b (string concatenation here)
;       dupe top of stack
I       pop a,b,c: push b if a is truthy, else c (here, a and b are the same string, either "", "Fizz", "Buzz", or "FizzBuzz", and c is the original integer)
end function literal
M       pop f,[a]: using each element of [a] as a temporary stack, evaluate f, and push the result
i       flatten [a] (push each value in [a] to the stack, starting from the end to preserve order)

• Methinks you need a logical NOT in Seriously. Nov 10, 2015 at 23:11
• @ThomasKwa Maybe. I was wishing it had one while I was writing this. Seriously has ~, which is unary bitwise negation, which is not quite the same thing. I might add one.
– user45941
Nov 10, 2015 at 23:13

# Javascript, 64 bytes

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

• I'm not sure, but I think we allow alert for js output which would save you a few bytes. Nice answer btw. May 6, 2016 at 1:43
• We do allow alert. May 6, 2016 at 1:48
• All of the other JS answers on this particular challenge use console.log, except for one that outputs the entire text at once. Nov 26, 2016 at 15:09

00000000  31 c0 40 50 89 c2 89 e5  68 0a 24 d4 05 75 06 68  |1.@P....h.$..u.h| 00000010 7a 7a 68 42 75 89 d0 d4 03 75 06 68 7a 7a 68 46 |zzhBu....u.hzzhF| 00000020 69 89 d0 83 fc fa 75 08 d4 0a 86 c4 0d 30 30 50 |i.....u......00P| 00000030 b4 09 89 e2 cd 21 89 ec 58 3c 64 75 c5 c3 |.....!..X<du..| 0000003e  How it works:  | org 0x100 | use16 31 c0 | xor ax, ax 40 | aa: inc ax 50 | push ax 89 c2 | mov dx, ax 89 e5 | mov bp, sp 68 0a 24 | push 0x240a d4 05 | aam 5 75 06 | jnz @f 68 7a 7a | push 0x7a7a 68 42 75 | push 0x7542 89 d0 | @@: mov ax, dx d4 03 | aam 3 75 06 | jnz @f 68 7a 7a | push 0x7a7a 68 46 69 | push 0x6946 89 d0 | @@: mov ax, dx 83 fc fa | cmp sp, -6 75 08 | jne @f d4 0a | aam 10 86 c4 | xchg al, ah 0d 30 30 | or ax, 0x3030 50 | push ax b4 09 | @@: mov ah, 0x09 89 e2 | mov dx, sp cd 21 | int 0x21 89 ec | mov sp, bp 58 | pop ax 3c 64 | cmp al, 100 75 c5 | jne aa c3 | ret  • This is very nice and very clean work! Using the stack is quite elegant! Technically PUSH immediate was not available on the 8086, so this is really 80186+ machine code. Also, not sure if it's allowed or not, but this does show leading 0's on single digit numbers (01 02 Fizz 03, etc). Aug 28, 2019 at 1:04 # TeX, 304 bytes \documentclass[9pt,a4paper]{article}\pagestyle{empty}\begin{document}\count0=0\count1=0\count3=3\count5=5\loop\advance\count1 by1\count0=0 \ifnum\count1=\count3 Fizz\advance\count3 by3\count0=1\fi\ifnum\count1=\count5 Buzz\advance\count5 by5\count0=1\fi\the\count1 \ifnum\count1<100\repeat\end{document}  Somehow count0 is necessary but I didn't check whether it is zero. It works and I have no idea why. • I'm assuming that extra newline is there for a reason, but what's the reason? Aug 20, 2017 at 0:06 • @StepHen two newlines is a new paragraph Aug 20, 2017 at 0:06 # Symbolic Python, 324 bytes I think I fried my brain making this... _____=_;_=-~(_==_);___=_**(_*_+_);____=___+___/_+_+_ ___=(('%'+'¬'[-_])*_)%(___+_,___*_-_*_-_) ___=_>_[_>_]+__[_*_+_]+___[~-_]*_,___[-_]+__[_]+___[~-_]*_ _=_>_ __('____=""'+(';_=-~_;____+=((_%-~-~(_==_)<(_==_))*___[_>_]+(_%-~-~-~-~(_==_)<(_==_))*___[_==_]'+_____[_==_]+_==_[_==_]+'_)+'+""" """)*____) _=____  Try it online! # Befunge-93, 61 bytes 1+::::3%|>.#_:"c"#@_55+, ,,:,,0\v>"ziF" ,:,,$01>>5%#v_"zuB",


Try it online!

Decided to come back to this and make it conform to specification while shaving some bytes off. Look, no extra spaces!

# sed, 275272270260254249 245 bytes

s/.*/t0u123456789/
:1
s/(tu?(.).*)/\1\n\2/
s/u(.)(t?)(.*)/\1\2u\3\1/
/9u/{s/t(.)/\1t/;s/u//;s/^/u/}
/99/!b1
o"Buzz"/$0oo Also push a 0 to the stack .......... Multiply the top two values of the stack. ..oan?*... If the counter was divisible by 5 or 3 print the number .......... Print a newline and loop around again  As time goes, the stack fills up, with an extra copy of the counter for each Fizz or Buzz (and two for FizzBuzzes). This is due to the extra copy(s) of the counter that don't end up being printed. # Spaghetti, 522 bytes main:0"n"goto store goto l l:100"n"goto retrieve goto areEqual"EOF"goto jumpIfTrue"n"goto retrieve 1 2 goto add"n"goto store 15"n"goto retrieve 2 goto modulus 0 goto areEqual"f"goto jumpIfTrue 3"n"goto retrieve 2 goto modulus 0 goto areNotEqual"b"goto jumpIfTrue"Fizz"1 goto print goto b t:3"n"goto retrieve 2 goto modulus 0 goto areEqual"l"goto jumpIfTrue"n"goto retrieve 1 goto print goto l b:5"n"goto retrieve 2 goto modulus 0 goto areNotEqual"t"goto jumpIfTrue"Buzz"1 goto print goto l f:"FizzBuzz"1 goto print goto l  Requires a newline at the end, cause otherwise the interpreter throws a hissy fit. Spaghetti is a stack based language that promotes using goto extensively. That means, every single operation you use requires a goto statement along with it. That being said, this took a while. Commented version is at the Spaghetti examples. Try it on the online interpreter! (Code must be pasted in) # LolCode, 392383 353 bytes This LolCode follows the 1.3 standard used by the lci interpreter. Unfortunately, no online interpreter. Not the best language to golf with, but it's fun! Update 1: changed for loop to while loop Update 2: removed newlines in favor of commas (soft command break) HAI 1.3,CAN HAS STDIO?,I HAS A v ITZ 1,IM IN YR s,BOTH SAEM 0 AN MOD OF v AN 15,O RLY?,YA RLY,VISIBLE "FizzBuzz",NO WAI,BOTH SAEM 0 AN MOD OF v AN 3,O RLY?,YA RLY,VISIBLE "Fizz",NO WAI,BOTH SAEM 0 AN MOD OF v AN 5,O RLY?,YA RLY,VISIBLE "Buzz",NO WAI,VISIBLE v,OIC,OIC,OIC,BOTH SAEM v AN 100,O RLY?,YA RLY,GTFO,OIC,v R SUM OF v AN 1,IM OUTTA YR s,KTHXBYE  • Nice first post, welcome to the site! Nov 3, 2020 at 15:32 # Kakoune, 57 bytes !seq 100 %s[05]$
Ab<esc>%s(\w+\n){3}
<a-h>s\d+
cFizz<esc>%s\d*b
cBuzz


Explanation:

!seq 100               Call the external sh command seq 100, insert the output (numbers 1-100)
d                      ! inserts a trailing newline, delete it
%s[05]$Select all lines ending with 0 or 5, which is equivalent to being divisible by 5 Ab<esc> Append a b to these lines, signifying that they should be buzzed later on %s(\d+b?\n){3} Select every third line <a-h>s\d+ Select every third number (unselecting the b's) cFizz<esc> Replace with Fizz %s\d*b Select (including 0) digits followed by a b cBuzz Replace with Buzz  • Welcome back to CGCC! Nov 11, 2020 at 13:21 # GNU AWK, 1 input byte + 60 bytes = 61 bytes An approach different from Cabbie407's, that golfed 2 bytes off thanks to the more flexible parsing of the GNU's implementation. Still needs one EOF input. END{for(;++n<101;print i?i:n)i=(n%3?e:"Fizz")(n%5?e:"Buzz")}  Try it online! END # starts after commanding the EOF (Ctrl+D). { for(; ++n<101; # the _n_ variable is started here on the conditional, at the value 1. print i?i:n # in the end of each loop, prints _i_ if non-null, or _n_. ) i=(n%3?e:"Fizz")(n%5?e:"Buzz") # two ternary conditionals that concatenates Fizz and Buzz accordingly. # by the way, _e_ is a not assigned variable, which will return a null string (""). # if n != 0 (mod 15), then _i_ will return null at the print statement above. }  For no input, use the BEGIN pattern instead (62 bytes total): BEGIN{for(;++n<101;print i?i:n)i=(n%3?e:"Fizz")(n%5?e:"Buzz")}  # Java, 1009895 94 Bytes (only loop, full code is 136 bytes, see bottom) for(int i=0;i++<100;){var s=i%3<1?"Fizz":"";s=i%5<1?s+"Buzz":s;System.out.println(s==""?i:s);}  Try it here. Probably could be a lot smaller. I just started to learn java a few days ago (although I do have experience in other languages), this is the best I can do. Breakdown of how it works. Sorry if I get some terms wrong or explain stuff poorly: for(int i=0;i++<100;)  Just the loop - starts at 1 goes to 100: {var s=i%3<1?"Fizz":"";  Making a variable called "s", equal to a value, if "i" is divisible by 3 with a remainder of less than 1 (1 character/byte smaller than checking ==0), set "s" equal to "buzz". If it isn't, set it equal to "". s=i%5<1?s+"Buzz":s;  Set s equal to a value: if i is divisible by 5 with a remainder of less than 1, set s equal to s + "buzz", if it isn't, set it equal to itself. System.out.println(s==""?i:s);}  System.out.println is just a simple print statement. Inside it, check if s is equal to "" (if s wasn't divisible by 3 or 5, it would be "") print i (the number), otherwise print s. Feedback is greatly appreciated. Edit: 94 bytes for just the loop, below is what I think the full script would be, 136 bytes : ( interface f{static void main(String[]a){for(int i=0;i++<100;){var s=i%3<1?"Fizz":"";s=i%5<1?s+"Buzz":s;System.out.println(s==""?i:s);}}}  • Welcome to Code Golf, nice first answer! You may want to check out Tips for golfing in Java. Jan 30, 2021 at 21:19 # Excel VBA, 81 Bytes Anonymous VBE immediate window function that takes no input and outputs to the VBE immediate window. For i=1To 100:o=IIf(i Mod 3,"","Fizz")+IIf(i Mod 5,"","Buzz"):?IIf(o="",i,o):Next  Ungolfed For i=1To 100 '' iterate from 1 to 100 o=IIf(i Mod 3,"","Fizz") '' set the out var to Fizz if i Mod 3 = 0, else empty +IIf(i Mod 5,"","Buzz") '' append Buzz to out var if i Mod 5 = 0 ?IIf(o="",i,o) '' If out var is non-empty, output the out var '' else output i Next  ## Worksheet Version, 95 Bytes Anonymous VBE immediate window function that takes no input and outputs to the range [A1:A100]  [A1]="=Let(r,Row(1:100),s,If(Mod(r,3),"""",""FIZZ"")&If(Mod(r,5),"""",""BUZZ""),If(s="""",r,s))  • You can remove o="": and change your first iif to IIf(i Mod 3,"","Fizz") Sep 7, 2018 at 20:53 • For the Subroutine version, the () after F isn't optional, and gets added in automatically. Same with the ? in debug. Feb 26, 2019 at 18:14 • @Selkie, the behavior you are describing is known as autoformatting, and it is generally accepted in this community for VBA and for all languages that exhibit autoformatting, one may post their code from before it is autoformatted. in this case, that would mean that a couple of spaces may be removed, terminal "s dropped, changing print to ? and removal of the () from the Sub declaration. I suggest that you take a look at the Tips for Golfing in VBA page for more info Feb 26, 2019 at 21:30 # Perl 5 (ppencode-compatible), 1232 690 bytes Today I learned that and has higher precidence than or or xor; I suffered from making a proper control flow eval q y eval q x ord or return cos while chop and chop and chop x and print chr ord uc qw q for q and print chr ord q tie gt and print chr length q else x oct oct ord q eq le and print chr length q else x oct oct ord q eq le and return cos for uc y xor eval q y print uc chr ord q dbmopen and and print chr ord q dump and and print chr length q else x oct oct ord q eq le and print chr length q else x oct oct ord q eq le and return cos if length q q s s q eq chr ord reverse length or not chr ord reverse length y or eval q x print length unless length q q s s q eq chr ord reverse length or not chr ord reverse length x xor print chr hex qw q and q while s qq q and length ne ord qw q eq  Try it online! ## How it works # fizz part eval q y # if(length%3==0) eval q x # instead of length or return 1 ord or return cos while # instead of s/...// chop and chop and chop x and # print 'Fizz' print chr ord uc qw q for q and print chr ord q tie gt and print chr length q else x oct oct ord q eq le and print chr length q else x oct oct ord q eq le and # for truthy return cos for # instead of$_
uc
y

xor

# buzz part
eval q y
# print 'Buzz'
print uc chr ord q dbmopen and and
print chr ord q dump and and
print chr length q else x oct oct ord q eq le and
print chr length q else x oct oct ord q eq le and

# for truthy
return cos
if
# instead of length%5, /[05]$/ length q q s s q eq chr ord reverse length or not chr ord reverse length y or # this block is done when length%15==0 or length%3&&length%5 eval q x print length unless # instead of length%5 length q q s s q eq chr ord reverse length or not chr ord reverse length x xor # newline print chr hex qw q and q while s qq q and # ord qw q eq == 101 length ne ord qw q eq  ## Previous eval q y eval q kill and length or return cos while s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and ok and print chr ord uc qw q for q and print chr ord q tie gt and print chr length q else x oct oct ord q eq le and print chr length q else x oct oct ord q eq le and print uc chr ord q dbmopen and and print chr ord q dump and and print chr length q else x oct oct ord q eq le and print chr length q else x oct oct ord q eq le and return cos for uc y or eval q y eval q kill and length or return cos while s q qq and s q qq and s q qq and s q qq and s q qq and ok and print uc chr ord q dbmopen and and print chr ord q dump and and print chr length q else x oct oct ord q eq le and print chr length q else x oct oct ord q eq le and return cos for uc y or eval q y eval q kill and length or return cos while s q qq and s q qq and s q qq and ok and print chr ord uc qw q for q and print chr ord q tie gt and print chr length q else x oct oct ord q eq le and print chr length q else x oct oct ord q eq le and return cos for uc y or print length xor print chr length q q x x x x eq while s qq q and length ne ord qw q eq  Try it online! ### Explained # fizzbuzz part eval q y # length%15==0? eval q k ill and length or return cos while s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and s q qq and o k and # then print FizzBuzz, as in first ppencode print chr ord uc qw q for q and print chr ord q tie gt and print chr length q else x oct oct ord q eq le and print chr length q else x oct oct ord q eq le and print uc chr ord q dbmopen and and print chr ord q dump and and print chr length q else x oct oct ord q eq le and print chr length q else x oct oct ord q eq le and # cos is for TRUTHY return cos # don't change$_ outside
for uc
# buzz part, like above
y or eval q y
eval q kill and length or return cos while s q qq and s q qq and s q qq and s q qq and s q qq and ok and print uc chr ord q dbmopen and and print chr ord q dump and and print chr length q else x oct oct ord q eq le and print chr length q else x oct oct ord q eq le and return cos for uc
# fizz part, like above
y or eval q y
eval q kill and length or return cos while s q qq and s q qq and s q qq and ok and print chr ord uc qw q for q and print chr ord q tie gt and print chr length q else x oct oct ord q eq le and print chr length q else x oct oct ord q eq le and return cos for uc
# no special strings
y or print length
# print LF
xor print chr length q q x x x x eq
# pretty familiar, isn't it?
while s qq q and length ne ord qw q eq
`