キミならどう書く2.0
Up one levelキミならどう書く 2.0 - ROUND 1 -
今回は読者も参加しての大乱闘!!
お題は「100までの整数から素数を列挙せよ」です.
ぜひ,みなさんの解答をコメントやトラックバックでお寄せください!
解答の締切は6月26日(月)とします.締切後には投票による人気の集計を行います.
- Category(s)
- キミならどう書く2.0
Pythonのジェネレータを使って素数を求める
perl - 100までの素数
[プログラミング]Concurrent Clean : L.L.Ring : 『キミならどう書く 2.0 - ROUND 1 -』 : 100までの素数を列挙
エラトステネスのふるい @ Ruby
キミならどう書く 2.0 - ROUND 1 -
100までの素数@ruby
「100までの整数から素数を列挙せよ」
素数探索@Ruby
[Squeak][Smalltalk] 100までの整数から素数を列挙せよ…を Squeak の Smalltalk で
エラトステネス/フェルマーテスト
LLR2006 - 1,000,000(番目|まで)の素数
[LL]キミならどう書く 2.0 - ROUND 1 6月26日(月)締切
Ruby標準添付ライブラリ - LL Ring
[ruby] キミならどう書く 2.0 - ROUND 1 -
[PRO] Io で 100 までの素数を列挙
[OCaml] キミならどう書く 2.0 - ROUND 1 - — Lightweight Language Ring
[programming] お題は「100までの整数から素数を列挙せよ」
キミならどう書く 2.0 - ROUND 1 -
[Smalltalk][OOPL] 100までの整数から素数を列挙せよ…を Smalltalk-76 で
[Ruby] キミならどう書く 2.0 - ROUND 1 -
100 までの素数を列挙 in JavaScript
素数列をつくろう
[プログラミング]Concurrent Clean : L.L.Ring : キミならどう書く 2.0 - ROUND 1 - 番外編:1,000,000個めの素数
[PRO] WhiteSpace でも 100 までの素数を列挙
シェルで素数の列挙
[IT]キミならどう書く 2.0 ROUND 1
[LL]キミならどう書く 2.0 - ROUND 1 6月26日(月)締切
[Squeak][Smalltalk] 100までの整数から素数を列挙せよ…を Smalltalk-72 で
[プログラミング]Concurrent Clean : L.L.Ring : キミならどう書く 2.0 - ROUND 1 - 高速化編
javascriptで素数生成
[Groovy]キミならどう書く 2.0 - ROUND 1 -
[Groovy]キミならどう書く 2.0 - ROUND 1 -
100までの素数を求める
上限を決めずに素数を生成(JavaScript版)
LL2006 君ならどう書く
[Ruby] 100までの整数から素数を列挙せよ
[Squeak][Smalltalk][OOPL] エラトステネスのふるいをコンパクトにする方法
エラトステネスの篩の改良
正規表現で素数探索
上限を決めずに素数を生成の高速化(Ruby版)
[技術]せっかくだから素数数えとくか
[tech]数を数えて落ち着くんだ(Pnuts編)
100までの整数から素数を列挙せよ(Mathematica)
100までの素数を求める[APL版]
100までの整数から素数を列挙せよ(LaTeX)
100までの整数から素数を列挙 in Io :-|
キミならどう書く 2.0 - ROUND 1 - 100までの整数から素数を列挙せよ@AppleScript
上限なしで素数生成(ML版)
100までの整数から素数を列挙せよ(XSL)
[PHP]PHPな応募ないすね
100までの素数を数えるサンプル
[neta] FORTRANで書いて、100台のスパコンにそれぞれ自然数を割り振って、素数かどうかを判定させた結果を返してもらうというのはどうか
PHPで素数判定
100までの整数から素数を列挙せよ(SQL)
[Squeak] 100までの整数から素数を列挙せよ…を Squeak の eToys で
[Coding] 100までの素数@XQuery
[OCaml] キミならどう書く 2.0 - ROUND 1 - (L.L.Ring)
1〜100までの素数表示
[PHP] 100までの素数
[Ruby] キミならどう書く 2.0 - ROUND 1 -
[Perl]100までの素数(mapと正規表現で)
Javaで素数を100万個求める
[prog] キミならどう書く 2.0 - ROUND 1 -
[Perl] 100までの素数 (キミならどう書く 2.0 - L.L. Ring)
Brainf*ckで100までの素数を列挙してみるテスト
[Perl][pugs] 100までの素数 Perl6 / pugs 版
キミならどう書く 2.0 - ROUND 1
キミならどう書く 2.0 - ROUND 1
100までの素数(キミならどう書く 2.0 - ROUND 1 -)
キミならどう書く 2.0 - ROUND 1 - の解答を締め切りました
キミならどう書く 2.0 - ROUND 1 - の解答を締め切りました.
現在,アンケートの準備とROUND 2の準備を進めています.
しばらくお待ちください.
- Category(s)
- キミならどう書く2.0
- The URL to Trackback this entry is:
キミならどう書く 2.0 - ROUND 1 - 人気投票
みなさんのご回答,ありがとうございます.
このエントリでは集まったみなさんの回答について人気投票を行います!
- 回答を一意に判別する都合上,URLごとの集計となりましたことをご了承ください.
- 回答数が思いのほか多かったため,コメントのみの解答は一意に特定するのが困難であり,残念ながら人気投票の対象外とさせていただきましたことをお詫び申し上げます.
- 人気投票の項目となる回答をされたい方はROUND 2以降ではURLのある形での回答をよろしくお願いします(トラックバックできない場合はコメント欄にURLを記述する形でも可).
- 今回の人気投票の項目に含まれておらず,投票したい項目がある場合はコメント欄でその旨をお伝えください.対応させていただきます.
ROUND 1 - 人気投票
投票はお一人様一票
Brainf*ck @ Yet another Cybozu Labs(TAKESAKOさん) | 36% (14) | |
Groovy @ Onion開発日記(Mizuさん) | 2% (1) | |
Perl @ 404 Blog Not Found(Danさん) | 15% (6) | |
PHP @ Blog::koyhoge(koyhogeさん) | 2% (1) | |
Ruby @ はてなるせだいあり(narseさん) | 5% (2) | |
Smalltalk @ sumim’s smalltalking-tos(sumimさん) | 7% (3) | |
SQL @ inquisitor(inquisitorさん) | 7% (3) | |
Python @ TRIVIAL TECHNOLOGIES 2.0(atsさん) | 5% (2) | |
WhiteSpace @ SiroKuroPage(SiroKuroさん) | 13% (5) | |
zsh @ mput の日記。(mputさん) | 2% (1) | |
Total number of votes: 38 |
- 投票する
- Category(s)
- キミならどう書く2.0
- The URL to Trackback this entry is:
キミならどう書く 2.0 - ROUND 2 -
お待たせしました!
キミならどう書く 2.0 ROUND 2の開催です!!
今回のLL Ringでは「LLで関数プログラミング」のセッションをはじめとし,関数型言語の活躍が期待されます.そこで,前哨戦にも関数型のお題を用意しました.
お題は「Collatz予想」(角谷予想,3x+1問題)についての問題です.
Collatz予想の収束までのステップ数の最大値を求めよ.
Collatz予想とは,1以上の自然数 n に対して,次の関数 f(n) が必ず1を返すものとする.
f(n)
= 1 , n = 1 のとき
= f (n/2) , n が偶数のとき
= f (3*n + 1) , n が奇数のとき
たとえば,f(3)が 1 になるまでの経緯は,
f(3) -> f(10) -> f(5) -> f(16) -> f(8) -> f(4) -> f(2) -> f(1) -> 1
となり, f(n) の呼出は8回である.これをステップ数と呼ぶことにする.
ここで f(n) が 1 になるまでのステップ数を g(n) とする.つまり,g(3) = 8 である.
このとき
h(n) = k, 1 ≦ k ≦ n ∧ g(k) = max (g(1),g(2),…,g(n))
について h(100) を求めよ.
また,余力のある者は大きな n についても h(n) を求めよ.
関数型言語でも,そうでない言語でも,ぜひ回答をお寄せください!
人気投票の対象となる回答をされたい方はURLのある形での回答をお願いします(トラックバックできない場合はコメント欄にURLを記述する形でもよいです).
締め切りは7月24日(月)とさせていただきます.よろしくお願いします.
- Category(s)
- キミならどう書く2.0
Re:キミならどう書く 2.0 - ROUND 2 -
Colla*tz*予想ね。人名間違えるのはよくない。
Re:キミならどう書く 2.0 - ROUND 2 -
AUさん,ご指摘ありがとうございます.
修正させていただきました.
Re:キミならどう書く 2.0 - ROUND 2 -
Haskellで解いてみました。
http://study-func-prog.blogspot.com/2006/07/haskell-ll-ring-round-2.html
Re:キミならどう書く 2.0 - ROUND 2 -
またトラックバックを2つ送ってしまいました。すみません。
http://www.nishiohirokazu.org/blog/2006/07/python75collatz.html
こちらの記事にSchemeでdefineを使わずに166文字で書くバージョンを追加しました。
Re:キミならどう書く 2.0 - ROUND 2 -
そろそろ 1 週間経過するので私も awk で書いておきます。
http://gauc.no-ip.org/wiki.cgi/private?page=Blog%2F2006%2D7%2D16#p1
m4
関数型言語どころかそもそもプログラム言語ですらないマクロプロセッサ m4 で書いてみたです。
http://ya.maya.st/d/200607b.html#s20060716_2
[PHP]LL Ring[キミならどう書く 2.0 - ROUND 2 - ]がはじまっていた。
[プログラミング]コラッツ
Collatz予想step数の最大値
[PRO] Io で Collatz 予想
[ruby]Collatz予想の収束までのステップ数の最大値
Collatz予想のRubyによる実装と言い替え
キミならどう書く 2.0 - ROUND 2 -
LL2006 君ならどう書く ROUND2
collatz予想 in Haskell (State and HashTable example)
Collatz予想 in Haskell (Stack Overflow回避)
Collatz予想(Mathematica, Lisp)
Collatz 予想
Collatz予想(MySQL)
LL2006 君ならどう書く ROUND2 C++編
Collatz予想 in Haskell 別解 (逆に展開する編)
LLR2006 - Collatz予想は113383に気をつけろ!
Pythonで75文字でCollatz角谷問題の(以下略
Pythonで75文字でCollatz角谷問題の(以下略
[Program][D] Collatz 予想を D _インタプリタ_ で
Collatz 予想
[プログラミング][Haskell]キミならどう書く 2.0 - ROUND 2 -
[Squeak][Smalltalk] 「Collatz予想」(角谷予想,3x+1問題)のお題を Squeak の Smalltalk で
[Python][Programming]どう書く2
LLR2006: HaskellでCollatz予想に挑戦
LLR2006 - まだまだいくよ〜
[OCaml]せっかくなので
キミならどう書く
[Squeak][Smalltalk] 「Collatz予想」(角谷予想,3x+1問題)のお題を AspectS で
[理系ネタ][J] 3n+1 問題
[Python Memo]「Collatz予想」(角谷予想,3x+1問題)
Collatz予想
h(4294967295) = 2610744987 where g = 1051
[D言語] Collatz予想
[プログラミング]Concurrent Clean : L.L.Ring : Collatz予想の収束問題 : メモ化
[プログラミング]コラッツ逆展開
[理系ネタ][J] 3n+1 問題:まだまだ高速化
PythonとXML-RPCとグラフ可視化ソフトGRINEditを使ったCollatz角谷問題の計算ステップが最大になる数の求め方
キミならどう書く Scheme編
キミならどう書く 2.0 - ROUND 2 - 「collatz問題」(第1回)
[数学][プログラミング]Collatz算法 ステップ数
[scheme] Collatz 予想 (キミならどう書く 2.0 - ROUND 2 -)
Collatz 予想 - ピタゴラ機械もどき版
勝手にどう書く0.0
たとえば、7/10には、
という問題があり、Gaucheではこう書けます。(7/11)各要素が「0または1をとる乱数」から成る長さnのリストを得よ。
ex.
gosh> (make-binary-random-list 24)
(1 1 1 1 1 0 0 1 1 0 1 1 1 0 1 1 1 0 0 1 0 1 0 1)
(use srfi-27)PythonやHaskellでは簡単そうですね。
(use srfi-42)
(define (make-binary-random-list length)
(list-ec (: i length) (random-integer 2)))
- Category(s)
- その他
- キミならどう書く2.0
- The URL to Trackback this entry is:
[awk]Re:勝手にどう書く0.0
awk だと一行野郎でこんな感じでしょうか。
BEGIN{srand();for(;i<=24;i++){printf int(2*rand())" "}print}
http://gauc.no-ip.org/wiki.cgi/private?page=Blog%2F2006%2D7%2D29#p2
愚直すぎ?
Pythonで特定の何種類かの値からランダムに選んでリストを作る方法
[Squeak][Smalltalk] 各要素が「0または1をとる乱数」から成る長さnのリスト
各要素が「0または1をとる乱数」から成る長さnのリスト
[プログラミング]Concurrent Clean : 各要素が「0または1をとる乱数」から成る長さnのリストを得よ。
勝手にどう書く0.0 — Lightweight Language Ring
各要素が「0または1をとる乱数」から成る長さnのリスト @ Ruby
キミならどう書く 2.0 - ROUND 3 -
LL Ringも開催まであとわずか!
「キミならどう書く 2.0」,前回の開催から少し間が開いてしまいましたが,ROUND 3 を開催します.
今回のお題はグラフです.
いくつかのデータを与えたときにグラフを出力するプログラムを作ってください.細かい仕様はありません.
たとえば以下のようなものです.
% ./graph 2 5 9
2 : *****
5 : ************
9 : ********************
このプログラムでは最大の数値に対応する '*' の数を 20 とし,与えられた数値に応じた数の '*' を出力しています.
余力のある方は派手なグラフを出力したり,数値以外のデータを扱ってみるのも面白いかもしれません.また,ディスク容量やファイル容量などの値を使ってみるのもよいでしょう.
みなさんのプログラムやグラフをお待ちしています.
- Category(s)
- キミならどう書く2.0
- The URL to Trackback this entry is:
Re:キミならどう書く 2.0 - ROUND 3 -
Cで
/*BINFMTC:
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define max(a,b) ((a) >= (b) ? (a) : (b))
int main(int ac, char** av)
{
int i, sum=0, maxval=0;
const char* graphstr="************************************************************************";
int graphstrlen=strlen(graphstr);
for (i=1; i<ac; (sum+=atoi(av[i])), ++i, maxval=max(maxval,atoi(av[i]))) if (atoi(av[i])<0) exit(1);
for (i=1; i<ac; ++i)
printf("%.2i/%.2i %s\n", atoi(av[i]), sum, graphstr+graphstrlen-1-atoi(av[i])*graphstrlen/sum);
return 0;
}
Re:キミならどう書く 2.0 - ROUND 3 -
しまった、修正
/*BINFMTC:
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define max(a,b) ((a) >= (b) ? (a) : (b))
int main(int ac, char** av)
{
int i, sum=0, maxval=0;
const char* graphstr="************************************************************************";
int graphstrlen=strlen(graphstr);
for (i=1; i<ac; (sum+=atoi(av[i])), (maxval=max(maxval,atoi(av[i]))), ++i) if (atoi(av[i])<0) exit(1);
for (i=1; i<ac; ++i)
printf("%.2i/%.2i %s\n", atoi(av[i]), sum, graphstr+graphstrlen-atoi(av[i])*graphstrlen/maxval);
return 0;
}
Re:キミならどう書く 2.0 - ROUND 1 -
print "2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97";
問題: これを期待通りに実行できる言語をあげよ。
解答例: Perl, Ruby, Python, AWK
Re:キミならどう書く 2.0 - ROUND 1 -
def primegen(maximum):
v = range(2, maximum)
while v:
p = v[0]
v = filter(int(p).__rmod__, v)
yield p
Re:キミならどう書く 2.0 - ROUND 1 -
# grrr, 圧倒的にPythonに不利な設定ですね!
def primegen(maximum):
v = range(2, maximum)
while v:
p = v[0]
v = filter(int(p).__rmod__, v)
yield p
Re: キミならどう書く 2.0 - ROUND 1 -
Pythonで、スライスと集合をむりやり使ってみる
MAX = 100 + 1
multiples = []
for n in range(2, MAX):
multiples.extend(range(0, MAX)[2*n:MAX:n])
print set(range(2, MAX)) - set(multiples)
Re:キミならどう書く 2.0 - ROUND 1 -
Pythonです。。
[p for p in range(2,100) if 0 not in [p%d for d in range(2,p)]]
Re:キミならどう書く 2.0 - ROUND 1 -
sieve (p:ps) = p:sieve [q|q<-ps,q`mod`p/=0]
take 100 $ sieve [2..]
100までの素数@C++テンプレート
面白そうなのでついカッとなってC++テンプレートで書いてみました。
コードが長くなってしまったので自分のページの↓のURLに置いておきます。
http://www.3jikai.to/mzk/junk/prime.cpp
C++はLLじゃないと言われそうだけど、
実行がLightWeightなバイナリを吐けるLanguage
ということで勘弁してください。
Re:キミならどう書く 2.0 - ROUND 1 -
Gaucheで。
(use srfi-42)
(list-ec(: n 2 101)(if(not(any?-ec(: j 2 n)(zero?(modulo n j)))))n)
Oracle の PL/SQL でやってみました。
トラックバックできないので、コメントにて失礼
http://nyaos.org/d/?p=(2006.06.17)
あえて、LL でない言語で挑戦。その分、ひねり成分不足
x86アセンブラ版
ある意味最も軽量な言語であるアセンブラで書いてみました。以下のURLからソースを取得できます(Linux, FreeBSD, MacOSXで確認)。
http://homepage.mac.com/naoki.koguro/prog/prime.s
なお、コンパイルは
% gcc -o prime prime.s
として、実行確認はgdbを使って
% gdb prime
(gdb) break b
(gdb) run
(gdb) x/100bd &prime
としてください。
Re:キミならどう書く 2.0 - ROUND 1 -
小飼さんのところの以下のページを参考に awk で記述してみました。
http://blog.livedoor.jp/dankogai/archives/50534572.html
長いので、以下の URL に速度比較も含めて書きました。
http://gauc.no-ip.org/wiki.cgi/private?page=Blog%2F2006%2D6%2D17
Re:キミならどう書く 2.0 - ROUND 1 -
昔ながらのBASICで。
すぐに使える実行環境が無いので机上デバッグしかしていません。
10 'SAVE "PRIME.BAS"
20 DIM A(100):I=2
30 FOR P=I*2 TO 100 STEP I:A(P)=1:NEXT P
40 I=I+1:IF I=101 THEN GOTO 60
50 IF A(I)=0 THEN GOTO 30 ELSE GOTO 40
60 FOR I=2 TO 100
70 IF A(I)=0 THEN PRINT I," ";
80 NEXT I
Re:キミならどう書く 2.0 - ROUND 1 -
間違って、トラックバックを2回送ってしまいました。すみません。
shスクリプト
filter() { read p && ( echo $p; awk "\$1 % $p != 0" | filter ) }
seq 2 100 | filter
#seqやawkを使うのはズルかもしれませんが、どうせshだとexprやtestも外部コマンドなわけだし...
#zshやbashの拡張機能を使うのと同程度のズルですよね。
効率無視
filter (\x -> (product [1..x-1]+1) `mod` x == 0) [2..100]
なるほど!じゃあPythonで
filter(lambda i:reduce(lambda x,y: x*(i%y), range(2,i), 1), range(2, 100))
Re:キミならどう書く 2.0 - ROUND 1 -
lispの解が少ないので、Common Lispで。
xyzzyでも動作します。
(defun loop-generate-primes (n)
"ループ版"
(let ((prime '()))
(push 2 prime)
(do ((x 3 (+ x 2)))
((> x n))
(if (dolist (i prime t) (if (zerop (rem x i)) (return nil)))
(push x prime)))
(nreverse prime)))
(defun recursive-generate-primes (limit)
"再帰版"
(labels ((check (x prime)
(cond ((endp prime)
t)
((zerop (rem x (car prime)))
nil)
(t
(check x (cdr prime)))))
(main (n x prime)
(cond ((> x n)
(nreverse prime))
((check x prime)
(main n (+ x 2) (cons x prime)))
(t
(main n (+ x 2) prime)))))
(main limit 3 (list 2))))
ワンライナー@シェルスクリプト
エラトステネスの篩のようなもので非効率的に素数を列挙します
n=100;for i in `seq 2 $n`;do for j in `seq $i $i $n`;do echo $j;done;done|sort -n|uniq -c|egrep '^ *1[^0-9]'|sed 's/.*[ \t]//'|xargs printf '%d ';echo ''
効率無視PHP版
効率無視 Haskell版と同じくウィルソンの定理を使った PHP版
for ($i = 2; $i <= 100; $i++) if (gmp_mod(gmp_fact($i-1), $i) == $i-1) echo "$i\n";
Re:キミならどう書く 2.0 - ROUND 1 -
gaucheの遅延ストリームでオーソドックスふるいをつかって。
長い。
(use util.stream)
(define ones (stream-cons 1 ones))
(define (add-streams s1 s2) (stream-map + s1 s2))
(define integer (stream-cons 1 (add-streams ones integer)))
(define prime-stream
(let loop ((primes (stream-cdr integer)))
(stream-cons (stream-car primes)
(loop
(stream-filter
(lambda (x)
(not (= (remainder x (stream-car primes)) 0)))
primes)))))
(let loop ((stream prime-stream))
(if (> 100 (stream-car stream))
(cons (stream-car stream) (loop (stream-cdr stream)))
'()))
Re:キミならどう書く 2.0 - ROUND 1 -
javaで作成してみました。
public static void main(String[] args) {
int[] s = new int[100];
int x = 0;
boolean bool = false;
for(int i = 1; i <= 100; i ++) {
bool = false;
for (int k = 0; k < x; k++) {
if (i % s[k] == 0 && s[k] != 1) {
bool = true;
break;
}
}
if (!bool) {
s[x++] = i;
System.out.println(i);
}
}
}
シェルで 1-liner
seq 2 100 | factor | awk 'NF == 2 {print $2}'
# 短さで勝負。GNU coreutils + awk を使用。
マイナー過ぎるか
-- Lua
a={}
for i = 2, math.sqrt(100), 1 do
for j = i + i, 99, i do
a[j] = 1
end
end
for i = 2, 99, 1 do
if not a[i] then
print(i)
end
end
m4
m4 で書いてみたです。
http://ya.maya.st/d/200606c.html#s20060626_1