Hatena::Grouprubyist

たばさの RSSフィード

02/29(金) 2008

なんだお絵かきモードあるのか

なんだお絵かきモードあるのか - たばさの を含むブックマーク はてなブックマーク - なんだお絵かきモードあるのか - たばさの

f:id:hatecha:20080229074645p:image

グループのほうはデフォルト・オフか。んー

書き味はよい感じです。でも他のサービスのも簡単に行き来できるといいような。

あと絵は慣れれば楽だし印象的だけど検索は大変な気がする、といつも思う。googleがなんとかするのかな。

文字と絵が一体化するのもいいかも。後ろに絵。そうするとさらにデータ単位として扱いが面倒そうだがなぁ。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080229

02/28(木) 2008

飛ばし飛ばし はやりもの

| 飛ばし飛ばし はやりもの - たばさの を含むブックマーク はてなブックマーク - 飛ばし飛ばし はやりもの - たばさの

http://www.tanzaku.org/dot/0/56c180ee6cc1ae93c4f6c3800be35eef.png

http://www.tanzaku.org/dot/0/bc8dacfb50c408216ac3ca50ec869018.png

http://www.tanzaku.org/dot/107


no title

#euler78-up.rb

def prline b
#return
  o="O"
  i=" "
  print"#{$pt}:"
  b.each{|j|
    print o*j
    print i
  }
  puts
end

def pr(x,b)
  ($pt+=1;prline b;return) if x==0
  st=0
  if b==[]
    st=x
  else
    st=b[-1]
    st=x if st>x
  end
  st.downto(1){|i|
    #b<<i
    #p b
    pr(x-i,b+[i])
  }
end

n=gets.to_i
1.upto(n){|i|
  $pt=0
  pr(i,[])
  puts "p(#{i})=#{$pt}\n\n"
}

おそい

これだと何年かかるかっていう。

組み合わせとかか。


解くと掲示板が見れる。「超簡単だぜ+[ソースを見る]」などなど。

でも解いた人しか見れない。

計算だけやってくれるサーバーないかな

計算だけやってくれるサーバーないかな - たばさの を含むブックマーク はてなブックマーク - 計算だけやってくれるサーバーないかな - たばさの

うえのように長い計算やってると他のが動かなくなる。1時間回しっぱなしとか。結果だけメールで?

上の絵は間違った

上の絵は間違った - たばさの を含むブックマーク はてなブックマーク - 上の絵は間違った - たばさの

てきとー

http://www.tanzaku.org/dot/0/1aea6052c74e1ac6992009baeb46f4eb.png

直した。

切り分ける、というのを積み上げる(同じ数以下しか積めない)と変えて書いた。

はてなハイクでやったら小丸が書きにくいので短冊ドットにしてみた。

斜めになったせいでちょうど左右対称に。半分まで計算すればいいということか。

(やっぱり順列組み合わせでやるんだろうというのは置いといて)

ちがうな。

斜め表示バージョン

| 斜め表示バージョン - たばさの を含むブックマーク はてなブックマーク - 斜め表示バージョン - たばさの

問題を解く方向には行ってませんが。あきらめモードで。


        O               
       O O             
      O O O           
     O O O O         
    O O O   O       
   O   O     O     
  O           O   
               O 
                

      O         
     O O       
    O O O     
   O O O O   
  O O O O O 
 O     O O 
O       O 

      O           
     O O         
    O O O       
   O O O O     
  O O O O O   
 O     O O O 
O           

no title

#euler78-up.rb
def max b
  n=-1
  a=b.map{|d|n+=1;d+n}+[b.size+1]
  m=a.max
  m
end

def sum d
# p d
  eval(d*"+")
end

def prline b
#return
  o="O"
  i=" "
 # p b
  # puts"#{$pt}:"
  mx=sum(b)
  1.upto(max(b)){|x|
    print i*(mx-x) if mx>x
    b.size.times{|y|
      if b[y]+y>=x && y<=x-1
        print o 
      else
        print i
      end
      print i
      #puts "#{b[y]},#{x+y}"
    }
    puts
  }
  puts
end

def pr(x,b)
  ($pt+=1;prline b;return) if x==0
  st=0
  if b==[]
    st=x
  else
    st=b[-1]
    st=x if st>x
  end
  st.downto(1){|i|
    #b<<i
    #p b
    pr(x-i,b+[i])
  }
end

