読者です 読者をやめる 読者になる 読者になる

A Perfect Night For Bananafish

だがそれを語るには人生は短すぎる

アナグラム

Technotes

amazon:Javaで学ぶアルゴリズムとデータ構造 (単行本(ソフトカバー))の第6章より。
anagram.rb

def doAnagram(newSize)
	return if newSize==1
	newSize.times { 
		doAnagram(newSize-1)
		if(newSize==2)
			displayWord
		end
		rotate(newSize)
	}
end
def rotate(newSize)
	position=@@size-newSize
	tmp = @@arrChar[position]
	(position+1..@@size).each{ |i|
		@@arrChar[i-1] = @@arrChar[i]
	}
	@@arrChar[@@size-1] = tmp
end
def displayWord
	@@size.times { |j|
		print @@arrChar[j]
	}
	print "\n"
end
unless ARGV.size==1
	puts "usage: ruby -Ks anagram.rb <string>"
	exit
end
str=ARGV[0]
@@arrChar=str.split(//)
@@size=@@arrChar.size
doAnagram(@@size)

もうちょい綺麗に書き直したい。

実行結果

>ruby -Ks anagram.rb はてな
はてな
はなて
てなは
てはな
なはて
なては