Gambarkan diagram waktu digital XNOR

12

Di bawah ini adalah diagram waktu Digital (skematis) , untuk gerbang logika XNOR .

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

Tujuan Anda adalah untuk mereproduksi persis seperti yang digambarkan.

Aturan:

  • Anda dapat mencetaknya atau mengembalikan string multiline;

  • Jumlah sewenang-wenang dari traling dan / atau baris baru diizinkan;

  • Spasi spasi trailing (tetapi tidak mengarah!) Diizinkan;

  • Jika Anda tidak dapat menggunakan karakter menggambar kotak ASCII yang diperluas, Anda dapat menggantikannya dengan ekuivalen unicode (tanpa penalti byte).

Ini adalah sehingga jawaban tersingkat dalam byte menang.

Representasi Biner

Untuk kenyamanan Anda, representasi biner dari diagram di atas adalah sebagai berikut:

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

Output Sampel

masukkan deskripsi gambar di sini

Sidenote

Saat mengerjakan pertanyaan ini, saya telah mengimplementasikan dua solusi bash yang berbeda untuk itu, satu panjangnya 122 karakter / byte (seperti yang digambarkan di atas), dan yang lain panjangnya persis 100 byte.

Saya tidak punya rencana untuk mempostingnya (karena saya biasanya tidak memposting jawaban untuk pertanyaan saya sendiri), jadi itu hanya untuk referensi.

Saya juga percaya bahwa setidaknya beberapa solusi sub-100 byte dimungkinkan.

zeppelin
sumber
2
Itu gerbang XNOR, bukan ...
clismique
@ Qwerp-Derp Yap, mungkin itu :)
zeppelin
2
Alih-alih menyarankan (0 == 0) == 0 kan B atau X mulai dan berakhir pada 1?
Roman Czyborra
@Roman Czyborra Tidak yakin saya mengerti idenya, bisakah Anda menjelaskannya sedikit?
zeppelin
1
@zeppelin Lihat tepat di awal pola - pasangan piksel pertama. A, B dan X semuanya rendah di sana. Hal yang sama berlaku di akhir. Mengapa demikian? (Saya percaya ini adalah pertanyaan Roman).
isaacg

Jawaban:

5

05AB1E , 101 byte + 5 UTF-8 byte = 116 Total Bytes = 106 Bytes

(VEGSI LEGACY 05AB1E, TANPA LAMA DI TIO)

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

Cobalah online!

Kompresi:

•=(Í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.

Konversi:

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.

Menggunakan pengkodean CP-1252 .

Guci Gurita Ajaib
sumber
Anda diperbolehkan untuk menghitung setiap karakter menggambar kotak unicode hanya 1 byte, untuk keperluan tantangan ini (lihat "Aturan"), jadi jawaban Anda adalah 106 byte panjang sesuai dengan ini. Alasannya adalah bahwa karakter unicode ini dapat diganti dengan 1 byte karakter misalnya dalam CP437 atau IBM850, tetapi ini bisa lebih sulit untuk ditampilkan.
zeppelin
Saya setuju dengan zeppelin. Mengingat konsesi yang diberikan dalam aturan, maka ini akan menjadi 106 byte.
Level River St
Metode alternatif yang hanya bekerja di versi baru 05AB1E menggunakan builtin Åв(saya juga memperbarui tip generator ASCII-art dengan ini): 106 byte
Kevin Cruijssen
4

Bubblegum , 76 byte

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.

Cobalah online!

Menggunakan karakter menggambar kotak dari set karakter alternatif VT100, yang tidak dapat diperagakan oleh TIO. Jalankan di terminal UNIX untuk hasil terbaik. Terminal saya mengonversi ACS ke UTF-8 dengan cara salin dan tempel, sehingga Anda dapat melihat efeknya di sini.

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

Nah, tantangan tidak mengatakan kita perlu mengambil kembali terminal keluar dari modus ACS sebelum kembali ke shell. Semoga beruntung dengan itu.

Anders Kaseorg
sumber
3

Ruby, 113 byte

menghitung simbol yang dicetak sebagai satu byte sebagaimana diizinkan oleh tantangan (saya terkejut menemukan mereka sebenarnya 3 byte.)

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 baris output cocok untuk pengkodean 6 bit per setiap karakter string ajaib. Tetapi karakter string ajaib sebenarnya menyandikan untuk setiap transisi sebagai berikut:

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)

