マドノマグラの初心者自作ゲーム制作日誌 迷走モード
プログラミング初心者が自作ゲームを作成してみようとする動きを記す。現在迷走中。
ブログ履歴
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で何かを作ろうとする
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ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ローマ数字から算用数字へ「初めてのプログラミング」12.6追加練習問題1問目
初めてのプログラミングの12.6追加練習問題1問目、ローマ数字から算用数字への変換を考えてみる。
ルール確認
方針 最大3999まで
nilniiM,MDC,CLX,XVIのレベルを考える。各位の10,5,1要素である。
与えられたローマ数字の文字チェックの開始。
ただし、チェック前に、末尾に改行コードを挿入.
一文字ずつ、疑似的なチェックポインタが動くような感覚で。
5の要素のあるなしチェック
次が10と5要素が来た場合、ローマ数字のルールに反するので不正チェック。以下のチェックは関数呼び出しはあるもののスルー。
そうじゃない場合は、結論の数に数値を追加。
次に1の要素チェックへ移動。
1の要素あるなしチェック
まず、数値に1を追加
あるとき、次の文字の1の要素あるなしチェック
10要素なら、数値は8を追加で、次のレベルへ
5要素なら、数値は3を追加で、次のレベルへ
1要素なら、数値は1を追加。
その次の文字の要素チェック。
10か5要素なら、ローマ数字のルールに反するので不正チェック。
1要素なら、数値は1を追加。
さらにその次の文字チェック
1要素、ローマ数字のルールに反するので、不正チェック。
そうじゃないなら、次のレベルへ
全レベル終了時に、チェックポインタが指す文字が改行コードなら数値表示。
そうじゃないなら、不適正表示。
かなりいきあたりばったりのコードなので、はっきりいってこれがベストなのかはわからん。
初めてのプログラミング
posted with amazlet at 08.09.02
Chris Pine
オライリー・ジャパン
売り上げランキング: 161616
オライリー・ジャパン
売り上げランキング: 161616
おすすめ度の平均:
Rubyを使ってHello, Worldから丁寧な解説
Ruby
romantointeger.rb
=begin
予定方針 最大3999まで
nilniiM,MDC,CLX,XVIで分けて考える。各位の10,5,1要素である。
そして、最初の文字チェックで5の要素と1の要素の存在を評価
・
5の要素のあるなしチェック
次が10と5要素が来たら不正・
そして次に1の要素チェックへ
1の要素あるなしチェック
あるとき、
次が10要素なら、値は9
次が5要素なら、値は4
そして1要素の場合は、3つ連続まで有効。それ以上は不正とみなす。
謎文字がきた場合は、次のレベルへ移動・
ないときは次のレベルへ以降。
全レベル終了時に、謎文字が残っているまたは、不正とみなされたものは、不正を伝えるメッセージ
ちゃんと変換された場合は、数値を表示。
=end
def roman_to_integer(place, ten ,five, one, left, n ,numeral, flag)
if flag
if left[n].chr == five
numeral += 5 * place
if left[n+1].chr == ten || left[n+1].chr == five
flag = false
else
n += 1
end
end
if left[n].chr == one
numeral += 1 * place
n += 1
if left[n].chr == ten
numeral += 8 * place
n += 1
elsif left[n].chr == five
numeral += 3 * place
n += 1
elsif left[n].chr == one
numeral += 1 * place
n += 1
if left[n].chr == one
numeral += 1 * place
n += 1
if left[n].chr == one || left[n].chr == ten || left[n].chr == five
flag = false
end
elsif left[n].chr == ten || left[n].chr == five
flag = false
end
end
end
end
# puts "methodの中"
# puts "n=" + n.to_s + " numeral=" + numeral.to_s + " flag=" + flag.to_s
[n, numeral, flag]
end
def roman text
letters = [[1000, nil, nil,"m"],[100,"m","d","c"],[10,"c","l","x"],[1,"x","v","i"]]
numeral = 0
roman_numeral = text.downcase + "\n"
flag = true
n = 0
letters.each do |list|
(n, numeral, flag) = roman_to_integer(list[0], list[1], list[2], list[3], roman_numeral, n, numeral, flag)
# puts "eachの中"
# puts "n=" + n.to_s + " numeral=" + numeral.to_s + " flag=" + flag.to_s
end
if roman_numeral[n].chr == "\n"
puts text + "の値は" + numeral.to_s + "です"
else
puts "お気の毒ですが" + text.to_s + "はローマ数字としては不適正です。"
end
end
roman('mcmxcix') # 1999
roman('mmmcdLiii') # 3453
roman('Dm') # OUT
roman('iiii') # OUT
roman('ixi') # OUT
roman('q') # OUT
PR
この記事にコメントする
PR
カテゴリー
最新記事
(04/22)
(11/20)
(11/11)
(11/11)
(11/09)
(11/07)
(11/07)
(11/07)
(11/07)
(11/06)
アーカイブ
プロフィール
HN:
マドノマグラ
HP:
性別:
非公開
職業:
謎
趣味:
駄文書き
自己紹介:
ゲームを作ろうとしているうちに、言語学習に飽きていく。典型的なダメな人パターンに陥るアホな人