30分プログラム

Pythonでsignalハンドラ

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

デーモンプロセスを作ってみる

30分プログラム、その746。デーモンプロセスを作ってみました。 今まで、デーモン的なプログラムを作りたいときはnohupを使ってごまかしてきました。ただ、そろそろnohupと打つのも面倒になってきたので、ちゃんと調べてみました。どうやら forkして親プロセ…

C++で単方向リスト

30分プログラム、その745。C++で単方向リストを書いてみた。 さっきBoostのインストールを開始したんですが、なかなか時間かかりますね。で、その間の暇つぶしに単方向リスト書いてました。 いたるところでnewしてますが、まったくdeleteしてません。だって…

リストから二次元配列への変換

30分プログラム、その744。リストから二次元配列への変換を書いてみた。 Erlangで画像処理がやりたいので、Bitmapを書き出してみよう - みずぴー日記を書いてみた でもバイナリとして読み出すので、特定の座標にアクセスするのが大変 バイナリからRGBのタプ…

テイラー展開によるネイピア数

30分プログラム、その743。Haskellでテイラー展開によるネイピア数を求めてみる。 mixiの課題コミュにインスパイアされています。 数値に関する型クラスがよく分からなくて、A Gentle Introduction to Haskell: Numbersを読みながらやってました。とりあえず…

円周率を求めてみる

30分プログラム、その743。今日3/14は円周率の日らしいです。というわけで、円周率を求めてみました。 計算式は円周率の計算 - みずぴー日記で使ったやつと同じです。 直接計算するのは芸がないので、無限ストリームを定義して、その上でだんだんと精度が上…

基数を指定した数値文字列変換

30分プログラム、その742。数値と文字列の相互変換をやってみました。 単なる相互変換ではおもしろくないので、基数を指定できるようにしてみました。 使い方 scala> strToNum("42",13) res41: Int = 54 scala> numToStr(54,13) res42: String = 42 ソースコ…

回文素数

30分プログラム、その741。回文素数を求めてみる。 旅先の宿からこんにちは。ただいま旅行中につき、ほとんどネットワークにつなげません。というわけで、今日の30分プログラムは一切ぐぐらずに書いてます。かなりつらいですが、なんとかなるものですね。 Tw…

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分プログラム、その739。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_265にインスパイアされました。正規表現にマッチする部分に色をつけてくれるスクリプトです。 使い方 $ perl color_regexp.pl '(na)+' banana banana ソースコード #! /us…

文字の間にwを挟む関数

30分プログラム、その739。文字の間にwを挟む関数を書いてみました。 文字の間に文字を挟むだけなら、intersperseというずばりそのものの関数があります。が、今回は文字列を挟みたかったので自分で書きました。 あと、日本語の文字列(UTF8)を扱うためにutf8…

並列マージソート

30分プログラム、その738。並列版のマージソートを書いてみました。 積読置き場からマルチコアCPUのための並列プログラミングが発掘されたので、そこにのっていた並列マージソートのアルゴリズムを実装してみました。 分割するたびにスレッドを生成する ただ…

HQ9+のインタプリタを作ってみた

30分プログラム、その737。HQ9+のインタプリタを作ってみました。 HQ9+の仕様はHQ9+ - Wikipediaを見てください。要するに、おどろくほど実用性ををもたないネタ言語です。 使い方 sml> run "HHQ+HQ++"; val it = "Hello,world!Hello,world!HHQ+HQ++Hello,wo…

分数クラス

30分プログラム、その736。演算子のオーバーロードを使ってみたかったので、分数クラスを作ってみました。 テンプレートを使って、整数の分数とか浮動少数の分数とかできるのを目指してました。が、約分するときに%を使ってるので、int以外の型を引数として…

Google サジェストを使ってみる

30分プログラム、その735。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_259にインスパイアされて、Googleサジェストの候補をScalaで取得してます。 ScalaにはXMLリテラルがあって、パターンマッチもできるので楽ですね。属性をパターンマッチで…

定規のようなもの

