Smalltalk
にゃんこスレとかから抜き出すとき用に。今のところ、文字列を用意しないと無理。 | str block | str := ' '. Transcript clear. block := [ :source | | stream col | col := OrderedCollection new. stream := ReadStream on: source. [ | line matches | …
MyStarRankComponent>>statesが正しく動かないのがなぜか。継続が効いてない気がする。 コードのリバートは、ブラウザの[Method]-[Browse Method Changes]、いずれかのバージョンを選択して[Replay]、でできた。 #isolate:で分離されたあと、ブラウザバック…
忘れないうちにメモ。 変数に保存しなかったサーバインスタンスを止めたりする。 "いくつか起動してみる" SeasideServer start. (SeasideServer newHTTPAt: 9091) start. "確認" SeasideServer allInstances inspect. "全部止める" SeasideServer allInstanc…
VW7.7NC版で。まず、[Parcel Manager]-[Web Development]-[Seaside-All]をLoad。 "サーバ開始" SeasideServer start " デフォルトのポートは7777 http://localhost:7777/ " "サーバ停止" SeasideServer stop 画面からアプリケーションの追加ってどうやるのか…
'c:\source\test01.txt' asFileEntry name " => 'test01.txt'" 'c:\source\test01.txt' asFileEntry shortName " => 'test01'" 'c:\source\test01.txt' asFileEntry baseName " => 'test'" あー#shortNameで取れた。びっくりした。
'c:\test01.txt' asFileEntry baseName " => test" 今、気がついた。
乗り遅れまくりだけどd:id:hagaeru3sei:20090812に関連して。 VW Transcript clear. #(十 九 八 七 六 五 四 三 参 二 弐 一 壱) asSortedCollection do: [ :each | Transcript show: each, ' ['; show: (each convertToByteArray inject: '' into: [:tmp :b…
ShiftJISで、1行目に2バイト文字があるファイルの読み込み。 | stream | Transcript clear. stream := MultiByteFileStream new converter: (TextConverter newForEncoding: #sjis); wantsLineEndConversion: true; open: 'D:\test\st\saki\log\1249233074.d…
リハビリ。 最初はSqueakで書いてたけど、日本語含みのファイルの取り扱いがどうにもうまくいかなかったのでVWに変更。ハッカソンでもVW使ってるはずだし、まあいいんではないか。 Jpl/FileMan/Onigurumaはインスコ済み。 ディレクトリの中にあるファイルは…
昨日布団に入ってからなんとなく気になったこと。 Pythonの場合(ActivePython 2.6.1) >>> 3 + 4 * 5 23 演算子(でいいんだっけ?)なんだろうから、算数で常識的と思われる順序。 Smalltalkの場合 3 + 4 * 5 "35" ただのメッセージ式なので左結合。 Rubyの場…
知り合いがRubyだかPythonだかでやってたので、ビール飲みつつ、テレビ見たりしながらやってみた。Smalltalkに「ながら」は向かないことがわかった(ソース追っかけられない)。 VisualWorksの場合 1.Parcel ManagerからNetClientsをLoad 2.リポジトリからJSON…
実はまだ最後まで読めてないんですけど、とりあえず参加してきました。 正直なところ、初版は誤植がありそうであんまり手を出したくなかったんですけど、書店に並んでるのを見かけたらやっぱり買っちゃいますよね。とか思ってたらサポートページがないんで、…
休日出勤の予定がなくなって時間ができたので、消化してなかった動画を見た。 Rubinius 〜Smalltalk指向のRuby処理系〜 - sumim http://www.nicovideo.jp/watch/sm3153177 http://www.nicovideo.jp/watch/sm3154084 ・Squeakのスライドショーがふしぎ ・さす…
なんだか変な勘違いしてたので整理。 通常の配列の場合。 | a | a := #(8 + 9 A , B 'hello world' #'bon jours' (x y z) ). " 擬似コード風味で書いてみる。 a[1] = 8 a[2] = #+ a[3] = 9 a[4] = #A a[5] = #, a[6] = #B a[7] = 'hello world' a[8] = #'bon…
早速落としてきた。スプラッシュ出るようになった。 日本語 [Package Loader]から「Japanese」で検索して出てきたやつを[install]。 特に問題なさそう。 旧バージョンからの環境移行 1.旧バージョン側で[Change Set]か[Change Sorter]のどちらかを起動、プロ…
問題17 1はone、2はtwo、3はthree...の要領で1000まで書いて、文字数を数える。 "and"の使い方はイギリス英語に準ずる。 ^(1 to: 1000) inject: 0 into: [ :sum :each | | s ar currentSum | s := each asWords. ar := s subStrings: #($ $-). currentSum :=…
問題16 2の1000乗の各桁の数値の合計を求める。 ^(2 raisedTo: 1000) printString inject: 0 into: [ :tmp :each | tmp + each digitValue.]. 013と同じ。300桁程度では考えることは少ない。
問題15 20マス*20マスのグリッドの左上から右下へと到るルートは何通りあるか求める。 正直言って、解き方わからない。いろいろ調べてみたら、40C20ということなのでそういうことなら、と結城さんの本を引っ張りだしてきて式に当てはめてみる。 | n k | n :=…
問題14 数値nがあるとき、次のnを ・nが偶数なら、n/2 ・nが奇数なら、3n+1 という式で求めるとすると、すべての数値は1になるかもしんない(なんてことをCollatzが言ったとか言わなかったとか)。 n (チェーンが開始してからは100万を超えてもいいよ) またし…
問題13 50桁の数字が100個あるから、合計値の先頭10桁求める。 | numberList | numberList := #( 37107287533902102798797998220837590246510135740250 ...(略)... 53503534226472524250874054075591789781264330331690 ). ^(numberList sum printString tru…
積みっぱなしだったYsフェルガナを消化。後半きつかった。レベル上げしようにも補正入るからめんどくさい。総合的には面白かったからいいや。 問題12 三角数列のうち、約数の数が最初に500を超えるものを求める。 今回はC#が残ってた。実行してみたら、10分…
問題11 20*20のグリッドについて、たてよこななめにそれぞれ4つずつの数値を取り出して、その積の最大値を求める。 Perlのコードしかなかったので移植。 | table max | max := 0. table := { #(08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08…
問題10 200万より下の素数の合計を求める。 素数来た。最初に書いたコード。 ^((2 to: 2000000) select: [ :each | each isPrime ]) sum. 10分待ったけど帰ってこない。 ^2 + ((3 to: 2000000 by: 2) select: [ :each | each isPrime ]) sum. やっぱり帰って…
問題9 ピタゴリアントリプレットを考えると、a+b+c=1000となるものは1個しかない。そのときのabcの積を求める。 | limit | limit := 1000. (1 to: limit - 1) do: [ :a | (1 to: limit - 1 - a) do: [ :b | | c | c := limit - a - b. (a * a) + (b * b) = (…
問題8 1000桁の数値の中で、連続した5桁の掛け算のうち最大値を求める。 | s max | s := '73167...(略)...63450'. max := 0. (1 to: s size - 4) do: [ :each | | tmp | tmp := (s at: each) digitValue * (s at: (each+1)) digitValue * (s at: (each+2)) d…
もっとMacをいじり倒そうと思って、とりあえずMacPorts入れた。あと、GaucheとGHCもインストール。 問題7 10001番目の素数を求める。 | n seq | n := 3. seq := 2. [true] whileTrue: [ n isPrime ifTrue: [ seq > 10000 ifTrue: [^n]. seq := seq + 1.]. n …
問題6 1から100までの数字について、すべて足した数字を2乗した結果から、すべて2乗してから足した結果を引く。 ^(((1 to: 100) inject: 0 into: [ :tmp :each | tmp + each ]) raisedTo: 2) - ((1 to: 100) inject: 0 into: [ :tmp :each | tmp + (each rai…
まず、以前はテスト対象数値より小さいすべての数値に対してチェックしていたところ最近は平方根までで止めることを覚えたけど、実はそれも無駄が多くて、対象の平方根より小さい素数のみで余り判定すればいいみたい。 primes := OrderedCollection new. max…
問題5 1から20のどれでも割り切れる数を求める。 ようするに、最小公倍数てことでしょ。Gaucheで。 (lcm 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20) これでは話が展開しないので。 ^(1 to: 20) inject: 1 into: [ :tmp :each | | gcd next | gcd …
ようやく落ち着いたと思ったけど、実はいろいろ残ってた。ARIAにいたっては2期分。 問題4 3桁の数字を2つかけて、その結果が回文になってるもののうち、最大のものを求める。 Integer>>isPalindrome | revNum | revNum := self printString reverse asIntege…