Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Challenges

Comments on 1, 2, Fizz, 4, Buzz!

Parent

1, 2, Fizz, 4, Buzz!

+9
−0

The task

Output the first 100 elements of the infamous FizzBuzz sequence.

How?

The FizzBuzz sequence is the sequence of decimal integers from 1 to 100 inclusive, but:

  • If the integer is divisible both by 3 and 5, output the string FizzBuzz
  • Else, if the integer is divisible by 3, output the string Fizz instead
  • Else, if the integer is divisible by 5, output the string Buzz instead
  • Else, output the integer itself

Output

The output will be a list of these elements separated by either a space (U+0020) or a newline (U+000A).

Here is a sample output with newline separation:

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

Rules

  • Your code may not print anything to STDERR. Warnings are fine.
  • This is code-golf, so lowest byte-count in each language is the winner.
History
Why does this post require moderator attention?
You might want to add some details to your flag.
Why should this post be closed?

1 comment thread

General comments (7 comments)
Post
+6
−0

C (gcc), 113 Bytes

i;main(){while(i++<100){char*h[]={"%d "," "},**p=h;i%3||(*p++="Fizz%2$s");i%5||(*p="Buzz ");printf(*h,i,h[1]);}}

This compiles with several warnings, but no errors.

Here's an ungolfed version with explanations:

/* the following include is omitted; while using printf
   without including it is not conforming to the current
   C standard, with gcc it only generates a warning
   and works flawlessly. Note that omission was valid K&R C */
#include <stdio.h>

/* Declare a global int variable. The golfed code omits the
   type because of the old implicit-int rule, which only
   generates a warning also in modern gcc. Also note that
   global variables without initializer are zero-initialized;
   this is still defined behaviour today. In this ungolfed
   code I've added the implied initializer for clarity. */
int i=0;

/* The main function. Again, the golfed code makes use of the
   old implicit int rule. */
int main()
{
  /* loop up to 100; since we increment before entering the
     loop body, the first number in the loop is 1. */
  while(i++<100)
  {
    /* In this array of two strings, the first will be used as
       format string to a printf later, while the second will
       be the third argument for the same printf. As is, the
       format string will tell printf to format the second
       argument (which will be i) as number, followed by a space.
       The third argument, a single-space string, is ignored
       in that case. */
    char *h[] = { "%d ", " " };

    /* This second variable (which in the golfed version is
       declared in the same declaration as h) points to the first
       entry of h. It is used to change the entries of h, and
       it is separate because pointer arithmetic is used to
       modify different strings depending on the condition. */
    char **p = h;

    /* This is basically an if-not statement. If i%3 is not
       nonzero (that is, if i is divisible by 3), this statement
       replaces the format string with one that prints "Fizz"
       followed by the content of the third argument of printf
       as string, which is the second string in h. At this
       point it contains just a space. Also, when replacing the 
       format string, the pointer p is incremented, so it then
       points to the second element of h. */
    i%3 || (*p++ = "Fizz%2$s");

    /* This if-in-disguise handles divisibility by 5. It stores
       a pointer to "Buzz " into whatever p points to. If i
       is not divisible by 3, this still is the format string,
       so if instructs the following printf to just print "Buzz "
       and ignore any further arguments. Otherwise, p points
       to the final string argument, so that after the "Fizz"
       it prints "Buzz " instead of just a space. */
    i%5 || (*p = "Buzz ");

    /* This finally is the printf statement talked about
       in the previous comments. Note that *h is equivalent
       to h[0] */
    printf(*h,i,h[1]);
  }
}
History
Why does this post require moderator attention?
You might want to add some details to your flag.

1 comment thread

General comments (1 comment)
General comments
Lundin‭ wrote over 3 years ago

Nice solution since it's quite straight-forward, +1. I managed 108 bytes with same compiler settings (default gcc) but a much more obscure solution here.