Changelog for FIZZBUZZBAZZ version 2.0:
— New top-level definitions: DIVISIBILITY->STRING.
— General performance improvements.
— FIZZBUZZBAZZ now takes as an optional parameter an alist of divisors and the string they match. The same divisor can be specified multiple times.
(declaim (inline divp))
(defun divp (d a)
(zerop (rem a d)))
(fizzbuzzbazz 100 '((2 . "Then ") (5 . "… ") (1 . "she ") (3 . "came ") (6 . "in love with ") (7 . "little ") (11 . "bucket ") (9 . "girl ") (2 . "buffalo") (1 . "… ") (4 . "Tender! ") (8 . "Soften up the meat!")))
she …
Then she buffalo…
she came …
Then she buffalo… Tender!
… she …
Then she came in love with buffalo…
she little …
Then she buffalo… Tender! Soften up the meat!
she came girl …
Then … she buffalo…
she bucket …
Then she came in love with buffalo… Tender!
she …
Then she little buffalo…
… she came …
Then she buffalo… Tender! Soften up the meat!
she …
Then she came in love with girl buffalo…
she …
Then … she buffalo… Tender!
she came little …
Then she bucket buffalo…
she …
Then she came in love with buffalo… Tender! Soften up the meat!
… she …
Then she buffalo…
she came girl …
Then she little buffalo… Tender!
she …
Then … she came in love with buffalo…
she …
Then she buffalo… Tender! Soften up the meat!
she came bucket …
Then she buffalo…
… she little …
Then she came in love with girl buffalo… Tender!
she …
Then she buffalo…
she came …
Then … she buffalo… Tender! Soften up the meat!
she …
Then she came in love with little buffalo…
she …
Then she bucket buffalo… Tender!
… she came girl …
Then she buffalo…
she …
Then she came in love with buffalo… Tender! Soften up the meat!
she little …
Then … she buffalo…
she came …
Then she buffalo… Tender!
she …
Then she came in love with girl buffalo…
… she bucket …
Then she little buffalo… Tender! Soften up the meat!
she came …
Then she buffalo…
she …
Then … she came in love with buffalo… Tender!
she …
Then she buffalo…
she came little girl …
Then she buffalo… Tender! Soften up the meat!
… she …
Then she came in love with bucket buffalo…
she …
Then she buffalo… Tender!
she came …
Then … she little buffalo…
she …
Then she came in love with girl buffalo… Tender! Soften up the meat!
she …
Then she buffalo…
… she came …
Then she buffalo… Tender!
she little bucket …
Then she came in love with buffalo…
she …
Then … she buffalo… Tender! Soften up the meat!
she came girl …
Then she buffalo…
she …
Then she came in love with little buffalo… Tender!
… she …
Then she buffalo…
she came …
Then she bucket buffalo… Tender! Soften up the meat!
she …
Then … she came in love with girl buffalo…
she little …
Then she buffalo… Tender!
she came …
Then she buffalo…
… she …
Then she came in love with buffalo… Tender! Soften up the meat!
she …
Then she little buffalo…
she came bucket girl …
Lisp | Haskell
-------------------------------|------------------------------------
map - '(1 2 3 4 5) | map (-) [1,2,3,4,5,6]
(-1 -2 -3 -4 -5) | No instance for (Show (a -> a))
| arising from a use of `print'
|
map - | map negate
invalid number of arguments: 1 | No instance for (Show ([a] -> [a]))
Backtrace: | arising from a use of `print'
0: (map #<function>) |
1: (eval '(map -)) |
Name:
Anonymous2012-10-05 12:22
>>6
Learn about currying a.k.a. automatic function decomposition. Also, Lisp's unary - isn't Haskell's -.
Name:
Anonymous2012-10-05 12:28
>>6
I'm writing a brand new shitty lisp, should non-variadic functions curry whenever possible (so people don't have to explicitly write (curry f ...))?
Name:
Anonymous2012-10-05 12:30
>>8
You should instead have no variadic functions and curry all of them. Variadic macros are OK.
FOR i TO 110 DO
STRING pr;
OP / = (STRING s, INT j)STRING: s * ABS(i %* j = 0);
pr +:= "Fizz" / 3;
pr +:= "Buzz" / 5;
pr +:= "Bazz" / 7;
print((IF pr /= "" THEN pr ELSE i FI, new line))
OD
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CT PIC 999 VALUE 1.
01 FZ PIC 999 VALUE 1.
01 BZ PIC 999 VALUE 1.
PROCEDURE DIVISION.
FIZZ-BUZZ-MAIN SECTION.
PERFORM 100 TIMES
IF FZ = 3
THEN IF BZ = 5
THEN DISPLAY "FizzBuzz"
COMPUTE BZ = 0
ELSE DISPLAY "Fizz"
END-IF
COMPUTE FZ = 0
ELSE IF BZ = 5
THEN DISPLAY "Buzz"
COMPUTE BZ = 0
ELSE
DISPLAY CT
END-IF
END-IF
ADD 1 TO CT
ADD 1 TO FZ
ADD 1 TO BZ
END-PERFORM
STOP RUN.
Name:
Anonymous2012-10-05 20:01
>>30 FOR i TO 110 DO print((
IF STRING pr;
OP / = (STRING s, INT j)STRING: s * ABS(i %* j = 0);
pr +:= "Fizz" / 3;
pr +:= "Buzz" / 5;
pr +:= "Bazz" / 7;
pr /= "" THEN pr ELSE i FI, new line))
OD
function range(n) { return n > 0 ? [].concat.call(range(n-1), n) : [] }
function fizzbuzz(n,factors) { return range(n).map(match.bind(factors)) }
function match(n) { return Object.keys(this).reduce(red.bind(this, n), '') || n }
function red(n, a, b) { return n % b ? a : a + this[b] }
range = (n) -> if n > 0 then [].concat.call(range(n - 1), n) else []
fizzbuzz = (n, factors) -> range(n).map match.bind(factors)
match = (n) -> Object.keys(this).reduce(red.bind(this, n), "") or n
red = (n, a, b) -> (if n % b then a else a + this[b])
Name:
Anonymous2012-10-06 3:22
k = (n, a, b) -> if n % b then a else a+this[b]
fizzbuzz = (n, factors) ->
(Object.keys(factors).reduce(k.bind(factors,i),'') or i for i in [1..n])
I'm going to cum
Name:
Anonymous2012-10-06 3:22
NO SHOULD BE
k = (n, a, b) -> if n % b then a else a+this[b]
fizzbuzz = (n, factors) ->(Object.keys(factors).reduce(k.bind(factors,i),'') or i for i in [1..n])
Name:
Anonymous2012-10-06 3:23
k = (n, a, b) -> if n % b then a else a+this[b]
fizzbuzz = (n, factors) -> (Object.keys(factors).reduce(k.bind(factors,i),'') or i for i in [1..n])