Ini diterjemahkan untuk menemukan 2 karakter yang harus dicetak untuk setiap transisi (yang pertama adalah spasi atau garis horizontal.) 8 karakter string untuk baris atas dan bawah tumpang tindih: Dua karakter terakhir untuk baris atas 11adalah dua garis horizontal, yang cocok dengan apa yang diperlukan untuk dua karakter pertama dari baris bawah 00. 8 karakter untuk baris bawah membungkus: mereka adalah 6 terakhir dan 2 karakter pertama dari string simbol.

Kode tidak dikunci

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
}
Level River St
sumber
Ini sebenarnya 129 byte, 113 karakter.
Magic Gurita Guci
1
@carusocomputing Saya melihat Anda telah membuat komentar yang sama pada sebagian besar jawaban di sini. Silakan merujuk ke baris pertama anser saya dan ke aturan 4 OP: If you can not use the extended ASCII box-drawing characters, you may substitute them for the unicode equivalents (at no byte penalty)Kita semua telah mencetak jawaban kita sesuai dengan aturan.
Level River St
2

PowerShell, 255 karakter, 265 byte (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

Ini berfungsi di komputer saya, tetapi sepertinya tidak mengurai byte dengan benar di TIO ...

tangkapan layar

Ini ditetapkan $amenjadi string multi-baris yang diisi dengan angka dan spasi, lalu loop 0..4|%{...}. Setiap iterasi, kami -replacedigit yang sesuai $_dengan karakter yang sesuai '┌─┐┘└'[$_]dan menyimpannya kembali $a. Kemudian, kita tinggalkan saja $apipeline dan outputnya implisit.

AdmBorkBork
sumber
Anda diperbolehkan menghitung karakter unicode sebagai byte tunggal, sesuai tantangan
FlipTack
2

JavaScript (ES6), 163 158 154 byte

NB: menghitung karakter UTF-8 sebagai byte, sebagaimana diizinkan oleh tantangan.

_=>[..." 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`
`

Demo

Disimpan 4 byte berkat Neil

Arnauld
sumber
j%2?" ─"[p^i&1]:" ┐┌─└┘ "[p+(p=[27370,42843,12878][i>>1]>>j/2&1)*2+i%2*3]menghemat 3 byte.
Neil
Oh, dan ubah 17 menjadi 33 juga.
Neil
Sekali lagi, 152 karakter, 164 byte.
Magic Gurita Guci
2

C, 213 205 byte

Untuk perubahan, ukuran program C, pada tantangan ini, tidak sepenuhnya konyol dibandingkan dengan bahasa lain.

#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');}

Tidak digabungkan, didefinisikan diperluas, dan dikomentari:

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');
}

Catatan: string C tidak boleh mengandung karakter unicode. Semua karakter yang dapat ditampilkan harus karakter lama 8-bit yang sederhana (tetapi karakter tersebut dapat dipilih dalam rentang yang diperluas). Jadi pada dasarnya, validitas output tergantung pada halaman kode Anda.

redup kehilangan kepercayaan pada SE
sumber
1

tcl, 221 karakter, 299 byte

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└────"}

dapat dijalankan di: http://rextester.com/live/VVQU99270

sergiol
sumber
228 karakter, namun itu adalah 306 byte.
Magic Gurita Guci
@carusocomputing: Alat online apa yang Anda gunakan untuk menghitung byte alih-alih karakter? Tks di muka.
sergiol
mothereff.in/byte-counter
Magic Octopus Mm