Skip to content

Instantly share code, notes, and snippets.

@zaach
Created July 1, 2009 00:20
Show Gist options
  • Save zaach/138518 to your computer and use it in GitHub Desktop.
Save zaach/138518 to your computer and use it in GitHub Desktop.
require 'socket'
@socket =IO.popen('nc pwn2.ddtek.biz 11511', 'w+')
@socket.print('MAZE4J002PLAY')
@socket.gets
@socket.gets
UP = 'n'
DOWN = 's'
LEFT = 'w'
RIGHT = 'e'
WALL = '#'
START = 's'
FINISH = 'f'
def mazer(socket)
maze = []
loop do
begin
mazeline = @socket.gets.chomp
$stderr.puts mazeline
maze << mazeline
break if mazeline =~ /^\#+$/ && maze.length > 1 # fence
rescue NoMethodError => e
#$stderr.puts "FAIL #{e}"
@socket.close
break
end
end
#mazestr = socket.read
#maze = mazestr.split("\n")
#puts maze || "FAIL?"
i = 0
maze.map! {|l|
l.split('')
}
@a = 0
@b = 0
@s = []
@g = []
@dirs = []
solve(maze)
puts @dirs.join('')
@socket.puts @dirs.join('')
@socket.flush
sleep 1
end
def solve(maze)
x = maze[0].length
y = maze.length*x
gg = 0
ss = nil
y.times do |i|
@s[i] = -1; @g[i] = -1
ch = maze[i/x][i%x]
@s[i] = -2 if ch == WALL
ss = i if ch == START
gg = i if ch == FINISH
end
return unless ss
@a = gg
@b = gg
while @a != ss do
add(@a,1)
add(@a,-1)
add(@a,x)
add(@a,-x)
@a=@s[@a]
end
while @a !=gg do
@dirs << sv(@g[@a])
@a+=@g[@a]
end
puts "exhausted"
end
def add(p,o)
if @s[p+o] == -1 then
@s[@b] = p+o
@b=p+o
@g[p+o]=-o
end
end
def sv(o)
o > 0 ?
o==1 ? RIGHT : DOWN :
o==-1 ? LEFT : UP
end
puts 'Begin'
200.times do |i|
puts "NEXT: #{i}"
mazer(@socket)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment