非負整数nとユーザ定義の任意の不等式(例えば、外部テキストファイル)が与えられた場合、nが満たすかどうかを判定したい任意の不等式、もしあれば、どのような不等式であるかを示す。任意の不等式の処理と成り立つ場合のチェック
ここにポイントリストがあります。
n = 0: 1
n < 5: 5
n = 5: 10
5に等しい数nを描画すると、10点が得られます。
nが5未満の場合、5ポイントを獲得します。
nが0の場合、1ポイントが得られます。
コロンの左のものは「条件」、右側のものは「値」です。
すべてのエントリの形式は次のようになります。
n1 op n2: val
、平等は不平等よりも優先されますので、彼らが表示される順序は、最終的には問題はありません。入力は非負の整数であるが、中間と結果は非負ではないかもしれない。結果は数字でなくてもよい(例:文字列でもよい)。それが唯一のパーサを書くためにそれを容易にするために(そして、このアイデアは実現可能であるかどうかを確認するために)、最も基本的な不平等を受け入れるので、私はそれを設計している
私のプログラムは、2つのコンポーネントがあります。
を構造化された入力を読み込み、条件と関連する結果を格納するデータ構造を構築します。
(、例のように、Iは、受信点の数又は)引数(非負整数)を取り、結果を返す関数
リストがハードコードされた場合これは簡単な作業です:case-whenブロックまたはif-elseブロックを使用するだけで済みます。しかし問題はそれほど簡単ではありません。
上部のリストを思い出してください。任意の数の(等号)等価を含むことができます。おそらく、上記のような3つしかないでしょう。多分、存在しないかもしれないし、多分10,20,50、またはさらには1000000あるかもしれない。本質的に、m> = 0のためにm不等式を持つことができる。
任意の数の条件を含む数nとデータ構造私はそれが条件のいずれかを満たしているかどうかを判断し、関連する値を返すことができるようにしたいと考えています。上記の例のように、5を渡すと、関数は10を返します。
これらの条件と値のペアは、生の形式で一意ではありません。同じ(等)の複数のインスタンスが異なる値を持つことがあります。例:
n = 0: 10
n = 0: 1000
n > 0: n
最後のエントリに注意してください.nが0より大きい場合は、取得したものだけです。
複数の不等式が満たされている場合(n> 5、n> 6、n> 7など)、すべてが返されます。それが効率的に行うことができない場合、私はそれを満足し、残りを無視する最初のものだけを返すことができます。しかし、私はリスト全体を取得することができるようにしたいと思います。
私はしばらくの間、これについて考えてきたと私は、私は2つのハッシュテーブルを使用する必要があります考えています:最初のものは等式を格納する、第二の不平等を保存する一方。
扱うのは簡単です:条件をキーとして取得し、値のリストを取得するだけです。次に、nがハッシュに入っているかどうかを素早く確認し、適切な値を取得できます。
しかし、不等式のために、私はそれがどのように動作するかはわかりません。誰も私ができるだけ少ない計算ステップでこの問題を解決できる方法を知っていますか?私はO(n)時間で簡単にこれを達成できることは明らかです。それぞれを(1つずつ)均等に実行するだけです。しかし、このチェックがリアルタイムで行われるとどうなりますか?
たとえば、100の不等式があり、99の値が100より大きい値をチェックし、もう1つの値が< = 100であるかどうかをチェックすると、気にする必要はありませんこれらの99の不等式を47を渡すとチェックします。
データを格納するために任意のデータ構造を使用できます。パーサ自体は事前処理され、一度だけ実行する必要がありますが、データの解析に時間がかかりすぎると問題が発生する可能性があるため、計算には含まれません。
私はRubyを使用しているので、データを使いこなす方法や解釈方法について、より柔軟な選択肢があると思います。
テキストが多すぎます。あなたの質問をより簡潔に要約することは可能ですか? – Phrogz
要約を追加しましたが、詳細をすべて取り込むかどうかはわかりません。私は私が(不平等)とのトラブルを抱えていますパーツを含ま – MxyL
すべての3つの答えが良いですし、それを見てのさまざまな方法を提供しますが、私は、私は、関数を右に渡す数を指し、1笑 – MxyL