消灯、7セグメントバージョン


14

いくつかのセグメントがオンとオフに切り替えられた7セグメント表示の場合、各桁の対応するセグメントを切り替えた後、すべてのセグメントがオフになるように、一連の数字(0〜9)を見つけます。

  _
  _    [3] =>     |   [1] =>    [OFF]
  _               |

番号と対応するセグメント:

 _         _   _         _    _    _    _    _ 
| |    |   _|  _|  |_|  |_   |_     |  |_|  |_|
|_|    |  |_   _|    |   _|  |_|    |  |_|   _|

ルール

Codegolf⊨最短エントリーが勝ちます。

入力

次のように指定された、オンになっているセグメントの空でないリスト

  1. 一連の数字。セグメントには、上から下、左から右に番号が付けられます。0または1から始まります。数字は順番に並んでいる必要はありません。

  2. 単一の7ビット数字。MSB / LSBが指定されていません(したがって、選択できます)。

数字の間に数字以外の文字を使用できます(ただし、サポートする必要はありません)。

例えば。番号の場合7136または1010010または0100101

出力

ディスプレイに「適用」される一連の数字。数字の順序など、いかなる方法でも制限されません。例えば。番号に対応する初期状態のために1、有効な出力は次のようになり1111010、など

代替出力は10ビットの数字です(やはり、MSB / LSBが選択です)。例えば。ため1等の入力、出力は次のようになり1000000000、または0000000001

いくつかの組み合わせには、いくつかの非反復ソリューションがあります。大文字に対応するセグメントHでオフにすることができる013だけでなく、489および0258

解決策が存在しない場合(不可能だと思います)、出力は空です。


2
これにはより多くの仕様が必要です。各桁に含まれるセグメント(たとえば、9は下のセグメントを含みますか?)すべての数字を描き、それぞれに含まれるセグメントの番号を示してください。
レベルリバーセント

また、入力に使用できる形式は何ですか?セグメント番号は順番に与えられますか?解決策がない場合はどうしますか?
レベルリバーセント

「いくつかの組み合わせには反復しないソリューションがいくつかあります」また、ソリューションの順列は別のソリューションですよね?(のような301のためH)。
アーナルド

1
解決策が常に存在することの証明:個々のセグメントごとに解決策を見つければ十分です。上から下へ水平セグメントのソリューションは、であり1708および1479。左から右の上部垂直セグメントのソリューションは39および59です。左から右の下部垂直セグメントのソリューションは、562389です。
グレッグマーティン

1
しゅう 2あなたがいずれかでそれを置き換えることができるので、必ずしも必要ではない04681358あるいは1369、あなたがしたいかに応じて08または9あなたの答えではなく、そこに解消する方法ません7すべてでは、と私はあなたが少なくとも1で持たなければならないと思いますの13
ニール

回答:


4

ゼリー26 25バイト