30分プログラム、その734。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_260にインスパイアされて、バールのようなもの、もとい定規のようなものを作ってみました。 stty -aで画面の幅を取得してるんですが、そのためには標準入力が端末につなが…

単利・複利計算

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

スタックを用いたreverse

30分プログラム、その732。mixiの課題コミュからの引用です。一部、日本語がおかしいですがそのまま引用します。 スタックを用いて10 個の整数配列を5 個ずつ順序を入れ替えるプログラムを作りなさ つまり 01234 56789 ↓ 43210 98765と並び替えるプログラム…

更新日が古いダミーファイルを作るプログラム

30分プログラム、その731。更新日(mtime)が古いダミーファイルを作ってみました。 動機は、 一月以上前のファイルだけを消すシェルクスクリプトを書きたい いきなり本番環境じゃ動かせない ダミーファイルを作ろう という感じです。作ってる途中でtouchコマ…

べき集合

30分プログラム、その730。べき集合をもとめる関数。前にべき集合を一行で求めるコードを見たことあるような気がするけど、思い出せなかったし、辿りつけなかった。ちぇー。 使い方 Prelude> powerSet [1..3] [[1,2,3],[2,3],[1,3],[3],[1,2],[2],[1],[]] ソ…

破壊的なstack

30分プログラム、その729。破壊的なstack。 SMLの参照型ってどうやって使うのか気になったので作ってみた。http://www.mpi-sws.org/~rossberg/sml-vs-ocaml.htmlによるとmutableレコードはないらしい。 使い方 - val s : (int Stack.t) = Stack.make(); val …

整数分割

30分プログラム、その728。wikipedia:整数分割をやってみた。"並び順を変えても同じ整数分割とみなす"という条件がわりときつくて、それを満たす引数を一個増やしています。 使い方 scala> partition(5) res9: Seq[List[Int]] = RangeG(List(1, 1, 1, 1, 1),…

中置記法からS式への変換

30分プログラム、その727。中置記法からS式への変換。きっと中置記法から逆ポーランド記法への変換のノリでスタックをいい感じに使ってやればできる気がします。ただ、そのやり方を思い付けなかったので、再帰降下構文解析でパースしてます。 再帰降下型パー…

C++でバブルソート

30分プログラム、その726。C++でバブルソートを書いてみました。C++を使うのは久しぶりです。 久しぶりすぎてほとんど書けませんでした。ホントは、マージソートを書きたかったんですが、結局バブルソートになりました。あと、最初はイテレータを使って書い…

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

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

平均値順にソート

30分プログラム、その724。またもmixiの課題コミュニティからです。 複数の整数を平均値に近い順にソートするプログラムを作成せよ。平均値は切り捨てして整数値で、平均値との距離が等しい場合は値の小さな方を優先するものとする。 らしいです。うっかりし…

画像のグレイスケール化

30分プログラム、その723。Bitmapを書き出してみよう - みずぴー日記で作ったビットマップ読み書きモジュールを使って、画像のグレイスケール化をやってみた。 左のカラフルなハワイの画像をグレースケール化すると、右のようなグレイスケール画像になる。 …

既約分数クイズ

30分プログラム、その722。既約分数クイズにチャレンジしました。 今回は力技で解きましたが、クイズと言うからにはきっとクールな解法があるんでしょう。 使い方 *Main> irreducibleFracs 4 [(0,1),(1,1),(1,2),(1,3),(2,3),(1,4),(3,4)] ソースコード type…

10000以下の完全数を求める

30分プログラム、その721。10000までの完全数をもとめる(Haskell)にインスパイアされました。 元々は、mixiにあった問題らしいです。 使い方 - perfects 10000; val it = [0,6,28,496,8128] : int list ソースコード fun id x = x; fun range n = List.tabul…

ファレイ数列

30分プログラム、その720。mixiの課題コミュニティからのインスパイアです。 趣旨としては、wikipedia:ファレイ数列を生成せよ、という問題です。Wikipediaのページの中盤に書いてある中間数を利用します。 使い方 gosh> (map frac->string (farey 1)) ("0/1…