XNORデジタルタイミング図を描く


12

以下は、XNOR論理ゲートの(概略)デジタルタイミング図です。

    ┌─┐ ┌─┐ ┌─────┐ ┌─┐ ┌─┐ ┌───┐       
A ──┘ └─┘ └─┘     └─┘ └─┘ └─┘   └──
  ┌───┐ ┌───┐ ┌─┐ ┌─────┐   ┌─┐ ┌─┐ 
B ┘   └─┘   └─┘ └─┘     └───┘ └─┘ └
    ┌─────┐   ┌─┐   ┌─┐   ┌───┐   
X ──┘     └───┘ └───┘ └───┘   └────

目標は、描かれているとおりに正確に再現することです。

ルール:

  • 印刷するか、複数行の文字列を返すことができます。

  • 任意の数の追跡および/または先頭の改行が許可されます。

  • 末尾の(先頭ではない!)空白は許可されます。

  • 拡張ASCIIボックス描画文字を使用できない場合は、Unicodeの同等の文字に置き換えることができます(バイトペナルティなし)。

これはので、バイト単位の最短回答が優先されます。

バイナリ表現

便宜上、上の図のバイナリ表現は次のとおりです。

INP A=0101011101010110
INP B=1101101011100101
  ___
X=A⊕B=0111001001001100

サンプル出力

ここに画像の説明を入力してください

サイドノート

この質問に取り組んでいる間、2つの異なるbashソリューションを実装しました。1つは122文字/バイト長(上図を参照)、もう1つは正確に100バイト長です。

私はそれらを投稿する予定はありません(通常、自分の質問への回答を投稿しないため)ので、それは参考用です。

また、少なくともいくつかのサブ100バイトのソリューションが可能であると考えています。


2
それはXNORゲートですよね
...-clismique

@ Qwerp-Derpうん、多分それは:)
zeppelin

2
(0 == 0)== 0を提案する代わりに、BまたはXは1で始まり1で終わりませんか?
ローマンチボラ

@Roman Czyborra私はこの考えを理解していないが、これについて少し詳しく説明してもらえますか?
ツェッペリン

1
@zeppelinパターンの先頭、つまり最初の数ピクセルを見てください。A、B、Xはすべて低いです。最後に同じことが当てはまります。これはなぜですか?(これはローマの質問だと思う)。
isaacg

回答:


5

05AB1E、101バイト+ 5 UTF-8バイト= 116合計バイト= 106バイト

(レガシー05AB1Eバージョン、TIOの廃止)

•=(Ín§Àoà`œ¯_eè8y1ÜŸ,Ú®:¹$:,õKA–x[Âì0ãXÔfz}y×ì¹Ï½uEÜ5äÀTë@ºQÈ™ñó:ò…Eä•6B"102345"" ┌─┐└┘"‡6ävyN" A B X"èì}»

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

圧縮:

•=(Ín§Àoà`œ¯_eè8y1ÜŸ,Ú®:¹$:,õKA–x[Âì0ãXÔfz}y×ì¹Ï½uEÜ5äÀTë@ºQÈ™ñó:ò…Eä• 
# Pattern, converted to base-6 in base-6=214.

111023102310222223102310231022231112251425142511111425142514251114221022231022231023102222231110231023151114251114251425111114222514251411102222231110231110231110222311111225111114222514222514222511142222
# Actual base-6 pattern.

1110231023102222231023102310222311
1225142514251111142514251425111422
1022231022231023102222231110231023
1511142511142514251111142225142514
1110222223111023111023111022231111
1225111114222514222514222511142222
#Pattern split into chunks of 34.

   ┌─┐ ┌─┐ ┌─────┐ ┌─┐ ┌─┐ ┌───┐  
 ──┘ └─┘ └─┘     └─┘ └─┘ └─┘   └──
 ┌───┐ ┌───┐ ┌─┐ ┌─────┐   ┌─┐ ┌─┐
 ┘   └─┘   └─┘ └─┘     └───┘ └─┘ └
   ┌─────┐   ┌─┐   ┌─┐   ┌───┐    
 ──┘     └───┘ └───┘ └───┘   └────
# Pattern after replacing 0,1,2,3,4,5 with appropriate blocks.

変換:

6B                                   # Convert back to base-6.
  "102345"" ┌─┐└┘"‡                  # Replace numbers with appropriate counterparts.
                   6ä                # Split into 6 equal parts (the rows).
                     vy           }  # For each row (chunk).
                       N" A B X"èì   # Push label at index [i], prepend to line.
                                   » # Print all separated by newlines.

