各側面には2つの可能性があり、それぞれの決定は他のものとは独立しているため、数字を掛け合わせると2*2*2*2=16
となります。
0
と15
の間に整数を格納するだけです。左側の選択肢を得るには、n & 1
を計算します。ここで、n
は格納された番号です。 (&のシンボルは、多くのコンピュータ言語でビット単位のビットを意味します)。結果は1
はダッシュを意味し、0
は実数を意味します。右辺を得るには、n & 2
を計算し、上はn & 4
、下はn & 8
です。これらの式の「マジックナンバー」は、2**0
,2**1
,2**2
、および2**3
です。
あなたは簡単に他の方法に進むことができます。 0
または1
のような選択肢がa,b,c,d
の場合は、n = 1*a + 2*b + 4*c + 8*d
です。前の段落と同じマジックナンバーに注意してください。
バイナリナンバーシステムが分かっている場合は、それらの式が明白です。詳細を知りたい場合は、「バイナリ番号」でWeb検索を行います。もちろん
は、あなたの問題を解決する別の方法は、整数ではなく文字列値を格納することです。たとえば、
"left=dashed, right=solid, top=solid, bottom=dashed"
を格納した文字列を解析するためにあなたの言語の文字列処理施設を使用することができます。これは私の最初の方法よりも時間がかかり、ストレージにもっと多くのメモリを使いますが、データを調べている人にとっては、より透明でわかりやすいという利点があります。 "1101"
のような短い文字列を使用してのコメントで
あなたのアイデアは良いものであり、実装によってはそれも私の最初のソリューションよりも少ないメモリを使用することができます。それは私の最初の解決策と同じ量の情報を示し、私の秒未満です。あなたのアイデアやその他の実装は、言語と、変数の各側の決定をどのように保存するかによって異なります。n
が保存された(文字列)値と各辺のための意思決定がある場合はPythonでは、ブール変数a,b,c,d
あり、あなたのコードが
a = (n[0] == '1')
b = (n[1] == '1')
c = (n[2] == '1')
d = (n[3] == '1')
はこれを行うには短いの方法がありますすることができた(True
手段が破線は、False
は固体の意味します) Pythonではないが、Python以外のプログラマにとってはあまり理解できない。
保存と再解釈の疑似コードで私にこれを示す方法はありますか?次のことに苦労する。 –
私はそれがおそらく文字列として格納し、そこから読むのが最も簡単な選択肢だと思います。 「1101」のように、上、右、左を意味します。それを読んで分割し、その文字列の最初の "1"から上端が破線で表示されるかどうかを判断する方法はありますか?私はバイナリをやったので、これは方法でした。 –