3 more files
Signed-off-by: Valentin Gehrke <madmaurice@zom.bi>
This commit is contained in:
parent
5f6d4d13f0
commit
b8b6518057
3 changed files with 109 additions and 0 deletions
78
markovfun.py
Normal file
78
markovfun.py
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
from sys import argv
|
||||||
|
from random import randint, choice
|
||||||
|
|
||||||
|
class MarkovGenerator:
|
||||||
|
overall = object()
|
||||||
|
def __init__(self):
|
||||||
|
self.distribution = {}
|
||||||
|
|
||||||
|
def add(self, first, second):
|
||||||
|
if first not in self.distribution:
|
||||||
|
self.distribution[first] = { MarkovGenerator.overall : 0 }
|
||||||
|
if second not in self.distribution[first]:
|
||||||
|
self.distribution[first][second] = 0
|
||||||
|
|
||||||
|
self.distribution[first][MarkovGenerator.overall] += 1
|
||||||
|
self.distribution[first][second] += 1
|
||||||
|
|
||||||
|
|
||||||
|
def getrandomfollower(self,word):
|
||||||
|
i = randint(0,self.distribution[word][MarkovGenerator.overall]-1)
|
||||||
|
for follower, occurances in self.distribution[word].items():
|
||||||
|
if follower == MarkovGenerator.overall:
|
||||||
|
continue
|
||||||
|
if i < occurances:
|
||||||
|
return follower
|
||||||
|
else:
|
||||||
|
i -= occurances
|
||||||
|
return None
|
||||||
|
|
||||||
|
def scantext(self,text):
|
||||||
|
prevtoken = None
|
||||||
|
while len(text) > 0:
|
||||||
|
parts = text.split(" ",1)
|
||||||
|
if len(parts) == 1:
|
||||||
|
text = ""
|
||||||
|
token = parts[0]
|
||||||
|
else:
|
||||||
|
token, text = parts
|
||||||
|
token = token.strip(".,!?\"()[]{}\n")
|
||||||
|
if prevtoken is not None:
|
||||||
|
self.add(prevtoken,token)
|
||||||
|
prevtoken = token
|
||||||
|
|
||||||
|
def getrandomword(self):
|
||||||
|
return choice(list(self.distribution.keys()))
|
||||||
|
|
||||||
|
def generate(self, n):
|
||||||
|
word = self.getrandomword()
|
||||||
|
text = word
|
||||||
|
for i in range(1,n):
|
||||||
|
word = self.getrandomfollower(word)
|
||||||
|
if word is None:
|
||||||
|
word = self.getrandomword()
|
||||||
|
text += ". " + word
|
||||||
|
else:
|
||||||
|
text += " " + word
|
||||||
|
|
||||||
|
return text
|
||||||
|
|
||||||
|
def debug(self):
|
||||||
|
print("\n".join(self.distribution.keys()))
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
if len(argv) > 1:
|
||||||
|
filename = argv[1]
|
||||||
|
else:
|
||||||
|
filename = "test.txt"
|
||||||
|
text = open(filename,"r").read()
|
||||||
|
mg = MarkovGenerator()
|
||||||
|
mg.scantext(text)
|
||||||
|
print(mg.generate(100))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
17
palindrome.clj
Normal file
17
palindrome.clj
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
(defn digits [n]
|
||||||
|
(->> n
|
||||||
|
(iterate #(quot % 10))
|
||||||
|
(take-while pos?)
|
||||||
|
(mapv #(mod % 10))
|
||||||
|
rseq))
|
||||||
|
(defn is-palindrome [n] (let [d (digits n)] (= d (reverse d))))
|
||||||
|
(defn pairs [s] (for [a s b s] [a b]))
|
||||||
|
(defn pow [b e] (reduce * 1 (repeat e b)))
|
||||||
|
(defn largest-palindrome [n]
|
||||||
|
(->> (range (pow 10 (dec n)) (pow 10 n))
|
||||||
|
(pairs)
|
||||||
|
(map (partial apply *))
|
||||||
|
(filter is-palindrome)
|
||||||
|
(apply max)))
|
||||||
|
|
||||||
|
(println (largest-palindrome 3))
|
14
primesfactors.clj
Normal file
14
primesfactors.clj
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
(defn prime-factors [n]
|
||||||
|
(loop [nums (cons 2 (iterate #(+ 2 %) 3))
|
||||||
|
factors []
|
||||||
|
v n]
|
||||||
|
(let [f (first nums)]
|
||||||
|
(cond
|
||||||
|
(= v 1) factors
|
||||||
|
(= 0 (mod v f)) (recur nums (conj factors f) (quot v f))
|
||||||
|
:else (recur (rest nums) factors v)))))
|
||||||
|
;(loop [i 1]
|
||||||
|
; (when (< i 100)
|
||||||
|
; (println i (prime-factors i))
|
||||||
|
; (recur (inc i))))
|
||||||
|
(println 123 (prime-factors 123))
|
Loading…
Reference in a new issue