2016-06-01 12 views
0

私は、Rubyの学習の一環として、プレーヤーとコンピュータのMastermind(ボードゲーム)プログラムを作っています。配列の要素が別の配列に含まれていないかどうかをチェックする方法は?

マスターマインドがわからない場合、基本的には2人のゲームで、1人のプレイヤーが4色のコード(赤い青色の黄色)を作成し、相手がそのコードを推測しようとします。

ゲームが利用可能な色のセットと、空のコードで初期化します。

@@colours = ["RED", "BLUE", "YELLOW", "GREEN", "ORANGE", "WHITE"] 
@code = [] 

私はこのようなコードを設定するようにユーザーに依頼することができます。

puts "Please set your code:" 
code = gets.chomp.downcase.split("") 
@code << code 

ユーザーがコードを入力ように:rgby =>code = ["RED", "GREEN", "BLUE", "YELLOW"]

(「RED」に、すなわち「R」に変更する方法があるでしょう、それはどこかに私のプログラムで発生したと仮定してください。)

私は、プレイヤーが唯一含ま色を使用できることを確認したいですにあります。つまり、pxgbは機能しません。全ての入力色が@codeを更新し、@@coloursで発見された場合

擬似コードは、線に沿ってであろう。

たり、逆に

任意の入力色が@@coloursで発見されていない場合は、@codeを更新(そしておそらく他の何かを)しないでください。

これはどのように書きますか?私はエラー処理にあまり慣れていないので、私はそれをやろうとしていましたが、それが最善の方法であるかどうかを知りたいと思っています。

+0

重複は許可されていますか? ''赤 ""、 "赤"、 "緑"、 "緑"] '? – Stefan

+0

重複は許されます。 –

+1

@Stefan、 '' RED '"'の波長はどうですか? –

答えて

2

あなたはcode@@colours

(code - @@colours).empty? 

上からのみの要素を持っているかどうかを確認するために次の操作を行うことができ、あなたのアレイ上to_set機能を使って、セットにあなたの配列に変換することができますcode@@coloursの要素のみを含む場合、式はtrueになります。そうでない場合は0123になります。


PS:問題のコードサンプルで、code一度getsから入力され、処理入力の配列として示される別の時間を含むものとして示されています。上記の解決策では、私は仮定していますcode = ["RED", "GREEN", "BLUE", "YELLOW"]

0

あなたは入力から許可された要素を差し引くことができます。これは許可されずに用いることができる要素を返しボーナスとして

allowed = [1,2,3] 

input = [1,2] 
input - allowed #=> [] 

input = [1,5] 
input - allow #=> [5] 

:結果が空でない場合、許可された値のリストにない入力の要素がありましたエラーメッセージ。

+0

@WandMakerの回答とよく似ています – Ilya

関連する問題