パスワードを忘れた? アカウント作成
494387 journal

FizzBuzz in squeak 2

日記 by espy

直前のLispうんぬんを全く無視して (^-^;;) 手続き指向的な考えで
Smalltalk (squeak)でやってみた。

1 to: 100 do:
  [ :i | ((i rem: 15) = 0)
          ifTrue: [Transcript show: 'FizzBuzz ' ]
          ifFalse: [
            ((i rem: 3) = 0)
                ifTrue: [ Transcript show: 'Fizz ' ]
                ifFalse: [ ((i rem: 5) = 0)
                    ifTrue: [ Transcript show: 'Buzz ' ]
                    ifFalse: [ Transcript show: i; show:' ' ].
                ]
          ]
   ].

Workspaceで書き込んで選択して do it すれば、Transcript に出ます。
遅い。すごく遅い。

(追記)
これだとあんまりなので、Number クラスのインスタンスメソッドに、asFizzBuzzという
メソッドを作ってみた。

fileOutしたやつ:

'From Squeak3.8 of ''5 May 2005'' [latest update: #6665] on 16 May 2007 at 9:17:45 pm'!
 
!Number methodsFor: 'testing' stamp: 'd 5/16/2007 21:11'!
asFizzBuzz
    "Check the number and return corresponding item: Fizz, Buzz, FizzBuzz, or number as String."
 
    ((self rem:15) = 0)
        ifTrue: [ ^ 'FizzBuzz' ]
        ifFalse: [ ((self rem:3) = 0)
                      ifTrue: [ ^ 'Fizz' ]
                      ifFalse: [ ((self rem:5) = 0)
                                     ifTrue: [ ^ 'Buzz' ]
                                     ifFalse: [ ^ self asString ]
                      ]
        ].! !

これをacceptさせておけば、

  1 to: 100 do: [ :i | Transcript show: i asFizzBuzz; show:' ' ]

これで1から100までチェックして表示する。それだけなんだけれど。

# 「おまえはなっちょらん、こう書くべきだ」を募集。

この議論は、espy (3615)によって テキ禁止として作成されたが、今となっては 新たにコメントを付けることはできません。
  • お邪魔します。show: ' ' は space で置き換え可能です。
    あと、遅いのはトランスクリプトへの出力処理だけなので、

    (1 to: 100) collect: [ :i | ((i rem: 15) = 0) ifTrue: ['FizzBuzz'] ifFalse: [ ((i rem: 3) = 0) ifTrue: ['Fizz'] ifFalse: [ ((i rem: 5) = 0) ifTrue: ['Buzz'] ifFalse: [i] ] ] ] として、print it (alt/cmd + P) すれば一瞬で答えは得られます。


    後者の、数値に asFizzBuzz を送るほうが Smalltalk っぽいですよね。w(私も似たような考え方でちょっと前のブームの時に書きました → http://d.hatena.ne.jp/sumim/20070301/p1 [hatena.ne.jp])
    • コメント、ありがとうございます!
      collect: は Collectionクラスのメソッドなんですね。
      学生の時、XeroxのSmalltalk-80マシンに触れて以来、付け焼き刃なので
      どこにどんなクラスやメソッドがあるか、ちっとも把握していません。(^-^;)

      # リンク貼って頂いたページも勉強になりそう。
      親コメント
typodupeerror

Stableって古いって意味だっけ? -- Debian初級

読み込み中...