Rubyの魔神 このページをアンテナに追加 RSSフィード

   「Ruby」は宝石の魔神のイメージ(The Jinn of the Ruby)
[DMY] [VB] [VB6] [Python] [C#] [Android] [電子工作] [個人メモ] [仕事メモ] [アイデア] [TstLink] [CE] [LTSA]
[自動化] [Qt] [OCaml] [3Dプリンタ] [TOOLS] [RAA] [Forge]
  [機能別索引] [逆引きRuby] [マニュアル] [るびま] [標準ライブラリ] [るりまサーチ] [Try! Ruby] [PRaggerまとめ] [ピジョン・ブラッド]
   [Rubyコーディング規約] [プログラミングのオキテ] [Rubyist SNS] [TOOLBIS]
   [RubyネットワークProg] [druby] [コードなにがし] [RDocテンプレ] [Ruby/Tkサンプル]
   [WAVE] [Xperia] [github] [twitterなど] [EA] [マクロ]

2008-06-22

FizzBuzz問題を書いてみよう

23:05 | FizzBuzz問題を書いてみよう - Rubyの魔神 を含むブックマーク はてなブックマーク - FizzBuzz問題を書いてみよう - Rubyの魔神 FizzBuzz問題を書いてみよう - Rubyの魔神 のブックマークコメント

FizzBuzz問題 

このゲームをコンピュータ画面に表示させるプログラムとして作成させることで、コードがかけないプログラマ志願者を見分ける手法を Jeff Atwood が FizzBuzz問題 (FizzBuzz Question)として提唱した。その提唱はインターネットの様々な場所で議論の対象になっている。

また、実際に「制限時間2分以内」「剰余(%記号等)を用いない」「1行でできる限り短く(ワンライナー)」等の縛りでゲーム条件を満たすコード記述の腕試しをする者が続出した。

Fizz Buzz - Wikipedia

縛りがあるとは知らなかったので、縛りありで書いてみます。

n=100;n.times{|j|i = j +1; print i; print " Fizz" if i/3*3 == i;print " Buzz" if i/5*5==i;print "\n";}

Fiss,Bussの時に数字を出さないように変更

for i in 1..100;s="";s="Fizz "if i/3*3 == i;s=s+"Buss " if i/5*5 == i;s=i.to_s if s=="";puts s;end

tiny_prolog

| 00:29 | tiny_prolog - Rubyの魔神 を含むブックマーク はてなブックマーク - tiny_prolog - Rubyの魔神 tiny_prolog - Rubyの魔神 のブックマークコメント

http://codezine.jp/a/article/aid/461.aspx?p=1

Rubyによるprologの実装で、最初の一歩

SWI-prolog

 like( taro, coffee ).

3 ?- like(taro,X).
X = coffee

これをやってみます。

taroはcoffeeが好き

から

taroが好きなのは何か?と聞きます。

require 'tiny_prolog'

like = pred 'like'

like[:taro,:coffee].si

resolve like[:taro,:X] do |env|
  puts env[:X].inspect
end

実行結果

:coffee


listから最初を取り出すfirst,残りを取り出すrest、最初に追加のadd_to_list

SWI-prologでこんな感じ。

first( [X | Y], X ).

rest( [X | Y], Y).

add_to_list( X, L, [X | L] ).

require 'tiny_prolog'

first = pred 'first'
rest = pred 'rest'
add_to_list = pred 'add_to_list'

first[cons(:A, :X),:A].si
rest[cons(:A, :X),:X].si
add_to_list[:X,:L,cons(:X,:L)].si


t = first[list(1,2,3),:X]
resolve t do |env|
  print env[t].inspect,"\n"
end
t = rest[list(1,2,3),:X]
resolve t do |env|
  print env[t].inspect,"\n"
end

t = add_to_list[4,list(1,2,3),:X]
resolve t do |env|
  print env[t].inspect,"\n"
end

結果

first[(1 2 3), 1]
rest[(1 2 3), (2 3)]
add_to_list[4, (1 2 3), (4 1 2 3)]
トラックバック - http://ruby.g.hatena.ne.jp/garyo/20080622