Turing Complete

Turing Complete

46 ratings
Achievements
By UnsignedRobin
Solution to all achievements
2
   
Award
Favorite
Favorited
Unfavorite
4 NAND = XOR
Complete the XOR level using ONLY 4 NAND gates and nothing else
5 Component Full Adder
Complete the full adder level using only 5 blue components
Fast Adder
Complete the byte adder with a delay of 35 or less
(NOTE: This circuit has a delay of 22)
Binary Counter
Complete the Counter level with a 65 nand score or less

NOTE: You need a score of 3/4 in the XOR Gate level for this solution to work (which is better than the depicted solution from the 4NAND=XOR achievement above). This circuit has a gate score of 53
Symmetric ALU
Complete the "Logic Engine" level using only components from the "BYTES" category
Condition 10
Complete the level called "Conditions" using only 10 blue components
Turing Complete
Build a Turing Complete computer

Rewarded upon completing the level TURING COMPLETE
Helperbot
Complete all 4 quests on the ship

All 4 quests can be accessed once The Maze is completed. To access the ship, control the robot manually through the maze and hit ENTER when you reached the door.

1. Push Derpoo into the reactor
Find the gray plush-blob called Derpoo and push it onto the conveyor belt leading to the reactor


2. Convince Gruliette to go on a date with Dumio
Talk to Dumino and Gruliette

Talk to Dumino again and find the pink flower in the south-east corner of the map

Bring the flower back to Gruliette


3. Poison the boss
Speak to Griffith

Collect 4 blobs of slime by shooting the enemy slimes (TAB key)

Put the slime in the barrel behind the chef
4. Find the treasure
Go through the secret door in the south-east corner of the map and follow the path

The treasure is guarded by Tricksy who is way faster that you. You can not beat it. The trick is to go to the upper narrowing path and wait there (by pressing ENTER), until Tricksy becomes unpatient.

Once Tricksy is overwhelmed by boredom, it runs around the corner, and you can shoot it. The treasure is now free to be looted.
Best hat
Obtain the fabled best hat

This achievement can be accessed once The Maze is completed. To access the ship, control the robot manually through the maze and hit ENTER when you reached the door.

  1. Run the solved Maze level, until you obtained 255 coins
  2. Go to the hat man in the south west area of the ship and purchase the best hat
Black hat
Hack the hat seller

