Skip to content

Instantly share code, notes, and snippets.

@AndyNovo
Last active October 30, 2023 01:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AndyNovo/f2724b38dabaea0700595bbe1c57d364 to your computer and use it in GitHub Desktop.
Save AndyNovo/f2724b38dabaea0700595bbe1c57d364 to your computer and use it in GitHub Desktop.
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