puts"from,to"
fr=gets.to_i
n=gets.to_i
fr.upto(n){|i|
  $pt=0
  pr(i,[])
  puts "p(#{i})=#{$pt}\n\n"
}

25 Enter 25 Enter など


やっぱり下向きじゃないと落ち着かない

#euler78-up.rb
def max b
  n=-1
  a=b.map{|d|n+=1;d+n}+[b.size+1]
  m=a.max
  m
end

def sum d
# p d
  eval(d*"+")
end

def prline b
#return
  o="O"
  i=" "
 # p b
  # puts"#{$pt}:"
  mx=sum(b)
  max(b).downto(1){|x|
    print i*(mx-x) if mx>x
    b.size.times{|y|
      if b[y]+y>=x && y<=x-1
        print o 
      else
        print i
      end
      print i
      #puts "#{b[y]},#{x+y}"
    }
    puts
  }
  puts
end

def pr(x,b)
  ($pt+=1;prline b;return) if x==0
  st=0
  if b==[]
    st=x
  else
    st=b[-1]
    st=x if st>x
  end
  st.downto(1){|i|
    #b<<i
    #p b
    pr(x-i,b+[i])
  }
end

puts"from,to"
fr=gets.to_i
n=gets.to_i
fr.upto(n){|i|
  $pt=0
  pr(i,[])
  puts "p(#{i})=#{$pt}\n\n"
}

メールでサイトをメモ

| メールでサイトをメモ - たばさの を含むブックマーク はてなブックマーク - メールでサイトをメモ - たばさの

作ったもの。メール本文でhtmlを送るだけ。

http://taba.s3.zmx.jp/cachemail.htm

`cat tmp.txt|mail -s"title" aaa@hoge`

みたいな感じ。散歩中に消えそうなサイトを見つけたときとか。ないか。

javascript:window.location='http://taba.s3.zmx.jp/cachemail.cgi?'+'uri='+escape(location.href)+'&mailto=aaa@hoge&subject=cache&wait=3';

などと。


追記

そのあとwait秒後にはてブに追加するようにした(2008/03/02)

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080228

02/25(月) 2008

配列 こんな書き方あるのかー

| 配列 こんな書き方あるのかー - たばさの を含むブックマーク はてなブックマーク - 配列 こんな書き方あるのかー - たばさの

irb(main):001:0> [*1..4]
=> [1, 2, 3, 4]
irb(main):002:0> *1..3
SyntaxError: compile error
(irb):2: syntax error, unexpected tDOT2, expecting tCOLON2 or '[' or '.'
*1..3
    ^
        from (irb):2
irb(main):003:0> [*1..40]
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2
2, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]
irb(main):004:0> [*-1..40]
=> [-1, 0, 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, 36, 37, 38, 39, 40
]
irb(main):005:0> [*-10..40]
=> [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1
1, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 3
1, 32, 33, 34, 35, 36, 37, 38, 39, 40]
irb(main):006:0> [*1..40].map{|i|i*i}
=> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324
, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1
156, 1225, 1296, 1369, 1444, 1521, 1600]
irb(main):007:0> [*1..40].map{|i|i*i*i}
=> [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000, 1331, 1728, 2197, 2744, 3375, 4
096, 4913, 5832, 6859, 8000, 9261, 10648, 12167, 13824, 15625, 17576, 19683, 219
52, 24389, 27000, 29791, 32768, 35937, 39304, 42875, 46656, 50653, 54872, 59319,
 64000]
トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080225

02/23(土) 2008

とりあえず木を作る

| とりあえず木を作る - たばさの を含むブックマーク はてなブックマーク - とりあえず木を作る - たばさの

node[子,親,子]てな感じ。入れ子で。

先は長いな

#tree.rb

tree=[nil]
def pr t
#p "!",t
  i,j,k=t[0],t[1],t[2]
  #p i,j,k
  #gets
    print'('
    if i!=nil
      pr i
    end
    print j
    print":"
    print"BLACK"
    if k!=nil
      pr k
    end
    print')'
end

def append t,a
l=0;r=2;m=1
  #p t
  #puts "<-#{a}"
  if t==[nil]||t==nil
    t=[nil,a,nil]
  elsif t[m]!=nil
    if t[m]>a
      t[l]=append t[l],a
    else
      t[r]=append t[r],a
    end
  end
  #pr t
  t
end


gets(nil).each{|i|
  tree=append tree,i.chomp
  pr tree
  puts
}
#p tree

参考

http://golf.shinh.org/p.rb?red+black+tree

