32nd Diary

過去の日記
today: , yesterday: , total:
2006年
9月
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

めーるあどれす:ruby -r base64 -e 'puts Base64.decode64("dGFrQG5vMzIudGs=")'


トップ «前の日記(2006-09-07 (Thursday)) 最新 次の日記(2006-09-09 (Saturday))» 編集

2006-09-08 (Friday) [長年日記]

Yet Another Brainfucker

昨日の夜*1Brainfuckでちょいと遊んでいたときに,変な実装を思いついた.

Webをまさぐってみても,このタイプの実装はまだないようなので,公開しときます.

#!/usr/bin/env ruby
# yab.rb

iseg = ARGF.read
iseg = iseg.
gsub(']', 'end;').
gsub('[', 'while dseg[dx] != 0;').
gsub('+', 'dseg[dx] += 1;').
gsub('-', 'dseg[dx] -= 1;').
gsub('.', 'print dseg[dx].chr;').
gsub(',', 'dseg[dx] = $stdin.getc;').
gsub('>', 'dx += 1;').
gsub('<', 'dx -= 1;')

eval(<<INIT + iseg)
dseg = Array.new(32768, 0)
pc = 0
dx = 0
INIT

puts ''

え,いや,これでちゃんと動くんですってば.ウソジャナイヨ.

ちなみに,迂闊にgsubの順序を変更すると動かなくなりますので,注意されたし

*1 福岡のホテルで

Tags: Ruby Hack

ruby-mode for xyzzy のインデント設定

xyzzyのruby-modeで表示幅を3に設定したタブでインデントする設定です.

(add-hook '*ruby-mode-hook*
 #'(lambda ()
    (set-tab-columns 3 (selected-buffer))
    (setq *ruby-indent-column* (tab-columns (selected-buffer)))
    (setq indent-tabs-mode t)
   ))

オフラインでも快適な環境でRubyのコードを読み書きするために設定しました.

Tags: Ruby Emacs

データがありません

Rubyでmixiをいじるコードを書いているのですが,日記の編集がうまくいかない...

/edit_diary.pl?id=xxxx のパスに以下のデータをPOSTしている. (当然,BF_SESSIONとBF_STAMPは設定済み)

  • submit=main
  • form_date=date
  • post_key=xxxx
  • diary_title=title
  • diary_body=body

POSTするデータはこれだけで十分じゃないのか...? っつーか,データがありませんってエラーメッセージじゃわかんねぇ!!

Tags: mixi Ruby
本日のツッコミ(全7件) [ツッコミを入れる]
tyv (2006-09-08 (Friday) 19:19)

クッキーとかリファーとか使って、<br>はまちちゃん対策でなんかやってるんじゃないかな?

32 (2006-09-08 (Friday) 19:40)

でも,同じCookieで日記の追加はできているんだよね...<br>リファラも前にアクセスしたURLを入れるようにしてはみたけど,ダメぽ...orz<br><br>もし,multipart/form-dataが必須だとしたらかなり面倒だなぁ.

machy (2006-09-09 (Saturday) 00:26)

Brainfuckって初めて知った。面白いね。<br>細かいことを言うと、この実装だと配列の要素がByteの範囲を超えるとまずいのでは。<br>「任意の文字列が与えられたとき、実行すると単にその文字列を出力するBrainfuckスクリプトのうち最もコンパクトなものを一つ出力するプログラムを作れ」って課題はどうかな。結構難しそう。

32 (2006-09-09 (Saturday) 00:46)

どもども.<br>Wikipediaの情報だと仕様では配列はバイト型の範囲でよいみたいなので,いいのかなーとか適当に考えちゃったりして.<br>配列の長さについては,十分にする必要があるなら,生成時のコードを "dseg = Hash.new(0)" とするとよさげですね.<br><br>課題についてはボクもちょっと考えてみます.<br>ある値を任意の値に変動させる最短のパターンについてよく考察しないとダメそうですね...

machy (2006-09-09 (Saturday) 10:08)

んん、表現がまずかったかな。print dseg[dx].chr;でdseg[dx]が255を超えてたりするとRangeErrorが飛ぶんじゃない?ってことです。(試してないけど)

machy (2006-09-09 (Saturday) 10:43)

いいのかなーってのはその動作でいいのかなーってことか。c言語のunsigned char*のように扱うようなので、255を超えたら0に戻るべきかな、って思ったわけです。まあASCIIしか使わない限りどうでもいいね。

32 (2006-09-09 (Saturday) 11:27)

なるほど,ちょっと仕様が読めてませんでしたが,unsigned char*のように扱うなら,'dseg[dx] = (dseg[dx] + 1).modulo(2**8);' とかなりますかね.マイナスについても同じことをすれば大丈夫かな.dsegのインデックスが負の値だった場合についても考えなきゃいけない気がしてきました...

[]
本日のPingbacks(全0件)