# 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?) – AShelly Sep 24 '15 at 20:47
• @AShelly Only when running – Beta Decay Sep 24 '15 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. – Timwi Sep 24 '15 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. – Geobits Sep 25 '15 at 0:50
• A "vanilla fizzbuzz" sounds delicious. – Reinstate Monica -- notmaynard Sep 25 '15 at 15:12

# 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! – Razetime Nov 11 '20 at 13:21

# JavaScript, 73 bytes

for(i=s='';i++<100;s+=((i%3?'':'Fizz')+(i%5?'':'Buzz')||i)+"\n");alert(s)


# PHP, 73 71 bytes

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


All the most terrible things. I wanted the wrongheaded ternary to do something magical, but it did not.

# Ceylon, 368144123 96 bytes

shared void z(){for(i in 1..100){print(["FizzBuzz","Buzz","Fizz",i][(i%5).sign*2+(i%3).sign]);}}


Here we have the ungolfed original of 368 bytes:

shared void fizzBuzz() {
for(i in 1..100) {
if(3.divides(i)){
if(5.divides(i)) {
print("FizzBuzz");
} else {
print("Fizz");
}
} else {
if(5.divides(i)) {
print("Buzz");
} else {
print(i);
}
}
}
}


In Ceylon, Integers are also just objects, so one can call methods on them (like the divides method here).

1..100 is syntactic sugar for span(1, 100), which is a Range<Integer>, which implements Iterable<Integer>, and can therefore be used with the for loop.

The print function takes one argument (of type Anything), stringifies it (i.e. if it's an object, calls its .string attribute, if it's null, takes "<null>") and prints it to the standard output.

Removing whitespace, using a shorter function name, and replacing x.divides(y) by the shorter y%x==0, which is essentially how divides is implemented, gives us this (144 bytes):

shared void f(){for(i in 1..100){if(i%3==0){if(i%5==0){print("FizzBuzz");}else{print("Fizz");}}else{if(i%5==0){print("Buzz");}else{print(i);}}}}


Of course, this is not the best which is possible ... this uses print and if much too often, and also does the check for divisibility by 5 twice.

Integers (or Numbers types in general) have also the .sign attribute, which is 1 for positive numbers, 0 for zero, and -1 for negatives. We can use that together with the remainder operator to get a different value for each of the four cases: (i % 5).sign * 2 + (i % 3).sign]. This is 0 for FizzBuzz, 1 for Buzz, 2 for Fizz and 3 for the "plain" case. We can use this as an index of a tuple, coming to this 123-bytes program:

shared void z() {
for(i in 1..100) {
print(["FizzBuzz", "Buzz", "Fizz", i][(i%5).sign*2 + (i%3).sign]);
}
}