http://www.geocities.jp/h2fujimura/mutter/tree/red-black-tree.html

google:red-black tree

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080223

02/22(金) 2008

print file

| print file - たばさの を含むブックマーク はてなブックマーク - print file - たばさの

http://golf.shinh.org/p.rb?print+file


http://golf.shinh.org/reveal.rb?print+file/leonid/1197689032&gs

18Bのこちらは通らなくなってる気がする。バージョンアップのせいか。

じゃあと思って

http://golf.shinh.org/reveal.rb?print+file/irori/1197723234&gs

27Bのこっちにゴミをつけて通らないようにテストしたつもりが通ってしまった。おかしいな。

"#{a='cat '+$stack.pop.to_s;exec(a)}";

こちらがその前に通したもの。これもバージョンアップで通らなくなるような種類のものですが。

27Bのはstackないし裏ワザ使ってないぽいな。凄いな。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080222

02/19(火) 2008

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080219

02/18(月) 2008

interpolate, array, md5

| interpolate, array, md5 - たばさの を含むブックマーク はてなブックマーク - interpolate, array, md5 - たばさの

when i wrote interpolation support, it was my goal to also allow interpolation of other languages code (if you have defined a path to an interpreter for it)

http://iota.flowsnake.org/strings.html

=>パスさえ設定すればほかの言語のコードも埋め込めるようにするのが目標だった


http://iota.flowsnake.org/syntax-extensions.html

=>rubyやpython風の配列もこうやれば出来るよ。それはそうかも。


md5もやった。いちおう出来た気がする。それっぽい文字列。面倒なのでそのまま貼ってみる。動かしている気分を共有。

Io 20070410
Io> b:=6 asRational with(30000000000000001,7000000001)
==> 3.000000e+016/7.000000e+009
Io> b/1
==> 4285714.2851020405
Io> a=b/1
==> 4285714.2851020405
Io> a asRational
==> 4.601751e+015/1073741824
Io> "qwerty" type
==> Sequence


Io> UnitTest assertFalse

  Exception: nil does not respond to 'code'
  ---------
  nil code                             UnitTest.io 40
  UnitTest assertFalse                 Command Line 2
  UnitTest assertEquals                UnitTest.io 52

Io> l:=UnitTest assertFalse

  Exception: nil does not respond to 'code'
  ---------
  nil code                             UnitTest.io 40
  UnitTest assertFalse                 Command Line 2
  UnitTest assertEquals                UnitTest.io 52

Io> l:=UnitTest
==>  UnitTest_0x5deb18:
  assertEquals     = method(a, b, m, ...)
  assertEqualsWithinDelta = method(expected, actual, delta, ...)
  assertFalse      = method(a, ...)
  assertNil        = method(a, ...)
  assertNotEquals  = method(a, b, ...)
  assertNotNil     = method(a, ...)
  assertNotSame    = method(a, b, ...)
  assertRaisesException = method(...)
  assertSame       = method(a, b, ...)
  assertTrue       = method(a, ...)
  fail             = method(...)
  init             = method(...)
  knownBug         = method(...)
  run              = method(...)
  setUp            = method(...)
  tearDown         = method(...)
  testCount        = method(...)
  testSlotNames    = method(...)
  type             = "UnitTest"
  verbose          = method(s, ...)

Io> l assertFalse

  Exception: nil does not respond to 'code'
  ---------
  nil code                             UnitTest.io 40
  UnitTest assertFalse                 Command Line 2
  UnitTest assertEquals                UnitTest.io 52

Io> l assertFalse("6*8")

  Exception: ["6*8" != false] [6*8 != false]
  ---------
  Exception raise                      UnitTest.io 41
  UnitTest assertFalse                 Command Line 2
  UnitTest assertEquals                UnitTest.io 52

Io> l assertFalse(6*8)

  Exception: [6 *(8) != false] [48 != false]
  ---------
  Exception raise                      UnitTest.io 41
  UnitTest assertFalse                 Command Line 2
  UnitTest assertEquals                UnitTest.io 52

Io> l assertNotSame(3==3)
==> false
Io> l assertNotSame(3==4)
==> false
Io> l assertTrue(true)
==> false
Io> l assertTrue(!true)

  Exception: Object does not respond to '!'
  ---------
  Object !                             Command Line 2
  UnitTest assertTrue                  Command Line 2

