オフラインリアルタイムどう書く E26 の実装例(Ruby)

問題 : https://cedretaber.github.io/doukaku/e26/ 実装リンク集 : https://qiita.com/Nabetani/items/0bcabb80bdcbc9b2ff52

負けました。

とりあえず当日中に書いたのはこんなの。

github.com

縦n列目については n + 1 列目にあるやつをうごかせば揃うなーというのは手で動かしてて気づいたので、それで最下段以外は揃えておく。
このあと最下段が揃った後に、最下段にパターンがあるかなーと思ってそれをなんか後から直せないかなというのが回答方針です。が、パターン見つかるわけないよねーということで敗北。

想定解法まであと2ステップほどひらめきが必要だったので、まあ惜しくもないですね。はい。

この後想定解法を実装し終えたらまた追記します。

追記: 2018-09-03 00:00頃

Comparing 4cfee85e1d9745a95caf954bbe485cef0f114e1c...a38c3c3afdd3c2997603d3661871a4f9808e3ef5 · hkdnet/misc · GitHub

解けました。
なんかしらんが x と y を入れ違えてたりでIFの重要性を感じますね……。Coordinate とか作っときゃよかった(´・ω・`)
見どころはたぶん最初の行の全探索のやり方です。パターン生成するのがめんどかったので to_s(4) で4進数表記したものから生成してます。ほかは面白いとこないかと。

@commands = []
n.to_s(4).chars.reverse_each.with_index do |c, idx|
  cnt = c.to_i
  @commands += Array.new(cnt) { [idx + 1, 1] }
end

# 6 なら 12 なので右端から1つめを2回、2つめを1回 まわすとする