([...] is the syntax for both Tuple creation (here a Tuple with element types String, String, String, Integer, formally Tuple<String|Integer, String, Tuple<String|Integer, String, Tuple<String|Integer, String, Tuple<Integer, Integer, Empty>>>, which can be written shorter as [String, String, String, Integer]) and lookup in a Correspondence (and this tuple type implements Correspondence<Integer, String|Integer>).

Removing the whitespace again gives us this 96 byte program:

shared void z(){for(i in 1..100){print(["FizzBuzz","Buzz","Fizz",i][(i%5).sign*2+(i%3).sign]);}}


# VB.Net, 147 146 bytes

Module F
Sub Main()
For i=1To 100
Dim a=i Mod 3,b=i Mod 5
Console.WriteLine("{0:#}{1:;;Fizz}{2:;;Buzz}",If(a*b>0,i,0),a,b)
Next
End Sub
End Module


It uses the same conditional formatting trick as the C# answer by Pierre-Luc Pineault.

UPDATED: saved 1 byte thanks to Brian J

• you can save a byte by using If instead of IIf. The difference is that IIf is a function that will evaluate both the true and false options, while If is an operator that will only evaluate the option it needs. Functionally doesn't make a difference in this case, but does save a character. – Brian J Sep 25 '15 at 13:13

# haxe, 110 bytes

class Main{
static function main()
for(i in 1...101)
Sys.println(i%3<1?"Fizz"+(i%5<1?"Buzz":""):i%5<1?"Buzz":i);
}


(newlines and indents added for clarity)

Haxe isn't much of a golfing language … I was trying to do something with enumerators:

class Main{
static function main()
for(i in 1...101)
Sys.println(
switch(i){
case _%3=>0:i%5<1?"FizzBuzz":"Fizz";
case _%5=>0:"Buzz";
case _:i;
}
);
}


But 140 bytes. :I

# O, 53 52 bytes

I'm sure that there will be a better way to do this. Thanks to kirbyfan64sos for the implicit J.

"Buzz"JA.*1mrl{.3%{.5%{}{;J}?}{"Fizz"\5%{}{J+}?}?p}d


Try it here

## Minkolang, 50 bytes

"d"[i1+d5%6&"Buzz"0c3%6&"Fizz"I1-3&N6@0gx(O)25*O].


Try it here.

### Explanation

"d"[...].        For loop that loops from 0 to 99, then stops
i1+              Loop counter + 1 (so it's 1 to 100)
d5%6&"Buzz"      Divisibility test by 5, skips "Buzz" if not divisible
0c3%6&"Fizz"     Divisibility test by 3, skips "Fizz" if not divisible
I1-              Length of stack minus 1 (0 if there's no Fizz or Buzz)
3&N6@            Output as integer if ^ is 0, skip character output otherwise
0gx(O)           Dump the loop counter and output "Fizz"/"Buzz"/"FizzBuzz"
25*O             Print newline


# Swift, 75 bytes

for n in 1...100{print(n%3*n%5>0 ?n:(n%3>0 ?"":"Fizz")+(n%5>0 ?"":"Buzz"))}


# F#, 129116113 111

Seq.iter(fun x->printfn"%s"(["Fizz";"";""].[x%3]+(if x%5=0 then"Buzz"elif x%3>0 then string x else""))){1..100}


# D, 130 bytes

import std.stdio,std.conv;void main(){string x;for(int i;i++<100;x=((i%3?"":"Fizz")~(i%5?"":"Buzz")),writeln(x?x:i.to!string)){};}


Ungolfed:

module FizzBuzz;

import std.stdio;
import std.conv;

void main() {
string x;
for (
int i;
i++ < 100;
x = ((i % 3 ? "" : "Fizz")
~ (i % 5 ? "" : "Buzz")),
writeln(x ? x : i.to!string)
){};
}


Or, building a string, for 142 bytes,

import std.stdio,std.conv;void main(){string x,y;for(int i;i++<100;x=((i%3?"":"Fizz")~(i%5?"":"Buzz")),y~=(x?x:i.to!string)~"\n"){};write(y);}


Ungolfed:

module FizzBuzz;

import std.stdio;
import std.conv;

void main() {
string x,y;
for (
int i;
i++ < 100;
x = ((i % 3 ? "" : "Fizz")
~ (i % 5 ? "" : "Buzz")),
y ~= (x ? x : i.to!string) ~ "\n"
){};
write(y);
}


## Hoon, 126 bytes

%+
turn
(gulf [1 100])
|=
a/@
=+
[=((mod a 3) 0) =((mod a 5) 0)]
"{?:(-< "Fizz" "")}{?:(-> "Buzz" "")}{?:(=(- [| |]) <a> "")}"


Map over the list [1...100] with the function, interpolating the strings "Fizz" and "Buzz". If both mods are false, then it also interpolates the number.

This uses the fact that =+ pushes the value to the top of the context, which you can access with - and navigate with -< or -> for head/tail. Unfortunately, it looks pretty ugly because it needs a newline after runes to minimize byte count, along with not having built in operator functions.

I'm not entirely sure if this counts as a valid entry: It simply returns a list of strings to be printed by the shell, which is optimal. The other way would be to use ~& to print each element as it's mapped over, but it would still be rendered as "Fizz" or "Buzz" (with quotes) since it's a typed print, along with the shell then printing out the entire list anyways since it's the return value.

# Mathematica, 103 86 73 bytes

With 30 bytes saved thanks to @A Simmons!

f="Fizz";b="Buzz";Range@100/.{x_/;15∣x->f<>b,x_/;3∣x->f,x_/;5∣x->b}

• You can use g=Divisible instead of the function definition, there's a leading space (and another one right after f<>b,), and you can use x~g~15 instead of x~g~3&&x~g~5. So f="Fizz";b="Buzz";g=Divisible;Range@100/.{x_/;x~g~15->f<>b,x_/;x~g~3->f,x_/;x~g~5->b} – CalculatorFeline Mar 2 '16 at 16:28
• You can use f="Fizz";b="Buzz";Range@100/.{x_/;15∣x->f<>b,x_/;3∣x->f,x_/;5∣x->b} for 73 bytes in 67 characters. – A Simmons Mar 2 '16 at 17:51
• CatsAreFluffy, It turns out that your code gives incorrect answers for 5 and 100, for example. – DavidC Mar 2 '16 at 22:28
• It's a pair of zero width characters right after the g. Here's code for correcting that: FromCharacterCode[ToCharacterCode@#/.{8204|8203->(##&[])}]& (Don't worry, no zero widths here.) – CalculatorFeline Mar 2 '16 at 22:34

declare option output:method "text";string-join(for$x in 1 to 100 return if($x mod 15=0)then"FizzBuzz"else if($x mod 3=0)then"Fizz"else if($x mod 5=0)then"Buzz"else $x," ")  There were only 7 XQuery answers on the whole site, I thought it could at least have its FizzBuzz ! Granted it's not very golfy, in particular when you need to add a 36 bytes preface so that it does not output an XML header. I tested it with Saxon-HE's command-line XQuery tool (java net.sf.saxon.Query fizzbuzz.xq), with which I had to replace the w3-defined option declaration with declare option saxon:output "method=text";. ## Javascript, 191 bytes for(var i=1; i<=100; i++){ var r = ""; if( i%15 == 0 ? r = "FizzBuzz" : (i%5 == 0 ? r = "Buzz" : (i%3 == 0 ? r = "Fizz" : r = i)) ){ console.log(r); } }  • Welcome to Programming Puzzles & Code Golf. Nice first answer! But please wrap your code into a code-block (indent with 4 spaces or use the button in the editor). Also you should format the header correctly, the common template for this here is ##<language>, <byte count> bytes. Also you have some unnecessary whitespaces in your code which you should remove. – Denker Mar 10 '16 at 9:59 • Nice answer, but the goal of this challenge is to make your answer as short as possible. You can save a ton of bytes by removing all whitespace, and renaming result to r. – ETHproductions Mar 11 '16 at 20:32 # Tcl, 136 bytes set f {Fizz 3 Buzz 5} while {[incr n]<=100} {set s "" foreach {m d}$f {if {$n%$d==0} {append s $m}} if {$s eq ""} {puts $n} {puts$s}}


This solution, incidentally, is easily extensible to any combination of multiples. See The Smart Person's Mirage golf, where gnibbler posted the same idea (but in Python).

set iterations 100

set fizzies {
Fizz 3
Jazz 4
Buzz 5
}

while {[incr n] <= $iterations} { set s "" foreach {name divisor}$fizzies {
if {$n %$divisor == 0} {append s $name} } if {$s eq ""} {puts $n} {puts$s}
}


# Oration, 98 bytes

literally, for i in range(1,100):x=""if i%3 else'Fizz';x+=""if i%5 else "Buzz";print x if x else i


## ROOP, 187 bytes

1
V!         !<
(102)      1|
e#r3##r5# a|
#H  #   # Y-<
N   N  !
"Fizz""Buzz"

mX  mX
### V-->  !
A V---->
#
' C
V'e  "\n"
|# M  #
<V# #v
C  A  C
#X ##
w
O#


I will try to explain each section of code:

V!         !<  Add 1 to each number that goes to the left of the a
1|  and sends it to the bottom of the V
a|
-<


(102)          The 102 falls to the left of the e and each number
e             that passes over is compared to 102.
#H             If a number is equal then the H runs and ends the program


  #r3#         With each number that goes above the r
#          the remainder of dividing by 3 is obtained.
N           The N returns 1 if the number is 0, and 0 otherwise.
"Fizz"         The string "Fizz" falls and moves to the left of the m.
The number is multiplied by the string
mX          ("" or "Fizz" if it is 0 or 1 respectively)
###            The X removes the number when it moves to the right

The same is done with 5 and "Buzz"


   mX  mX
V-->      Both strings are concatenated with the A
A          getting "", "Fizz", "Buzz" or "FizzBuzz"
#


  ' C         The C changes the direction of advance of string, to the left.
'e          At the same time the "e" compares the string with the empty string.
#           The single quotes are a vertical literal string.


 V            The V and pipes redirects the string to the right of the C
|            that changes the direction again in order that comes to the left of the A
<V
C  A


          Y   The original number is converted to a string with Y.
!

!   Pipes and teleporters (!) Redirects the string to below the V
V---->


    M         The string falls to the right of the M and multiplies
# #        with the number previously obtained by the e
A         The result is above the A


      "\n"   The string "\n" falls on the v which makes a copy
M  #     whenever there is a space below.
v      The C changes the direction of the string so it goes to the left.
A  C     It waits to the right of the A


    A        The A concatenate all 3 strings, the result is on the w that sends it
#X ##      to the O representing the output. At the same time the X deletes the string.
w
O#


I hope it is comprehensible, English is not my main language.

# Nim, 10076 73 bytes

for i in 1..100:echo max(["Fizz","",""][i%%3]&["Buzz",""][ord i%%5>0],$i)  Hm... still trying to learn Nim, and I'm thinking there's got to be a better way... • ["Fizz",""][i*i%%3] saves 1. Using ord on a boolean is a useful tip, thanks for that. – primo Jun 19 '19 at 10:02 # Befunge, 65 bytes _1+::3%^>55+,:"c"#@ >"zuB"vv.#,,:,,< |!:%5\ _:!"ziF"^ <,,:,,<:|*  Try it online! # Valyrio, 13 bytes s∫main [CF]  This is a fairly basic (and slightly unimaginative) answer. ## Explanation C pushes 100 to the stack, which means that ... F is the FizzBuzz builtin. This was mainly added in as a basic stack based program but got left in as a command and I never got rid of it. # Javascript, 56 bytes for(f=0;f++<100;alert(f%5?b||f:b+'Buzz'))b=f%3?'':'Fizz'  Assuming 100 alerts is an acceptable output method. • Nice answer, but it's already been posted (That one originally used alert as well, but it was changed to console.log because all the other JS answers do the same) – ETHproductions Mar 22 '17 at 21:46 # Go, 162158145143142 139 bytes package main;import."fmt";func main(){for i,p:=1,Println;i<101;i++{s:="";if i%3<1{s+="Fizz"};if i%5<1{s+="Buzz"};if s!=""{p(s)}else{p(i)}}}  Go Playground Link # Cardinal 217 bytes %x>+ v >+++++~M! 8# "buzz" 0 #~0#+++~>M! # V "fizz" + ^jM< ~ V># + V > #xV = 0 V t ~ >#x t t v V * = > #}#} / > ^ >}/ .  Try it Online ## Explanation %x 0 + + = 0 t ~ t t * = > ^  Initializes a pointer with an inactive value of 100 and active value of 0 >+ v # ^jM<  Loops around, incrementing the active value of the pointer and sending out a duplicate until the active value is equal to the inactive value (100)  >+++++~M! ~0#+++~>M!  Checks if the value mod 3 or mod 5 is equal to 0  # "buzz" # # V "fizz" ~ V># V > #xV V >#x v V > #}#} / >}/ .  Uses reflectors and splitters in order to print only numbers that are not divisible by 3 or 5. Printing fizz when divisible by 3 and buzz when divisible by 5. # Julia, 70 bytes for i=1:100 println("$(i%3<1?"Fizz":"")$(i%5<1?"Buzz":i%3>0?i:"")")end  Julia has perl-like string formatting. Very nice for challenges like these. # REXX 81 Bytes f.="" f.0="buzz" t.="" t.0="fizz" do i=1 to 100 f=i//5 t=i//3 say overlay(t.t||f.f,i) end  • You can golf away four characters by removing the empty strings: f.= instead of f.="". – idrougge May 16 '17 at 11:54 • I tested f.= on a couple of online interpreters and they didn't like it. – theblitz May 16 '17 at 12:06 • All right, I only tested it with Regina. – idrougge May 16 '17 at 12:11 ## Swift, 97 bytes for i in 1...100{i%15==0 ?print("FizzBuzz"):i%3==0 ?print("Fizz"):i%5==0 ?print("Buzz"):print(i)}  # q/kdb+, 5856 49 bytes Solution: 0{$[sum i:0=y mod 3 5;FizzBuzz(&)i;y]}'1+(!)100


Example:

q)0{$[sum i:0=y mod 3 5;FizzBuzz(&)i;y]}'1+(!)100 1 2 ,Fizz 4 ,Buzz ,Fizz 7 8 ,Fizz ,Buzz 11 ,Fizz 13 14 FizzBuzz 16 ...etc  Explanation: 0{$[sum i:0=y mod 3 5;FizzBuzz where i;y]}'1+til 100  / ungolfed
{                                         }'           / anonymous function that takes each-left and each-right
0                                                       / this would be parameter 'x' but we dont use it
til 100  / til generates a list of 0..99
1+         / adds 1 to every item in the list, thus 1..100
$[ ; ; ] / switch,$[condition;true;false]
y mod 3 5                                   / modulo operation on input for 3 and 5, mod[1;3 5] = 1 1
0=                                            / is 0 equal to this result (basically a 'not' operation)
i:                                              / save in i for later
sum                                                 / add these, will get 0, 1 or 2. 0 is interpretted as false
where i                / where gives indices where i is true
FizzBuzz                        / 2 item list which gets indexed into (and implicitly returned)
y                  / return the input if the condition was false


Notes:

This ^^ is pretty much a q version of the k solution, so I've written in a different way.. unfortunately it's about 50% slower :(

0{(Fizz;Buzz;y)(&)(0=a),all a:mod[y;3 5]}'1+(!)100


Here we are indexing into a list of Fizz, Buzz, based on the result of the modulo operation... The k solution style is better.

# groovy, 55 bytes

Borrows idea from answer by @feersum https://codegolf.stackexchange.com/a/58623

100.times{println'Fizz'*(it%3/2)+'Buzz'*(it%5/4)?:it+1}

• Welcome to PPCG! :) – Beta Decay Sep 24 '17 at 7:21

# tinylisp repl, 130 bytes

(d f(q((n # %)(i(e n 100)(q Buzz)(i(disp(i #(i % n(q Buzz))(i %(q Fizz)(q FizzBuzz))))0(f(a n 1)(i #(s # 1)2)(i %(s % 1)4
(f 1 2 4


Try it online! (Note that the repl auto-completes parentheses at the ends of lines; these have been filled in on the TIO version.)

### Explanation

It took me a while to realize I could do FizzBuzz in tinylisp, since the language doesn't have strings. However, it does have the Name type, which can be any run of non-whitespace, non-parenthesis characters; and it also has the disp command, which outputs a value followed by a newline. Together with some creative abuse of recursion, we can get the desired output.

We define a function f with three arguments:

• n is the counter. We will start at 1 and recurse until 100.
• # is the number of iterations till the next divisible-by-3 number. (Mnemonic: Shift-3)
• % is the number of iterations till the next divisible-by-5 number. (Mnemonic: Shift-5)

The first thing f does is check whether n is 100. If so, we return Buzz. This value gets passed all the way up the call stack and printed at the end.

If not, we need to use disp to print either the number, Fizz, Buzz, or FizzBuzz, depending on the values of # and %:

• If # and % are both nonzero (truthy), the number is not divisible by 3 or 5. Display the number, n.
• If # is nonzero but % is zero, the number is divisible by 5 but not 3. Display Buzz.
• If # is zero but % is nonzero, the number is divisible by 3 but not 5. Display Fizz.
• If # and % are both zero, the number is divisible by 3 and 5. Display FizzBuzz.

Since tinylisp does not have an equivalent to Common Lisp's progn, disp'ing something and then returning a value requires a little trickery. Since disp always returns (), which is falsey, we can use the disp call as the condition of an if (i). The true branch will never be evaluated (0 is a convenient placeholder), and we can put the actual return value in the false branch.

This return value is a recursive call. We add 1 to n, and we subtract 1 from # and % unless they are zero, in which case we reset them to (3-1) or (5-1), respectively.

Ungolfed, using the standard library for long names of builtins (TIO):

(load library)

(def fizz-buzz
(lambda (counter steps-till-fizz steps-till-buzz)
(if (equal? counter 100)
(q Buzz)
(if
(disp
(if steps-till-fizz
(if steps-till-buzz counter (q Buzz))
(if steps-till-buzz (q Fizz) (q FizzBuzz))))
(comment Return val of disp is always falsey, so the true branch is never executed)
(fizz-buzz
`