Io> l assertTrue(false)

  Exception: [false != true] [false != true]
  ---------
  Exception raise                      UnitTest.io 41
  UnitTest assertTrue                  Command Line 2
  UnitTest assertEquals                UnitTest.io 51

Io> l assertTrue(true)
==> false


Io> u:=User
==>  User_0x5a9298:
  homeDirectory    = User_homeDirectory()
  name             = User_name()

Io> u Homedirectory

  Exception: User does not respond to 'Homedirectory'
  ---------
  User Homedirectory                   Command Line 2

Io> u homeDirectory
==>  Directory_0x578ad8:

Io> u homeDirectory asString
==>  Directory_0x4abf28:

Io> u name
==> ほにゃ
Io> u homeDirectory name
==> Application Data
Io> u homeDirectory path
==> C:\Documents and Settings\ほにゃ\Application Data


Io> m:=MD5 clone
==>  MD5_0x640188:
  appendSeq        = MD5_appendSeq()
  md5              = MD5_md5()
  md5String        = MD5_md5String()

Io> m appendSeq("qwerty")
==>  MD5_0x640188:
  appendSeq        = MD5_appendSeq()
  md5              = MD5_md5()
  md5String        = MD5_md5String()

Io> m md5
==> リW釈Чホ鉀サv・圭、
Io> m md5String
==> d8578edf8458ce06fbc5bb76a58c5ca4
Io> m appendSeq("qwerty")

  Exception: Io Assertion 'cannot append to an already calculated md5'

Io>

usernameはふせてみた

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080218

02/17(日) 2008

Zlib

| Zlib - たばさの を含むブックマーク はてなブックマーク - Zlib - たばさの

手元のio動かないと思ったら気のせいだったのでいじってみる。

c:\usr\localにおくと書いてあるな、と思ったらすでに置いてあった。何を勘違いしていたか。

古いのをc:\usr\local0705などとしてもパス指定すると動く。

なにをしようかというと正規表現(Addon ,Regex)を使おうと思ったがwin版には付いていない。golf場でもAddonは使えない?


Zlibは圧縮かなあと思いマニュアル見つつやってみる。

だめだ。

ZlibEncoderのとこのendProcessはendProcessingにしたら動いた。マニュアル間違い?

ZlibDecoderのほうはinputBuffer,outputbufferが最初からあるようだがEncoderにはないように見える。

inputBuffer:=Sequence clone

bf:=ZlibEncoder clone

bf inputBuffer=inputBuffer clone

などとして一応エラーはなくなったがどうもうまく行かない。

最初のほうのエラーはただクローンにしなかったせいかな?

http://www.iolanguage.com/scm/git/checkout/Io/docs/IoReference.html#Zlib


本家更新もMLも活発。MLで「rubyではこうだよ」みたいな会話もあり変な感じ。rubyメジャーだ。しかし英語でつらい。

yahoo group iolanguage :search ruby

Random

| Random - たばさの を含むブックマーク はてなブックマーク - Random - たばさの

対話モード

io>Random value

で0.98..などと表示。しかし最新版インストールしたりいじってまたやってみると何度やっても即対話モード終了。

最初の一度はなんだったんだろうか。

Rational

| Rational - たばさの を含むブックマーク はてなブックマーク - Rational - たばさの

ruby-devでも話題なのでなんとなくRational。まあ使い方よく分からない。

(追記:以下のは最初に a:=Rational とやらないとダメ?)

Io> r:= 3/7
==> 0.4285714285714286
Io> a:=r asRational
==> 7.720457e+015/1.801440e+016
Io> a type
==> Rational
Io> r type
==> Number
Io> a/4
==> 0.1071428571428571
Io> a/4 type

  Exception: argument 0 to method '/' must be a Number, not a 'Sequence'
  ---------
  /                                   Rational.io 56
  Rational /                           Command Line 2

Io> (a/4) type
==> Number
Io>
トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080217

02/16(土) 2008

bigdecimal 実数

| bigdecimal 実数 - たばさの を含むブックマーク はてなブックマーク - bigdecimal 実数 - たばさの

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/33790

誰もが共通にこれだと思えるような「実数」が

一つあって、現在のコンピュータはそれを不完全にしか表現できていない、と

いうわけですね。

一方、「自然数」は疑いようがないにしても、「実数」というのは人工的な創

造物だ。したがって現状は現在のコンピュータアーキテクチャーの欠陥ではな

く、もうちょっと普遍的なところに根っこがある

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080216

02/12(火) 2008

最もタメになる「初心者用言語」はgolf

