LaTeX 진리표


11

논리 함수의 출력 목록을 승인하고 해당 진리표에 대한 LaTeX 코드를 출력하는 프로그램 또는 함수를 작성하십시오.

입력은 소문자로 a-z표시되어야하고 출력은로 표시되어야합니다 F. 입력 목록의 길이는 항상보다 짧습니다 2^25. 즉, 입력 수는 항상 25보다 작습니다. 따라서 입력 이름에 소문자 알파벳 문자를 사용할 수 있습니다.

입력

논리 함수의 출력을 나타내는 많은 n입력 및 2^n이진 숫자 의 길이 목록 .

산출

해당 함수에 대한 진리표를 생성하는 LaTeX 코드. 입력 및 출력 값은 행 중앙에 있어야합니다. 테이블 헤더와 해당 값 사이, 입력과 출력 사이에 줄이 있어야하므로 코드는 아래 코드와 비슷해야합니다.

\begin{tabular}{c * <NUMBER OF INPUTS>|c}
<INPUTS>&F\\
\hline
<INPUT VECTOR i>&<OUTPUT>\\
\end{tabular}

입력:

2
[0, 0, 0, 1]

산출:

\begin{tabular}{cc|c}
a & b & F \\
\hline
0 & 0 & 0 \\
0 & 1 & 0 \\
1 & 0 & 0 \\
1 & 1 & 1 \\
\end{tabular}

LaTeX에 표시 될 때 다음 진리표가 표시됩니다.

진실 표

일반 규칙

  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.
  • 기본 허점 은 금지되어 있습니다.

3
이 과제에 TeX에서 정확히 동일한 출력 또는 동일한 결과를 생성 할 수있는 출력이 필요합니까?
tsh

2
TeX에서 동일한 결과를 생성하는 모든 출력
drobilc

2
TeX를 잘 모르는 것은 여기에서 까다로운 것으로 TeX 코드를 테이블 형식으로 작성하는 다른 짧은 방법이나 테이블을 생성하는 다른 방법 (패키지?)이 있다는 것입니다. 어떤 언어를 사용하든 TeX 골프는 도전의 일부입니다. 편의상 TeX에 대한 온라인 통역사가 있고 정확한 구현이 무엇인지 모호하게 만들 수 있습니까?
xnor

1
팁 : TeX 코드는 모든 공백과 줄 바꿈이 제거 된 상태로 작동하는 것 같습니다.
xnor

1
LaTeX에서 수행하는 방법을 모르는 사람은 위의 예제 출력을 따르십시오. n = 5 인 경우 단순 ccccc대신 넣기 만하고 cc그대로 두십시오 |c...이 예에서 모든 공백과 줄 바꿈은 선택 사항이지만 빈 줄은 피하십시오.
Heimdall

답변:


10

, 70 바이트

≔tabularζ\ζ{*θc|c}⸿⪫✂β⁰Iθ¹&⁰&F\\⸿\hline⸿Eη⁺⪫⁺⮌EIθI﹪÷κX²λ²⟦ι⟧&¦\\⁰\endζ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

≔tabularζ

이 문자열을 변수에 저장하여 중복을 피하십시오.

\ζ{*θc|c}⸿

초기 \tabular{*2c|c}줄 (2 또는 첫 번째 입력 값)을 인쇄하십시오 q.

⪫✂β⁰Iθ¹&⁰&F\\⸿\hline⸿

q사전 정의 된 변수에서 첫 글자를 가져 와서 사이에 s를 b삽입 &한 후 다음 줄에 추가하고 &F\\인쇄 \hline하십시오.

Eη⁺⪫⁺⮌EIθI﹪÷κX²λ²⟦ι⟧&¦\\

두 번째 입력에서 문자를 반복합니다. 각각에 대해 색인은 length 이진 이진수로 변환되고 q문자가 연결되고 결과가 &s 로 결합되고 \\추가됩니다. 결과 문자열은 암시 적으로 별도의 행에 인쇄됩니다.

⁰\endζ

를 인쇄하십시오 \endtabular. (이것은 디버 보시 파이어가를 삽입하는 것을 잊었 기 때문에 분리기 일뿐 ¦입니다.)


3
이 도전이 실제로 설계된 것이 아니라는 점을 감안할 때 Charcoal이 현재 승자가 된 것은 다소 인상적입니다.
Outgolfer Erik

6

파이썬 2 , 153 바이트

lambda n,l:r'\tabular{*%dc|c}%s&F\\\hline%s\endtabular'%(n,q(map(chr,range(97,97+n))),r'\\'.join(q(bin(2**n+i)[3:]+x)for i,x in enumerate(l)))
q='&'.join

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

