「どう書く?org」へようこそ! このサイトは出されたお題をいかに解くか競い合う、 プログラマのためのコロシアムです。 投稿を試してみたい方はテスト、 とりあえず眺めてみたい方は言語の一覧 がおすすめです。

Information

以下の変更を加えました。ver.0.58(rev345)
  • コード付きのトピックを編集する際にコード欄が空になってしまうバグを修正しました。
  • ログイン時にスクロールバーが出てしまう問題を修正しました。
@

History

Recent challenge: リングノードベンチマーク

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

post comment Number of comments:10 Hidden Nested Flatten

Newest 10 challenges

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)

Index

Feed

Challenge Queue is Empty!

You can post new challenge. Click following link, fill forms, choose 'challenge' and submit it. Posted challenge enter in queue and be published later. Post topic

Other

Link

Pathtraq

loading...