最もタメになる「初心者用言語」はgolf - たばさの を含むブックマーク はてなブックマーク - 最もタメになる「初心者用言語」はgolf - たばさの

言語じゃないっ。

勉強になるしゲーム感覚で。言語知らなくて解ける問題もあるよ。

変な癖も付くかもね。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080212

02/10(日) 2008

fibonacci

| fibonacci - たばさの を含むブックマーク はてなブックマーク - fibonacci - たばさの

a:=b:=1 println
for(n,1,45,
  c:=a; a=b; b=c+b;
  a println
)

代入 a=b=1 はまあcでも出来たかな。

でもすべてが式ということはこんなのも

a:=b:=1;
for(n,1,46,
  c:=a println;
  b=c+a=b
)

b=c+a=b

うーん気持ち悪い ... b=c+(a=b)におなじ、a=bを先に実行


File standardInput readLine

これさえなければgolf向きか。公式にstdioというのも見かけるけど使い方分からない。


...とおもったらrubyでもできた、代入

irb(main):001:0> a,b=1,2
=> [1, 2]
irb(main):002:0> c=10
=> 10
irb(main):003:0> a=b+c=a
=> 3
irb(main):004:0> p a,b,c
3
2
1
=> nil

time

| time - たばさの を含むブックマーク はてなブックマーク - time - たばさの

while(n:=File standardInput readLine,
 n println
 Date fromNumber(n asNumber) println
)

99999979

1973-03-03 09:46:19 UTC

99999980

1973-03-03 09:46:20 UTC

99999981

1973-03-03 09:46:21 UTC

99999982

1973-03-03 09:46:22 UTC

99999983

1973-03-03 09:46:23 UTC

99999984

1973-03-03 09:46:23 UTC

...

なんかおかしいな

right time

| right time - たばさの を含むブックマーク はてなブックマーク - right time - たばさの

http://golf.shinh.org/p.rb?right+time

while(n:=File standardInput readLine,
 Date fromNumber(n asNumber)asString("%Y-%m-%d %H:%M:%S")println
)

フォーマットを合わせるとこまで。答は微妙にずれたまま。leap secondsとは別な問題な気がするが、そんなことはゴルフ界では問題にされないのだ。さてどうすべきか。

と書いておくと誰かやってくれるかも。(?)


マニュアルを見ていたらRandomのところ(Mersenne Twister)に日本人らしき名前がある。なんかちょっとうれしくなる。

random 環境依存

| random 環境依存 - たばさの を含むブックマーク はてなブックマーク - random 環境依存 - たばさの

Rubyのrand()はMersenne Twister!? - kkobayashi_a’s blog

というわけで検索するとrubyに戻ってくる。環境に依存しないということか。なるほど。

no title

/dev/urandomとかあるから非依存てことでもない?

まねしてみよう

>ruby-1.8.6 -e "srand; p srand"
2995749611064746664473623798561008776
>ruby-1.8.6 -e "srand; p srand"
2995749611064727037137929397367768128
>ruby-1.8.6 -e "srand; p srand"
2995749611064775662755307704335669496
 
>ruby-1.9.0 -e "srand; p srand"
181448020878741153196646826808383736
>ruby-1.9.0 -e "srand; p srand"
181448020878776349584339468928193360
>ruby-1.9.0 -e "srand; p srand"
181448020878801068221398244022295096

"/dev/random"と"/dev/urandom"について

Linusのクリスマスプレゼントが引き起こした問題 : /dev/randomと/dev/urandomのエントロピー

404 Not Found

改行コード

| 改行コード - たばさの を含むブックマーク はてなブックマーク - 改行コード - たばさの

windowsではformが使いにくい。1行にすれば無問題

1.9にはpe

| 1.9にはpe - たばさの を含むブックマーク はてなブックマーク - 1.9にはpe - たばさの

http://golf.shinh.org/p.rb?permutater

permutationがあるようだ。狙ってるかな。それにしても7とは。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080210

02/08(金) 2008

そうなんだ

| そうなんだ - たばさの を含むブックマーク はてなブックマーク - そうなんだ - たばさの

ま、こういう使い方はしないからいっかな?

どういう使い方だと役にたつのかのう

以下のコードを実行した時の出力として正しいものを選択してください。

 a = [1,2]
 b = "world!"
 a.each{|b| a[0] = "hello"}
 print a[0], " ", b, "\n"

(略)

