Skip to content

Instantly share code, notes, and snippets.

@buyoh
Last active June 6, 2016 13:31
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 buyoh/f13d1a7410ca9688cdef4eafb1b48222 to your computer and use it in GitHub Desktop.
Save buyoh/f13d1a7410ca9688cdef4eafb1b48222 to your computer and use it in GitHub Desktop.
書き込み可能有限オートマトン
#
# 書き込み可能有限オートマトン
# WW^Rを受理する (w in {1,2,3})
#
# OK 12311321
# OK 2222
# NG 123123
@tape=("$"+gets.chomp+"&").chars.to_a
@pos=1
@stat=0
@automata={}
@automata[[0,"1"]]=[1,1,"9"]
@automata[[0,"2"]]=[2,1,"9"]
@automata[[0,"3"]]=[3,1,"9"]
@automata[[1,"1"]]=[1,1,nil]
@automata[[1,"2"]]=[1,1,nil]
@automata[[1,"3"]]=[1,1,nil]
@automata[[1,"9"]]=[4,-1,nil]
@automata[[1,"&"]]=[4,-1,nil]
@automata[[2,"1"]]=[2,1,nil]
@automata[[2,"2"]]=[2,1,nil]
@automata[[2,"3"]]=[2,1,nil]
@automata[[2,"9"]]=[5,-1,nil]
@automata[[2,"&"]]=[5,-1,nil]
@automata[[3,"1"]]=[3,1,nil]
@automata[[3,"2"]]=[3,1,nil]
@automata[[3,"3"]]=[3,1,nil]
@automata[[3,"9"]]=[6,-1,nil]
@automata[[3,"&"]]=[6,-1,nil]
@automata[[4,"1"]]=[7,-1,"9"]
@automata[[5,"2"]]=[7,-1,"9"]
@automata[[6,"3"]]=[7,-1,"9"]
@automata[[7,"9"]]=[nil,0,nil] # exit
@automata[[7,"1"]]=[8,-1,nil]
@automata[[7,"2"]]=[8,-1,nil]
@automata[[7,"3"]]=[8,-1,nil]
@automata[[8,"1"]]=[8,-1,nil]
@automata[[8,"2"]]=[8,-1,nil]
@automata[[8,"3"]]=[8,-1,nil]
@automata[[8,"9"]]=[0,1,nil]
loop{
char = @tape[@pos]
nxt = @automata[[@stat,char]]
p [@tape,@pos,@stat,char]
if !nxt
puts "NG";exit
elsif nxt[0]==nil
puts "OK";exit
end
@stat=nxt[0]
@tape[@pos]=nxt[2] if nxt[2]
@pos+=nxt[1]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment