忍者ブログ

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

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

ブログ履歴

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ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

shuffleの仕組みを少し変更「初めてのプログラミング」10.3練習問題1問目リターンズ1

初めてのプログラミングの10.3練習問題1問目を再び考えてみる。

「初めてのプログラミング」10.3練習問題の1問目後半戦、完全なる shuffle とは何ぞやをベースに少し改良をしてみた。

シャッフルの際、
入れた単語が1個だった場合は、そのままの配列。
入れた単語が2個だった場合は、1つ目と2つ目を入れ替え

入れた単語が3個だった場合は、まず、配列を入れ替えてからもとの配列と比較。
そのとき、もとの配列の並びの連続して3個が同じ並びだったときには、入れ替えた配列の、3連続同じ部分の2つ目と3つ目を入れ替えることで、擬似的に混ぜ合わせることにした。

ただ、これでは配列の数が増えたときに、一度配列を入れ替えるというのが無駄な手段になりそうなので、やっぱり改良の余地はありそう。

配列の1度目のシャッフルで、この3連続判定を行う必要があるだろう。
それはまた次の機会に考えることにした。

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



shuffle2.rb


=begin
入力配列とシャッフル配列
技術力がないのでシャッフル配列が終了してから
3連続防止のステップ、見つけ次第・
その3つでシャッフルの方針
連続する3つの配列のうち2つ目と3つめをチェンジでお茶を濁す
=end

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

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


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_match original, shuffler, n, m

while n <= (original.length - 3)

if original[n] == shuffler[m] && original[n+1] == shuffler[m+1] && original[n+2] == shuffler[m+2]
temp = shuffler[m+1]
shuffler[m+1] = shuffler[m+2]
shuffler[m+2] = temp
end
n += 1
end

if m <= (original.length - 3)
shuffler = threewords_match original, shuffler, 0, m+1
end
shuffler
end

def original_contents_change origin_cont, origindata
if origin_cont <= 1
shuffled = origindata
elsif origin_cont == 2
shuffled = [origindata[1],origindata[0]]
else
shuffled = preshuffle origindata,[]

# ここまでで1次的シャッフルが終わり、真のシャッフル開始
# 3文字連続の部分を、部分的にシャッフル
lastshuffled = threewords_match(origindata,shuffled,0,0)
end
end

# プログラム開始
origindata = []
origindata = word_input []

origin_cont = origindata.length
shuffled = original_contents_change(origin_cont, origindata)

puts "最後の結果"
puts shuffled
PR

この記事にコメントする

NAME
TITLE
MAIL
URL
COMMENT
PASS

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

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

PR

カテゴリー

最新記事

アーカイブ

プロフィール

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

リンク

ブログ内検索

バーコード

RSS

忍者ブログ │ [PR]