FizzBuzz/AWK: Difference between revisions

m
Fixed syntax highlighting.
(generated version)
m (Fixed syntax highlighting.)
 
(6 intermediate revisions by one other user not shown)
Line 1:
{{collection|FizzBuzz}}
 
===regular if / else===
<!-- http://ideone.com/UrHdvd -->
This is the "traditional" approach:
Line 7:
Minor tweak: printf with no newline, and linebreaks only after each "FizzBuzz",
to get a more compact output.
<langsyntaxhighlight AWKlang="awk"># usage: awk -v n=38 -f FizzBuzz.awk
#
BEGIN {
Line 24:
 
print "\n# Done."
}</langsyntaxhighlight>
{{out}}
<pre>
Line 39:
When the output is presented like that, it is easy to see a pattern.
 
===bash with echo===
<!-- http://ideone.com/0VMIuO -->
Using echo from the shell to generate the numbers as input.
Line 46:
 
Disadvantage: this needs a shell where echo can do this.
<langsyntaxhighlight AWKlang="awk">echo {1..100} | awk '
BEGIN {RS=" "}
$1 % 15 == 0 {print "FizzBuzz"; next}
Line 52:
$1 % 3 == 0 {printf "Fizz "; next}
{printf "%3d ",$1}
'</langsyntaxhighlight>
 
===One-liner with seq===
 
Like version 2, using bash with seq to generate the numbers as input. <br>
Line 60:
(Also, hard to read)
 
<langsyntaxhighlight AWKlang="awk">seq 100 | awk '$0=NR%15?NR%5?NR%3?$0:"Fizz":"Buzz":"FizzBuzz"'</langsyntaxhighlight>
 
===No divisions, using counters===
<!-- http://ideone.com/uHmYUr -->
Division is one of the more expensive operations,
Line 69:
All processing is done inside awk, using no division & no modulo. <br>
Instead, a simple counter for each of the output-variants is used:
<langsyntaxhighlight AWKlang="awk"># usage: awk -v n=38 -f fizzbuzzNoDiv.awk
#
# FizzBuzz using no division & no modulo-operations:
Line 83:
}
print "\n# Done."
}</langsyntaxhighlight>
Same output as version 1.
 
===No divisions, using pattern-string===
<!-- http://ideone.com/HJsrvl -->
Another solution that works without division / modulo.
Line 94:
But here, the pattern is represented as chars in a string,
instead of bits in an integer.
<langsyntaxhighlight AWKlang="awk"># usage: awk -v n=42 -f fizzbuzzRepeatPattern.awk
#
function prt(x,v) {
Line 113:
}
print "\n# Done."
}</langsyntaxhighlight>
Same output as version 1.
 
===Custom FizzBuzz===
==generated from "General FizzBuzz‎"==
===Example program 1===
<!-- http://ideone.com/xxxyyy -->
generated from [[General_FizzBuzz#AWK]],
<lang AWK># usage: awk -f fizzbuzzCustom.awk numbers.txt
for factors 2, 3, 5 using the words A, B, C. <br>
The list of numbers is also generated (much like in version 2 and 3),
and comes in as the file numbers.txt.
 
;Input:
<pre>31
2 A
3 B
5 C</pre>
 
<!-- http://ideone.com/xxxyyyyw1oEK -->
<langsyntaxhighlight AWKlang="awk"># usage: awk -f fizzbuzzCustom.awk numbers.txt
#
BEGIN {print "# CustomFizzBuzz:"}
 
$1 % 2 == 0 {x = x "A"}
$1 % 3 == 0 {x = x "B"}
$1 % 5 == 0 {x = x "C"}
 
x=="" {print $0; next}
!x {print "\t" x$1; x=""next}
END {print "# Done.",x; x=""}
 
}</lang>
END {print "# Done."} </syntaxhighlight>
 
{{out}}
<pre># CustomFizzBuzz:
1
A
B
A
C
AB
7
A
B
AC
11
AB
13
A
BC
A
17
AB
19
AC
B
A
23
AB
C
A
B
A
29
ABC
31
# Done.</pre>
 
===Example program 2===
;Input: for the generator-program at [[General_FizzBuzz#AWK]]:
<pre>105
3 Fizz
5 Buzz
7 Baxx</pre>
 
<syntaxhighlight lang="awk">BEGIN {print "# CustomFizzBuzz:"}
 
$1 % 3 == 0 {x = x "Fizz"}
$1 % 5 == 0 {x = x "Buzz"}
$1 % 7 == 0 {x = x "Baxx"}
 
!x=="" {print $01; next}
{print " ", x; x=""}
END {print "# Done."}</syntaxhighlight>
9,476

edits