2ṗ⁵’µ×“wØ][:koR¶{‘^/=µÐfḢ

オンラインでお試しください!

入力を7ビット整数として受け取ります。10ビット整数のバイナリ形式を返します。

これはすべての可能性を強引に強要します。を削除してすべての可能な出力を取得するか、またはに置き換えてXランダムな可能な出力を取得します。

魔法の可視化プログラム!

使い方

2ṗ⁵’µ×“wØ][:koR¶{‘^/=µÐfḢ  - main link, takes one integer
2ṗ⁵’                       - generate all length-10 binary arrays
    µ                µÐf   - now we find those arrays which correspond to digit-
                              sequences which work to switch off all segments:
                              Filter (keep) those arrays which:
     ×                      - multiplied by 
      “wØ][:koR¶{‘          - [119, 18, 93, 91, 58, 107, 111, 82, 127, 123] 
                               (encoding for turned-on segments given number)
                  ^/        - reduced by XOR
                    =      - are equal to (implicit) the program's input
                        Ḣ  - output the first of these valid arrays

1
数字の配列(“wØ][:koR¶z‘)にエラーが含まれている可能性があります。番号9には下部のセグメントがありません(9視覚化で、タスクの説明のセグメントと比較してください)。それ以外の場合、特に視覚化は非常に素晴らしいです!
キリル

1
@kyrill修正!リストリテラルのわずかな変更が必要でした。
fireflame241

2

JavaScript(ES6)、60バイト

n=>[65,35,55,42,48,54,110].reduce((r,v,i)=>r^=n>>i&1&&v+v,0)

これは次の理由で機能します。

  • 1と7を切り替えると、上部のセグメントのみが切り替わります
  • 1、2、6を切り替えると、左上のセグメントのみが切り替わります
  • 1、2、3、5、6を切り替えると、右上のセグメントのみが切り替わります
  • 2、4、6を切り替えると、中央のセグメントのみが切り替わります
  • 5と6を切り替えると、左下のセグメントのみが切り替わります
  • 2、3、5、6を切り替えると、右下のセグメントのみが切り替わります
  • 2、3、4、6、7を切り替えると、下のセグメントのみが切り替わります

1
これが勝者として受け入れられるべきかどうかは定かではありません。明らかにアーナルドからインスピレーションを得たからです。しかし、その後、彼はあなたのコメントからインスピレーションを得ました。とにかく、良い答え、あなたの両方!
キリル

@kyrill私の更新された答えは、ニールからの提案でもありました。これまでのところ彼の答えが勝つことは間違いありません。
アーナルド

2

JavaScript(ES6)、117 107 101 86 84バイト

ニールのおかげで15バイト節約

入力を7ビット整数として受け取ります。LSBは上位セグメントです。LSBがdigitである10ビット整数を返します0

f=(n,k)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?f(n,-~k):k

デモ


1
再帰は短くなります:f=(n,k=1023)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?k--&&f(n,k):k。または、答えが存在すると仮定した場合、f=(n,k=0)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?f(n,k+1):k
ニール

1
@ニールありがとう!はい、答えは常に存在します。
アーナルド

1
数字を使用して回答を作成することは常に可能であるため、とを1-7削除し83,91,75を使用してさらに8バイトを節約できますk+2
ニール

2

Mathematica、40バイト

BitXor@@{260,802,10,514,3,266,293}[[#]]&

(各セグメントの出力を慎重に選択し、LSBとMSBを切り替えることで、さらにゴルフを楽しむことができます。)

たとえば{2,4,5,7}、入力を位置のリストとして取得し、MSB順序(0、...、9)で10ビット数(384= 0110000000バイナリ)を出力します。

例では、

  |_
  |_

および出力はに対応し{7,8}ます。

説明:

マジックナンバー(ハードコードされたリスト)は、各セグメントに対して返される出力です。(バイナリでエンコードされています)そして、リストに数値が2回現れる場合、効果は現れないことと同じであるため、ビット単位のXORが使用されます。オンにしたセグメントの可能な値の出力をXORするだけです。


2

ゼリー、12バイト

ị“A#7*06n‘^/

オンラインでお試しください!

これはブルートフォースではなく、他のソリューションよりも著しく短くなります。入力を有効なセグメントのリストとして取得し、LSBが最上位セグメントとして出力します。

桁移動のリストとして出力します。

使い方

これは迅速になります

ị“A#7*06n‘^/ - main link, takes input as a list of turned-on segments (eg. [1,3,6])
 “A#7*06n‘   - list literal [65,35,55,42,48,54,110] where each element is a 7-bit
                 integer, where each integer corresponds to how to turn off
                 a segment (eg. turn off the first segment with 7 and 1 =>2^7+2^1=>64)
ị            - get the elements in the list corresponding to the input indices
          ^/ - XOR reduce these elements to get a single 7-bit integer

このアルゴリズムを使用するときに反復ソリューションが許可されているという事実を利用して、XOR-reduceをより短いもの(フラット化など)に置き換えることはできませんか?それとも何か不足していますか?

現在のコードでは、にほぼ等しい7ビット整数のリストが生成され1*use digit 1 + 2*use digit 2 + 4*use digit 3 ... 64*use digit 7、@ ais523でXORが削減されます。平坦化は、使用される数字のリストで機能し、より多くの文字が使用されます。
fireflame241
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.