30分プログラム

-3進数への変換

30分プログラム、その776。anarchy golf - Negatenaryにインスパイアされて、-3進数への変換をやってみました。 基数が負の変換はやったことがなかったので、わりと苦戦しました。各桁が必ず正の数になるようにするのがむずい! 使い方 *Main> negatenary (-6…

奇数

30分プログラム、その775。anarchy golf - odd linesをやってみます。 いつものごとく、ゴルフにはこだわりません。 使い方 $ jot 10 | gosh odd-line.scm 2 4 6 8 10 ソースコード #! /opt/local/bin/gosh ;; -*- mode:scheme; coding:utf-8 -*- (use util.…

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

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

xargsっぽいのを作ってみた

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

集合モジュール

30分プログラム、その772。 なんとはなしに集合モジュールを書いてみました。 使い方 1> mySets:add(1,[1,2]). [1,2] 2> mySets:add(1,[2]). [1,2] 3> mySets:union([1,2],[1,3]). [2,1,3] 4> mySets:intersect([1,2,3],[1,4]). [1] 5> mySets:diff([1,2,3],…

整数を英語に変換

30分プログラム、その771。anarchy golf - 100にインスパイアされて、整数を英語(one,two,three,...)に変換してみました。今日のポイントは、 alphaNum n = msum [ lookup n table, do let (x, y) = split n x' <- lookup x table y' <- lookup y table retu…

二進数変換

30分プログラム、その770。整数を二進数に変換してみる。 SMLには右シフトとかのビット演算ないらしく、ちょっととまどった。 使い方 - bits 0; val it = [0] : int list - bits 3; val it = [1,1] : int list - bits 2; val it = [1,0] : int list ソースコ…

「ASCII Starts」をやってみる

30分プログラム、その769。anarchy golf - ASCII Starsをやってみました。 わりと素直に書けちゃったので、特に語ることないです。 使い方 scala> show(4) res16: String = * *** ***** ******* ***** *** * ソースコード def wrap(s : String) = "*%s*".for…

条件付き確率の問題をモンテカルロ法で解く

30分プログラム、その768。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_269にインスパイアされました。こういう打ち切り所をカチっと決めれない問題は、無限リストを使ってやるのがいいですよね。 使い方 gosh> (calc 10) 0.6 gosh> (calc 100)…

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

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

パスカルの三角形

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分プログラム、その765。標準入力を指定行数ごとに分割するプログラムを作ってました。 SeqとIteratorの違いで多いに苦しみました。ドキュメントはまったく読んでないのですが挙動と名前から類推するに、 xs.take(n) xsがSeqならxsは変化せずに、Iterator…

Clojureでfizzbuzz

30分プログラム、その764。 Clojureのお勉強としてfizzbuzz書いてみました。まだ慣れないなぁ。 使い方 $ clj fizzbuzz.clj 1 2 fizz 4 buzz fizz 7 8 fizz buzz 11 fizz 13 14 fizzbuzz ソースコード (defn divide? [n m] (= (mod n m) 0)) (defn fizz-buzz…

最長のコマンド名を探してみる

30分プログラム、その763。最長のコマンド名を探してみます。 やっぱり、素数の計算とかよりかは実践的で楽しいです。 使い方 $ gosh longest-command.scm scrollkeeper-get-extended-content-list ソースコード #! /opt/local/bin/gosh ;; -*- mode:scheme;…

素数を数える

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分プログラム、その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分プログラム、その760。暗証番号ジェネレータ。 最近、暗証番号を設定する機会が何度かありました。とはいうのもの、ランダムな4桁の数字なんで、そう簡単には思いつけないです。 というわけで暗証番号ジェネレータを作ってみました。 破られやすさとかの…

真理値表

30分プログラム、その759。真理値表を作ってみよう。 [mixi]初心者です。 - Javaの課題丸投げ | mixiコミュニティにインスパイアされました。要するに、適当な論理式を与えると真理値表を出力するプログラムです。 出力の整形は、けっこう適当です。 使い方 …

Clojureはじめました

30分プログラム、その758。Clojureはじめました。 始めてなのでとりあえず階乗からスタートしてみました。今のところ感想。 clojure-modeは簡単にインストールできたけど、対話環境を使うにはslimeとかを入れなきゃダメらしい。ちょっと面倒。 defnで関数を…

文字列の反転

30分プログラム、その757。anarchy golf - Mirroring Characterにインスパイアされて、文字列の反転をやってみました。 基本的にreverseと同じですが、括弧だけは対応するものに置き換えるようです。例えば、"f(x)"を反転させると"(x)f"になります。 使い方 …

でかいXを出力する

30分プログラム、その756。 anarchy golf - Xにインスパイアされて、でっかいXを出力してみました。 使い方 - print (x 3); x x x x x x x x x x x x xval it = () : unit ソースコード open String; fun repeat _ 0 = [] | repeat c n = List.tabulate (n, …

配列から最大値を検索する

30分プログラム、その755。配列から最小値、最大値を検索する - 素人がプログラミングを勉強していたブログにインスパイアされました。 書き始めてすぐに(apply max xs)でいいことに気づいてしまいました。が、それだとつまんないので、色々書いてみました。…

今月が何日まであるか

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

中央値の計算

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

コマンドライン引数からランダムに1つ返すコマンド

30分プログラム、その752。コマンドライン引数からランダムに1つ返すコマンドを作ってみました。 作ってから調べてみたら、昔に同じことやってました。サイコロコマンド - コマンドライン引数からランダムに1つ返すコマンド - みずぴー日記。しかも、アルゴ…

PracticalNumberの判定

30分プログラム、その751。Practical number - Wikipediaの判定をやってみました。 Practical Numberは定義がややこしいんですが、 NがPractical Numberとは: N未満の数; 1,2,3,...,N-1が Nの約数の和で表現することができる ということらしいです。詳しくは…

md5sumの計算

30分プログラム、その750。md5sumの計算をやってみました。 java.security.MessageDigestを使えば楽に計算できます。 ただ、InputStreamのreadにwhileを使っているのがイケてない気がしてます。InputStreamをSeq[Byte]に変換できたらクールなのになぁ。 使い…

チェックサムの計算を目指した何か

30分プログラム、その749。チェックサムの計算をしようといて失敗しました。 wikipedia:チェックサムによると、チェックサムは「各ワードの合計の下位nビット」の合計として定義されています。 が、これを勘違いして「全ワードの合計の下位nビット」だと思っ…

Phone Key Pad

30分プログラム、その745。anarchy golf - Phone Key Padをやってみました。 問題の背景がよく分かんないんですが、変換表に従ってアルファベットを数字に変換する問題らしいです。 使い方 gosh> (string->key-pad "Ruby") "7829" gosh> (string->key-pad "S…

HaskellでFizzBuzz

30分プログラム、その748。HaskellでFizzBuzz。 当初の予定ではSchemeで便利なスクリプトを書く予定でしたが、諸事情により中止となりました。(手元のマシンに処理系がインストールされてなかった。) というわけで、たまたま入っていたHaskellでFizzBuzzを書…