Perl

逆ポーランド記法。もしくは3年前の自分との勝負

30分プログラム、その800。 3年前にやったお題(2007-04-16 - みずぴー日記)を再び解いてみた。 多少、スマートになってるようで、ちょっと安心した。 使い方 $ perl rpn.pl 3 2 1 + \* 9 ソースコード #! /usr/bin/perl # -*- mode:perl; coding:utf-8 -*- u…

ブロックソートの復号

30分プログラム、その794。id:mzp:20100814:bwtの続きでブロックソートの復号。 ブロックソート - Wikipediaには『復号は簡単』って書いてあったけど、普通に難しかったよ! あとなんかキレいに書けなかったよ! 使い方 $ perl block_sort.pl 3 ccoaa cacao ソ…

テキストのn行目以降を取得する

30分プログラム、その786。http://aligach.net/diary/20100617.html#p01:tilteにインスパイアされました。 tailでできるらしいけど、あえてPerlで。ついでにコマンドラインオプションのパースもやってみた。 使い方 $ jot 10| perl rest.pl -n 0 1 2 3 4 5 6…

FMLの最新の投稿を表示(RSSのダウンロードと表示)

30分プログラム、その779。英語のお勉強になる気がしたので、FML : Your everyday life storiesの最新の投稿を表示するプログラムを書いてみました。 RSSをダウンロードして本文部分を表示してるだけです。 使い方 $ perl fml.pl Today, I broke my nose ope…

xargsっぽいのを作ってみた

30分プログラム、その773。xargsっぽいのを作ってみた。xargsそのものについてはxargs - Wikipediaを参照してください。重要な部分だけを引用すると下記のようになります。 xargs(エックスアーグズ)はほとんどの UNIX 系オペレーティングシステムに用意さ…

パスカルの三角形

30分プログラム、その766。パスカルの三角形を書いてみる。 久しぶりなのでリハビリがてら簡単なやつを。Perlだとzipが使えなくてつらかったです。 使い方 $ perl pascal_tri.pl 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35…

階乗計算

30分プログラム、その761。 特にやることも思いつかないので、階乗を計算してみました。一応、末尾再帰にしてみました。 使い方 $ perl fact.pl 1 2 3 5 8 13 21 34 55 89 144 ソースコード #! /usr/bin/perl # -*- mode:perl; coding:utf-8 -*- use strict;…

中央値の計算

30分プログラム、その753。中央値の計算をしてみました。 もうちょっと複雑かと思いきや、わりと簡単でした。簡単だったので特に書くことがないです。 使い方 print mid(1,2,3),"\n"; # => 2 print mid(5,3,1),"\n"; # => 3 ソースコード #! /usr/bin/perl #…

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

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

正規表現の練習

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

文字数をカウントするirssiプラグイン

これ何? irssiというIRCクライアントのプラグインです。 入力した文字数を表示するので、tig.rbのようなTwitterとIRCをつなぐゲートウェイと併用すると便利です。 使い方 word_count.pl · GitHubをダウンロードして、~/.irssi/scriptsに置いてください。 あ…

スタックを用いたreverse

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

平均値順にソート

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

普通のキュー

30分プログラム、その717。最近、functionalなキューばかり作っていたので、普通のキューも作ってみました。 ま、Perlだから配列にpushしてshiftするとキューになるんですけどね! せっかくなので、オブジェクトっぽくしておきました。 使い方 my $q = Queue-…

OCaml経験値

30分プログラム、その711。TwitterでOCaml経験値なるもので盛り上っていました。 Ken Wakita@kwakita ML 経験値 = セミコロン数/ファイルサイズ RT @camlspotter: 何となく ML に移行してきた人が書いた ref を山程使ったコードとか、見る機会があると、心配…

MacPortsでdeactiveなportを削除するスクリプト

追記: port uninstall inactiveでできます。 追記2: port uninstall -uでもできます。30分プログラム、その704。MacPortsでdeactiveなportを削除するスクリプト。 MacPortsを長い間使っていると、古いportがたまってきます。 # (active)以外が古いport $ por…

cursesみたいにターミナルの任意の位置にテキストを出す関数

