require'open-uri'WORD_URL="http://learncodethehardway.org/words.txt"WORDS=[]PHRASES={"class ### < ###/nend"=>"Make a class named ### that is-a ###.","class ###\n\tdef initialize(@@@)\n\tend\nend"=>"class ### has-a initialize that takes @@@ parameters.","class ###\n\tdef ***(@@@)\n\tend\nend"=>"class ### has-a function named *** that takes @@@ parameters.","*** = ###.new()"=>"Set *** to a instance class ###.","***.***(@@@)"=>"From *** get the *** function, and call it with parameters @@@.","***.*** = '***'"=>"From *** get the *** attribute and set it to '***'."}PHRASE_FIRST=ARGV[0]=="english"open(WORD_URL){|f|f.each_line{|word|WORDS.push(word.chomp)}}defcraft_names(rand_words,snippet,pattern,caps=false)names=snippet.scan(pattern).mapdoword=rand_words.pop()caps?word.capitalize:wordendreturnnames*2enddefcraft_params(rand_words,snippet,pattern)names=(0...snippet.scan(pattern).length).mapdoparam_count=rand(3)+1params=(0...param_count).map{|x|rand_words.pop()}params.join(', ')endreturnnames*2enddefconvert(snippet,phrase)rand_words=WORDS.sort_by{rand}class_names=craft_names(rand_words,snippet,/###/,caps=true)other_names=craft_names(rand_words,snippet,/\*\*\*/)param_names=craft_params(rand_words,snippet,/@@@/)results=[][snippet,phrase].eachdo|sentence|# fake class names, also copies sentenceresult=sentence.gsub(/###/){|x|class_names.pop}# fake other namesresult.gsub!(/\*\*\*/){|x|other_names.pop}# fake parameter listsresult.gsub!(/@@@/){|x|param_names.pop}results.push(result)endreturnresultsend# keep going until they hit CTRL-Dloopdosnippets=PHRASES.keys().sort_by{rand}forsnippetinsnippetsphrase=PHRASES[snippet]question,answer=convert(snippet,phrase)ifPHRASE_FIRSTquestion,answer=answer,questionendprintquestion,"\n\n> "exit(0)unless$stdin.getsputs"\nANSWER: %s\n\n"%answerendend