Squeak

FileEntryからファイル名取得いろいろ

'c:\source\test01.txt' asFileEntry name " => 'test01.txt'" 'c:\source\test01.txt' asFileEntry shortName " => 'test01'" 'c:\source\test01.txt' asFileEntry baseName " => 'test'" あー#shortNameで取れた。びっくりした。

FmFileEntry>>baseNameの動作

'c:\test01.txt' asFileEntry baseName " => test" 今、気がついた。

10進数を16進数へ変換

乗り遅れまくりだけどd:id:hagaeru3sei:20090812に関連して。 VW Transcript clear. #(十 九 八 七 六 五 四 三 参 二 弐 一 壱) asSortedCollection do: [ :each | Transcript show: each, ' ['; show: (each convertToByteArray inject: '' into: [:tmp :b…

Squeakで日本語含んだSJISファイル読み込み

ShiftJISで、1行目に2バイト文字があるファイルの読み込み。 | stream | Transcript clear. stream := MultiByteFileStream new converter: (TextConverter newForEncoding: #sjis); wantsLineEndConversion: true; open: 'D:\test\st\saki\log\1249233074.d…

正規表現を使ってみる

あんなに早く上がれるのなら勉強会行けばよかった、と思ったけど、ノートも本もない状態では困りそうだったので断念。 まずSqueakは、いつものようにSqueakMapから[Regular Expression Plugin]をインストール。 | regex pattern string match | pattern := '…

またFileManを使ってみる

d:id:chobie:20090214:1234589900の続き。 エンコード指定するには。 'C:\st' asDirectoryEntry at: 'aaa.txt' put: 'こんにちは世界' by: #shiftjis. 'C:\st' asDirectoryEntry at: 'aaa.txt' by: #shiftjis. あっさりと。 | col | col := #(123 456 789 he…

FileManを使ってみる

umejavaさんにご紹介頂いたので使ってみる。 とは言え、覚えることなんてほとんどないような。 'D:\test\st' asDirectoryEntry at: 'test02.txt' put: 'hello'. ディレクトリ(レシーバ)のファイル(#at:引数)に、コンテンツ(#put:引数)を出力する。 TextConve…

動的にクラスを取得する、ついでに、ファイル読み込みと文字コード指定

動的にクラスを取得する d:id:chobie:20090121の続き。 すべてのクラスが#Smalltalkの中に入っているので、そこから取得する。 (Smalltalk at: 'CrLfFileStream' asSymbol) inspect " => CrLfFileStream class" ファイル読み込み ブラウザで#FileStreamのメ…

Rubinius

休日出勤の予定がなくなって時間ができたので、消化してなかった動画を見た。 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…

Squeak 3.10が出てた

早速落としてきた。スプラッシュ出るようになった。 日本語 [Package Loader]から「Japanese」で検索して出てきたやつを[install]。 特に問題なさそう。 旧バージョンからの環境移行 1.旧バージョン側で[Change Set]か[Change Sorter]のどちらかを起動、プロ…

Project Euler 017

問題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 :=…

Project Euler 016

問題16 2の1000乗の各桁の数値の合計を求める。 ^(2 raisedTo: 1000) printString inject: 0 into: [ :tmp :each | tmp + each digitValue.]. 013と同じ。300桁程度では考えることは少ない。

Project Euler 015

問題15 20マス*20マスのグリッドの左上から右下へと到るルートは何通りあるか求める。 正直言って、解き方わからない。いろいろ調べてみたら、40C20ということなのでそういうことなら、と結城さんの本を引っ張りだしてきて式に当てはめてみる。 | n k | n :=…

Project Euler 014

問題14 数値nがあるとき、次のnを ・nが偶数なら、n/2 ・nが奇数なら、3n+1 という式で求めるとすると、すべての数値は1になるかもしんない(なんてことをCollatzが言ったとか言わなかったとか)。 n (チェーンが開始してからは100万を超えてもいいよ) またし…

Project Euler 013

問題13 50桁の数字が100個あるから、合計値の先頭10桁求める。 | numberList | numberList := #( 37107287533902102798797998220837590246510135740250 ...(略)... 53503534226472524250874054075591789781264330331690 ). ^(numberList sum printString tru…

Project Euler 012

積みっぱなしだったYsフェルガナを消化。後半きつかった。レベル上げしようにも補正入るからめんどくさい。総合的には面白かったからいいや。 問題12 三角数列のうち、約数の数が最初に500を超えるものを求める。 今回はC#が残ってた。実行してみたら、10分…

Project Euler 011

問題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…

Project Euler 010

問題10 200万より下の素数の合計を求める。 素数来た。最初に書いたコード。 ^((2 to: 2000000) select: [ :each | each isPrime ]) sum. 10分待ったけど帰ってこない。 ^2 + ((3 to: 2000000 by: 2) select: [ :each | each isPrime ]) sum. やっぱり帰って…

Project Euler 009

問題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) = (…

Project Euler 008

問題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…

Project Euler 007

もっと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 …

Project Euler 006

問題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…

Project Euler 005

問題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 …

Project Euler 004

ようやく落ち着いたと思ったけど、実はいろいろ残ってた。ARIAにいたっては2期分。 問題4 3桁の数字を2つかけて、その結果が回文になってるもののうち、最大のものを求める。 Integer>>isPalindrome | revNum | revNum := self printString reverse asIntege…

Project Euler 003

ゲキレンジャー終了。メレさまー。フラビージョとか全くもってどうでもよかったけど、メレさまは大変よかった。次は、、、及川奈央?メレさまー。 問題3 600851475143を素因数分解して、最大の値を求める。 | num factor | num := 600851475143. factor := 2…

Project Euler 002

プリキュア終了記念カキコ。最後がちょっとえーって感じだった。この枠は気合の入った回と抜けた回との落差が大きい。たまに「どれみと魔女をやめた魔女」みたいな回があったりするのが侮れない(ちょうど徹夜明けで帰ってきたらライダーやってて、そのまま見…

Project Euler 001

電王見終わった記念。前半は以前見てあったから残り半分とは言え、まとめて見るとさすがに疲れる。それにしても龍騎といい響鬼といい、最終話はワラワラと出てくるな(あれ、龍騎は映画だっけ?そういえばオーディンと戦ったの見てないかも)。なぜか懐かしい…

SqueakでPostgresに接続する

データはVisualWorksのときに作ったので。 3.9を使用した。 SqueakMapから ・PostgreSQL Client for Squeak ・Cryptography Team Package をインストール。MD5のモジュールは最初にインストールしてみたのがこれだったからで、どれが正解かはなんとも。「Cry…