30分プログラム、その703。cursesのmvaddstrみたいにターミナルの任意の位置にテキストを出す関数を作ってみた。 エスケープシケンスを使えば、好きな位置に文字を出すぐらいなら簡単にできるということを知りました。今まで、cursesが必須だと思ってたのに!…

プログラムが140文字以内かをチェックするプログラム

30分プログラム、その697。プログラムが140文字以内かをチェックするプログラム。 最近、140文字以内でプログラムを書くのがはやっているらしいです。とりあえず、140文字以内かどうかをチェックするプログラムを書いてみましょう。 使い方 $ perl byte-chec…

ビンゴゲーム・ジェネレータ

30分プログラム、その696。ビンゴゲーム・ジェネレータ。とはいっても、実際にシートを作るわけではく、ターミナルにテキストを吐き出すだけです。 9 34 72 74 10 93 16 36 95 61 3 12 * 32 34 64 77 64 57 2 51 24 42 92 0要するに 5x5のマス目に数字を並べ…

パスワードジェネレータ

30分プログラム、その694。パスワードジェネレータを作ってみました。 世の中には色々な基準でパスワードを作ってくれるジェネレータがありますが、今回は単純なランダムな文字列を生成するやつを作りました。 使い方 $ perl gen_pwd.pl Yncw":o-dSGRn ]L5>5…

一番長いファイル名を探すプログラム

30分プログラム、その686。一番長いファイル名を探すプログラム。 とあるディレクトリでlsしたら、結果が一行で表示されてしまいました。これはきっと、すごく長いファイル名があるせいで、複数行表示ができなくなっているに違いない! というわけで、ファイ…

Games::Puzzles::SendMoreMoneyを試してみた

30分プログラム、その679。Games::Puzzles::SendMoreMoneyを試してみた。 前に誰かが「CPANにはSEND+MORE=MONEYを解くためだけのモジュールがあるんだぜ。ちょううけるwww」と言っていたことを思いだしたので、試してみました。 サンプルコード my $solver =…

コマンドラインでストップウォッチ

30分プログラム、その672。コマンドラインで動作するストップウォッチを作ってみた。 perl stopwatch.plで起動すると、経過時間を延々と表示してくれます。 操作方法は、Enterを押せばラップタイム、C-cで終了、C-zで一時停止、ということにしといてください…

log(自然対数)の計算

30分プログラム、その665。log(自然対数)の計算をしてみる。 logの近似式について -log(常用対数)の近似式を教えて戴きたいです。- 数学 | 教えて!gooというページを見付けました。ようするに、『ボクの環境だとlogがないんだけど、なんかいい近似式しらな…

ファイルの先頭のコメントを除去するスクリプト

30分プログラム、その659。ファイルの先頭にテキストを追加するスクリプト - みずぴー日記の逆で、ファイルの先頭のコメントを除去するスクリプトを書いてみました。 前回までのあらすじ 昔々、とあるソフトウェアをリリースするにあたり、そのソースコード…

行数に応じてlessとcatを切替えてくれるスクリプト

30分プログラム、その658。行数に応じてlessとcatを切替えてくれるスクリプトを書いてみました。 ボクは、ファイルの中身を見るとき、画面に収まるならcat、収まらないならlessを使う派です。lessを使うとqを押さないといけないのが面倒なのです。 で、そう…

月齢を計算してみる

30分プログラム、その654。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_214をマネしました。 単純にマネするだけではおもしろくないので、月名を出すようにしてみました。でも、まあ、今日の月齢を出すだけなので、空を見上げたほうが早いと思…

平方根の計算

30分プログラム、その650。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_206にインスパイアされました。 上記ページからリンクされているパソコンなら演算が得意なのは理解出来ますが、現在100円クラス... - Yahoo!知恵袋に平方根の計算方法が紹…

行のシャッフル

30分プログラム、その645。行をシャッフルするワンライナー。今日、アンケート結果を誰がどう答えたかを分かりづらくするために、CSVから項目を取り出してシャッフルして出力するスクリプトを書きました。せっかくだし、そこからシャッフルする部分だけを取…

シードを固定した乱数

30分プログラム、その642。http://ja.doukaku.org/279/ via http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_201をやってみた。 タイトルの通りシードを固定した上で乱数を生成して、同じ値が生成されるかを確認してみる問題。そして、予想通りあっ…