2005-06-21から1日間の記事一覧

切り詰め作業

len(s) を引数で渡すように変更し、見やすさを捨てて余計な改行やスペース等をすべて取り除き、改行コードを CR+LF から LF に変更し……等々、数々の切り詰めを作業を行ったが、それでもまだ 128byte もある。記述方法自体に問題がありそうだなぁ。

思考過程4

できた! def f(s): t = len(s) + 1 return map(lambda i: s[:i] + str(t) + s[i:], range(0, t)) L = ['1'] for x in L: if len(x) < 7: L += f(x) else: print xが、160byte くらい使ってるなぁ。 とりあえず 100byte を切れないか、いろいろ考えてみよう。

思考過程3

長さ n の文字列を食わせて長さ n+1 の文字列のリストを得る関数はできた。 def f(s): return map(lambda i: s[:i] + str(len(s) + 1) + s[i:], range(0, len(s) + 1))例えば、"123456" を食わせると f('123456') ['7123456', '1723456', '1273456', '123745…

思考過程2

さっきのは 3 までの決め打ちなので、使い回せない。ただ、この方針で煮詰めてみる価値はありそう。とりあえず、問題を帰納的に捉えてみよう。 問題の条件を満たす、長さ n の文字列を仮定する。 この文字列に n+1 を挿入する。挿入する位置は n+1 箇所ある…

思考過程

とりあえず 1 から 3 までの数え上げを考えてみる。 Python で書くと、 v = range(1, 4) [100*x+10*y+z for x in v for y in v for z in v if (x!=y) and (y!=z) and (z!=x)]こんな感じか? 出力結果は、 [123, 132, 213, 231, 312, 321]ん、大丈夫っぽい。 …

順列の数え上げ

1 から 7 までの数字を一回だけ使って作れる、7 文字の文字列のすべての組み合わせを出力するプログラムを、「できるだけ短く」書け。 言語は自由。実行速度不問。

切り詰め作業2

そもそも、一度しか呼ばない関数をわざわざ定義する意味なんぞないことに気づけという話か。 L=['1'] for x in L: n=len(x)+1 if n<8:L+=map(lambda i:x[:i]+str(n)+x[i:],range(n)) else:print xこれで 99byte! なんとか 100byte 切りは達成。