Skip to content

Instantly share code, notes, and snippets.

@petertseng
Last active November 29, 2015 02:41
Show Gist options
  • Save petertseng/eeb69e3e8e984ca41203 to your computer and use it in GitHub Desktop.
Save petertseng/eeb69e3e8e984ca41203 to your computer and use it in GitHub Desktop.
Who's on first?
MAPPINGS = {
#?A
?B => "BLANK",
#?C
?D => "DONE",
?E => "LIKE",
?F => "FIRST",
#?G
?H => "HOLD",
#?I
#?J
?K => "OKAY",
?L => "LEFT",
?M => "MIDDLE",
?N => "RIGHT",
?O => "NOTHING",
?P => "PRESS",
#?Q
?R => "READY",
?S => "SURE",
?T => "WAIT",
?U => "UHHH",
?V => "UH UH",
?W => "UH HUH",
?X => "NEXT",
?Y => "YES",
?Z => "NO",
?1 => "U",
?2 => "UR",
?3 => "YOU",
?4 => "YOUR",
?5 => "YOU'RE",
?6 => "YOU ARE",
?! => "WHAT",
?? => "WHAT?",
}.invert.freeze
LIMIT = 9
mnemonics = DATA.read.scan(/<th>"([^"]+)":<\/th><td>([^<>]+)<\/td>/).map { |keyword, words|
letters = words.split(', ').take_while { |w| w != keyword }.push(keyword).map { |c| MAPPINGS.fetch(c) }.take(LIMIT).join
[keyword, letters].freeze
}.to_h.freeze
if ARGV.include?('-v')
mnemonics.each { |keyword, letters|
puts "#{keyword}: #{letters}"
}
end
loop do
correct = 0
mnemonics.keys.shuffle.each_with_index { |key, idx|
expected_value = mnemonics[key]
puts "#{idx + 1}/#{mnemonics.size}: #{key}"
seen_value = STDIN.gets.chomp.upcase
own_letter = MAPPINGS.fetch(key)
seen_value << own_letter unless seen_value.end_with?(own_letter)
seen_value = seen_value[0...LIMIT]
puts expected_value
if seen_value == expected_value
puts "\e[1;32mGOOD!\e[0m"
correct += 1
else
prefix = seen_value.chars.zip(expected_value.chars).take_while { |a, b| a == b }.size
if prefix == 0
puts "\e[1;31mNOPE!\e[0m"
else
puts "\e[1;33mSORTA\e[0m correct prefix #{prefix}/#{expected_value.size}"
end
end
}
puts "#{correct}/#{mnemonics.size} correct"
end
# Get this from http://www.bombmanual.com/manual/1/html/index.html
__END__
<tr><th>"READY":</th><td>YES, OKAY, WHAT, MIDDLE, LEFT, PRESS, RIGHT, BLANK, READY, NO, FIRST, UHHH, NOTHING, WAIT</td></tr><tr><th>"FIRST":</th><td>LEFT, OKAY, YES, MIDDLE, NO, RIGHT, NOTHING, UHHH, WAIT, READY, BLANK, WHAT, PRESS, FIRST</td></tr><tr><th>"NO":</th><td>BLANK, UHHH, WAIT, FIRST, WHAT, READY, RIGHT, YES, NOTHING, LEFT, PRESS, OKAY, NO, MIDDLE</td></tr><tr><th>"BLANK":</th><td>WAIT, RIGHT, OKAY, MIDDLE, BLANK, PRESS, READY, NOTHING, NO, WHAT, LEFT, UHHH, YES, FIRST</td></tr><tr><th>"NOTHING":</th><td>UHHH, RIGHT, OKAY, MIDDLE, YES, BLANK, NO, PRESS, LEFT, WHAT, WAIT, FIRST, NOTHING, READY</td></tr><tr><th>"YES":</th><td>OKAY, RIGHT, UHHH, MIDDLE, FIRST, WHAT, PRESS, READY, NOTHING, YES, LEFT, BLANK, NO, WAIT</td></tr><tr><th>"WHAT":</th><td>UHHH, WHAT, LEFT, NOTHING, READY, BLANK, MIDDLE, NO, OKAY, FIRST, WAIT, YES, PRESS, RIGHT</td></tr><tr><th>"UHHH":</th><td>READY, NOTHING, LEFT, WHAT, OKAY, YES, RIGHT, NO, PRESS, BLANK, UHHH, MIDDLE, WAIT, FIRST</td></tr><tr><th>"LEFT":</th><td>RIGHT, LEFT, FIRST, NO, MIDDLE, YES, BLANK, WHAT, UHHH, WAIT, PRESS, READY, OKAY, NOTHING</td></tr><tr><th>"RIGHT":</th><td>YES, NOTHING, READY, PRESS, NO, WAIT, WHAT, RIGHT, MIDDLE, LEFT, UHHH, BLANK, OKAY, FIRST</td></tr><tr><th>"MIDDLE":</th><td>BLANK, READY, OKAY, WHAT, NOTHING, PRESS, NO, WAIT, LEFT, MIDDLE, RIGHT, FIRST, UHHH, YES</td></tr><tr><th>"OKAY":</th><td>MIDDLE, NO, FIRST, YES, UHHH, NOTHING, WAIT, OKAY, LEFT, READY, BLANK, PRESS, WHAT, RIGHT</td></tr><tr><th>"WAIT":</th><td>UHHH, NO, BLANK, OKAY, YES, LEFT, FIRST, PRESS, WHAT, WAIT, NOTHING, READY, RIGHT, MIDDLE</td></tr><tr><th>"PRESS":</th><td>RIGHT, MIDDLE, YES, READY, PRESS, OKAY, NOTHING, UHHH, BLANK, LEFT, FIRST, WHAT, NO, WAIT</td></tr><tr><th>"YOU":</th><td>SURE, YOU ARE, YOUR, YOU'RE, NEXT, UH HUH, UR, HOLD, WHAT?, YOU, UH UH, LIKE, DONE, U</td></tr><tr><th>"YOU ARE":</th><td>YOUR, NEXT, LIKE, UH HUH, WHAT?, DONE, UH UH, HOLD, YOU, U, YOU'RE, SURE, UR, YOU ARE</td></tr><tr><th>"YOUR":</th><td>UH UH, YOU ARE, UH HUH, YOUR, NEXT, UR, SURE, U, YOU'RE, YOU, WHAT?, HOLD, LIKE, DONE</td></tr><tr><th>"YOU'RE":</th><td>YOU, YOU'RE, UR, NEXT, UH UH, YOU ARE, U, YOUR, WHAT?, UH HUH, SURE, DONE, LIKE, HOLD</td></tr><tr><th>"UR":</th><td>DONE, U, UR, UH HUH, WHAT?, SURE, YOUR, HOLD, YOU'RE, LIKE, NEXT, UH UH, YOU ARE, YOU</td></tr><tr><th>"U":</th><td>UH HUH, SURE, NEXT, WHAT?, YOU'RE, UR, UH UH, DONE, U, YOU, LIKE, HOLD, YOU ARE, YOUR</td></tr><tr><th>"UH HUH":</th><td>UH HUH, YOUR, YOU ARE, YOU, DONE, HOLD, UH UH, NEXT, SURE, LIKE, YOU'RE, UR, U, WHAT?</td></tr><tr><th>"UH UH":</th><td>UR, U, YOU ARE, YOU'RE, NEXT, UH UH, DONE, YOU, UH HUH, LIKE, YOUR, SURE, HOLD, WHAT?</td></tr><tr><th>"WHAT?":</th><td>YOU, HOLD, YOU'RE, YOUR, U, DONE, UH UH, LIKE, YOU ARE, UH HUH, UR, NEXT, WHAT?, SURE</td></tr><tr><th>"DONE":</th><td>SURE, UH HUH, NEXT, WHAT?, YOUR, UR, YOU'RE, HOLD, LIKE, YOU, U, YOU ARE, UH UH, DONE</td></tr><tr><th>"NEXT":</th><td>WHAT?, UH HUH, UH UH, YOUR, HOLD, SURE, NEXT, LIKE, DONE, YOU ARE, UR, YOU'RE, U, YOU</td></tr><tr><th>"HOLD":</th><td>YOU ARE, U, DONE, UH UH, YOU, UR, SURE, WHAT?, YOU'RE, NEXT, HOLD, UH HUH, YOUR, LIKE</td></tr><tr><th>"SURE":</th><td>YOU ARE, DONE, LIKE, YOU'RE, YOU, HOLD, UH HUH, UR, SURE, U, WHAT?, NEXT, YOUR, UH UH</td></tr><tr><th>"LIKE":</th><td>YOU'RE, NEXT, U, UR, HOLD, DONE, UH UH, WHAT?, UH HUH, YOU, LIKE, SURE, YOU ARE, YOUR</td></tr>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment