2016-01-06 14:08:25 -05:00
#!/usr/bin/python
import random
import inflect
2017-03-30 21:39:44 +00:00
import quote_puzzle
2018-02-28 21:08:22 +00:00
import dict_puzzle
2016-01-06 14:08:25 -05:00
p = inflect . engine ()
2016-01-11 16:26:15 -05:00
primes = [ 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 , 47 , 53 , 59 , 61 , 67 , 71 ]
2018-01-24 20:51:54 +00:00
fuzz_amount = 3
2016-01-06 14:08:25 -05:00
2017-03-30 21:39:44 +00:00
def make_puzzle ( obfuscate = True ):
2016-01-06 14:08:25 -05:00
answer = 0
2018-07-16 21:55:22 +01:00
bonus = 0
2018-02-28 21:08:22 +00:00
puzzle = random . choice ([ "Prove you're not a robot: " , "Are you a robot?: " , "Anti-bot check: " , "Counter-cndorphant measures: " , "Cosnok countermeasures: " , "Anti-tildethief precautions: " ])
2016-01-06 14:08:25 -05:00
puzzle += random . choice ([ "What is" , "How many is" , "What do you get from" , "What do you get with" , "What is the value of" , "Can you answer" , "Can you tell me" ])
puzzle += " "
2018-04-24 15:21:29 +00:00
roll = random . randrange ( 0 , 18 )
2016-01-06 14:08:25 -05:00
var1 = random . randrange ( 1 , 10 )
var2 = random . randrange ( 1 , 10 )
2018-01-24 20:51:54 +00:00
var3 = random . randrange ( 1 , 20 )
var4 = random . randrange ( 1 , 20 )
2017-03-30 21:39:44 +00:00
let1_ord = random . randrange ( ord ( 'a' ), ord ( 'z' ) + 1 )
2016-01-06 14:08:25 -05:00
if roll == 0 :
answer = var1 + var2
puzzle += p . number_to_words ( var1 ) + " " + random . choice ([ "and" , "plus" , "sum" , "add" ]) + " " + p . number_to_words ( var2 )
elif roll == 1 :
answer = var1 * var2
puzzle += p . number_to_words ( var1 ) + " " + random . choice ([ "times" , "multiply" , "multiplied by" , "product" ]) + " " + p . number_to_words ( var2 )
elif roll == 2 :
if var2 > var1 :
var1 , var2 = var2 , var1
answer = var1 - var2
puzzle += p . number_to_words ( var1 ) + " " + random . choice ([ "minus" , "subtract" , "take away" , "less" ]) + " " + p . number_to_words ( var2 )
elif roll == 3 :
if var2 > var1 :
var1 , var2 = var2 , var1
answer = var1 * 2 / var2
puzzle += p . number_to_words ( var1 * 2 ) + " " + random . choice ([ "divided by" , "over" ]) + " " + p . number_to_words ( var2 ) + " (no remainder)"
elif roll == 4 :
2016-01-11 16:26:15 -05:00
answer = var1 ** var2
2016-01-06 14:08:25 -05:00
puzzle += p . number_to_words ( var1 ) + " to the " + p . ordinal ( p . number_to_words ( var2 )) + " power"
2016-01-11 16:26:15 -05:00
elif roll == 5 :
2017-03-30 21:39:44 +00:00
p1 = random . choice ( primes )
p2 = random . choice ( primes )
2016-02-04 09:41:43 -05:00
answer = str ( min ( p1 , p2 )) + ',' + str ( max ( p1 , p2 ))
2018-07-16 21:55:22 +01:00
bonus = 1
2016-02-04 09:41:43 -05:00
puzzle += p . number_to_words ( p1 * p2 ) + " when factored into its two primes (answer in the form of the two primes with a comma between)"
2017-03-30 21:39:44 +00:00
elif roll == 6 :
prime = random . choice ( primes )
answer = prime % var1
puzzle += p . number_to_words ( prime ) + " modulus " + p . number_to_words ( var1 )
elif roll == 7 :
if let1_ord + var1 > ord ( 'z' ):
let1_ord -= var1
answer = chr ( let1_ord + var1 )
puzzle = "What letter comes " + p . number_to_words ( var1 ) + " letters after '" + chr ( let1_ord ) + "'"
obfuscate = False
elif roll == 8 :
if let1_ord - var1 < ord ( 'a' ):
let1_ord += var1
answer = chr ( let1_ord - var1 )
puzzle = "What letter comes " + p . number_to_words ( var1 ) + " letters before '" + chr ( let1_ord ) + "'"
obfuscate = False
elif roll == 9 :
answer , puzzle = quote_puzzle . get_quote ()
obfuscate = False
2018-01-24 20:51:54 +00:00
elif roll == 10 :
answer = str ( min ( var1 , var2 , var3 , var4 ))
puzzle = "What is the " + random . choice ([ "smallest" , "lowest" ]) + " of " + p . number_to_words ( var1 ) + ", " + p . number_to_words ( var2 ) + ", " + p . number_to_words ( var3 ) + ", and " + p . number_to_words ( var4 )
elif roll == 11 :
answer = str ( max ( var1 , var2 , var3 , var4 ))
puzzle = "What is the " + random . choice ([ "biggest" , "largest" ]) + " of " + p . number_to_words ( var1 ) + ", " + p . number_to_words ( var2 ) + ", " + p . number_to_words ( var3 ) + ", and " + p . number_to_words ( var4 )
2018-02-28 21:08:22 +00:00
elif roll <= 14 : #12-14
answer , puzzle = dict_puzzle . get_puzzle ()
obfuscate = False
2018-04-24 15:21:29 +00:00
elif roll <= 17 : #15-17
answer , puzzle = dict_puzzle . get_anagram ()
obfuscate = False
2016-01-11 16:26:15 -05:00
2017-03-30 21:39:44 +00:00
puzzle += "?"
2016-09-07 15:58:36 +00:00
if obfuscate == True :
2018-01-24 20:51:54 +00:00
for _ in range ( fuzz_amount ):
2016-09-07 15:58:36 +00:00
idx = random . randrange ( len ( puzzle ) - 1 ) #get between 0 and string length
puzzle = '' . join ([ puzzle [ 0 : idx ], chr ( random . randint ( 33 , 126 )), puzzle [ idx + 1 :]])
2018-07-16 21:55:22 +01:00
return [ puzzle , answer , bonus ]