http://itpro.nikkeibp.co.jp/article/COLUMN/20080115/291095/?P=7

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080208

02/07(木) 2008

print文

| print文 - たばさの を含むブックマーク はてなブックマーク - print文 - たばさの

//date.io

i:= Date clone
i day print
// =>6 ('08/2/6)

/*
 comment is c,c++ style both;コメントはC,C++と同様。rubyのように#も使える
 ObjectとSlot (method, function, variableに相当?) の区切りにドットはいらない。*/

"\n" print
i:= Date now
i print
// => 2008-02-06 23:53:55 UTC (現在時刻を表示) 
Date clone now print
Date now print;
// これらでも表示は同じ
// ;semicolonは文の区切りにあってもいい <削除
// ;semicolonか改行が文の区切り。
// 最初の代入は := 、以降では = 

i asNumber print
// => 1202342193.359406 (秒での表示)

参考

日本語 http://f21.aaa.livedoor.jp/~kizz/prog/io/IoVM/_docs/IoVM_ja.html

英語、本家 http://www.iolanguage.com/scm/git/checkout/Io/docs/IoReference.html

for, loop, method

| for, loop, method - たばさの を含むブックマーク はてなブックマーク - for, loop, method - たばさの

c := Object clone
c fun := method(
  for(i,1,9,
      i print
      writeln("hello.")
  )
)

c fun
c fun

// =>1hello.
// =>2hello.
// =>...略
// =>9hello.
// =>1hello.
// =>2hello.
// =>...略
// =>9hello.

引数

| 引数 - たばさの を含むブックマーク はてなブックマーク - 引数 - たばさの

// 定義。 (引数1, 引数2, ... , 最後が本体)
sum := method(a, b, a+b)

b := sum(10,212)
"10+212=" print
b print

clone

| clone - たばさの を含むブックマーク はてなブックマーク - clone - たばさの

Smalltalk (all values are objects), Self (prototype-based), NewtonScript (differential inheritance), Act1 (actors and futures for concurrency), LISP (code is a runtime inspectable/modifiable tree) and Lua (small, embeddable).

http://en.wikibooks.org/wiki/Io_Programming/Beginner%27s_Guide/About

Ioは主に次のものに影響を受けている

Smalltalk:すべてがオブジェクト。Self:プロトタイプ・ベース。NewtonScript:差分継承(?)。Act1:actors,futures(?)*1Lisp:実行時検査/修正可能ツリー。Lua:小さく、組み込み可能。


クラスはない。「clone」でコピーを作る。

a:= Object clone
a sum :=method(a, b, a+b)

b := a clone
b mul := method(a, b, a*b)

a sum(2,3) print
"\n" print
b sum(2,3) print
"\n" print
b mul(2,3) print
"\n" print
a mul(2,3) print
"\n" print


// 5
// 5
// 6
//
//  Exception: Object does not respond to 'mul'
//  ---------
//  Object mul   

perform

| perform - たばさの を含むブックマーク はてなブックマーク - perform - たばさの

呼び出しはメソッド名を文字列としてこうも書ける

a := Object clone
a sum := method(a, b, a+b)
a perform("sum", 10, 212) print

system

| system - たばさの を含むブックマーク はてなブックマーク - system - たばさの

System system("ls")
// system command の実行

loop

| loop - たばさの を含むブックマーク はてなブックマーク - loop - たばさの

loop(1)
a:=list(1,2)
a foreach(c,a append(a) print)

名前間違った

| 名前間違った - たばさの を含むブックマーク はてなブックマーク - 名前間違った - たばさの

消せない

print埋め込み

| print埋め込み - たばさの を含むブックマーク はてなブックマーク - print埋め込み - たばさの

なにかあったようだ

埋め込みが増えてるようで。実装が変われば通らなくなるようなものかな?

それよりrubyhello, worldはなんだろうなー。


おっと nukoさん発見。

http://xx2zz.blog77.fc2.com/blog-entry-63.html#more

見かけたってことは最初じゃないのか

 元祖brainハッカーは誰だ

string ..

| string .. - たばさの を含むブックマーク はてなブックマーク - string .. - たばさの

ほかの言語のように改行は"..\n..."とエスケープするが、pythonのように"""mojiretsu"""とやると複数行の文字列を使える。連結にはLuaのように「..」を使う。数値も繋げられる。すべてはexpression(式)で、戻り値があるから。

Io> "There are " .. (8*10)+19 .. " bottles of beer on that very wall, over there."
==> There are 99 bottles of beer on that very wall, over there.

