Perl

"あ"を"ぁ"に変換するスクリプト

30分プログラム、その637。"あ"を"ぁ"に変換するスクリプトを書いてみた。特に意味はない。 "A"を"a"にする関数があるんなら、"あ"を"ぁ"にする関数があってもいいんじゃない?と思ったのでやってみた。 最初は、文字単位に分割してmapするとか、正規表現を使…

AppleLinesの出力

30分プログラム、その633。anarchy golf - apple linesにインスパイアされて、apple linesの出力をやってみました。 apple linesが何かは、例を見たほうが早いと思います。 $ perl apple.pl 30 apple************************* *apple**********************…

はてなグループにキーワードを登録する準備

30分プログラム、その630。はてなグループに大量にキーワードを登録したくなったので、その準備をしてみた。はてなグループにはCSV形式でキーワードをインポートできる。 CSVファイルは word,body "リンク集","- [http://g.hatena.ne.jp/:title] - [http://g…

3桁ごとにカンマで区切る

30分プログラム、その626。3桁ごとにカンマで区切ってみよう。 長い整数って読みづらいじゃないですか。そこで、整数を与えると3桁ごとにカンマを挿入して文字列化してくれる関数を書いてみよう。C#だとstring.Format("{0:#,#}",123456789)でできちゃうらし…

文字を中央に表示する

30分プログラム、その623。Cの宿題/文字列操作 - C/C++の宿題を片付けます@wiki - アットウィキをやってみた。 一定の文字からなる列sを読み込み、以下の条件を満たす同じ個数の文字からなる列tを出力するプログラムを作りなさい。 ただし、以下での単語と…

Perlの関数適用の優先度とか結合方向が謎すぎる

こんなコードを書いても動いちゃうPerlってステキ。 join '',map { $_ ? '■' : '□' } split //,sprintf "%b",$s; 関数を繋ぐときに、括弧はおろか、なんの記号もいらないだなんて・・・。

バイナリクロック

30分プログラム、その619。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_179にインスパイアされて、バイナリクロックをやってみよう。どういうのを作るかは、結果を見てもらったほうが早いと思う。 21:51:17 $ perl binary-clock.pl ■□■□■ ■■□□■…

n個以上条件を満す要素があったらtrueを返す関数

30分プログラム、その615。n個以上条件を満す要素があったらtrueを返す関数。@nobio0205がおもしろそうなことをつぶやいてた。 「n個の条件のうちm個を満たしたらtrue、それ以外ならfalse(満たしている条件の種類は 問わない)」っていうプログラムのスマート…

Perl 5.10で遊ぼう

30分プログラム、その612。5.10で導入された新機能で遊んでみよう。 ふと、手元のマシンにインストールされてるPerlのバージョンを確認したら5.10でした。 たしか、5.10は、use featureすればsayとかの新機能が使えるはずなので、それで遊んでみよう。 ヘッ…

sortみたいに$aや$bで引数を渡したい

30分プログラム、その609。sortみたいに$aや$bで引数を渡したい。 Perlのsort関数は変った仕様になっていて、引数を$aと$bで受け取ります。 @articles = sort {$a cmp $b} @files; でも普通に定義したら、こんなことできない。 どうやったら、こんなことがで…

2つのテキスト内の数字を1行ずつ割り算する

30分プログラム、その604。2つのテキスト内の数字を1行ずつ割り算する via http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_169。 わりと単純な問題だとは思うんだけど、出力例がちょっとややこしい。 $ cat a.txt 20 18 0 0 $ cat b.txt 25 20 0 1…

最も0に近い数字を求める

30分プログラム、その599。 限りなく小さくするという記事を参考に、最も0に近い数字を求めてみる。元々はFortranのコードらしいですが、ボクはFortranは読めないのでPython版を参考にさせてもらいます。 eps = 1.0 while eps+1.0 > 1.0: eps = eps/2.0 # ep…

1729がつまらない数字だって?そんなことはないよ

30分プログラム、その594。wikipedia:シュリニヴァーサ・ラマヌジャンのエピソードで有名な1729が、ホントに2通りの2つの立方数の和で表せる最小の数かを確かめてみよう。1729な有名なエピソードはこんな感じのやつ。 1918年2月ごろ、ラマヌジャンは療養所に…

Perlで整数判定がしたい

Perlで整数判定がしたいので調べてみた。 「切り捨て」に int() は使うべからず - にぽたん研究所曰くint()関数はダメで、POSIX::ceil/POSIX::floorかsprintfを使うべきらしい。POSIX::floorを使ってみたけど、微妙な条件だと上手くいかない。 use POSIX; su…

素因数分解

