Skip to content

Instantly share code, notes, and snippets.

@AndyNovo
Last active October 30, 2023 01:47
blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens
blue blue blue blue blue blue blue blue hens
blue hens hens hens hens hens hens
blue blue blue blue hens hens hens hens hens hens
blue blue blue blue hens hens
blue blue blue blue blue blue blue blue blue hens
blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue hens hens
blue blue blue blue blue blue blue hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens
blue blue blue hens hens hens
blue blue blue blue blue blue blue blue blue hens
blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue hens hens
blue blue blue blue blue blue blue hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens
blue blue hens hens hens hens hens hens hens
blue blue blue blue blue blue blue blue blue hens
blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue hens hens
blue blue blue blue blue blue blue hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens
blue blue blue blue blue blue blue blue blue hens
blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue hens hens
blue blue blue blue blue blue blue hens hens hens hens hens hens hens hens hens hens hens hens hens hens
blue blue hens hens hens
blue blue blue blue blue blue blue blue blue hens
blue blue blue blue blue blue blue hens hens hens hens hens hens hens hens hens hens hens hens hens hens
blue blue blue blue blue blue blue hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens
blue blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue blue hens hens
blue blue blue blue blue hens hens hens hens
blue blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue blue hens hens hens
blue blue blue blue blue hens hens hens hens
blue blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue blue hens hens hens hens
blue blue blue blue blue hens hens hens hens
blue blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue blue hens hens hens hens hens
blue blue blue blue blue hens hens hens hens
blue blue blue blue blue blue blue blue blue blue blue
blue hens hens hens hens
blue blue blue blue hens hens hens hens
blue blue blue blue hens hens
blue blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue blue hens
blue hens hens hens hens hens hens hens hens hens hens hens
blue blue blue blue hens hens hens hens hens hens hens hens
blue blue blue hens
blue blue blue blue blue blue blue blue blue hens
blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue hens hens
blue blue blue blue blue blue blue hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens
blue blue blue hens hens hens hens hens hens hens hens
blue blue blue blue blue blue blue blue blue hens
blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue hens hens
blue blue blue blue blue blue blue hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens
blue blue hens hens hens
blue blue blue blue blue blue blue blue blue hens
blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue hens hens
blue blue blue blue blue blue blue hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens
blue blue blue hens hens hens hens hens hens
blue blue blue blue blue blue blue blue blue hens
blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue hens hens
blue blue blue blue blue blue blue hens hens hens hens hens hens hens hens hens hens hens hens hens hens hens
blue blue blue hens hens hens hens hens hens hens hens
blue blue blue blue blue blue blue blue blue hens
blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue hens hens
blue blue blue blue blue blue blue hens hens hens hens hens hens hens hens hens hens hens hens hens
blue blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue blue hens hens
blue blue blue blue blue hens hens
blue blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue blue hens hens hens
blue blue blue blue blue hens hens
blue blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue blue hens hens hens hens
blue blue blue blue blue hens hens
blue blue blue blue blue blue blue blue blue blue blue
blue blue blue blue blue blue blue blue hens hens hens hens hens
blue blue blue blue blue hens hens
blue blue blue blue blue blue blue blue blue blue blue
#this interpeter written by DavidP
mnem = {
0 : "NOP",
1 : "SET R {0:x}",
2 : "ADD R {0:x}",
3 : "SUB R {0:x}",
4 : "MUL R {0:x}",
5 : "GTL PC {0:x}",
6 : "GBL PC {0:x}",
7 : "GUL PC {0:x}",
8 : "CTA C {0:x}",
9 : "CTS C {0:x}",
10 : "SKP {0:x}",
11 : "PRT R {0:x}"
}
pc = 1
reg = 0
cnt = 0
code = []
lines = open("hello.bluehens", "r").readlines()
code = [(line.count("blue"), line.count("hens")) for line in lines]
code.insert(0, (0, 0))
op=-1
while pc < len(code) and op != 0:
op, arg = code[pc]
m = mnem[op]
#print(pc, m.format(arg))
if op == 1:
reg = arg
elif op == 2:
reg += arg
elif op == 3:
reg -= arg
elif op == 4:
reg *= arg
elif op == 5:
pc = arg
elif op == 6:
pc -= arg
elif op == 7:
pc += arg
elif op == 8:
cnt += arg
elif op == 9:
cnt -= arg
elif op == 10:
if cnt == 0:
pc += 1
elif op == 11:
print(chr(reg), end="")
if op < 5 or op > 7:
pc += 1
print("\n")
import sys
inputname=sys.argv[1]
outputname=sys.argv[2]
f=open(inputname, 'r')
lngstr=f.read()
f.close()
lookup={
"SET": 1,
"ADD": 2,
"SUB": 3,
"MUL": 4,
"GTL": 5,
"GBL": 6,
"GUL": 7,
"CTA": 8,
"CTS": 9,
"SKP": 10,
"PRT": 11
}
lines=lngstr.split("\n")
def henify(line):
if len(line) <= 1:
return "\n"
parts = line.split(";")[0].split(" ")
words=[]
for _ in range(lookup[parts[0]]):
words.append("blue")
for _ in range(int(parts[1])):
words.append("hens")
return " ".join(words)+"\n"
f=open(outputname,'w')
for line in lines:
f.write(henify(line))
f.close()

Blue Hens

Your input is a text file.

Each line may have the word "blue" some number of times followed by the word "hens" some number of times, space-separated.

The number of "blues" on the line is the OPCODE the number of "hens" on that line is the ARG.

The line numbers matter and they start at 1.

Our architecture has 2 variables, a register REG and a counter CTR both start at 0.

OPCODES 1,2,3,4 are arithmetic operations

OPCODES 5,6,7 are gotos

OPCODES 8,9,10 are control flow:

OPCODE 11 is print

OPCODE MNEMONIC ARG? DESCRIPTION OF CODE
1 SET Y Set REG to ARG
2 ADD Y Add ARG to REG
3 SUB Y Sub ARG from REG
4 MUL Y Multiply REG by ARG
5 GTL Y Goto line ARG
6 GBL Y Go back ARG lines
7 GUL Y Go up ARG lines
8 CTA Y Add ARG to CTR
9 CTS Y Sub ARG from CTR
10 SKP N If CTR 0 skip next line
11 PRT N Print REG (ascii)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment