Talk:Switchy

From Esolang
Jump to navigation Jump to search

Interpreter

I have created a Switchy interpreter in ruby:

stack = []
labels = {}
flip = false
counter = 0
print "#{Dir.pwd} filepath> "
program = File.open(gets.delete("\n"),"r").read.split(//)
while counter < program.count
if program[counter] == "("
		lbl = ""
		counter+=1
		while program[counter] != ")"
			lbl+=program[counter]
			counter += 1
		end
	 labels[lbl] = counter
end
counter+=1
end
counter = 0 
while counter < program.count
	case program[counter]
	when '#'
		stack << (flip ? stack.pop - stack.pop : stack.pop + stack.pop)
	when '*'
		(flip ? stack.pop : stack.push(1))
	when "'"
		(flip ? (print stack[stack.count-1].chr) : stack << gets.delete("\n")[0])
	when "["
		lbl = ""
		counter+=1
		while program[counter] != "]"
			lbl+=program[counter]
			counter += 1
		end
		counter = labels[lbl] 
	end
	((program[counter]=~/[\#|\*|\']/)==0 ? begin flip=!flip;stack.reverse! end : flip=flip)
	counter+=1
end

I think it works, but I have only tested the cat program with it. OriginalOldMan (talk) 17:42, 25 October 2013 (UTC)

Actually, I don't believe the cat program listed on the Switchy page is correct due to the fact that the stack is reversed every cycle. OriginalOldMan (talk) 22:19, 25 October 2013 (UTC)

Dang, you're right. I'll make a fixed cat program. Poolala (talk) 01:42, 26 October 2013 (UTC)

You could add a no-op to make a cat program possible, or there could be a 'Switchy++' with a no-op (of course the no-op would have to trigger a clock cycle). OriginalOldMan (talk) 02:53, 26 October 2013 (UTC)

The reason I made this language was so every program would be difficult to write, and a noop would make it too easy IMO. Poolala (talk) 03:58, 26 October 2013 (UTC)

True. OriginalOldMan (talk) 04:22, 26 October 2013 (UTC)

Does Switchy allow you to jump to labels further forward in the program than the current position? If so, I will need to change the interpreter. OriginalOldMan (talk) 05:56, 26 October 2013 (UTC)

Yes. Poolala (talk) 06:31, 26 October 2013 (UTC)

Compuational Class

It's not Turing complete. You can't get more than one item on the stack at a time.

 -A program can't start with an addition(# with flip=0) because the stack starts with 0 items.
 -Therefor it must start with a push 1(* with flip=0) or input(' with flip=0) (or a jump that leads to one of these two things).
 -The stack now must either have a single 1 or the first input, and flip=1.
 -The next action can't be a subtraction(# with flip=1) because the stack only has 1 item.
 -Therefor it must either pop(* with flip=1) or output(' with flip=1) (or a jump that leads to one of these two things)
 -Both of these pop from the stack, so our stack of either 1 or the first input is now empty again.
 -The cycle keeps repeating until the code ends 

JeffryThunderStrike (talk) 19:35, 24 October 2017 (UTC)

Be bold in editing pages --StellatedHexahedron (talk) 15:27, 25 October 2017 (UTC)