30分プログラム

F#はじめました

30分プログラム、その805。 インストール Redirecting…のインストーラでインストールする。 http://msdn.microsoft.com/en-us/fsharp/cc835251.aspxを$FSHARP_HOMEに展開する 使い方 $ mono $FSHARP_HOME/bin/fsc.exe $ cp $FSHARP_HOME/bin/FSharp.Core.* .…

コインの両替

30分プログラム、その804。コインの両替。 coin.scm - みずぴー日記に再チャレンジ。 使い方 gosh> exchange-coin ((2000 1) (100 1) (10 4) (1 2)) ソースコード #! /opt/local/bin/gosh ;; -*- mode:scheme; coding:utf-8 -*- (use util.match) (use gauch…

クイックソート

30分プログラム、その803。 qsort.scm - みずぴー日記をまたやってみた。 使い方 scala> QSort.sort(List(1,5,4,0,3)) res2: List[Int] = List(0, 1, 3, 4, 5) ソースコード object QSort { def sort[A <% Ordered[A]](xs : List[A]) : List[A] = { xs match…

マージソート

30分プログラム、その802。 3年前のマージソート(http://d.hatena.ne.jp/mzp/20070421/msort)をまたやってみた。 使い方 gosh> (msort '(3 1 2)) (1 2 3) ソースコード #! /opt/local/bin/gosh ;; -*- mode:scheme; coding:utf-8 -*- (use util.match) (use …

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;…

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

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

buffalo

30分プログラム、その799。anarchy golf - Buffaloにインスパイアされました。 "Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo"という文法的に正しい英文を出力するプログラムです。 使い方 16> buffalo:main(). "Buffalo buffalo Buffa…

漢数字への変換

30分プログラム、その798。数字から漢数字への変換をやってみました。 1以上1億未満の数字にのみ対応してます。 使い方 *Main> kanji 10 十 *Main> kanji 42 四十二 *Main> kanji 12345 一万二千三百四十五 ソースコード import qualified System.IO.UTF8 as…

改行しかしない

30分プログラム、その797。anarchy golf - Carriage no returnにインスパイアされました。 使い方 - no_return "abc\ndef"; val it = "abc\n def" : string ソースコード fun lines s = String.tokens (fn c => c = #"\n") s; fun unlines xs = String.conca…

ローマ数字の変換

30分プログラム、その797。anarchy golf - Roman numeralにインスパイアされました。 ローマ数字をIntに変換します。面倒だったので、I,V,Xにしか対応していません。 使い方 scala> Roman.toInt("II") res39: Int = 2 scala> Roman.toInt("IIV") res40: Int …

Googolからの引き算

30分プログラム、その796。anarchy golf - Substract from a Googolにインスパイアされて、Googolからの引き算をやってみます。 きっと、32bitの整数しか扱えない処理系でやるとエキサイティングなんでしょうけど、Gaucheだとあっさりできてしましました。ス…

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

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

ブロックソートの復号

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

ブロックソートによる符号化

30分プログラム、その793。anarchy golf - BWTにインスパイアされて、ブロックソートによる符号化にチャレンジしてみました。 復号は明日やります。 使い方 1> bwt:bwt("cacao"). {3,"ccoaa"} ソースコード -module(bwt). -compile([export_all]). shift(N, …

単語の削除

30分プログラム、その792。anarchy golf - delete wordsにインスパイアされました。 使い方 *Main> deleteWord "golf" "flogwaiurhgm" " waiurh m" ソースコード replace :: Eq a => a -> a -> [a] -> [a] replace _ _ [] = [] replace old new (x:xs) = if …

文字を重複させる

30分プログラム、その791。anarchy golf - Duplicate charactersにインスパイアされました。 使い方 - dup_str "hello";; val it = "hheelllloo" : string ソースコード fun dup [] = [] | dup (x::xs) = x :: x :: dup xs; fun dup_str str = String.implod…

Excel順ソート

30分プログラム、その790。AAがZのあとにでてくるExcel順ソートを書いてみました。 Excelの列ラベルはZのあとにAAがでてくるから、辞書順ソートじゃうまくいかないよねー、というお話。[twitter:@ueda51]さんのつぶやきにインスパイアされた気がするけれど、…

n日後の日付を調べるプログラム

30分プログラム、その789。n日後の日付を調べるプログラムを作ってみました。 EMチャージの30日定額の終了日が知りたかったので作ってみました。もっとも、作ったあとで管理画面で見れることを知りましたけれども。 使い方 $ gosh 789-after.scm 0 2010-08-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 ソースコー…

テキストの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…

文字列の入れ替え

30分プログラム、その785。anarchy golf - permutaterにインスパイアされました。 文字列に対してpermutationを適用します。 使い方 1> permutater:permutater("hoge"). ["hoge","hoeg","hgoe","hgeo","heog","hego","ohge","oheg", "oghe","ogeh","oehg","o…

魔方陣を作ってみる

30分プログラム、その784。魔方陣を作ってみた。 最初はリストモナドでベタ書きしようかと思ったけど magicSquare = do a <- [1..9] b <- delete a [1..9] c <- delete b $ delete a [1..9] .... guard ... return ... みたいなひどいことになりそうだったの…

括弧の対応のチェック

30分プログラム、その782。anarchy golf - Bracket Matchingにインスパイアされました。 問題の詳細はリンク先を参照してください。要するに括弧の対応がとれているかどうかのチェックです。正規表現じゃ無理なことで有名なアレです。 簡易パーサコンビネー…

n乗根を求めてみた。

30分プログラム、その781。n乗根を求めてみた。 n乗根なんてどうやって求めるんだろう、と思って調べてみたけど、ニュートン法で解いてた。あああ、なるほど。 使い方 scala> NthRoot.nthRoot(4,2) res7: Double = 2.0000000929222947 scala> NthRoot.nthRoo…

最小公倍数

30分プログラム、その780。 最小公倍数を求めてみました。 使い方 gosh> (lcm 3 2) 6 gosh> (lcm 21 6) 42 ソースコード #! /opt/local/bin/gosh ;; -*- mode:scheme; coding:utf-8 -*- (define (gcd x y) (if (= y 0) x (gcd y (modulo x y)))) (define (lc…

文字列を斜めに表示する

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

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

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

文字を全部0に置き換える

30分プログラム、その778。anarchy golf - zero linesにインスパイアされました。 改行を除く全ての文字を0に置き換えます。sedでいいじゃん、とか言わないで> 使い方 $ jot 10 | escript all_zero.erl 0 0 0 0 0 0 0 0 0 00 $ python -m this | escript all…

縦書き出力

30分プログラム、その777。anarchy golf - Vertical writingにインスパイアされて縦書き出力をやってみました。 使い方 - run "Hello"; H e l l o ソースコード fun interperse x [] = [] | interperse x (y::ys) = y::x::interperse x ys; fun vertical s =…