Python

サーバを作りながら学ぶWebSocketプロトコル

WebSocketって何? WebSocketは、Javascriptでサーバとリアルタイム双方向通信をする仕組みです。概要は第1回 WebSocket登場までの歴史:Jettyで始めるWebSocket超入門|gihyo.jp … 技術評論社によくまとまっています。この記事ではWebSocketサーバを実装しな…

wc、3たび

30分プログラム、その801。 何度かといてるwc(wc.py - みずぴー日記,http://d.hatena.ne.jp/mzp/20090714/wc)を、また作ってみた。 仕様がちがっとるやんorz。 使い方 $ python wc.py foo.txt 21 75 431 ソースコード #! /usr/bin/python # -*- mode:python;…

各文字の出現回数を数える

30分プログラム、その795。anarchy golf - asunderにインスパイアされました。 入力中のアルファベットの出現回数を数えます。たぶん暗号解読に便利な頻度表の作成に便利なんじゃないですかね(適当)。 使い方 $ echo abc | python asunder.py A: 0 B: 0 C: 0…

ハミング数のリストアップ

30分プログラム、その788。ハミング数の列挙をやってみました。 Regular number - Wikipediaによると2^n・3^m・5^rで表せる整数のことをハミング数と呼ぶらしいです。 なんか遅延リストとfilterを組合せたクールな方法でやりたかったんですけど、うまくいき…

エンディアンの変換

30分プログラム、その787。anarchy golf - Little Endian Calculatorにインスパイアされて、エンディアンの変換をやってみました。 8ビットごとに区切って順番をひっくりかえしているだけです。 使い方 >>> "%x" % flip_endian(0x3310) '1033't2 ソースコー…

文字列を斜めに表示する

30分プログラム、その780。anarchy golf - slope linesにインスパイアされました。 xs.reverse()は破壊的な操作なのでぐんんよりですけど、reversed(xs)は反転したイテレータを返してくれるのでいい感じです。 使い方 $ python slope-line.py hello o l l e …

最長共通部分列(Longest Common Subsequence; LCS)を求めてみる

30分プログラム、その774。最長共通部分列(Longest Common Subsequence; LCS)を求めてみました。 LCSが何かについては最長共通部分列問題 (Longest Common Subsequence) - naoyaのはてなダイアリーに詳しく書かれているので、そちらを参照してください。 動…

述語をもとにリストを2つに分ける関数を書いてみた

30分プログラム、その767。述語をもとにリストを2つに分ける関数を書いてみた。例えば、整数のリストxsにたいして partition(lambda x : x % 2 == 0, xs)とやってやると、偶数のリストと奇数のリストに分割してくれる。 使い方 print partition(lambda x : x…

素数を数える

30分プログラム、その762。 またもいいネタがないので、素数を数えました。エラトステネスのふるいを使うのも芸がないので、フェルマーテストにしました。 使い方 $ python prime.py 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 9…

今月が何日まであるか

30分プログラム、その754。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_210にインスパイアされて、今月が何日まであるかを表示してみます。 next_monthの計算がちょっと面倒でした。 使い方 ~/c/code/croquis $ python month_rest.py 30 ソース…

Pythonでsignalハンドラ

30分プログラム、その747。Pythonでsignalハンドラを設定してみる。昨日はデーモンを作ってみたので、今日はシグナルに反応するプログラムです。SIGINTを無視するので、Ctrl-Cで終了できないプログラムを作ってみました。 使い方 $ signal_act.py ^C never d…

Google API から天気の取得

30分プログラム、その740。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_263にインスパイアされました。 Pythonなら、Webからの取得もXMLのパースも楽チンです。 使い方 $ python tenki.py Cloudy 5 Humidity: 72% Wind: NW at 10 mph ソースコ…

単利・複利計算

30分プログラム、その733。またもmixiからです。 問題文がよく分からなかったので、単利の計算と複利の計算をする関数を書け、と理解しました。たぶん違うけど。複利計算を def complex(interest, x): chain([x],complex(interest, x * (1 + interest))) で…

マクローリン展開でsin関数

30分プログラム、その725。マクローリン展開でsin関数を作ってみました。 簡単だと思いきや結構大変でした。そもそもラジアンなる単位を半分ぐらい忘れてました。コードは、itertoolsを使ってやるために、ちょっと工夫をしてます。n番目の項を直接計算するの…

数え年の計算

30分プログラム、その718。数え年の計算。 今まで満年齢+1が数え年だと思っていたんですが、どうやらそこまで単純なルールではないらしいです。数え年 - Wikipediaによると、 生れたときは1才 年をまたぐと年齢がインクリメントされる というルールだそうで…

今日の日付をクリスマス イブイブ...の形式で表示する

30分プログラム、その712。今日の日付をクリスマス イブイブ...の形式で表示してみます。世間には、23日のことをクリスマス・イブ・イブと呼ぶ風習があるそうです。もっとすごいのになると、クリスマス・イブ・イブ・イブ・イブとかもあるそうです。 世間の…

Pythonでsl

30分プログラム、その705。前にcursesみたいにターミナルの任意の位置にテキストを出す関数 - みずぴー日記でcursesを使わずに端末の好きな位置に文字を出せるようになったので、slを作ってみました。 Perlで使っていた\eがPythonでは使えなかったので、hi_s…

一番長いコマンド名

30分プログラム、その697。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_239からの逆輸入です。 一番、長いコマンド名を探してみましょう。 使い方 $ python longest-command.py powerpc-apple-darwin9.7.0-gfortran-mp-4.3あー、アーキテクチャ…

2文字のコマンドを探そう

30分プログラム、その695。2文字のコマンドを探してみましょう。 Unixのコマンドは、lsとかddのように短いものが多い印象があります。では、実際に1文字や2文字のコマンドは何個ぐらいあるのか調べてみました。 使い方 1文字コマンドはわりと少ない。 $ pyth…

JsonValidator

30分プログラム、その687。JsonValidatorを作ってみた。 最近、とある事情で、他の人にJsonのバリデータを作らせて、そのコードレビューしてます。それはそれで楽しいけれど、やっぱり自分でコードが書きたい! というわけで、Jsonバリデータを作ってみました…

watchコマンドを作ってみた

30分プログラム、その680。watchコマンドを作ってみました。watchコマンドって知っていますか? $ watch hogehogeとやると、一定時間ごとにhogehogeを実行して画面を更新してくれるコマンドです。 watch dateで時計変わりにしたり、watch lsでファイルが作ら…

Twitterの流量を計算してみよう

30分プログラム、その673。Twitterの流量を計算してみました。 Twitterには"流量"という概念があるらしいです。よく分かんないんですが、「自分のTLで、1時間あたり何回発言が行なわれたか」というニュアンスみたいです。 わりとおもしろそうなネタなので、…

与えられた文字列を、#で囲むプログラム

30分プログラム、その666。与えられた文字列を、#で囲むプログラムを書いてみた。以下のような動作をするプログラムを書いてみた。 $ python border.py 1st "HELO WORLD" ############## # # # HELO WORLD # # # ##############特に目的は考えてないんですけ…

オイラー定数を計算してみた

30分プログラム、その655。オイラー定数を計算してみました。 京都に旅行に行ってきました! 旅行中に、ふらふらっとジュンク堂に入ったらオイラー定数1000000桁表が置いてあったので、つい買ってしまいました。 で、せっかく買ったので、オイラー定数を計算…

itertoolsで素数計算

30分プログラム、その651。itertoolsで素数計算をしてみた。今日、ちょっと動揺することがあったので、心を落ち着けるために素数を数えるコードを書いてみました。ネタのつもりだったんですけど、わりと落ち着きました。よかったです。で、その辺のことはお…

ソートされた複数のCSVファイルを結合するスクリプト

30分プログラム、その647。ソートされた複数のCSVファイルを結合するスクリプト - pgyの日記に再チャレンジ! いろいろがんばってみたけど、どうもうまくいかない。やっぱり、iteratorは遅延リストの代わりにはならないよ - みずぴー日記に書いた制約がきびし…

PythonでCSV読み込み

30分プログラム、その646。PythonでCSV読み込んでみた。 ソートされた複数のCSVファイルを結合するスクリプト - pgyの日記をやろうとしたけど、うまくいかなかった。 とりあえず、CSV読み込み部分だけをどうぞ。 使い方 $ python csv-read.py data1.csv {'da…

答えを与えると、ランダムに式を生成するプログラム

30分プログラム、その643。にインスパイアされて、答えからランダムに式を生成するプログラムを作ってみました。 例えば、42を与えると「1+41」とか「6*7」とかを生成してくれます。あと、どれくらいの深さまで部分式を展開するかも指定できるようにしました…

cursesを試そう

30分プログラム、その638。cursesを試そう。 anarchy golf - Dancing KidsのDancingKidsがわりとかわいい。これをアニメーションにしたらおもしろいんじゃないかな、と思ったので、とりあえずcursesを調べてみた。 使い方 $ python hello.py ソースコード #!…

連続した空白行を検出するスクリプト

30分プログラム、その634。連続した空白行を検出するスクリプトを書いてみた。 連続した空白行は意図していれることもあるけど、たいていはうっかり改行をいれすぎちゃったときのほうが多い。 別にそれくらいいいじゃん、とかいう話はおいといて、とりあえず…