30分プログラム、その590。素因数分解をしてみる。 うわさによると、素因数分解をしてくれるUnixコマンドがあるらしいですよ。たしかfactorとかいう名前だったはずです。 教えてくれた人は、「ボクは必ずこれをインストールしとくんだ。2年に一度ぐらいの頻…

「うさぎの数が世界人口を越えるには」をやってみる

30分プログラム、その583。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_126をやってみる。 もともとフィボナッチ数は、つがいのうさぎの数を数える時の数列なので、何ヶ月目に現在の世界人口である 66 億 6000 万人をうさぎが越えるかを調べて…

単語のシャッフル

30分プログラム、その576。単語をシャッフルしてみよう。人間は、単語の最初と最後さえ合っていれば、あとの順番はめちゃくちゃでもいいらしいです。 こちにんは みさなん おんげき ですか? わしたは げんき です。 この ぶんょしう は いりぎす の ケブン…

ミニふぁぼったー(みたいなもの)

30分プログラム、その571。特定のクラスタ向けふぁぼったー。 @banjunさんが、「ふぁぼったーみたいにTwitter全体での人気のある発言じゃなくて、もっと小さい集団での人気の発言が知りたい」と言っていたのでやってみた。とりあえず同じ研究室の人の間で計…

CPANで、いちいち依存してるライブラリをインストールするか訊かれないようにする

CPANで、ライブラリをインストールしようとすると、依存してるライブラリをインストールするかどうかを毎回訊いてくる。 ---- Unsatisfied dependencies detected during ---- ---- PMQS/IO-Compress-2.017.tar.gz ---- Compress::Raw::Bzip2 [requires] Sha…

Scalaのシンタックスハイライト

30分プログラム、その564。Scalaのシンタックスハイライトをやってみる。 Scalaっておもしろいですよね。でも、はてなだとシンタックスハイライトされなくてダサいですよね。というわけで、Scalaでもシンタックスハイライトされるようにしてみよう。はてなダ…

Perlのourってなんだろう

30分プログラム、その560。Perlのourってなんだろう? 研究室配属でPerl Mongerと噂の人が入ってきたので、適当なPerlコードを書いてるとバカにされかねない! というわけで、ちょっとマジメにPerlを勉強しよう。まずは、ずっと疑問だったourについて調べてみ…

UTF8のBOMを取り除くスクリプト

30分プログラム、その554。UTF8のBOMを取り除くスクリプト。 BOMって邪魔ですよね。ASCIIしか書いてないファイルに、なぜか0xFEとか入ってるんですもん。何も考えずにcatでファイルを連結してると、途中にBOMが入ってしまって死にそうになる。 というわけで…

Perlって末尾再帰の最適化ってやってるの?

30分プログラム、その549。Perlって末尾再帰の最適化ってやっているかを調べようとしてみた。結論としては、よく分からない。普通の再帰もなかなかスタックオーバーフローで落ちないし、使用しているメモリ量で比較しようとしたけど、メモリ量を取得するうま…

ファイルの先頭にテキストを追加するスクリプト

30分プログラム、その543。ファイルの先頭にテキストを追加するスクリプト。 ファイルの末尾にテキストを追加したいときは、 $ echo hogehoge >> some_file.txt でいいけど、先頭に追加するのは大変だよね。作っておけば、全ソースコードの先頭にライセンス…

複利計算

30分プログラム、その538。anarchy golf - Compound interest via http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_018。 素直にforでループすればいいのに、無理に再帰で書いてしまった。どうせ、出力するときにfor使ってるのにね。 あと久しぶり…

大文字と小文字の全ての組み合わせを表示

30分プログラム、その534。Loading... via http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_100。 最初は文字列を文字のリストに展開したあと全組合せを再帰で計算しようとしたところ、ネストリストが面倒くさそうだったので止めて、文字列のリスト…

パスにある全実行可能ファイルの数(Path::Classの練習)

30分プログラム、その528。モダンなPerl入門 - モダンなPerl入門を眺めていたら、ファイル操作はPath::Classを使うのがモダンらしい。 というわけで、試しにPath::Classを使って、パスにある全実行可能ファイルの数を数えてみた。ちょっと前に「死蔵している…

1234567890秒までの残り時間を表示する。

30分プログラム、その524。UNIX time が「1234567890」になる | スラドによれば、今年のバレンタインデーにUnix秒が1234567890秒になるそうです。 というわけで、1234567890秒までの残り時間を表示するプログラムを書いてみよう。# Hatena::Countingでもやろ…

16進数のかけ算

30分プログラム、その516。16進数のかけ算の表を作ってみよう。 前にどっかで、プログラマだったらF×Fぐらい暗記してるよねー、という話題がでてた気がする。 いんちきプログラマのボクは暗記どころか紙を使って計算しても正解できるかどうか怪しいので、一…

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

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