Kitty's First Programming Challenge
We recently started doing some programming challenges on the slack channel with my friends and the challenge was simple yet, very difficult!
Challenge 1:
Write FizzBuzz in a language you have never used before, OR in the MOST creative way possible!
For those who do not know these are the rules of FizzBuzz:
----------------------------------------------------------------------
If a number is divisible by 3, print "Fizz",
If a number is divisible by 5, print "Buzz",
If a number is divisible by both 3 and 5 print "FizzBuzz",
If a number is NOT divisible by 3 or 5 print the number
I think this was an interesting take on the challenge we got submissions in lolcode, Scratch, Obfuscated C#, EmojiCode, and my submission in KittenLang.
For those who don't know about KittenLang (like me about a week ago) it is a stack based programming language. This means the compiler takes input and pushes that onto the stack so to add and multiplywould be like this:
$ 2
> 2
$ 2
> 2
> 2
$ +
> 4
$ 3
> 3
> 4
$ *
> 12
So this was an interesting challenge because of the way you have to loop over the range of numbers. To keep the challenge simple a CSV was provided and I wrote the code with 0..100 included in the source :).
Then I was able to define a function that took an Int32
as input and spit a List<Char>
to stdout
for the user. Below is my code:
#KITTEN LANG
define fizzbuzz (Int32 -> +IO +Fail) -> x: if ( x % 15 = 0 ) { "FizzBuzz" say } elif ( x % 5 = 0 ) { "Buzz" say } elif ( x % 3 = 0 ) { "Fizz" say } else { x say }
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100] \fizzbuzz each
You can see how to define the function pretty plainly but calling it with the \\
preceeding it means that I am calling the entire function on the input,rather than evaluating the expression given incase I definted a function with the same name as a keyword or if the letters themselved were past variables or keywords on the stack. The each
keyword means that I am running the function on each item of the array. At first I was using the map
function, which I still believe should work, but that in the langague wiki page (which is imcomplete :(), says that it maps each result to an array I believe since I am returning to stdout
that was casuing a program and with the way the language was handling strings I could not quite figure out how to utilize the map
keyword properly for this langauge.
That was it! A fun little challenge that introduced me into a new langauge and an entirely differnt style of programming.