This achievement can be accessed once The Maze is completed. To access the ship, control the robot manually through the maze and hit ENTER when you reached the door.

  1. Talk to the hat man (your own coin supply doesn't matter)
  2. Change the number representation from unsigned to signed, so that price numbers greater than 128 become negative
  3. Purchase the Best Hat which costs -1 now (The vendor gives you a coin)
3 Adder Multiply
Complete "The Product of Nibbles" using no more than three 8 bit adders
Tutorial Complete
Complete the "Functions" level

This level can be completed, without solving the actual task. However it is highly adviced to do so.
Approach: In CONDITION Mode, only Bit 1,2,3 has meaning. Now use bit 4 and 5 to decide, if the result leads to a JUMP, a CALL or a RETURN.

JUMP
  • Set the counter to Arg3
CALL
  • Push the current counter value + 4 onto the stack
  • Set the counter to Arg3
RETURN
  • Prevent Arg3 from accessing the bus
  • POP last value from stack
  • Set the counter to popped value
FastBot
Complete the robot race with less than 64 bytes of code

NOTE: The track is a Hilbert Curve with three iterations (if you want to google an actual algorithm)

Instead of coding an algorithm, the path is hard wired without any code
Water world
Beat the level "Water World"

Solution Idea:
1. Read in all values of the landscape and store them in the RAM

2. Go from left to right over the stored landscape values, find the current maximum and calculate the potential water pillar by subtracting the landscape value from the current maximum
Store the water values in the RAM, too (below the landscape values, starting with address 16)
(Screenshot is not the first landscape you see in the level, but is nice to demonstrate the idea)


3. Go from right to left over the stored landscape values, find the current maximum and calculate the potential water pillar by subtracting the landscape value from the current maximum
(Continue with Step 4)


4. If the current water pillar is less that the stored value from 2., then overwrite the value in the RAM (= combine "left->right" and "right->left" water pillars by always using the smaller of the two values)


5. Now the correct water values are stored in the second row of the RAM starting with adress 16.
Add all values together and send the result to the Output

Program: (you have to adjust it to your architecture)
const adr 0 const currVal 1 const max_left 2 const max_right 3 const sum 4 const num_reads 5 const io 7 const ram 0b00001000 set 16 _ num_reads label readValues addi io _ ram addi adr 1 adr subi num_reads 1 num_reads ifi_neq_goto num_reads 0 readValues set 0 _ adr set 16 _ num_reads label readFromLeft addi ram _ currVal if_gt_call currVal max_left setMaxLeft addi adr 16 adr sub max_left currVal ram subi adr 15 adr subi num_reads 1 num_reads ifi_neq_goto num_reads 0 readFromLeft set 15 _ adr set 16 _ num_reads label readFromRight addi ram _ currVal if_gt_call currVal max_right setMaxRight sub max_right currVal currVal addi adr 16 adr if_lt_call currVal ram setActual subi adr 17 adr subi num_reads 1 num_reads ifi_neq_goto num_reads 0 readFromRight set 16 _ adr set 16 _ num_reads label sumValues add sum ram sum addi adr 1 adr subi num_reads 1 num_reads ifi_neq_goto num_reads 0 sumValues addi sum _ io label setMaxLeft addi currVal _ max_left ret _ _ _ label setMaxRight addi currVal _ max_right ret _ _ _ label setActual addi currVal _ ram ret _ _ _
Binary Racer
Beat level 7 in BINARY RACER

(NOTE: In level 7, the sum of the toggled bits are no longer displayed)
  • Currently not realistically doable as human
  • Everybody who achieved it so far said:
    "I COULD do it if i practiced for 2 hours straight, but i rather wrote a macro which did it for me"

Here is my Java programm that did the trick (you have to adjust the coordinates where to click)
Type the decimal number in the box and hit enter.

import java.awt.AWTException; import java.awt.Robot; import java.awt.event.InputEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.JFrame; import javax.swing.JTextField; public class BinaryRacer extends KeyAdapter { public JFrame window = new JFrame(); public JTextField textField = new JTextField(); public static void main(String[] args) { new BinaryRacer(); } public BinaryRacer(){ textField.addKeyListener(this); window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); window.add(textField); window.setSize(300, 100); window.setVisible(true); } @Override public void keyPressed(KeyEvent event) { //on ENTER: calculate and click bits; clear screen if (event.getKeyChar() =='\n') { doClicks(calcBits(textField.getText())); textField.setText(""); } } public boolean[] calcBits(String intString) { boolean[] bits = new boolean[8]; //no error handling :( you have to type numbers int input = Integer.parseInt(intString); for(int j=0;j<bits.length;j++) { if (input % 2 == 1) bits[j] = true; input = input / 2; } return bits; } public void doClicks(boolean [] bits) { //click bits if (bits[7]) click( 570,950); if (bits[6]) click( 670,950); if (bits[5]) click( 770,950); if (bits[4]) click( 870,950); if (bits[3]) click( 970,950); if (bits[2]) click(1070,950); if (bits[1]) click(1170,950); if (bits[0]) click(1270,950); //click submit click( 970,1025); //click back in the window (on second screen) to enter a new number click(window.getX()+50,window.getY()+50); } public void click(int x, int y) { Robot bot; try { bot = new Robot(); bot.mouseMove(x, y); bot.mousePress(InputEvent.BUTTON1_DOWN_MASK); bot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); } catch (AWTException e) { e.printStackTrace(); } } }
38 Comments
Kazel 19 Mar @ 10:22pm 
@gg.nadrewod
XOR gate can be implemented with a gate score of 3 using one NAND, one OR, and one AND.
MUX can be done with a gate score of 17.
My solution for Binary Counter uses:
1 MUX
3 Byte Splitters
6 AND
7 XOR
1 NOT
gg.nadrewod 28 Jan @ 8:04pm 
If the "Binary Counter" achievement requires tight-enough gate logic that the "4 NAND = XOR" setup doesn't work, does anyone have examples of some XOR or MUX setups that can get the achievement?
João Porco da Silva 5 Jan @ 5:33pm 
Here is an autohotkey v2 script that solves the binary racer level: using the keypad, you enter the digits in decimal notation and press enter, then, the script converts it to the keys from 1 to 8 and automatically presses the spacebar to send the answer.

https://pastebin.com/raw/EkJZcP9D
plegbot 3 Jan @ 11:35am 
"Currently not realistically doable as human"
Actually, I did it as a human. It is very possible. You just have to recognize binary patterns in your head.
You also have more time in level 7 than in 6, which is helpful.
=^・^= 2 Sep, 2024 @ 5:14am 
uh... the last achievement... I can count but there is so much time pressure and the controlls... I personally would prefer if 1 = 1, 2 = 2, 3 = 4 etc...
ДPoBoSeX 22 May, 2024 @ 2:13am 
Binary racer on Python. No need any mouse moves and coords, bits can be input as 1-8 and send by space. In my tool u just press keys and then enter to auto press bits. use numpad / if u mistaken. https://pastebin.com/TqHERMvr
ukey79 14 Apr, 2024 @ 3:40am 
You can use the number keys 1 to 8 to toggle the bits.
arthur111213 6 Apr, 2024 @ 3:15pm 
Hey !

I updated the java clicker so that it starts by presenting a screenshot to the user and asking him to click on the buttons.
That way ther's no need to edit the buttons location in the code anymore.

I also added a click on the "start" button so that you just have to hit enter and use the bot

(just click on any button before running the bot so that you can see the "submit" button on the screenshot).

Here is the source code : https://pastebin.com/2v8unKEN

(Sorry for repost. I changed the code and I can't find how to edit comments)
kenpeter 8 Jan, 2024 @ 10:14am 
A 9 blue component solution is possible for "Condition 10". Hint: Negate
Reyquiem 4 Jan, 2024 @ 4:43pm 
Make sure for Binary Counter your MUX gate is also as low as you can get it. I discovered I had stupidly decided to use an adder in it, which shot its gate cost up to almost 90, making it alone invalidate the achievement. Once I redid it to use a bitwise OR instead, the gate cost dropped to 25 and I could get the achievement.