Skip to content

Instantly share code, notes, and snippets.

@CreaturePhil
Created February 20, 2016 20:11
Show Gist options
  • Save CreaturePhil/5de6b94cb22e8204b497 to your computer and use it in GitHub Desktop.
Save CreaturePhil/5de6b94cb22e8204b497 to your computer and use it in GitHub Desktop.
random alphabet monad
import random
def compose(f, g):
return lambda x: f(g(x))
class RandomFunctor:
def __init__(self, f):
self.value = f
def map(self, f):
return RandomFunctor(compose(f, self.value))
def join(self):
return self.value(None)
def chain(self, f):
return self.map(f).join()
def generateOne(strlen):
alphabet = "abcdefghijklmnopqrstuvwxyz "
randIndex = RandomFunctor(lambda _: ("", random.randrange(27)))
def recur(result, length):
if length <= 0:
return result
else:
return recur(result.chain(
lambda t: RandomFunctor(lambda _: (t[0]+alphabet[t[-1]],
random.randrange(27)))), length - 1)
return recur(randIndex, strlen)
def score(goal, teststring):
def main():
a = RandomFunctor(lambda _: random.randrange(27))
print(a.map(lambda i: i).value(None))
print(a.map(lambda i: i).value(None))
print(generateOne(100).value(None)[0])
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment