Last active
January 25, 2020 11:56
-
-
Save Yardanico/c6495e6b8d0776ff07b6feabab0b1d17 to your computer and use it in GitHub Desktop.
FizzBuzz in v's and fizzbuzz
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import macros, strutils, sequtils, sugar | |
var bytes {.compileTime.}: seq[int] | |
const chars = ["fizz", "buzz", "fizzbuzz"] | |
proc translate(): string = | |
for i in 0..<(bytes.len div 7): | |
result.add( | |
chr( | |
100*bytes[7*i] + | |
70*bytes[7*i+1] + | |
25*bytes[7*i+2] + | |
10*bytes[7*i+3] + | |
5*bytes[7*i+4] + | |
2*bytes[7*i+5] + | |
bytes[7*i+6]) | |
) | |
proc action(n: int, code: NimNode): NimNode = | |
bytes.add n | |
echo bytes, "as" | |
proc f(n: NimNode) = | |
if n.kind == nnkIdent: | |
# XXX do NOT add mod here! This version (miraculously) works with utf8 | |
bytes.add(chars.find(n.strVal)) | |
for c in n.children: | |
f(c) | |
f(code) | |
if bytes.len mod 7 == 0 and bytes.len >= 7: | |
let str = translate() | |
if {'\n'} == { str[str.len-1], str[str.len-2] }: | |
bytes.setLen(0) | |
return parseStmt(str) | |
newStmtList() | |
proc vify*(strCode: string): string = | |
var str = strCode | |
var bytes: seq[int] | |
doAssert str.find("\n\n") < 0, "No two consecutive new line characters" | |
if str[str.len-1] == '\n': | |
str &= "\n" | |
else: | |
str &= "\n\n" | |
for c in str: | |
var n = ord(c) | |
bytes.add n div 100 | |
n = n mod 100 | |
bytes.add n div 70 | |
n = n mod 70 | |
bytes.add n div 25 | |
n = n mod 25 | |
bytes.add n div 10 | |
n = n mod 10 | |
bytes.add n div 5 | |
n = n mod 5 | |
bytes.add n div 2 | |
n = n mod 2 | |
bytes.add n | |
var lineLen = 0 | |
let idents = bytes.map(n => chars[n]) | |
for i in 0..<idents.len: | |
let s = idents[i] | |
if i+1 == idents.len and result[result.len-1] == '\n': | |
result.delete(result.len-1, result.len) | |
result &= s & " " | |
lineLen += s.len + 1 | |
if lineLen >= 60: | |
lineLen = 0 | |
result &= "\n" | |
macro generateDefinitions = | |
result = newStmtList() | |
for i in 0..2: | |
let | |
number = newIntLitNode(i) | |
name = newIdentNode(chars[i]) | |
echo i | |
result.add quote do: | |
macro `name`*(code: untyped):untyped = action(`number`, code) | |
generateDefinitions |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import v | |
vvvv vvvvv vvvv vvvvv v vvv vvvvv vv v vvvvv v vvvvv vvvvv vv | |
vvv vvvvv vv vvvvv vv v v vvvvv v vvv vvvv vvvv v vvvv vvvv | |
vvv vvvvv vv vvv vvvvv v vvvvv vvvvv vv vvvv v v vvvv vvvvv | |
vvv vv vvvv vvvv v vvvvv vv vvv vv v v vvvv vvvv vv vvvvv vvv | |
vvvvv vvvvv vv vvvvv vvvv vvvv vvvvv vvvvv vv vvvv vv v v vvvvv | |
vvvv vv vv vvv vvvvv vvvv vvvv vvv vvvvv v vvvvv vvvvv v vvv | |
vvvvv vv v vvvv vvvvv vvvv vvvvv v vv vvvv vvvv vvvvv vvvv v | |
vvv vvvv vvvvv vvvv vvvvv v vvv vvvv vvvv vvvvv vv vvv vvvvv | |
vvvvv vvvv vvvv vvv v vv vv v v vvvvv vv vvvv vvvv vvvv vvvvv | |
vvvvv vv vv vvvv vv vvvvv vvvv vvvvv vvvv vvvvv v vvvv vvvvv | |
vv vvvvv vvvv vvv vv v v vvvv vvvv vvvv vvv vvvvv v vvvvv vvvvv | |
v vvvv vvvvv vv vvvv vvvvv vv vvvvv vv v v vvvv vvvv vvv vvvv | |
vvvvv vvv vvvv vvvv v vvvvv vv vvv vvvvv vv vvvv vv v v vvv | |
v vvvvv vv v v vvvv vv vvvvv vv v vvv vvvv vvvvv v vvvv vvvvv | |
vvvv vvvvv vvvv v vvvvv vvvv v vv v vvv vv vvv vvv vv v v vv | |
v vvv vvvv vvvv vv vvvvv vvv v vvvvv vvvv v vvvvv vvvv v vv | |
v vvv vv vvv vvv vv v v vv v vvv vvvv vvvvv v vvvv vvvvv vvvv | |
vvvvv vvvv v vvvvv vvvv v vvvv vvvv vv vvvvv vvv v vvvvv vvvv | |
v vvvvv vvvv v vv v vvv vvvv vvv vv v v vvvv vvvvv vv v vvvvv | |
vv vvv vvvvv v vvvvv vvvv vvvv vvv vv v v vvvvv vv vvvvv vvvvv | |
vv vvv vvvv vvvv v vvvvv v vvvv vvvvv vv vvvv vvvvv v vv vvvv | |
vvvv v vvvvv vv vvvvv vvvv vvvv vvvvv vv vv vvvv vv vv vvvvv | |
vvv v vv vv v v vvvvv vv vvvv vvvvv vv vvvvv vvvvv vv vvv vvvv | |
vvvvv vvvv vvvvv v vvvv vvvv vvvvv vv vv v v vvv v vvvvv v v | |
vvvv vv v v vvvv vvvvv v vvvvv v vvvvv vvvvv vv vvv vv v v vvvv | |
vvvvv vvvv vv v v vvvv vvvvv vvvv vvvvv v vvvv vv v v vv vvvv | |
vv vv vvv vvvvv vv vvv vvvvv vvv v vvvv vv vv vvvv vvvv vvvv | |
vv vvvvv vvv vvvvv vvvvv vv vvvvv vvvv vvvv vvvvv vvvvv vv vvvv | |
vv vvv vvvvv vvvvv v vv vvvv vvvv vvvvv vvvvv v vvvv vv v v | |
vvvv vvvv vvvv vvvv vvvvv vvvv vvvvv vvv vv vv v v vv vvvvv | |
vvvv vv vv vvvvv vvv v vv vvvvv vv vvv vvvv vvvv vvvvv vvvvv | |
vv vvvv vvvvv vvv v vvvvv v vv vvvvv vv vvvvv vv vvv vvvvv vvvv | |
vvvv v vvvv vvvv vvvv vvvv vvvv vvvv vv vv vvvv vvvv vvvv vvv | |
vvvv vvvvv vvv vvvvv vv vvv vv vv vvvv vv vvvv vvv vv vvvv vv | |
vv vvvv vv vv vvv v vvvv vvvv vv vvvvv vvv vvvvv vvvvv vv vvvvv | |
vvvv vvvv vvvvv vvvvv vv vvvv vvvv vv vvvvv vv vvvvv vvvv vv | |
vvv v vvvv vvvvv vvvv vvvv vvv vv vv vvv vv vv vvvvv vvvv vv | |
vvvv vv vv vvv v vvvv vvvv vv vvvvv vvv vvvvv vvvvv vv vvvvv | |
vvvv vvvv vvvvv vvvvv vv vvvv vvvv vv vvvvv vv vvvvv vvvv vv | |
vvv v vvvv vvvvv vvvv vv vvv vv vv vvvv vvv vvvv vvv vv vv vvv | |
vv vv vvvv vvvv vv vvvvv vv vv vvv v vvvv vvvv vv vvvvv vvv | |
vvvvv vvvvv vv vvvvv vvvv vvvv vvvvv vvvvv vv vvvv vvvv vv vvvvv | |
vv vvvvv vvvv vv vvv v vvvv vvvvv vvvv vv vvv vv vv vvvv vvvv | |
vvvv vvv vv vv vvv vv vv vvvv vvv vv vvvv vv vv vvv v vvvv vvvv | |
vv vvvvv vvv vvvvv vvvvv vv vvvvv vvvv vvvv vvvvv vvvvv vv vvvv | |
vvvv vv vvvvv vv vvvvv vvvv vv vvv v vvvv vvvvv vvvv vv vvv | |
vv vv vvvv vvvvv vvvv vvv vv vv vvv vv vv vvvvv vv vv vvv v | |
vvvv vvvv vv vvvvv vvv vvvvv vvvvv vv vvvvv vvvv vvvv vvvvv | |
vvvvv vv vvvv vvvv vv vvvvv vv vvvvv vvvv vv vvv v vvvv vvvvv | |
vvvv vv vvv vv vv vvvvv v vvvv vvv vv vv vvv vv vv vvvv vvvv | |
vv vvv v vvvv vvvv vv vvvvv vvv vvvvv vvvvv vv vvvvv vvvv vvvv | |
vvvvv vvvvv vv vvvv vvvv vv vvvvv vv vvvvv vvvv vv vvv v vvvv | |
vvvvv vvvv vv vvv vv vv vvvvv vv vvvv vvv vv vv vvv vv vvvv | |
vvvv vv vvvvv vvv vvvvv vvvvv vv vvvvv vvvv vvvv vvvvv vvvvv | |
vv vvvv vvvv vv vvvvv vv vvvvv vvvv vv vvv v vvvv vvvvv vvvv | |
vv vvv vv vv vvvvv vvv vvvv vvv vv vv vv vvvvv vv vv vvvvv v | |
v vvvv vvvvv vv v vvvvv vv vvv vvvvv v vvvvv vvvv vvvv vvv vv | |
v v vvvv vvvv v vvvv vvvv vvv vvvvv vv vvvvv vvvv vvvvv vvvv | |
vvvvv v vvvvv vvvvv v vvvv vv vv vvvv vvvvv v vvvv vvv v vv | |
vv v v vvvv vvvvv vvvv vvvvv v vvvv vvvvv vv vvvvv vv vvv vvv | |
vv v v vvvv vvvv vvv vvvvv v vvvvv vvvv vvvv vvvv vvvv vvvv | |
vvvvv vvv v vv vv v v vvv vvvvv vv vvvv vvvvv vvvv vvvvv v vvv | |
vvv vvvvv vv vvvvv v vvvvv vvvv vvvv vvvv vvvv vvvv vvvvv vv | |
vv vvvvv vvv v vv vv v v vvv vvvvv vv vvvv vvvvv vvvv vvvvv | |
v vvv vvv vvvvv vv vvvvv v vvvvv vvvv vvvv vvvv vvvv vvvv vvvvv | |
vv v v vvv v vvvvv v v vvvv vv v v vv v v vvvv vvvv vv vvvvv | |
vvv vvvvv vvvvv vv vvvvv vvvv vvvv vvvvv vvvvv vv vvvv vv vvv | |
vvvvv vvvv vvvv v vvvv vvvv vvvv vvvv vvvv vvvv vv v v vvvvv | |
v vvvv v v vvvv vv v v vv v v vvvvv vv v vvvvv vv vvv vvvvv | |
v vvvvv vvvv vvvv vvv vv v v vvvv vvvvv v vv vv vvvv vvvvv v | |
vvvv vvv v vv vv v v vvv vvvvv vv vvvv vvvvv vvvv vvvvv v vvv | |
vvv vvvvv vv vvvvv v vvvvv vvvv vvvv vvvv vvvv vvvv vvvvv vv | |
vv vvvvv vv v v vvv v vvvvv v v vvvv vv v v vv v v vv v v vvvv | |
vvvvv vvvv vvvv vvvvv v vv v v vvvvv v vvvv vv vvv vvvvv vvvvv | |
v v vvvv vvvvv vvvv vvvvv v vvvv vvvv vvvv vvvv vv v v vvv v | |
vvvvv vvv v vvvvv vv v v vvvvv v vvvv vvvvv v vvvv vvvvv v v | |
vvv vvvv vv vvvv vvvv vvvv vvvv vvvv vvvvv vvvvv v vvvv vvvvv | |
vv vvvvv vvv v vv vvvv vvvv vv vvvvv vvv vvvvv vvvvv vv vvvvv | |
vvvv vvvv vvvvv vvvvv vv vvvv vv vvv vvvvv vvvv vvvv v vvvv | |
vvvv vvvv vvvv vvvv vvvv vv vv vvvv vvvv vvvv vvv vvvv vvvvv | |
vvv vvvv vvvv v vvvvv vv vvv vvvvv vv vvvv vv vvv vvvvv vvvv | |
vvvvv v vvvv vvvvv vvvv vvvvv v vvvv vvvv vvvv vvvv vv vv vvvv | |
vvvvv v vvvv vv vvv vvvvv vvvvv vv vvvv vvvvv vv vvvvv vvvvv | |
vv vvv vvvv v vvvvv vvvv vvvv v vvvvv v vv vv vv vvvvv vv vv | |
vvvvv v v vvvv vv v v vv v v vv v v vvvv vvvvv v vvvvv v vvvvv | |
vvvvv vv vvv vv v v vvvv vvvv vvv vv v v vvvv vvvvv vvvv vvvvv | |
v vvvv vv v v vvvvv v vvvv vv vvv vvvvv vvvv vvvv vvv vvvv vvvvv | |
vvv vvvv vvvvv vvvv vvvvv v vv vvvv vvvv vvvv vvvvv vv vvv vvvv | |
vvvv vvvvv vvvvv v vvvv vvv v vv vvvv vvvvv v vv vv vvvv vvvv | |
vvvv vvv vv vv vvvvv v v vvvv vv v v vv v v vvvv vvvvv v vv | |
vv vvvv vvvv vvvv vvv vvvvv v vvvvv vvvv vvvv vvvv vvvv vvvv | |
vvvvv vv vv vvvvv v v vvvv vv v v vv v v vvvv vvvvv vvvv vvvv | |
vvvvv v vv v v vvvv vvvv vv vvvvv vvv vvvvv vvvvv vv vvvvv vvvv | |
vvvv vvvvv vvvvv vv vvvv vv vvv vvvvv vvvvv v vv vvvv vvvv vvvvv | |
vvvvv v vvvv vv v v vvvvv v vvv vvvvv v vvvvv vvvv vvvv vvvv | |
vv v v vv vvvvv vvvv vvv v vvvvv vvv v vvvvv vv vvvv vv vv v | |
v vvvv vvvv v vvvvv v vvvv vvvv vvvv vvvv vv v v vvvv vvvv vv | |
vvvvv vvv vvvvv vvvvv vv vvvvv vvvv vvvv vvvvv vvvvv vv vvvv | |
vv vvv vvvvv vvvvv v vv vvvv vvvv vvvvv vvvvv v vvvv vvv vv | |
v vvv v vvvvv vv vvvvv vvvv vvv v vv v v vvvv vv v v vv v v | |
vv v v vvvvv v vv vvvv vvvv vvvvv vvvvv vv vvvvv vv v v vvvvv | |
vv vvvv vvvvv vv vvvvv vvvvv vv vvv vv v v vvv v vvvvv vv v | |
v vvvvv vv vvvvv vvvvv vv vvv vvvv vvvv v vvvvv v vvvv vvvvv | |
vv vvvv vvvvv v vv vvvv vvvv v vvvvv vv vvvvv vvvv vvvv vvvvv | |
vv vv vvvv vv vv vvvvv v v vvvv vv v v vv v v vv v v vvvv vvvvv | |
vvvv vvvv vvvvv v vv v v vvvvv vvvv vv vv vv vvv vvvv vvv v | |
vvvvv v vvvv vv vv vvv vvvvv vvvv vvvv vv v v vvv v vvvvv vvv | |
v vvvvv vv v v vvvvv vvvv vv vvvvv vv vvvv vvvvv vv vvvvv vvvvv | |
vv vvv vvvv vv vvvvv vvvvv vv vvvv vvvvv vv vvvvv vvvvv vv vvv | |
vv vvv vvvvv vvvvv v vv vvvv vvvv vvvvv vvvvv v vvvv vv vvv | |
vvvv vv vvvv vvv vvvv vvv vv vv vvv vvv vvvvv vv vvvv vvvvv | |
vv vvvvv vvvvv vv vvv vvvv vv vvvvv vvvvv vv vvvv vvvvv vv vvvvv | |
vvvvv vv vvv vv vvv vvvvv vvvvv v vv vvvv vvvv vvvvv vvvvv v | |
vvvv vv vvv vvvv vv vvvv vvvv vvvv vvv vv vvvvv vvvv vvvv vvv | |
v vv vvvv vvvv vv vvvvv vvv vvvvv vvvvv vv vvvvv vvvv vvvv vvvvv | |
vvvvv vv vvvv vv vvv vvvvv vvvvv vv vvvv vvvv vvvv vvvvv vvvvv | |
vv vvvvv vvv vvvv vvvvv vvvv vvvv vvvvv vvvvv v vvvv vv vv vvvv | |
vv vvvv vv vv vv vvvvv vvv v vvv vvvvv vv vvv vvvv vvvv vvvvv | |
vvvvv vv vvvvv vvvvv vvv v vvvvv vv vvv vvvvv v vvvv vv v v | |
vvvvv vv v vvvv vvvv v vvvvv vv vvv vvvvv vv vvvv vvvv vvvv | |
vvvvv vvvv v vv vvvvv vv vvvvv vvvvv v vvv vvvvv vv vvvvv vv | |
vv vvvv vvvvv vv vvvv vvvvv vv vvvvv vvvvv vv vvv vv vv vvvvv | |
v v vvvv vv v v vv v v vvvvv v vvvv vvvv vvvv vvvvv vvvvv vvv | |
vvv vvvv v vv vvvvv vv vvvvv vvvvv v vvv vvvvv vv vvvvv vvv | |
vvvv vvvvv vvvv vvvvv vvvv vvvvv vv vvvv vvvvv vv vvvvv vv vv | |
vvvv vv vv vvvvv v v vvvv vvvvv v vvv vvvv vvvv v vvvv vvvv | |
vvv vvvvv vv vvv vvvvv v vvvvv vv v v vvvv vvvvv v vvvv vvvvv | |
vvvv vvvvv vvvv v vvvvv vvvv v vv vv vvvv vvvv vvvv vvv vvvvv | |
v vvvvv vvvv vvvv vvvv vvvv vvvv vvvvv vvv v vv vvvvv vvv v | |
vvvvv v vvvv vvvvv vv vvvvv vvvvv vvv vvvvv vvvvv vv v vvvv | |
vvvv vvvvv vvvv vvvv vvvv vv vv vvvvv vvv v vvvvv vvvv vvvv | |
v vvvv vvvv vvv vvvvv vv vvvvv vvvv vvvvv vvvv vvvvv v vvvvv | |
vvvvv v vvvv vv vv vvvv vv vvvv vv vv vvv vvv vv v v vvvv vvvv | |
vvv vvvvv v vvvvv vvvv vvvv vvvv vvvv vvvv vvvvv vv vv vvvvv | |
v v vvvv vvvvv v vvv vvvv vvvv v vvvv vvvv vvv vvvvv vv vvv | |
vvvvv v vvvvv vv v v vvvv vvvv vv vvvvv vvv v vvvvv vvvv v vvvvv | |
vvvv v vv vv vvvv vvvv vvvv vvv vvvvv v vvvvv vvvv vvvv vvvv | |
vvvv vvvv vvvvv vvv v vv vvvvv vvv v vvvvv v vvvv vvvvv vv vvvvv | |
vvvvv vvv vvvvv vvvvv vv v vvvv vvvv vvvvv vvvv vvvv vvvv vv | |
vv vvvvv vvv v vvvvv vvvv vvvv v vvvv vvvv vvv vvvvv vv vvvvv | |
vvvv vvvvv vvvv vvvvv v vvvvv vvvvv v vvvv vv vv vvvv vv vvvv | |
vvv vv vvv vvv vv v v vvvv vvvv vvv vvvvv v vvvvv vvvv vvvv | |
vvvv vvvv vvvv vvvvv vv vv vvvvv v v vvvv vvvvv v vvv vvvv vvvv | |
v vvvv vvvv vvv vvvvv vv vvv vvvvv v vvvvv vv v v vvvv vvvvv | |
v vvvv vvvvv vvvv vvvvv vvvv v vvvvv vvvv v vvvv vvvv vv vvvvv | |
vvv v vvvvv vvvv v vvvvv vvvv v vv vv vvvv vvvv vvvv vvv vvvvv | |
v vvvvv vvvv vvvv vvvv vvvv vvvv vvvvv vvv v vv vvvvv vvv v | |
vvvvv v vvvv vvvvv vv vvvvv vvvvv vvv vvvvv vvvvv vv v vvvv | |
vvvv vvvvv vvvv vvvv vvvv vv vv vvvvv vvv v vvvvv vvvv vvvv | |
v vvvv vvvv vvv vvvvv vv vvvvv vvvv vvvvv vvvv vvvvv v vvvvv | |
vvvvv v vvvv vv vv vvvv vv vvvv vvvv vv vvv vvv vv v v vvvv | |
vvvv vvv vvvvv v vvvvv vvvv vvvv vvvv vvvv vvvv vvvvv vv vv | |
vvvvv v v vvvv v v vvvv | |
buzz fizz fizz fizz fizz buzz fizz buzz fizz fizz buzz fizz | |
fizz buzz buzz fizz fizz buzz fizz fizzbuzz fizz fizz fizz buzz | |
fizz buzz buzz fizz buzz fizz fizz buzz fizz fizz fizz fizz | |
fizz buzz fizz buzz buzz fizz buzz fizz fizz fizz buzz fizz | |
fizz buzz fizz fizz buzz fizz fizz fizz fizz fizz buzz fizz | |
buzz buzz fizz fizz fizz buzz fizzbuzz fizz fizzbuzz fizz fizz | |
fizz buzz fizzbuzz fizz fizz buzz fizz fizz buzz fizzbuzz fizz | |
fizz buzz fizz fizz buzz fizzbuzz fizz fizzbuzz fizz fizz fizz | |
buzz fizzbuzz fizz buzz buzz fizz fizz buzz fizzbuzz fizz buzz | |
buzz fizz fizz fizzbuzz fizz buzz buzz buzz buzz fizz fizz fizz | |
fizz fizz buzz fizz buzz buzz fizz fizz fizzbuzz fizz buzz fizz | |
fizz fizz fizz fizzbuzz fizz buzz fizz fizz buzz fizz fizz buzz | |
fizz fizz buzz fizz buzz buzz fizz fizz buzz fizz fizzbuzz fizz | |
fizz buzz fizz fizz buzz buzz fizz fizz buzz buzz fizz fizz | |
buzz fizz fizz fizz fizz fizz buzz buzz buzz fizzbuzz fizz fizz | |
fizz buzz fizz buzz fizzbuzz fizz fizz buzz fizz fizz fizz fizz | |
fizz buzz fizz fizz fizz buzz fizz fizz buzz fizz fizz fizzbuzz | |
fizz buzz fizz buzz fizz fizz fizzbuzz fizz buzz fizz fizz fizz | |
buzz fizz buzz fizzbuzz fizz fizz fizz buzz buzz buzz fizzbuzz | |
fizz fizz fizz buzz fizz buzz fizzbuzz fizz fizz fizz fizzbuzz | |
buzz buzz fizz buzz buzz fizz fizz buzz buzz buzz fizz buzz | |
fizz fizz fizzbuzz fizz buzz fizz buzz fizz fizz fizzbuzz fizz | |
buzz fizz fizz fizz buzz fizz buzz fizzbuzz fizz fizz fizz buzz | |
buzz buzz fizzbuzz fizz fizz fizz buzz fizz buzz fizzbuzz fizz | |
fizz buzz fizz fizz fizz fizz fizz buzz fizz fizz fizz buzz | |
fizz fizz buzz fizz fizz fizzbuzz fizz buzz fizz buzz fizz fizz | |
fizzbuzz fizz buzz fizz fizz fizz fizzbuzz buzz buzz fizz buzz | |
buzz fizz fizz buzz buzz buzz fizz buzz fizz fizz fizzbuzz fizz | |
buzz fizz buzz fizz fizz fizzbuzz fizz buzz fizz fizz fizz buzz | |
fizz buzz fizzbuzz fizz fizz buzz fizz fizzbuzz fizz buzz buzz | |
fizz buzz fizz fizzbuzz fizz fizz buzz buzz fizz fizz fizz buzz | |
fizz fizz buzz fizz fizz buzz fizz fizz fizz buzz fizz fizz | |
buzz buzz fizz buzz fizz fizz buzz buzz buzz fizz fizz buzz | |
fizz fizz buzz fizz fizz fizz fizz fizz buzz buzz fizz buzz | |
fizz fizz fizz buzz buzz fizz buzz fizz fizz fizz fizzbuzz fizz | |
fizz fizz buzz fizz fizz fizzbuzz buzz fizz fizz fizz fizz fizz | |
buzz fizzbuzz fizz fizzbuzz fizz fizz fizz buzz buzz buzz fizz | |
buzz fizz fizz buzz buzz buzz buzz buzz fizz fizz fizzbuzz fizz | |
fizz fizz fizz fizz fizz buzz buzz buzz buzz fizz buzz fizz | |
fizz fizz buzz fizz fizz buzz fizz fizz buzz fizz fizz fizz | |
buzz fizz fizz buzz buzz fizz buzz fizz fizz buzz buzz buzz | |
fizz fizz buzz fizz fizz buzz fizz fizz fizz fizz fizz buzz | |
buzz fizz buzz fizz fizz fizz buzz buzz fizz buzz fizz fizz | |
fizz fizzbuzz fizz fizz buzz buzz fizz fizz fizzbuzz buzz fizz | |
fizz fizz fizz fizz buzz fizzbuzz fizz fizzbuzz fizz fizz fizz | |
buzz buzz buzz fizz buzz fizz buzz fizz fizzbuzz fizz buzz buzz | |
fizz fizz fizz buzz fizz fizz fizz fizz fizz fizz buzz fizz | |
fizz fizz |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import macros | |
var bytes {.compileTime.}: seq[int] | |
const chars = ["fizz", "buzz", "fizzbuzz"] | |
proc translate(): string = | |
for i in 0..<(bytes.len div 7):result.add(chr(100*bytes[7*i]+70*bytes[7*i+1]+25*bytes[7*i+2]+10*bytes[7*i+3]+5*bytes[7*i+4]+2*bytes[7*i+5]+bytes[7*i+6])) | |
proc action(n: int, code: NimNode): NimNode = | |
bytes.add n | |
proc f(n: NimNode) = | |
if n.kind == nnkIdent:bytes.add(chars.find(n.strVal)) | |
for c in n.children:f(c) | |
f(code) | |
if bytes.len mod 7==0 and bytes.len>=7: | |
let str = translate() | |
if {'\n'} == {str[str.len-1],str[str.len-2]}:bytes.setLen(0);return parseStmt(str) | |
newStmtList() | |
macro fizz(code:untyped)=action(0, code) | |
macro buzz(code:untyped)=action(1, code) | |
macro fizzbuzz(code:untyped)=action(2, code) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
for n in 1..100:echo [$n,"Fizz","Buzz","FizzBuzz"][int(n%%3<1)+2*int(n%%5<1)] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment