Python

iteratorは遅延リストの代わりにはならないよ

Pythonのイテレータは、itertools — Functions creating iterators for efficient looping — Python 3.7.3 documentationみたいなモジュールがあるくらいだし、わりと遅延リストの代わりに使える。 でも、やっぱりイテレータはイテレータであって、遅延リス…

10進数をN進数に基数変換する

30分プログラム、その631。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_055にインスパイアされました。 上記のサイトと同様に、第1引数に整数、第2引数に変換したい基数を受け取って、文字列化した整数を返すようになっています。 使い方 # 8進…

Pythonでunfold

foldに似たreduceがあるなら、unfoldに似た関数があってもいいじゃない。 def unreduce(f,x): y = f(x) while y != None: yield y[0] y = f(y[1]) これで整数を各桁ごとに分解するコードが簡単に書けちゃうよ。 base = 10 # 10進数にしたときの各桁に分解す…

グレイコードの出力

30分プログラム、その627。anarchy golf - Gray code via はてなグループをやってみる。 最初は、2進数をずらずらと並べればいいと思ってたけれども、グレイコード - Wikipediaを読むとどうもそうではないらしい。 細かいことはよくわからなかったけれども、…

RubyのForwardableモジュールをPythonでも

30分プログラム、その624。RubyのForwardableモジュールをPythonに移植してみた。委譲 とか好きだからー。Forwardableは、単に委譲するだけのメッソドを手書きするのはバカらしいから、簡単に書けるようにするモジュール。くわしくは、るびまを見るといいと…

wc、再び

30分プログラム、その620。昔にやったwcを再実装してみる。 which コマンドの実装の書き直し - forest bookを読んで、昔やったのをもう一度やってみるのもおもしろいかも、と思ったのでやってみる。 前にやったのはwc.py - みずぴー日記と実に2年以上前。 全…

リングバッファ作ってみた

30分プログラム、その616。Pythonでリングバッファ作ってみた。Cの宿題/未分類 - C/C++の宿題を片付けます@wiki - アットウィキにインスパイアされて、リングバッファを実装してみました。 使い方 q = RingBuffer(4) q.add(10) q.add(11) q.add(12) q.add(13…

リストのディープコピー

30分プログラム、その613。リストのディープコピーをやってみる。 みんな、Pythonでリストをコピーするには、どうしたらいいか知ってる? map(None,L) って書くんだよ。 mapを使うとこは、すんなり理解できるけど、まさか恒等関数の代わりにNoneを使うとは! …

auxをコミットできないようにするスクリプト

30分プログラム、その610。 レポジトリを破壊する簡単な方法しってます? aux.txtというファイルをコミットするだけで、Windowsでそのレポジトリをチェックアウトできなくなるんですよ。 よくは知らないですが、MS-DOSから続く伝統らしいです。誰が得すんだよ…

多項式の加算

30分プログラム、その605。SICPに乗ってた多項式の加算をやってみよう。 輪講でやってる計算機プログラムの構造と解釈に、多項式の演算を定義してみよう、というのがでてきたのでやってみる。 わりかし大変だったので、変数が1個の多項式だけを対象にして、…

最も0に近い数字を求める、その2

30分プログラム、その600。最も0に近い数字を求める、その2。 id:osiireさんに"doubleの最小値はe-300ぐらいですよ"と言われたので、やりなおしてみる。1と比較しているのが原因だから、"2で割ると0になるような数字"を探せばいいはずだ。 途中で再帰が深す…

Pythonでflatten(リストを潰す関数)

30分プログラム、その595。Pythonでflatten(リストを潰す関数)を作ってみる。 flattenはRubyにあるメノッドでネストされた配列を平坦にしてくれる。 >> [1,2,[3,4]].flatten => [1, 2, 3, 4] これをPythonでやってみよう。せっかくだから、イテレータを持っ…

素因数分解(コードジェネレータ版)

30分プログラム、その591。もういっかい素因数分解をやってみる。 id:Gemma:20090523で「おめー書いたエラトステネスの篩は遅すぎるぜー」と言われてしまった。 OK、そんなに速度のことを言うんだったら、素数を定数として埋めこんでやんよ。 でも、手で書く…

ベンフォードの法則を確かめてみる

30分プログラム、その584。素数の分布はベンフォードの法則に従っているらしいので試してみる。 「ベンフォードの法則」とは、ある数値群をみたとき、最高桁が「1」である数値は(15や189や1088など)は全体の約30%、「2」であるものは約18%、「3」であるも…

MacBookのバッテリーの残量をGrowlに通知する

30分プログラム、その577。MacBookのバッテリーの残量をGrowlに通知してみる。昔にやったMacBookのバッテリー残量表示 - みずぴー日記とPythonでGrowlに通知を出してみる - みずぴー日記を組合せれば簡単にできる。 5分おきに残量をチェックして40%以下だっ…

PythonでBASIC認証

30分プログラム、その572。PythonでBASIC認証をやってみる。 PythonでBASIC認証をやる流れは、 パスワードをマネージャ(Mgr)に登録する マネージャからhandlerを作る handlerからopenerを作る(build_opener) openerをインストールする(install_opener) urlop…

17歳とx日ジェネレータ

30分プログラム、その565。17歳とx日ジェネレータ via http://ja.doukaku.org/236/。 誕生日を入力すると、「17歳と何日か」、「17歳と何か月と何日か」を表示するプログラムを作ってください。 でも、何か月かを表示する部分は大変だったので、「17歳と何…

PythonでGrowlに通知を出してみる

30分プログラム、その559。PythonでGrowlに通知を出してみる。 Growlに通知を出すにはどうするんだろう、と思って調べてみたけど、予想以上に簡単で驚いた。まあ、バインディングが用意されているのが多きいんだろうけど。 インストール Growl - Developer D…

各位の和を10の倍数にする

30分プログラム、その555。http://kanasoku.blog82.fc2.com/blog-entry-9709.html via http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_116をやってみよう。元々の問題はこんな感じのを、C言語で解くのが問題。 入力された整数の各桁の和が10の倍数…

GoogleAppEngineでテンプレートと静的ファイル

30分プログラム、その551。GoogleAppEngineでテンプレートと静的ファイルを使おう。 テンプレートを使う templates/index.htmlに適当なファイルを作って、template.renderを使って表示してやる。 templateモジュールにはたいした機能がないので、djangoモジ…

いまさらだけどGoogleAppEngineを使ってみる

30分プログラム、その550。いまさらだけどGoogleAppEngineを使ってみる。 ダウンロード/インストール http://code.google.com/intl/ja/appengine/downloads.htmlからダウンロードする。展開したあとは、/Applications/にでも放り込んどけばいい。 新規作成 …

Re:Re:PythonでRubyのeach_with_indexみたいなもの

30分プログラム、その544。PythonでRubyのeach_with_indexみたいなもの。 kyeeva blog!を読んで、そういえばRuby1.9から [1,2,3].each.with_index do|x,i| p x,i end って書けるようになったんだよなぁ、と思ったのでやってみた。最終的に、 for (x,i) in ls…

文字列の反転(UTF8対応)

30分プログラム、その539。文字列の反転(UTF8対応)をやってみた。 文字列の反転は簡単だけど、日本語対応も含めるとわりと大変そうだなぁ、と思ってやってみた。 が、日本語対応も考えなくても難しかった。なんで、Pythonには破壊的なreverseしかないんだよ…

tinyurl.comを使ったURLの省略

30分プログラム、その535。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_039のようにtinyurl.comを使ってURLを省略してみよう。 要するに、http://tinyurl.com/api-create.phpにURLを渡してやればいいらしい。 $ curl http://tinyurl.com/api-cr…

Fluent Interface(流れるようなインタフェース)をPythonでやってみよう

30分プログラム、その529。ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーションを読んでいたら「言語内にDSLを作りたいときは、Fluent Interface(流れるようなインタフェース)を使うといいよ!」と書いてあった。 そう…

Python3.0のアノテーションを使ってみる

30分プログラム、その525。What’s New In Python 3.0 — Python v3.0.1 documentationを眺めていたら、関数アノテーションがおもしろそうだったので、試してみる。 # 引数にアノテーションをつける def compile(source: "something compilable", filename: "w…

easy_installを使ってみよう

30分プログラム、その517。Pythonのパッケージ管理システムのeasy_insatllを試してみよう。 Perlのcpan、Rubyのgem、Pythonのeasy_installらしい。こういうのがあるとライブラリのインストールが楽なんですよね。 検索 わからない。PyPI – the Python Packag…

Inlineを使って、Perlの中にPythonを埋め込んじゃう

30分プログラム、その510。Inlineを使って、Perlの中にPythonを埋め込んでみる。 "port search python"の結果を眺めていたら、"p5-inline: Write Perl subroutines in other programming languages"なるものを見つけた。これを使うと、Perlの中にCやJava、Py…

遅延リストでフィボナッチ数

30分プログラム、その504。今日、ミーティングで遅延リストの話をしたので、遅延リストを使ってフィボナッチ数を書いてみる。 最初、 improt itertools def ones(): return itertools.chain([1],ones()) とやったら、えらい目にあってしまった。 しょうがな…

サイズ表示を読みやすくする

30分プログラム、その447。サイズ表示を読みやすくする。 clmemo@aka: Linux でプロセスごとのメモリー使用量を調べるによると、psにlオプションを与えてやると各プロセスのメモリ使用量を表示してくれるらしい。 # RSSの列 UID PID PPID CPU PRI NI VSZ RSS…