Nice challenge Irné , Couldn't have chosen a better place to post it.
Don't I know it! The level of abilities here at the swamp is way higher than in some other places!
Anyhow trying the imperative version of eea ... I thought using append might degrade performance, but it seems not too bad:
(defun IB:FizzBuzzList
(L
/ band result
) (setq band '
(nil nil "Fizz" nil "Buzz" "Fizz" nil nil "Fizz" "Buzz" nil "Fizz" nil nil "FizzBuzz")) result)
Of course benchmarking only the calculation ... not benchmarking the generation of the list from 1 to N (which is unnecessary for the other functions) might skew it to eea and mine. And it does seem to be the case (as I'd expect).
Benchmarking on numbers from 1 to 30.
Benchmarking ............................................ done for 16384 iterations. Sorted from fastest.
Statement Increment Time(ms) Normalize Relative
--------------------------------------------------------------------------------
(MAPCAR (QUOTE IB:FIZZBUZZ3) FIZZLIST) 16384 1918 1918 1.00
(IB:FIZZBUZZLIST FIZZLIST) 16384 1919 1919 1.00
(EEA FIZZLIST) 16384 1919 1919 1.00
(EEA FIZZLIST) 16384 1935 1935 1.01
(MAPCAR (QUOTE IB:FIZZBUZZ3) FIZZLIST) 16384 1950 1950 1.02
(IB:FIZZBUZZLIST FIZZLIST) 16384 1966 1966 1.03
(MAPCAR (QUOTE PH:FB5) FIZZLIST) 16384 1982 1982 1.03
(MAPCAR (QUOTE IB:FIZZBUZZ1) FIZZLIST) 8192 1014 2028 1.06
(MAPCAR (QUOTE PH:FB5) FIZZLIST) 16384 2028 2028 1.06
(MAPCAR (QUOTE IB:FIZZBUZZ1) FIZZLIST) 8192 1045 2090 1.09
(MAPCAR (QUOTE PH:FB2) FIZZLIST) 8192 1139 2278 1.19
(MAPCAR (QUOTE PH:FB2) FIZZLIST) 8192 1170 2340 1.22
(MAPCAR (QUOTE IB:FIZZBUZZ0) FIZZLIST) 8192 1232 2464 1.28
(MAPCAR (QUOTE IB:FIZZBUZZ0) FIZZLIST) 8192 1232 2464 1.28
(MAPCAR (QUOTE KERRY:FIZZBUZZ) FIZZL...) 8192 1264 2528 1.32
(MAPCAR (QUOTE KERRY:FIZZBUZZ) FIZZL...) 8192 1264 2528 1.32
(MAPCAR (QUOTE PH:FB4) FIZZLIST) 8192 1279 2558 1.33
(MAPCAR (QUOTE MAA:FIZZBUZZ_A2) FIZZ...) 8192 1294 2588 1.35
(MAPCAR (QUOTE IB:FIZZBUZZ) FIZZLIST) 8192 1295 2590 1.35
(MAPCAR (QUOTE PH:FB4) FIZZLIST) 8192 1295 2590 1.35
(MAPCAR (QUOTE IB:FIZZBUZZ) FIZZLIST) 8192 1326 2652 1.38
(MAPCAR (QUOTE MAA:FIZZBUZZ_A2) FIZZ...) 8192 1326 2652 1.38
(MAPCAR (QUOTE LM:FIZZBUZZ) FIZZLIST) 8192 1373 2746 1.43
(MAPCAR (QUOTE LM:FIZZBUZZ) FIZZLIST) 8192 1389 2778 1.45
(MAPCAR (QUOTE IB:FIZZBUZZ2) FIZZLIST) 8192 1419 2838 1.48
(MAPCAR (QUOTE IB:FIZZBUZZ2) FIZZLIST) 8192 1436 2872 1.50
(JH:BIZZFIZZ FIZZLIST) 8192 1513 3026 1.58
(MAPCAR (QUOTE KEITH:FB) FIZZLIST) 8192 1513 3026 1.58
(MAPCAR (QUOTE MAA:FIZZBUZZ_A) FIZZL...) 8192 1529 3058 1.59
(JH:BIZZFIZZ FIZZLIST) 8192 1544 3088 1.61
(MAPCAR (QUOTE KEITH:FB) FIZZLIST) 8192 1575 3150 1.64
(MAPCAR (QUOTE MAA:FIZZBUZZ_A) FIZZL...) 8192 1622 3244 1.69
(MAPCAR (QUOTE CAB:FIZZBUZZ) FIZZLIST) 8192 1654 3308 1.72
(MAPCAR (QUOTE CAB:FIZZBUZZ) FIZZLIST) 8192 1716 3432 1.79
(MAPCAR (QUOTE CHRISCARLSON:FIZZFUZZ...) 8192 1950 3900 2.03
(THARWAT:FIZZBUZZ FIZZLIST) 8192 1965 3930 2.05
(MAPCAR (QUOTE CHRISCARLSON:FIZZFUZZ...) 4096 1014 4056 2.11
(THARWAT:FIZZBUZZ FIZZLIST) 4096 1030 4120 2.15
(MAPCAR (QUOTE RONJONP:_FB) FIZZLIST) 4096 1123 4492 2.34
(MAPCAR (QUOTE RONJONP:_FB) FIZZLIST) 4096 1124 4496 2.34
(MAPCAR (QUOTE LM:FIZZBUZZ1) FIZZLIST) 2048 1670 13360 6.97
(MAPCAR (QUOTE LM:FIZZBUZZ1) FIZZLIST) 2048 1716 13728 7.16
(MAPCAR (QUOTE IB:FIZZBUZZ4) FIZZLIST) 1024 1154 18464 9.63
(MAPCAR (QUOTE IB:FIZZBUZZ4) FIZZLIST) 1024 1185 18960 9.89
--------------------------------------------------------------------------------
But it seems that both eea and my imperative alternative perform a bit better on the 1st 100 integers.
Benchmarking on numbers from 1 to 100.
Benchmarking ............................................ done for 16384 iterations. Sorted from fastest.
Statement Increment Time(ms) Normalize Relative
--------------------------------------------------------------------------------
(EEA FIZZLIST) 16384 1576 1576 1.00
(EEA FIZZLIST) 16384 1591 1591 1.01
(IB:FIZZBUZZLIST FIZZLIST) 16384 1623 1623 1.03
(IB:FIZZBUZZLIST FIZZLIST) 16384 1623 1623 1.03
(MAPCAR (QUOTE PH:FB5) FIZZLIST) 16384 1763 1763 1.12
(MAPCAR (QUOTE PH:FB5) FIZZLIST) 16384 1763 1763 1.12
(MAPCAR (QUOTE IB:FIZZBUZZ3) FIZZLIST) 16384 1779 1779 1.13
(MAPCAR (QUOTE IB:FIZZBUZZ3) FIZZLIST) 16384 1779 1779 1.13
(MAPCAR (QUOTE IB:FIZZBUZZ1) FIZZLIST) 16384 1966 1966 1.25
(MAPCAR (QUOTE IB:FIZZBUZZ1) FIZZLIST) 16384 1981 1981 1.26
(MAPCAR (QUOTE IB:FIZZBUZZ0) FIZZLIST) 8192 1139 2278 1.45
(MAPCAR (QUOTE IB:FIZZBUZZ0) FIZZLIST) 8192 1139 2278 1.45
(MAPCAR (QUOTE IB:FIZZBUZZ) FIZZLIST) 8192 1264 2528 1.60
(MAPCAR (QUOTE IB:FIZZBUZZ) FIZZLIST) 8192 1264 2528 1.60
(MAPCAR (QUOTE MAA:FIZZBUZZ_A2) FIZZ...) 8192 1279 2558 1.62
(MAPCAR (QUOTE PH:FB4) FIZZLIST) 8192 1279 2558 1.62
(MAPCAR (QUOTE PH:FB2) FIZZLIST) 8192 1279 2558 1.62
(MAPCAR (QUOTE PH:FB2) FIZZLIST) 8192 1279 2558 1.62
(MAPCAR (QUOTE KERRY:FIZZBUZZ) FIZZL...) 8192 1280 2560 1.62
(MAPCAR (QUOTE MAA:FIZZBUZZ_A2) FIZZ...) 8192 1280 2560 1.62
(MAPCAR (QUOTE KERRY:FIZZBUZZ) FIZZL...) 8192 1295 2590 1.64
(MAPCAR (QUOTE PH:FB4) FIZZLIST) 8192 1295 2590 1.64
(MAPCAR (QUOTE LM:FIZZBUZZ) FIZZLIST) 8192 1544 3088 1.96
(MAPCAR (QUOTE LM:FIZZBUZZ) FIZZLIST) 8192 1545 3090 1.96
(MAPCAR (QUOTE MAA:FIZZBUZZ_A) FIZZL...) 8192 1575 3150 2.00
(MAPCAR (QUOTE MAA:FIZZBUZZ_A) FIZZL...) 8192 1591 3182 2.02
(MAPCAR (QUOTE IB:FIZZBUZZ2) FIZZLIST) 8192 1701 3402 2.16
(MAPCAR (QUOTE IB:FIZZBUZZ2) FIZZLIST) 8192 1716 3432 2.18
(MAPCAR (QUOTE CAB:FIZZBUZZ) FIZZLIST) 8192 1794 3588 2.28
(JH:BIZZFIZZ FIZZLIST) 8192 1825 3650 2.32
(JH:BIZZFIZZ FIZZLIST) 8192 1825 3650 2.32
(MAPCAR (QUOTE CAB:FIZZBUZZ) FIZZLIST) 8192 1841 3682 2.34
(MAPCAR (QUOTE KEITH:FB) FIZZLIST) 4096 1092 4368 2.77
(MAPCAR (QUOTE KEITH:FB) FIZZLIST) 4096 1092 4368 2.77
(MAPCAR (QUOTE CHRISCARLSON:FIZZFUZZ...) 4096 1202 4808 3.05
(THARWAT:FIZZBUZZ FIZZLIST) 4096 1388 5552 3.52
(THARWAT:FIZZBUZZ FIZZLIST) 4096 1388 5552 3.52
(MAPCAR (QUOTE RONJONP:_FB) FIZZLIST) 4096 1529 6116 3.88
(MAPCAR (QUOTE CHRISCARLSON:FIZZFUZZ...) 4096 2247 8988 5.70
(MAPCAR (QUOTE RONJONP:_FB) FIZZLIST) 2048 1170 9360 5.94
(MAPCAR (QUOTE LM:FIZZBUZZ1) FIZZLIST) 2048 1201 9608 6.10
(MAPCAR (QUOTE LM:FIZZBUZZ1) FIZZLIST) 2048 1217 9736 6.18
(MAPCAR (QUOTE IB:FIZZBUZZ4) FIZZLIST) 2048 1560 12480 7.92
(MAPCAR (QUOTE IB:FIZZBUZZ4) FIZZLIST) 2048 1560 12480 7.92
--------------------------------------------------------------------------------
Though my guess is that on larger lists it might go another way
Benchmarking on numbers from 1 to 1000.
Benchmarking ............................................ done for 1024 iterations. Sorted from fastest.
Statement Increment Time(ms) Normalize Relative
--------------------------------------------------------------------------------
(MAPCAR (QUOTE IB:FIZZBUZZ3) FIZZLIST) 1024 1825 1825 1.00
(MAPCAR (QUOTE PH:FB5) FIZZLIST) 1024 1841 1841 1.01
(MAPCAR (QUOTE PH:FB5) FIZZLIST) 1024 1841 1841 1.01
(MAPCAR (QUOTE IB:FIZZBUZZ3) FIZZLIST) 1024 1857 1857 1.02
(MAPCAR (QUOTE IB:FIZZBUZZ1) FIZZLIST) 512 1029 2058 1.13
(MAPCAR (QUOTE IB:FIZZBUZZ1) FIZZLIST) 512 1030 2060 1.13
(MAPCAR (QUOTE PH:FB2) FIZZLIST) 512 1264 2528 1.39
(MAPCAR (QUOTE PH:FB2) FIZZLIST) 512 1264 2528 1.39
(MAPCAR (QUOTE IB:FIZZBUZZ0) FIZZLIST) 512 1466 2932 1.61
(MAPCAR (QUOTE IB:FIZZBUZZ0) FIZZLIST) 512 1467 2934 1.61
(MAPCAR (QUOTE PH:FB4) FIZZLIST) 512 1529 3058 1.68
(MAPCAR (QUOTE KERRY:FIZZBUZZ) FIZZL...) 512 1544 3088 1.69
(MAPCAR (QUOTE KERRY:FIZZBUZZ) FIZZL...) 512 1560 3120 1.71
(MAPCAR (QUOTE PH:FB4) FIZZLIST) 512 1576 3152 1.73
(MAPCAR (QUOTE MAA:FIZZBUZZ_A2) FIZZ...) 512 1638 3276 1.80
(MAPCAR (QUOTE IB:FIZZBUZZ) FIZZLIST) 512 1638 3276 1.80
(MAPCAR (QUOTE MAA:FIZZBUZZ_A2) FIZZ...) 512 1654 3308 1.81
(MAPCAR (QUOTE IB:FIZZBUZZ) FIZZLIST) 512 1669 3338 1.83
(MAPCAR (QUOTE LM:FIZZBUZZ) FIZZLIST) 512 1778 3556 1.95
(MAPCAR (QUOTE LM:FIZZBUZZ) FIZZLIST) 512 1778 3556 1.95
(MAPCAR (QUOTE IB:FIZZBUZZ2) FIZZLIST) 512 1856 3712 2.03
(MAPCAR (QUOTE IB:FIZZBUZZ2) FIZZLIST) 512 1887 3774 2.07
(MAPCAR (QUOTE MAA:FIZZBUZZ_A) FIZZL...) 256 1014 4056 2.22
(MAPCAR (QUOTE MAA:FIZZBUZZ_A) FIZZL...) 512 2044 4088 2.24
(MAPCAR (QUOTE KEITH:FB) FIZZLIST) 256 1045 4180 2.29
(MAPCAR (QUOTE KEITH:FB) FIZZLIST) 256 1045 4180 2.29
(MAPCAR (QUOTE CAB:FIZZBUZZ) FIZZLIST) 256 1123 4492 2.46
(MAPCAR (QUOTE CAB:FIZZBUZZ) FIZZLIST) 256 1154 4616 2.53
(JH:BIZZFIZZ FIZZLIST) 256 1217 4868 2.67
(JH:BIZZFIZZ FIZZLIST) 256 1232 4928 2.70
(EEA FIZZLIST) 256 1264 5056 2.77
(EEA FIZZLIST) 256 1264 5056 2.77
(IB:FIZZBUZZLIST FIZZLIST) 256 1294 5176 2.84
(IB:FIZZBUZZLIST FIZZLIST) 256 1310 5240 2.87
(MAPCAR (QUOTE CHRISCARLSON:FIZZFUZZ...) 256 1482 5928 3.25
(MAPCAR (QUOTE CHRISCARLSON:FIZZFUZZ...) 256 1513 6052 3.32
(THARWAT:FIZZBUZZ FIZZLIST) 256 1685 6740 3.69
(THARWAT:FIZZBUZZ FIZZLIST) 256 1685 6740 3.69
(MAPCAR (QUOTE RONJONP:_FB) FIZZLIST) 256 1732 6928 3.80
(MAPCAR (QUOTE RONJONP:_FB) FIZZLIST) 256 1747 6988 3.83
(MAPCAR (QUOTE LM:FIZZBUZZ1) FIZZLIST) 64 1622 25952 14.22
(MAPCAR (QUOTE LM:FIZZBUZZ1) FIZZLIST) 64 1653 26448 14.49
(MAPCAR (QUOTE IB:FIZZBUZZ4) FIZZLIST) 32 1138 36416 19.95
(MAPCAR (QUOTE IB:FIZZBUZZ4) FIZZLIST) 32 1139 36448 19.97
--------------------------------------------------------------------------------
Not tested eea1 yet ... will do in due course.
Anyhow, here's my helper functions to perform the test.
(defun Make
-FizzBuzz
-Result
-List (size
/ result
) ((= (rem size
5) 0) "Buzz") ((= (rem size
3) 0) "Fizz") (size))
result)
result)
(defun range
(from to
/ result
) result)
(defun string
-space
(str1 str2 fill len
/ s
)
(defun test
-fizzbuzz
-map
-show
(func size
) (range 1 size)
(Make
-FizzBuzz
-Result
-List size
)))
(defun test
-fizzbuzz
-map
(func size
) (string-space
(Make
-FizzBuzz
-Result
-List size
)) "Pass"
"Fail")
"."
60))
(defun test
-fizzbuzz
-list
-show
(func size
) (Make
-FizzBuzz
-Result
-List size
) (func (range 1 size))))
(string-space
(t "Fail"))
"."
60))
(defun test
-fizzbuzz
(size
) (foreach func '
(ChrisCarlson:FizzFuzzBuzz ronjonp:_fb CAB:FizzBuzz ph:FB2
ph:FB4 ph:FB5 MAA:FizzBuzz_A MAA:FizzBuzz_A2 Kerry:FizzBuzz
LM:fizzbuzz LM:fizzbuzz1 Keith:fb IB:FizzBuzz IB:FizzBuzz0
IB:FizzBuzz1 IB:FizzBuzz2 IB:FizzBuzz3 IB:FizzBuzz4)
(print (test
-fizzbuzz
-map func size
))) (foreach func '
(Tharwat:FizzBuzz JH:bizzFizz eea IB:FizzBuzzList IB:FizzBuzzList1
)
(defun bench
-fizzbuzz
(size
/ fizzlist
) (setq fizzlist
(range
1 size
)) (princ "Benchmarking on numbers from 1 to ") (QBench '
((mapcar 'ChrisCarlson:FizzFuzzBuzz fizzlist
) (mapcar 'ronjonp:_fb fizzlist
) (mapcar 'CAB:FizzBuzz fizzlist
) (mapcar 'MAA:FizzBuzz_A fizzlist
) (mapcar 'MAA:FizzBuzz_A2 fizzlist
) (mapcar 'Kerry:FizzBuzz fizzlist
) (mapcar 'LM:fizzbuzz fizzlist
) (mapcar 'LM:fizzbuzz1 fizzlist
) (Tharwat:FizzBuzz fizzlist)
(JH:bizzFizz fizzlist)
(eea fizzlist)
(mapcar 'IB:FizzBuzz fizzlist
) (mapcar 'IB:FizzBuzz0 fizzlist
) (mapcar 'IB:FizzBuzz1 fizzlist
) (mapcar 'IB:FizzBuzz2 fizzlist
) (mapcar 'IB:FizzBuzz3 fizzlist
) (mapcar 'IB:FizzBuzz4 fizzlist
) (IB:FizzBuzzList fizzlist)
(mapcar 'ChrisCarlson:FizzFuzzBuzz fizzlist
) (mapcar 'ronjonp:_fb fizzlist
) (mapcar 'CAB:FizzBuzz fizzlist
) (mapcar 'MAA:FizzBuzz_A fizzlist
) (mapcar 'MAA:FizzBuzz_A2 fizzlist
) (mapcar 'Kerry:FizzBuzz fizzlist
) (mapcar 'LM:fizzbuzz fizzlist
) (mapcar 'LM:fizzbuzz1 fizzlist
) (Tharwat:FizzBuzz fizzlist)
(JH:bizzFizz fizzlist)
(eea fizzlist)
(mapcar 'IB:FizzBuzz fizzlist
) (mapcar 'IB:FizzBuzz0 fizzlist
) (mapcar 'IB:FizzBuzz1 fizzlist
) (mapcar 'IB:FizzBuzz2 fizzlist
) (mapcar 'IB:FizzBuzz3 fizzlist
) (mapcar 'IB:FizzBuzz4 fizzlist
) (IB:FizzBuzzList fizzlist)))