Day 12: Passage Pathing

array = [];
data = Hash.new {|h,k| h[k]=[]}
File.foreach("import.dat").with_index do |line|
  a, b = line.split("-")
  a.strip!
  b.strip!
  data[a] << b
  data[b] << a
end

class String
  def is_lower?
    self == self.downcase
  end
end

def recursive_dfs(data,doubled,visited,path,from)
  if from == "end"
    $i = $i+1
    return true
  end

  if visited.include?(from)
    return false if from == 'start' || doubled
    doubled = true
  end

  data[from].each do |dest|
    if from.is_lower?
      visited = visited + [from]
    end
    recursive_dfs(data,doubled,visited,path,dest)
  end
end

$i = 0
recursive_dfs(data,true,[],[],"start")
p $i

$i = 0
recursive_dfs(data,false,[],[],"start")
p $i

メモ

再帰関数を使って解く問題②。経路探索。Day 9の問題は途中で良くわからなくなったが、こっちの問題はなんとか最後まで解くことが出来た。いずれにせよ、再帰関数にある苦手意識を払拭しなくては。