다음과 같은 출력

\tabular{*2c|c}a&b&F\\\hline0&0&0\\0&1&0\\1&0&0\\1&1&1\endtabular

\tabular그리고 \endtabular짧은로 사용 \begin{tabular}하고 \end{tabular}따라, 이 LaTeX의 골프 팁 . 는 *2c2 열을 정의하는 속기입니다.


5

하스켈, 164 155 바이트

s%f=((:"&")=<<s)++f:"\\\\"
n#r=unlines$("\\tabular{"++('c'<$[1..n])++"|c}"):take n['a'..]%'F':"\\hline":zipWith(%)(mapM id$"01"<$[1..n])r++["\\endtabular"]

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

unlines                               -- take a list of strings and join it with NL.
                                      -- the strings are:
   "\\tabular{"++('c'<$[1..n])++"|c}" -- tabular definition with n times 'c'
   take n['a'..]%'F'                  -- table header
   "\\hline"                          -- hline
   zipWith(%)(mapM id$"01"<$[1..n])r  -- table content
   ["\\endtabular"]                   -- end of tabular definition

Table header and content are built via function '%'

s%f=                                  -- take a string 's' and a char 'f'
    ((:"&")=<<s)                      -- append a "&" to each char in 's'
    ++f:"\\\\"                        -- and append 'f' and two backslashes

Table header:

take n['a'..] % 'F'                   -- s: the first n letters from the alphabet
                                      -- f: char 'F'
Table content:

zipWith(%)                            -- apply '%' pairwise to
    mapM id$"01"<$[1..n]              -- all combinations of '0' and '1' of length n
    r                                 -- and the string 'r' 

편집 : ( @ xnor 's answer 에서 도난당한) \tabular대신 사용하십시오 .\begin{tabular}


3

파이썬 (2) , 192 (168) 166 바이트

lambda n,l:r'\begin{tabular}{*%dc|c}%s\end{tabular}'%(n,r'\\'.join(map('&'.join,[map(chr,range(97,97+n))+[r'F\\\hline']]+[bin(2**n+i)[3:]+l[n]for i in range(2**n)])))

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

꽤 인쇄 된 버전 :

파이썬 (2) , 234 (229) 218 209 205 203 바이트

n,l=input()
print'\\begin{tabular}{'+'c'*n+'|c}\n'+' & '.join(chr(i+97)for i in range(n)+[-27]),'\\\\\n\hline'
i=0
for r in l:print' & '.join(bin(i)[2:].rjust(n,'0')+`r`),r'\\';i+=1
print'\\end{tabular}'

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


2

양성자 , 142 바이트

n=>x=>"\\tabular*#{n}c|c#{j(map(chr,97..97+n))}&F\\\\\hline"+'\\\\'.join(j(bin(i)[2to].zfill(n)+x[i])for i:0..len(x))+"\\endtabular"j="&".join

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

출력은 골프 LaTeX 형식입니다. 그 트릭을위한 xnor에게 감사합니다!

이론적으로 Proton은 절대로 Python lol을 잃지 않아야하기 때문에 xnor의 Python 답변보다 짧게 골프를 칠 수 있어야합니다 (실제로 나는 나쁜 xD입니다). 나는 xnor로부터 약간의 트릭을 훔칠지도 모른다; P

변수를 만들어서 더 짧게 만들었습니다 .xnor도 알아 냈습니다.

그리고 거기에 우리는 약간의 양성자 골프 트릭을 사용하여 -6 바이트를갑니다.


1

R , 196187171 바이트

function(m,n){cat("\\tabular{*",n,"c|c}")
write(c(letters[1:n],"F\\\\\\hline",rbind(t(rev(expand.grid(rep(list(0:1),n)))),paste0(m,"\\\\")),"\\endtabular"),1,n+1,sep="&")}

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

차콜 답변 과 유사한 출력 . expand.grid에서 이 답변 .

레코드 xtable를 위해 eponym 패키지 에서 사용하는 것은 패키지를 포함하여 스펙과 일치하는 많은 옵션을 지정해야하기 때문에 그리 짧지 않습니다 .

R 187 바이트

function(m,n){u=rbind(apply(expand.grid(rep(list(0:1),n)),1,rev),m)
rownames(u)=c(letters[1:n],"F")
print(xtable(t(u),dig=0,align=c(rep("c",n+1),"|c}")),hl=0,include.r=F)}
library(xtable)

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

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