忍者ブログ

マドノマグラの初心者自作ゲーム制作日誌 迷走モード

プログラミング初心者が自作ゲームを作成してみようとする動きを記す。現在迷走中。

ブログ履歴

2010/11/06: HSP3.22の環境を整えてみる
2009/11/09: Rubyで適当版自分用関連記事リンク作成プログラムを作る
2009/06/04: Visual C++(DXライブラリ使用)の環境を整えてみるも休止状態に
2009/03/17: ActionScript勉強の環境を整えるも結局休止状態に
2006/07/15: とりあえず分岐型ゲームを作る グリーンタワーVer1.2 ダウンロード(zip)
2006/07/02: ブログスタート。NScripterで何かを作ろうとする

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

「初めてのプログラミング」10.3練習問題の1問目後半戦、完全なる shuffle とは何ぞや

初めてのプログラミングの10.3練習問題の1問目、完全なる shuffle って何だろうかと考えた。

とりあえず、「初めてのプログラミング」10.3練習問題の1問目前半戦、shuffleメソッドでシャッフルするまでで書いたプログラムに追加する形でやってみることにした。

考え方としては、元の入力配列とshuffle後の配列を比較して、単語と次の単語とさらにその次の単語の並びが同じとなった場合は、シャッフルが不完全であるという解釈を行った。

例としては、「a,b,c,d,e」をシャッフルしたときに、「e,d,a,b,c」となったときは、(a,b,c)の並びが共通してしまうので、シャッフル不完全とするということである。

ただ今回のプログラムでは、シャッフルが不完全だったところでやり直すこともできないし、シャッフルが終わって配列を吐き出してからでないと、シャッフル比較ができないという欠点がある。

これは、ちゃんと方法論を考えないといけないなあ…

初めてのプログラミング
Chris Pine
オライリー・ジャパン
売り上げランキング: 161616
おすすめ度の平均: 3.5
3 Rubyを使ってHello, Worldから
4 丁寧な解説
4 Ruby



shuffle1.rb


def preshuffle some_array,final_array
shuffle some_array,final_array,[]
end

def shuffle unshuffled,final_array,shuffle_next

seed = unshuffled.length
num = rand(seed)
plus = 0

while plus < seed
if num == plus
final_array.push unshuffled[num]
else
shuffle_next.push unshuffled[plus]
end
plus += 1
end

if shuffle_next != []
preshuffle shuffle_next,final_array
end
final_array
end

def threewords original, shuffler, n, m, origin_contents

# 内部調査のための数値表示
puts "n=" + n.to_s
puts "m=" + m.to_s
puts "origin_contents=" + origin_contents.to_s

if original[n] == shuffler[m] && original[n+1] == shuffler[m+1] && original[n+2] == shuffler[m+2]
false
else
if n >= (origin_contents - 3) && m >= (origin_contents -3)
true
elsif n < (origin_contents - 3) && m >= (origin_contents -3)
threewords(original, shuffler, n+1, 0, origin_contents)
else
threewords(original, shuffler, n, m+1, origin_contents)
end
end
end

# プログラム開始

origindata = []
puts "半角英数で単語を打ってね、空行でおわり"
word = gets.chomp

while word != ""
origindata.push word
word = gets.chomp
end

puts "プログラムによる shuffle を開始します"

unshuffled = origindata
shuffled = preshuffle unshuffled,[]


puts "最初に入れ込んだデータはこちら"
puts origindata

puts "shuffled はこちら"
puts shuffled

# origindata要素が 0,1の場合は混ぜようがない、2の場合は逆さにするだけ・
# 3以上で shuffle確認の必要性 3連続で同じ並びだったらOUTとする

origin_contents = origindata.length

if origin_contents <= 1
puts "混ぜようがないじゃん!"
elsif origin_contents <= 2
puts "逆になっているか、そのままかのどっちかですよね"
else
if (threewords origindata, shuffled, 0, 0, origin_contents)
puts "シャッフル成功!"
else
puts "シャッフル失敗!"
end
end
PR

この記事にコメントする

NAME
TITLE
MAIL
URL
COMMENT
PASS

この記事へのトラックバック

この記事にトラックバックする:

PR

カテゴリー

最新記事

アーカイブ

プロフィール

HN:
マドノマグラ
性別:
非公開
職業:
趣味:
駄文書き
自己紹介:
ゲームを作ろうとしているうちに、言語学習に飽きていく。典型的なダメな人パターンに陥るアホな人

リンク

ブログ内検索

バーコード

RSS

忍者ブログ │ [PR]