忍者ブログ

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

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

ブログ履歴

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

ローマ数字から算用数字へ「初めてのプログラミング」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要素、ローマ数字のルールに反するので、不正チェック。
そうじゃないなら、次のレベルへ

全レベル終了時に、チェックポインタが指す文字が改行コードなら数値表示。
そうじゃないなら、不適正表示。


かなりいきあたりばったりのコードなので、はっきりいってこれがベストなのかはわからん。

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

この記事にコメントする

NAME
TITLE
MAIL
URL
COMMENT
PASS

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

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

PR

カテゴリー

最新記事

アーカイブ

プロフィール

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

リンク

ブログ内検索

バーコード

RSS

忍者ブログ │ [PR]