Io beginner's guide

Integer, real number

| Integer, real number - たばさの を含むブックマーク はてなブックマーク - Integer, real number - たばさの

整数と実数は同等に扱われる。16進数はCのように0XBEEFなどとあらわされるが、大きすぎるものは32ビットでの最大値に丸められる。バグという人もいるかもしれないが我々の判断するところではない。(原文)

Io> 0xDEAD
==> 57005
Io> 0xBEEF
==> 48879
Io> 0xDEADBEEF
==> 3.735929e+09
Io> 0xDEADBEEFFEEDFACE
==> 4.294967e+09

標準では複素数、無限などのサポートはない。

scope、setProto

| scope、setProto - たばさの を含むブックマーク はてなブックマーク - scope、setProto - たばさの

デフォルトですべてのスロットはローカル。別の言い方では「グローバル変数はない」


selfになければ親にあたるprototypeのスロットを順に探していく。コピーという感じではなかったな。

思ったようにするには

SavingsAccount init := method(self balance := 0)

などと、initメソッドを追加するようだ。

http://en.wikibooks.org/wiki/Io_Programming/Beginner%27s_Guide/Objects


実行途中でも親クラスにあたるprototypeを動的にsetProto()で変更できる。なんかすごい。(「変更」は違う?)

keyword, statement

| keyword, statement - たばさの を含むブックマーク はてなブックマーク - keyword, statement - たばさの

予約語、命令文はない。すべてはmessageからなる式。(expression

for,ifなどの制御構文も式。演算子(+,*,など)も単なるmessage。

assignは3種類。

a ::= 1 newSlot("a", 1)

a := 1 setSlot("a", 1)

a = 1 updateSlot("a", 1)

(最初のは良く分からない)

多重継承

| 多重継承 - たばさの を含むブックマーク はてなブックマーク - 多重継承 - たばさの

いくつでもprotoのlistに追加できる。

blockは、レキシカル・スコープを持つこと以外はmethodとおなじ。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080207

02/06(水) 2008

今日のirb

| 今日のirb - たばさの を含むブックマーク はてなブックマーク - 今日のirb - たばさの

# Stringの添え字に正規表現も使える
irb(main):016:0> "foobar"[/oo/]
=> "oo"
irb(main):017:0> "fokobar"[/oio/]
=> nil
irb(main):018:0> "fokobar"[/o.o/]
=> "oko"

# uncryptみたいなのはない?
irb(main):019:0> "qwert".crypt "23u"
=> "23MM5NISuHoXw"
irb(main):020:0> a="qwert".crypt "23u"
=> "23MM5NISuHoXw"
irb(main):021:0> a.slice(/\d/)
=> "2"
irb(main):022:0> b=a.slice(/\d/)
=> "2"
irb(main):023:0> b
=> "2"
irb(main):024:0> b=a.slice(/\D/)
=> "M"

# eql?とequal?
irb(main):025:0> a="1234"
=> "1234"
irb(main):026:0> b=a
=> "1234"
irb(main):027:0> a[0]="e"
=> "e"
irb(main):028:0> a
=> "e234"
irb(main):029:0> b
=> "e234"
irb(main):030:0> a.equal? b
=> true
irb(main):031:0> a.eql? b
=> true
irb(main):032:0> c="e234"
=> "e234"
irb(main):033:0> a.eql? c
=> true
irb(main):034:0> a.equal? c
=> false
irb(main):035:0> a[0]="0"
=> "0"
irb(main):036:0> a
=> "0234"
irb(main):037:0> b
=> "0234"
irb(main):038:0> c
=> "e234"
# fetch
irb(main):001:0> a="1"
=> "1"
irb(main):002:0> a.fetch[9]
NoMethodError: undefined method `fetch' for "1":String
        from (irb):2
irb(main):003:0> a.fetch(9)
NoMethodError: undefined method `fetch' for "1":String
        from (irb):3
irb(main):004:0> a=["1"]
=> ["1"]
irb(main):005:0> a.fetch(9)
IndexError: index 9 out of array
        from (irb):5:in `fetch'
        from (irb):5
irb(main):006:0> a.fetch(9,6)
=> 6
irb(main):007:0> a
=> ["1"]
irb(main):008:0> a.fetch(9,6)="wert"
SyntaxError: compile error
(irb):8: syntax error, unexpected '=', expecting $end
a.fetch(9,6)="wert"
             ^
        from (irb):8
irb(main):009:0> a
=> ["1"]
irb(main):010:0> b=a.fetch(9,6)
=> 6
irb(main):011:0> b
=> 6
irb(main):012:0> b=a.fetch(0,6)
=> "1"
irb(main):013:0> b
=> "1"
irb(main):014:0> b=a.fetch(0,6){|i|i+1}
(irb):14: warning: block supersedes default value argument
=> "1"
irb(main):015:0> b=a.fetch(9,6){|i|i+1}
(irb):15: warning: block supersedes default value argument
=> 10
irb(main):016:0> b
=> 10
irb(main):017:0> b=a.fetch(9){|i|i+1}
=> 10
irb(main):018:0> b=a.fetch(0){|i|i+1}
=> "1"

# fill
irb(main):019:0> a
=> ["1"]
irb(main):020:0> a=[1,2,3,4,5]
=> [1, 2, 3, 4, 5]
irb(main):021:0> a.fill 3
=> [3, 3, 3, 3, 3]
irb(main):022:0> a[0]=7
=> 7
irb(main):023:0> a
=> [7, 3, 3, 3, 3]
irb(main):024:0> a.fill("e")
=> ["e", "e", "e", "e", "e"]
irb(main):025:0> a[0]=7
=> 7
irb(main):026:0> a
=> [7, "e", "e", "e", "e"]
irb(main):027:0> a[0]="er"
=> "er"
irb(main):028:0> a
=> ["er", "e", "e", "e", "e"]
irb(main):029:0> b="er"
=> "er"
irb(main):030:0> a.fill b
=> ["er", "er", "er", "er", "er"]
irb(main):031:0> b=90
=> 90
irb(main):032:0> a
=> ["er", "er", "er", "er", "er"]
irb(main):033:0> a[0]=7
=> 7
irb(main):034:0> a
=> [7, "er", "er", "er", "er"]
irb(main):035:0> a.fill{|i|i*2}
=> [0, 2, 4, 6, 8]
irb(main):036:0> a.fill(3..5){|i| "xy"*i }
=> [0, 2, 4, "xyxyxy", "xyxyxyxy", "xyxyxyxyxy"]
irb(main):037:0> a.index{|i| i[/xy/]}
ArgumentError: wrong number of arguments (0 for 1)
        from (irb):37:in `index'
        from (irb):37
irb(main):038:0>

| ん - たばさの を含むブックマーク はてなブックマーク - ん - たばさの

http://golf.shinh.org/p.rb?sort+characters

1文字でいいはずなんだけどな

複数行

| 複数行 - たばさの を含むブックマーク はてなブックマーク - 複数行 - たばさの

multiply-longとか。

n/{....}/]n*

