fork download
  1. f=
  2. #->a{a.size.times{|i|a[i]-=[i];a.size.times{|j|a[i]<<j if a[j].include?(i)};a[i].uniq!};a}
  3. #->a{n=a.size;n.times{|i|a[i]-=[i];n.times{|j|a[i]<<j if a[j].include?(i)};a[i].uniq!};a}
  4. #->a{n=a.size;n.times{|i|a[i]-=[i];n.times{|j|a[i]<<j if a[j].include?(i)}};a.map &:uniq}
  5. #->a{n=a.size;n.times{|i|a[i]-=[i];n.times{|j|a[i]<<j if(a[j]&[i])[0]}};a.map &:uniq}
  6. #->a{n=a.size;n.times{|i|a[i]-=[i];n.times{|j|(a[j]&[i])[0]&&a[i]<<j}};a.map &:uniq}
  7. #->a{n=a.size;n.times{|i|n.times{|j|(a[j]&[i])[0]&&a[i]<<j&&a[i]=a[i].uniq-[i]}};a}
  8. ->k{n=k.size;n.times{|i|n.times{|j|(k[j]&[i])[0]&&k[i]=(k[i]<<j).uniq-[i]}};k}
  9.  
  10. test = [
  11. [[] , []],
  12. [[[0]] , [[]]],
  13. [[[],[0,1]] , [[1],[0]]],
  14. [[[0,1],[]] , [[1],[0]]],
  15. [[[0,1],[0],[1,0,3],[]] , [[1,2],[0,2],[0,1,3],[2]]],
  16. [[[3],[],[5],[3],[1,3],[4]] , [[3],[4],[5],[0,4],[1,3,5],[2,4]]],
  17. [[[0,1],[6],[],[3],[3],[1],[4,2]] , [[1],[0,5,6],[6],[4],[3,6],[1],[1,2,4]]],
  18. [[[6],[0,5,1],[5,4],[3,5],[4],[5,6],[0,3]] , [[1,6],[0,5],[4,5],[5,6],[2],[1,2,3,6],[0,3,5]]],
  19. [[[1,0],[5,1],[5],[1],[5,7],[7,1],[],[1]] , [[1],[0,3,5,7],[5],[1],[5,7],[1,2,4,7],[],[1,4,5]]],
  20. [[[2,8,0,9],[5,2,3,4],[0,2],[3,7,4],[8,1,2],[5,1,9,2],[6,9],[6,5,2,9,0],[9,1,2,0],[3,9]] , [[2,7,8,9],[2,3,4,5,8],[0,1,4,5,7,8],[1,4,7,9],[1,2,3,8],[1,2,7,9],[7,9],[0,2,3,5,6,9],[0,1,2,4,9],[0,3,5,6,7,8]]]
  21. ]
  22.  
  23. test.each_with_index do |t,i|
  24. inp = t[0]
  25. out = t[1]
  26. res = f[inp]
  27. out.map!(&:sort)
  28. res.map!(&:sort)
  29. puts "test #{i} #{out==res ? 'passed' : 'failed'}"
  30. end
Success #stdin #stdout 0.02s 7432KB
stdin
Standard input is empty
stdout
test 0 passed
test 1 passed
test 2 passed
test 3 passed
test 4 passed
test 5 passed
test 6 passed
test 7 passed
test 8 passed
test 9 passed