CP-1252エンコーディングを使用します。


このチャレンジのために、各ユニコードボックス描画文字を1バイトとしてカウントすることが許可されているため(「ルール」を参照)、これに応じて回答は106バイト長になります。その理由は、これらのユニコード文字は、たとえばCP437またはIBM850のように1バイト文字に置き換えることができるが、表示するのがより難しい場合があるということです。
ツェッペリン

私はツェッペリンに同意します。したがって、規則で与えられた譲歩を考えると、これは106バイトになります。
レベルリバーセント

組み込みを使用した05AB1Eの新しいバージョンでのみ機能する代替方法ÅвASCIIアートジェネレーターのヒントもこれで更新しまし):106バイト
ケビンCruijssen

4

バブルガム、76バイト

00000000: 92d6 3000 5431 1505 1403 50e8 4e0a aafc  ..0.T1....P.N...
00000010: 9f62 15e6 a3ff 61fa dc05 e06d 8b66 cbc7  .b....a....m.f..
00000020: e6b6 cff8 519a b85a 3eb6 b67d 95c0 0feb  ....Q..Z>..}....
00000030: 35b5 521d 7f7e 68af a916 fa20 d999 564d  5.R..~h.... ..VM
00000040: 1f03 d559 59ed 265c f243 42be            ...YY.&\.CB.

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

VTIO代替文字セットのボックス描画文字を使用しますが、TIOはそれを実証できません。最良の結果を得るには、UNIXターミナルで実行してください。私の端末はコピーアンドペーストでACSをUTF-8に変換するため、ここで効果を確認できます。

anders@change-mode:/tmp$ bubblegum xnor.zlib
    ┌─┐ ┌─┐ ┌─────┐ ┌─┐ ┌─┐ ┌───┐
A ──┘ └─┘ └─┘     └─┘ └─┘ └─┘   └──
  ┌───┐ ┌───┐ ┌─┐ ┌─────┐   ┌─┐ ┌─┐
B ┘   └─┘   └─┘ └─┘     └───┘ └─┘ └
    ┌─────┐   ┌─┐   ┌─┐   ┌───┐
X ──┘     └───┘ └───┘ └───┘   └────
▒┼␍␊⎼⎽@␌␤▒┼±␊-└⎺␍␊:/├└⎻$ 

さて、課題は、我々は、端末のバックを取る必要が言わなかったからシェルに戻る前に、ACSモードの。頑張ってください。


3

ルビー、113バイト

チャレンジで許可されているように、印刷されたシンボルを1バイトとしてカウントします(実際に3バイトであることがわかって驚いた)。

6.times{|i|s=' A B X'[i]
'D]zunIWkF]nIRukFH'.bytes{|b|s+='   ┌─┐───┘ └'[(b*2>>i/2*2&6)-i%2*6,2]}
s[1]=' '
puts s}

6行の出力は、マジックストリングの各文字ごとに6ビットのエンコードに役立ちます。しかし、魔法の文字列文字は実際に各遷移をエンコードします:

least significant bit 0 New value for A  
                      1 Current value for A
                      2 New value for B
                      3 Current value for B
                      4 New value for X
                      5 Current value for X
most significant bit  6 Always 1 (to remain in printable range)

これはデコードされて、各トランジションで印刷する必要がある2文字を見つけます(最初はスペースまたは水平線です)。上段と下段の8文字の文字列はオーバーラップします。上段の最後の2文字11下の行の最初の2文字に必要なものと一致する2本の水平線00です。下の行の8文字は折り返します。これらは、シンボル文字列の最後の6文字と最初の2文字です。

未ゴルフコード

6.times{|i|s=' A B X'[i]               #iterate through 6 lines of output. Set s to the 1st character.
  'D]zunIWkF]nIRukFH'.bytes{|b|        #for each byte in the magic string
     s+='   ┌─┐───┘ └'[(b*2>>i/2*2&6)- #add 2 bytes to s, index 0,2,4, or 6 of the symbol string depending on relevant 2 bits of the magic string.
     i%2*6,2]                          #if the second (odd) row of a particular graph, modify index to -6,-4,-2, or 0 
  }                                    #(ruby indices wrap around. mystring[-1] is the last character of the string.)
  s[1]=' '                             #replace intitial ─ of the curve with space to be consistent with question
  puts s                               #output line
}

これは実際には129バイト、113文字です。
魔法のタコUr

