#CoffeeJunkie, Coffeescript #!/usr/bin/env node # Require node fs fs = require("fs") # Happy birthday ;) CAKECONSTANT = Math.round(""" / ,( ), Y |-| | | _..--''''| |''''--.._ .' @_/-//-//>/>'/ @ '. ( @ /_<//<'/----------^-) |'._ @ //|###########| |~ ''--..@|',|}}}}}}}}}}}| | ~ ~ |/ |###########| | ~~ ~ ~|./|{{{{{{{{{{{| '._ ~ ~ ~ |,/````````````` ''--.~.|/ """.length / 250 + Math.random()) # Some constants OLD = "./data/CoffeeJunkie_oldcake.txt" NEW = "./data/CoffeeJunkie_newcake.txt" # How much cake do I want? wantCake = (total_c, rest_c, total_p, rest_p) -> round = total_p - rest_p fairness = rest_c // rest_p switchMemory() if round is 0 fairest_round = tryToRemember(total_p) tryToMemorize(fairness) if round >= fairest_round then fairness - CAKECONSTANT else total_c // 2 # Ok I should try to remember the last cake... switchMemory = () -> try fs.renameSync(NEW, OLD) catch error # What happend with the last cake? tryToRemember = (rounds) -> try last_cake = fs.readFileSync(OLD, "utf-8") last_cake.trim().split(" ").map( (i) -> parseInt(i) ).reduce( (x, y, z, li) -> if y > li[x] then z else x 0 ) catch error rounds / 2 # Watch what happens! tryToMemorize = (fairness) -> try fs.appendFileSync(NEW, " " + fairness) catch error # Coffee is ready, so... GO! console.log(wantCake(process.argv[2..]...)) What exactly is a cake without a good cup of coffee? The CoffeeJunkie prefers coffee over a slice of cake, but nevertheless wants to try some. He will always be fair to other participants and will try to remember what happened to the last cake. However, his excessive coffee consume has weakened his memories...