2008-01-12
■ [tetris] 〇手詰め
以下の状況で、あなたならどう置きますか?という問題。20G (SHIRASE後半)で。
詳細は、冒頭の記事を参照して欲しいのですが…
ちょっと感動してしまったので、下にも回答を貼っておきます:-)
評価基準は、
- 操作の簡単さ(コンコン無し、2回の横タメなし、回転を少なく)
- 残りの地形
- HOLDは、使わなくて済むなら使わない方が良い(操作の簡略化、赤の温存)
です。
模範解答はこちら。
その発想は無かった!
上手い人は、「赤のパタパタ」「青の飛ばし(陰謀)」のような1ブロックの操作だけじゃなくて、 こういう2ブロック以上の操作(「2手詰め」「3手詰め」)のようなパターンも頭に入ってるんだろうな、と思った記事でした。
■ [ruby] Rubyと高階関数
そうそう、そういうことが書きたかったのですよー。 ありがとうございます。
Rubyでも関数型言語のように高階関数(的なもの)は使えるんだけど、
- 「関数を引数に取る関数」は通常、ブロックを使って実装される。(Rubyプログラマは多分、それが「高階関数」であるとはあまり意識してない)
- 「関数を返り値として返す関数」はProcオブジェクトを使って実装できるが、あまりしない
- 似たような関数を自動生成するときも、ブロックを使って定義することが多い
という違いがあって面白いなぁ、という。
やっぱり関数そのものがファーストクラスではないという点が影響してるんですかねぇ。 もしくは、これもまつもとさんの思想に誘導されているのか!?
#例えば、「関数が返り値として返す関数」をそのままメソッドにすることって「普通の」方法ではできませんよね。「ふつうの」Rubyプログラマならできると思いますが(笑)。
元図と段差が一段違ってますよー。<br>(この図だと紫で2列消し→青を無回転でスライド入れが成立しそうな。)
直しました。ご指摘ありがとうございます。<br>(段差が4段だと赤を立てられるなぁと思って削ったんですが、たしかにその手順の方が楽になりますね_|‾|○)