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
    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
    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
    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
    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
    Dec 18, 2014 at 1:37
  • 4
    $\begingroup$ Sounds like you set yourself up for a sequel, @Tryth! $\endgroup$
    – jscs
    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
    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$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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