53
$\begingroup$

There, spread out all over the floor, were the mechanical pieces of a robot. Something had torn it apart, and the debris spanned a radius of a few meters. There was no sign of what might have caused this tragedy. What monster, what disaster, could cause this much damage to a mechanical creature?

However, a few steps away, there was a hastily constructed circuit:

What happened here?

And one question nags at you:

What was the robot trying to tell us with his last words?

$\endgroup$
2
  • 1
    $\begingroup$ Wow! Nice intuitive riddle... just one question - how the hell did you come up with the boolean formulas from the results/truth-table ? $\endgroup$
    – Falco
    Commented Dec 18, 2014 at 13:43
  • 1
    $\begingroup$ @Falco: a naive approach would be to take all rows where a certain bit evaluates to 1 and OR them. But a better way is to build a Karnaugh map for each bit, which gives you the simplest boolean expression equivalent to the naive one. $\endgroup$
    – vgru
    Commented Sep 26, 2015 at 8:19

2 Answers 2

35
$\begingroup$

Answer:

KEEPAWAY

Explanation:

Here are the functions for the output (in Java).

Output 1 = !((!C)|C)
Output 2 = (!C)|C
Output 3 = !((!C)|C)
Output 4 = (A|B)&C
Output 5 = (!(A^B))&(!(B^C))
Output 6 = ((!A)&(B^C))|((A&C)&(!B))
Output 7 = ((A&C)&(!B))|(!((B|C)|A))
Output 8 = (!(B&C))|A

Using these functions

you can create a Truth table: |A|B|C|1|2|3|4|5|6|7|8|Hex|Char| -------------------------------- |0|0|0|0|1|0|0|1|0|1|1|4b |K | |0|0|1|0|1|0|0|0|1|0|1|45 |E | |0|1|0|0|1|0|0|0|1|0|1|45 |E | |0|1|1|0|1|0|1|0|0|0|0|50 |P | |1|0|0|0|1|0|0|0|0|0|1|41 |A | |1|0|1|0|1|0|1|0|1|1|1|57 |W | |1|1|0|0|1|0|0|0|0|0|1|41 |A | |1|1|1|0|1|0|1|1|0|0|1|59 |Y | From this truth table it is obvious what the message is.

$\endgroup$
9
  • 1
    $\begingroup$ Completely correct! $\endgroup$
    – Tryth
    Commented Dec 18, 2014 at 0:46
  • 2
    $\begingroup$ This is clever, @Tryth, and I enjoyed solving it. I'm curious how the message ties in with the story, however. $\endgroup$
    – jscs
    Commented Dec 18, 2014 at 1:17
  • $\begingroup$ @JoshCaswell My idea was that whatever destroyed the robot was so dangerous that with his last seconds he created a warning for others. Not sure how well it was conveyed though. $\endgroup$
    – Tryth
    Commented Dec 18, 2014 at 1:37
  • 4
    $\begingroup$ Sounds like you set yourself up for a sequel, @Tryth! $\endgroup$
    – jscs
    Commented Dec 18, 2014 at 1:42
  • $\begingroup$ @Tryth I don't think the answer is completely correct. I think there is a mistake in upper cases vs. lower case. $\endgroup$
    – kasperd
    Commented Dec 18, 2014 at 9:04
2
$\begingroup$

Taking the bottom output as bit 0 up to the top output as bit 7. You can easily see that bits 5, 6, and 7 are always 010. Given that I wrote the following Python code (without looking at any answers to make it more fun!):

def bit0(a, b, c):
    return a or not (b and c)
def bit1(a, b, c):
    return bit1_5(a, b, c) or not (a or b or c)
def bit1_5(a, b, c):
    return (a and c) and not b
def bit2(a, b, c):
    return (not a and (b != c)) or bit1_5(a, b, c)
def bit3(a, b, c):
    return a == b == c
def bit4(a, b, c):
    return (a or b) and c

def compose(i):
    a = bool(i & 0x04)
    b = bool(i & 0x02)
    c = bool(i & 0x01)
    bits = 0b01000000
    if bit0(a, b, c):
        bits |= 0b00000001
    if bit1(a, b, c):
        bits |= 0b00000010
    if bit2(a, b, c):
        bits |= 0b00000100
    if bit3(a, b, c):
        bits |= 0b00001000
    if bit4(a, b, c):
        bits |= 0b00010000
    return bits

if __name__ == '__main__':
    message = ''
    for i in range(8):
        message += chr(compose(i))
    print (message)

Which outputs:

KEEPAWAY

$\endgroup$

Not the answer you're looking for? Browse other questions tagged or ask your own question.