XNOR dijital zamanlama diyagramını çizin


12

Aşağıda, XNOR mantık geçidi için (şematik) bir Dijital zamanlama diyagramı verilmiştir .

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

Amacınız tam olarak tasvir edildiği gibi çoğaltmaktır.

Kurallar:

  • Ya yazdırabilir ya da çok satırlı bir dize döndürebilirsiniz;

  • Rastgele sayıda izleme ve / veya önde gelen yeni satıra izin verilir;

  • İzleyen (ancak önder olmayan!) Boşluklara izin verilir;

  • Genişletilmiş ASCII kutu çizim karakterlerini kullanamıyorsanız, bunları unicode eşdeğerleri ile değiştirebilirsiniz (bayt cezası olmadan).

Bu yani bayt en kısa cevap kazanır.

İkili Gösterim

Size kolaylık sağlamak için yukarıdaki şemanın ikili gösterimi aşağıdaki gibidir:

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

Örnek Çıktı

resim açıklamasını buraya girin

Kenar notu

Bu soru üzerinde çalışırken, bunun için iki farklı bash çözümü uyguladım, biri 122 karakter / bayt uzunluğunda (yukarıda gösterildiği gibi) ve diğeri tam olarak 100 bayt uzunluğunda.

Onları yayınlama planım yok (normalde kendi sorularıma cevap göndermediğim için), bu sadece referans içindir.

Ayrıca en azından 100'ün altında bir bayt çözümünün mümkün olduğuna inanıyorum.


2
Bu bir XNOR kapısı, değil mi ...
clismique

@ Qwerp-Derp Evet, belki de :)
zeppelin

2
(0 == 0) == 0 önermek yerine B veya X 1'de başlayıp bitmeyecek mi?
Roman Czyborra

@Roman Czyborra Fikri anladığımdan emin değilim, bunu biraz ayrıntılandırabilir misiniz?
zeppelin

1
@zeppelin Desenin sağına bakın - ilk çift piksel. A, B ve X'in hepsi orada düşük. Sonunda da aynı şey geçerli. Neden böyle? (Bunun Roma'nın sorusu olduğuna inanıyorum).
isaacg

Yanıtlar:


5

05AB1E , 101 bayt + 5 UTF-8 bayt = 116 Toplam Bayt = 106 Bayt

(LEGACY 05AB1E SÜRÜMÜ, TIO'DA DAHA UZUN DEĞİL)

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

Çevrimiçi deneyin!

Sıkıştırma:

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

Dönüşüm:

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.

Kullanma CP-1252 kodlama.


Bu meydan okuma amacıyla her unicode kutu çizim karakterini sadece 1 bayt olarak saymanıza izin verilir (bkz. "Kurallar"), bu nedenle cevabınız buna göre 106 bayt uzunluğundadır. Gerekçe, bu unicode karakterlerin, örneğin CP437 veya IBM850'de 1 baytlık karakterlerle değiştirilebilmesidir, ancak bunların görüntülenmesi daha zor olabilir.
zeplin

Zeplin ile aynı fikirdeyim. Kurallarda verilen imtiyaz göz önüne alındığında, bu 106 bayt olacaktır.
Level River St

Yerleşik kullanarak sadece 05AB1E'nin yeni sürümünde çalışan alternatif yöntem Åв( ASCII-art jeneratör ipucunu da bununla güncelledim ): 106 bayt
Kevin Cruijssen

4

Sakız , 76 bayt

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.

Çevrimiçi deneyin!

TIO'nun gösteremediği VT100 alternatif karakter kümesinden kutu çizim karakterlerini kullanır. En iyi sonuçlar için UNIX terminalinde çalıştırın. Terminalim ACS'yi kopyala ve yapıştır üzerinde UTF-8'e dönüştürür, böylece efekti burada görebilirsiniz.

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

Eh, meydan biz terminali geri almak gerekir demedi dışarı kabuk dönmeden önce ACS modunun. Bunda iyi şanslar.


3

Ruby, 113 bayt

baskılı sembolleri meydan okuma tarafından yetkilendirildiği gibi bir bayt olarak sayma (aslında 3 bayt olduklarını keşfetmekten şaşırdım.)

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 satır çıktı, sihirli dizginin her karakteri için 6 bitlik bir kodlamaya borç verir. Ancak sihirli dize karakterleri aslında her geçiş için kodlar:

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)

Bu, her geçiş için yazdırılması gereken 2 karakteri (ilki boşluk veya yatay çizgi) bulmak için kodu çözülür. Üst ve alt satırlar için 8 karakterlik dizeler çakışır: Üst satırın son iki karakteri 11alt satırın ilk iki karakteri için gerekenlerle eşleşen iki yatay çizgidir 00. Alt satır için 8 karakter sarılır: bunlar sembol dizesinin son 6 ve ilk 2 karakteridir.

Kod çözülmemiş kod

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
}

Bu aslında 129 bayt, 113 karakterdir.
Sihirli Ahtapot Urn

1
@carusocomputing Yanıtların çoğunda aynı yorumu yaptığınızı görüyorum. Lütfen anserimin ilk satırına ve OP'nin 4. kuralına bakın: If you can not use the extended ASCII box-drawing characters, you may substitute them for the unicode equivalents (at no byte penalty)Hepimiz cevaplarımızı kurallara göre puanladık.
Level River St

2

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

Bu bilgisayarımda çalışıyor, ancak baytları TIO'da doğru şekilde ayrıştırmıyor gibi görünüyor ...

ekran görüntüsü

Bu $a, sayı ve boşluklarla dolu çok satırlı bir dize, sonra döngüler olarak ayarlanır 0..4|%{...}. Her yineleme, biz uygun karakteri ile -replaceuygun rakam ve geri saklayın . Sonra, sadece boru hattında bırakıyoruz ve çıktı örtük.$_'┌─┐┘└'[$_]$a$a



2

JavaScript (ES6), 163 158 154 bayt

Not: meydan okuma tarafından izin verildiği gibi UTF-8 karakterlerini bayt olarak sayma.

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

gösteri

Neil sayesinde 4 bayt kaydedildi


j%2?" ─"[p^i&1]:" ┐┌─└┘ "[p+(p=[27370,42843,12878][i>>1]>>j/2&1)*2+i%2*3]3 bayt kaydeder.
Neil

Oh, ve 17'yi 33'e değiştir.
Neil

Bir kez daha 152 karakter, 164 bayt.
Sihirli Ahtapot Urn

2

C, 213205 bayt

Bir değişiklik için, bu meydan okumadaki C program boyutu, diğer dillere kıyasla tamamen saçma değildir.

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

Kurtulmamış, genişletilmiş tanımlanmış ve yorumlanmıştır:

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

Not: C dize gerekir değil unicode karakter içerebilir. Görüntülenebilir tüm karakterler düz eski 8 bit karakter olmalıdır (ancak genişletilmiş aralıkta seçilebilir). Temel olarak, çıktının geçerliliği kod sayfanıza bağlıdır.


1

tcl, 221 karakter, 299 bayt

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

çalıştırılabilir: http://rextester.com/live/VVQU99270


228 karakter, ancak 306 bayt.
Sihirli Ahtapot Urn

@carusocomputing: Karakter yerine bayt saymak için hangi çevrimiçi aracı kullanıyorsunuz? Tks peşin.
sergiol

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.