タグ

ブックマーク / www.nishiohirokazu.org (3)

  • 西尾泰和のブログ: 一般化したハノイの塔問題にひそむ規則性

    これは2006年冬のプログラミングシンポジウムの GPCCの会議で出た「棒の数が4以上のハノイの塔はどうなるのだろう」という疑問について、 1月15日に走り書きして放置していた結果( 西尾泰和の日記(2006-01-16) )を清書したものです。 ハノイの塔問題を知らない方は ハノイの塔 - Wikipedia を参考にしてください。 従来のハノイの塔問題では、棒の数は3でした。 この場合、板が1枚ならば1手で動かせますが、 2枚の場合は1枚目を脇にどけて2枚目を動かし1枚目を2枚目の上に戻す、 という3手がかかります。 これを、板の枚数2とスタートとゴールをのぞいた 「一時待避用の棒」の数1とを用いて 「hanoi(2, 1) == 3」と表現します。 また、この待避用の棒が1あることを 「スペースが1個ある」と表現します。 スペースが1個のハノイの塔問題に関しては 「hano

  • 西尾泰和のブログ: Pythonでワンライナーを作成する際のノウハウ集

    これはLL Ringというイベントの「じゃんけん2.0」に出場する際に「多くの構文に改行が必須であるPythonで書かれたじゃんけんエージェントをワンライナーにしていたらウケるかな」と思ってワンライナー化しているときに書いたメモです。自分用のメモのつもりだったので書き殴ってありますが、意外と人気のようなので近いうちに加筆します。 実は後から書いた英語版(How to make oneliner in Python?)の方が整理されているのかも。 完成したワンライナー def文を式にする defは改行を要求するのでlambdaに置き換える必要がある。 def foo(x): return x + 1(ここに改行) foo = lambda x: x + 1 globals().__setitem__("foo", lambda x: x + 1) lambdaは式しか含むことが出来ないので、

    kenkitii
    kenkitii 2006/08/19
    oneliner
  • 西尾泰和のブログ: Pythonで「例外が投げられた関数のローカル変数」を取得

    ローカル変数は関数の外側から参照したり書き換えたりできない、というのはプログラムをモジュール化する上では非常に重要な特徴です。普通にプログラムを組む上では、この縛りを破るべきではないとは思います。 しかし、何か事件が起きたときにはルールに縛られずに思ったことができる力が欲しいですよね。例えば下のようなコード。 def someFunc(): 何かとても時間のかかる処理 ファイルを開いて処理の結果を出力 いざ計算が終わってファイルに出力する段になって「しまった、出力先のファイルをエディタで開いていたせいで書き込みモードで開くのに失敗した!」なんていうシチュエーション、ありますよね。そんなときに泣きながらもう一度計算をやり直さないでいい方法がこちら。 def getLocals(): import sys tb = sys.last_traceback while tb.tb_next: tb

    kenkitii
    kenkitii 2006/07/17
    便利そう
  • 1