brainf*ckでジョジョ言語
CSNagoya3周年記念の発表で使ったネタ言語。
ジョジョ言語 バージョン3です。
タイトルでピンと来なかった人はwikipediaのbrainfuckの項目などをご覧下さい。
賢い人がバージョン6を作って素数をカウントするなどしてくれたらいいと思います。
特徴
- バトル風言語
- バージョン3
ジョジョ言語の構文
ジョジョ言語でのHello World!のソースコード
オラオラオラオラオラオラオラオラオラッ!! 「あ・・・ありのまま今起こったことを話すぜ 俺は奴の前で階段を登っていたと思ったら、いつの間にか降りていた な…何を言っているのかわからねーと思うが、 俺も何をされたのかわからなかった… 頭がどうにかなりそうだった…催眠術だとか超スピードだとか、 そんなチャチなもんじゃあ断じてねえ。 もっと恐ろしいものの片鱗を味わったぜ…」 スターフィンガー! オラオララララ! オラッ!オラオラララララオラオラオラァ!!! スターフィンガー!!! オラァオラオラオラオラオラオラッオラ!! オラオラァァァァァオララララララララララ! スターフィンガー! オラオラオラオラオラ! つけの領収書だぜ! 力比べというわけか! 知るがいい…!『ザ・ ワールド』の真の能力は…まさに!『世界を支配する』能力だと言うことを! 「ロードローラだ!ロードローラだ!ロードローラだ!」 無駄ッッッ! ザ・ワールドッッ スターフィンガー! 「ハーミットパープル」 スターフィンガー オラオラ! 「ハーミットパープル」 オラオラオラオラオラオラオラ ハーミットパープル!ハーミットパープル! オラオラオラ ハーミットパープル! スターフィンガー! 無駄ァ! ハーミットパープル 無駄!無駄! 無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄 WRYYYYYYYYYYYYYY! “ジョースター・エジプト・ツアー御一行様”は貴様にとどめを刺して全滅の最後というわけだな ハーミットパープル! ロードローラだ! オーラオラオーラオラオラオラオーラオラオラオラオラッ! ハーミットパープル! 無駄無駄無駄無駄無駄無駄無駄無駄ッ ハーミットパープル! オラオラオラアアアアアアアア! ハーミットパープル! 無駄ッ無駄ッ無駄ッ無駄無駄無駄ァツ! ハーミットパープル もうおそい! 脱出不可能よッ! 無駄無駄無駄無駄無駄無駄無駄無駄ぁぁ! ハーミットパープル! 最高に『ハイ!』ってやつだアアアアア!アハハハハハハハハハーッ!! スターフィンガー オラ ハーミットパープル! てめーの敗因は・・・たったひとつだぜ・・・DIO たったひとつの単純(シンプル)な答えだ・・・ 『てめーは おれを怒らせた』
Hello World!
この言語はRubyで作ってあります
#!/usr/bin/ruby $KCODE = 'u' class BrainF_ck class ProgramError < StandardError; end def initialize(src) orders = get_orders @tokens = src.scan(/(#{orders})/).flatten @jumps = analyze_jumps(@tokens) end def get_orders [ 'オラ', '無駄', 'スターフィンガ', 'やれやれだぜ', 'ロードローラ', '貧弱', 'ハーミットパープル', '新手のスタンド使いか', 'あ・・・ありのまま今起こったことを話すぜ', 'ザ・ワールド' ].join('|') end def run tape = [] pc = 0 cur = 0 while pc < @tokens.size case @tokens[pc] when 'オラ' tape[cur] ||= 0 tape[cur] += 1 when '無駄' tape[cur] ||= 0 tape[cur] -= 1 when 'スターフィンガ' || 'やれやれだぜ' cur += 1 when 'ロードローラ' || '貧弱' cur -= 1 raise ProgramError, '開始地点よりポインタを左に移動できません。' if cur < 0 when 'ハーミットパープル' n = (tape[cur] || 0) print n.chr when '新手のスタンド使いか' tape[cur] = $stdin.getc when 'あ・・・ありのまま今起こったことを話すぜ' pc = @jumps[pc] if tape[cur] == 0 when 'ザ・ワールド' pc = @jumps[pc] if tape[cur] != 0 end pc += 1 end end private def analyze_jumps(tokens) stack = [] jumps = {} o = 'あ・・・ありのまま今起こったことを話すぜ' c = 'ザ・ワールド' tokens.each_with_index do |v,i| if v == o stack.push(i) elsif v == c raise ProgramError, "#{c}が多すぎます" if stack.empty? from = stack.pop to = i jumps[from] = to jumps[to] = from end end raise ProgramError, "#{o}が多すぎます" unless stack.empty? jumps end end begin BrainF_ck.new(ARGF.read).run rescue BrainF_ck::ProgramError => e puts e.message puts "プログラムの実行に失敗しました" end
アリーヴェ・デルチ!
2010/2/8 追記
ジョジョ言語、jojo言語などでググってから作ったのですが、やはり先人がいらっしゃるということをブコメで教えて頂きました。
新プログラミング言語「BF-BASIC'n」(ページ下部)
ループに割り当てたセリフが僕よりセンスがいいです!