「どう書く?org」へようこそ!
このサイトは出されたお題をいかに解くか競い合う、
プログラマのためのコロシアムです。
投稿を試してみたい方はテスト、
とりあえず眺めてみたい方は言語の一覧
がおすすめです。
Information
以下の変更を加えました。ver.0.58(rev345)
- コード付きのトピックを編集する際にコード欄が空になってしまうバグを修正しました。
- ログイン時にスクロールバーが出てしまう問題を修正しました。
Recent challenge: リングノードベンチマーク
Newest 10 challenges
- メソッド数の多い組み込みクラスを列挙
- 初期設定の読み書き
- printf書式変換
- loan patternのサンプル
- IPv4アドレスのマスクの変換
- 手作業Grep
- ストレンジアトラクタの描画
- 16進数から10進数の変換
- ケブンッリジ関数
- 急勾配の判定
Recent good comment
リングノードベンチマーク
(Nested
Flatten)
#9269 は不評だったようなので、継続でコルーチンっぽいものを作って #9266 を参考にしてやってみました。 継続を生成するのにかなり時間がかかっているようです。 $ time ./doukaku271.scm 10000 1000 ./doukaku271.scm 10000 1000 43.23s user 0.36s system 98% cpu 44.303 total $
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #!/usr/bin/env gosh
(use util.queue)
(use gauche.parameter)
(define *nodes* (make-parameter #f))
(define (yield msg hop)
(let/cc cc
(enqueue! (*nodes*) cc)
((dequeue! (*nodes*)) msg hop)))
(define (make-node name)
(lambda (msg hop)
(let loop ([msg msg] [hop hop])
(cond [(= hop 0) #f]
[else
#;(format #t "~a: ~a~%" name msg)
(receive (msg hop) (yield msg (- hop 1))
(loop msg hop))]))))
(define (init-nodes n)
(*nodes* (make-queue))
(dotimes (i n)
(enqueue! (*nodes*) (make-node #`"N,|i|"))))
(define (run msg n m)
(init-nodes n)
((dequeue! (*nodes*)) msg (* n m)))
(define (main args)
(run "Hello, world!"
(x->integer (car *argv*))
(x->integer (cadr *argv*)))
0)
|


tsuwabuki
#9207()
Rating0/0=0.00
N個のノードを作り、1番目のノードに送られたメッセージは2番目のノードに、2番目のノードに送られたメッセージは3番目のノードに、・・・、N番目のノードに送られたメッセージは1番目のノードに送られるようにリングを形成し、そのリング上を一つのメッセージがM回まわるのにかかる時間を計測してください。
[ reply ]