# n/     =>  改行で区切って
# {...}/ =>  配列要素それぞれに対してブロック内の処理を実行
# ]n*    =>  改行をはさんで(終了、プリントされる)

なぜいいのかわかってないところもある

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080206

02/04(月) 2008

Peak Detection

| Peak Detection - たばさの を含むブックマーク はてなブックマーク - Peak Detection - たばさの

http://f.hatena.ne.jp/images/fotolife/h/hatecha/20080204/20080204172407.png

http://golf.shinh.org/p.rb?Peak+Detection

それぞれについて、近い順に

差を取って

満たせばマーク

マイナスなら(最大ではないので)打ち切り

逆向きもやる

両方マークなら'*'表示。

短くなりそうもないですのう

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080204

02/03(日) 2008

rubyレシピブック読んでるんだが

| rubyレシピブック読んでるんだが - たばさの を含むブックマーク はてなブックマーク - rubyレシピブック読んでるんだが - たばさの

そういえば各章の入り口にどう突っ込んでいいのか分からない小ネタが置いてある

ていうより

ていうより - たばさの を含むブックマーク はてなブックマーク - ていうより - たばさの

http://d.hatena.ne.jp/ryocotan/20080201/p1

こういうの入れるといいと思うんだけど

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080203

02/01(金) 2008

no title

| [http://itpro.nikkeibp.co.jp/article/COLUMN/20070214/261900/:title] - たばさの を含むブックマーク はてなブックマーク - [http://itpro.nikkeibp.co.jp/article/COLUMN/20070214/261900/:title] - たばさの

開発とセキュリティ・プロジェクトが分離してるのか

これは叩かれても仕方のない状況

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080201
カレンダー
<< 2008/02 >>
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
archive Error : RSSが取得できませんでした。