1
@carusocomputingここで答えのほとんどについて同じコメントをしているようです。私のanserの最初の行とOPのルール4を参照してくださいIf you can not use the extended ASCII box-drawing characters, you may substitute them for the unicode equivalents (at no byte penalty)。すべての回答をルールに従って採点しました。
レベルリバーセント

2

PowerShell、255文字、265バイト(UTF-8)

$a='    012 012 0111112 012 012 01112
A 113 413 413     413 413 413   411
  01112 01112 012 0111112   012 012
B 3   413   413 413     41113 413 4
    0111112   012   012   01112
X 113     41113 41113 41113   41111'
0..4|%{$a=$a-replace$_,('┌─┐┘└'[$_])};$a

これは私のコンピューターでは動作しますが、TIOでバイトを正しく解析しないようです...

スクリーンショット

これは$a、数字とスペースで満たされた複数行の文字列に設定され、ループします0..4|%{...}。繰り返しごとに、適切な文字で-replace適切な数字を入力$_し、'┌─┐┘└'[$_]それをに保存し$aます。次に、$aパイプラインをそのままにしておくと、出力は暗黙的になります。


チャレンジ
-FlipTack

2

JavaScript(ES6)、163 158 154バイト

NB:チャレンジで許可されているとおり、UTF-8文字をバイトとしてカウントします。

_=>[..." A B X"].map((c,i)=>c+" "+[...Array(33)].map((_,j)=>j%2?" ─"[p^i&1]:" ┐┌─└┘ "[p+(p=[27370,42843,12878][i>>1]>>j/2&1)*2+i%2*3]).join``,p=0).join`
`

デモ

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


j%2?" ─"[p^i&1]:" ┐┌─└┘ "[p+(p=[27370,42843,12878][i>>1]>>j/2&1)*2+i%2*3]3バイト節約します。
ニール

ああ、17から33も変更します。
ニール

もう一度、152文字、164バイト。
魔法のタコUr

2

C、213205バイト

変更については、この課題に関するCプログラムのサイズは、他の言語と比較して完全にばかげているわけではありません。

#define X(a) u[i]=C[a],l[i++]=C[(a)+4]
p(n,c){char u[34],l[34],*C=" ┐┌──└┘ ",i=0;while(i<34)X(n&3),n>>=1,X((n&1)*3);printf("  %.33s\n%c %.33s\n",u,c,l);}main(){p(0xD5D4,'A');p(0x14EB6,'B');p(0x649C,'X');}

非ゴルフ、拡張の定義、およびコメント:

p(n,c){
    // u is the upper line of the graph, l the lower line
    char u[34],l[34],*C=" ┐┌──└┘ ",i=0;
    while(i<34)
        u[i]=C[n&3],            // using the two LSBs to set the transition char depending on the current and next state
        l[i++]=C[(n&3)+4],      // do for both upper and lower lines
        n>>=1,                  // shift bits right to go to next state
        u[i]=C[(n&1)*3],        // using only the LSB to set the "steady" char depending on current state only
        l[i++]=C[((n&1)*3)+4];  // do for both upper and lower lines
    printf("  %.33s\n%c %.33s\n",u,c,l);
}
main() {
    // Call p for each graph
    // Constants are chosen so the display is consistent with the request.
    // Each bit represents a state, but the order is reversed
    // (leftmost is put on lowest significant bit, after a 0)
    p(0xD5D4,'A');p(0x14EB6,'B');p(0x649C,'X');
}

注:C文字列にはUnicode文字を含めることはできませ。表示可能な文字はすべて、プレーンな古い8ビット文字でなければなりません(ただし、拡張範囲で選択できます)。したがって、基本的に、出力の有効性はコードページによって異なります。


1

tcl、221文字、299バイト

lmap {b _ n u A V} {"   " ┌─────┐ ┌───┐ └───┘ ┌─┐ └─┘} {puts "[set S \ $b][set m $A\ $A] $_ $m $n
A ──┘ [set w $V\ $V][set s \ $S]$w $V$b└──
  $n $n $A $_$b$m
B ┘$b$V$b$w$s$u $V └
$S$_$b$A$b$A$b$n
X ──┘$s$u $u $u$b└────"}

で実行できます:http : //rextester.com/live/VVQU99270


228文字ですが、306バイトです。
魔法のタコUr

@carusocomputing:文字ではなくバイトをカウントするためにどのオンラインツールを使用していますか?事前にTks。
-sergiol

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.