XNOR 디지털 타이밍 다이어그램 그리기


12

아래는 XNOR 논리 게이트에 대한 (도식) 디지털 타이밍 다이어그램 입니다.

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

당신의 목표는 묘사 된대로 정확하게 재현하는 것입니다.

규칙 :

  • 인쇄하거나 여러 줄 문자열을 반환 할 수 있습니다.

  • 임의의 수의 트래킹 및 / 또는 주요 개행이 허용됩니다.

  • 후행 (그러나 선행은 아님) 공백이 허용됩니다.

  • 확장 ASCII 상자 그리기 문자를 사용할 수없는 경우, 바이트 코드없이 유니 코드 문자로 대체 할 수 있습니다.

이것은 이므로 바이트 단위의 최단 답변이 이깁니다.

이진 표현

편의상 위 다이어그램의 이진 표현은 다음과 같습니다.

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

샘플 출력

여기에 이미지 설명을 입력하십시오

사이드 노트

이 질문에 대해 작업하는 동안 두 가지 bash 솔루션을 구현했습니다. 하나는 122 자 / 바이트 길이이며 다른 하나는 정확히 100 바이트입니다.

나는 (일반적으로 내 질문에 대한 답변을 게시하지 않기 때문에) 게시 할 계획이 없으므로 참조 용입니다.

또한 적어도 100 바이트 이하의 솔루션이 가능하다고 생각합니다.


2
그것은 XNOR 게이트입니다, 그렇지 않습니다 ...
clismique

@ Qwerp-Derp Yep, 아마도 그것은 :)
zeppelin

2
(0 == 0) == 0을 제안하는 대신 B 또는 X가 1에서 시작하고 끝나지 않습니까?
로마 Czyborra

@Roman Czyborra 아이디어를 이해하고 있는지 잘 모르겠습니다. 조금 더 자세히 설명해 주시겠습니까?
zeppelin

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 바이트 문자로 대체 될 수 있지만 표시하기가 더 까다로울 수 있습니다.
zeppelin은

나는 제플린에 동의합니다. 규칙에 주어진 양보를 고려할 때 이것은 106 바이트입니다.
Level River St

단지 내장을 사용하여 05AB1E의 새 버전에서 작동 다른 방법은 Åв(I도 업데이트했습니다 아스키 기술의 발전기 팁 이 포함) : 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.

온라인으로 사용해보십시오!

TIO가 보여줄 수없는 VT100 대체 문자 세트에서 상자 그리기 문자를 사용합니다. 최상의 결과를 얻으려면 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는 두 개의 가로줄로, 아래 행의 처음 두 문자에 필요한 것과 일치합니다 00. 아래쪽 행의 8자는 줄 바꿈됩니다. 이들은 심볼 문자열의 마지막 6 자 및 처음 2 자입니다.

Ungolfed 코드

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 자입니다.
Magic Octopus Urn

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)우리는 규칙에 따라 답변을 모두 채점했습니다.
Level River St

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

자바 스크립트 (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`
`

데모

Neil 덕분에 4 바이트 절약


j%2?" ─"[p^i&1]:" ┐┌─└┘ "[p+(p=[27370,42843,12878][i>>1]>>j/2&1)*2+i%2*3]3 바이트를 절약합니다.
Neil

아, 17도 33도 바꿔
Neil

다시 한 번, 152 자, 164 바이트.
Magic Octopus Urn

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 문자열 에는 유니 코드 문자가 포함 되지 않아야 합니다. 표시 가능한 모든 문자는 일반 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 바이트입니다.
Magic Octopus Urn

@carusocomputing : 문자 대신 바이트를 계산하기 위해 어떤 온라인 도구를 사용합니까? 미리 Tks.
sergiol

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.