Напишите программу или функцию, которая принимает список выходов из логической функции и выводит код 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 показывает следующую таблицу истинности
Основные правила
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
- По умолчанию лазейки запрещены.
ccccc
вместоcc
, но оставить в|c
покое ... И да, в этой таблице все пробелы и новые строки являются необязательными, но я бы избегал пустых строк.Ответы:
Древесный уголь , 70 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Сохраните эту строку в переменной, чтобы избежать дублирования.
Выведите начальную
\tabular{*2c|c}
строку (2 или любое другое значение, котороеq
имеет первый вход ).Получите первые
q
буквы из предопределенной переменнойb
и вставьте&
s между ними, затем добавьте&F\\
и также напечатайте\hline
в следующей строке.Цикл по символам во втором входе. Для каждого его индекс преобразуется в двоичный файл с длиной
q
, символ объединяется, результат объединяется с&
s и\\
добавляется. Результирующие строки неявно печатаются на отдельных строках.Распечатать
\endtabular
. (Это⁰
просто разделитель, поскольку девербозатор не позволяет вставлять¦
.)источник
Python 2 , 153 байта
Попробуйте онлайн!
Выходы как
\tabular
и\endtabular
используются как более короткие\begin{tabular}
и\end{tabular}
, согласно этому наконечнику гольфа LaTeX . Это*2c
сокращение для определения 2 столбцов.источник
Haskell,
164155 байтПопробуйте онлайн!
Изменить: использовать
\tabular
вместо\begin{tabular}
(украдено из ответа @ xnor ).источник
Python 2 ,
192168166 байтПопробуйте онлайн!
Довольно печатная версия:
Python 2 ,
234229218209205203 байтаПопробуйте онлайн!
источник
Протон , 142 байта
Попробуйте онлайн!
Выход в гольф LaTeX форме; спасибо xnor за этот трюк!
Это должно быть в состоянии быть короче, чем ответ Python xnor, потому что Proton теоретически никогда не должен проигрывать Python lol (на практике я плохой xD). Я могу украсть некоторые уловки у xnor; PТеперь мне удалось стать короче, превратив некоторые вещи в переменные, что, как я только что заметил, xnor также сделал: P
И вот, 6 байт, мы используем некоторые трюки Proton для игры в гольф.
источник
R ,
196 187171 байтПопробуйте онлайн!
Вывод похож на ответ древесного угля .
expand.grid
из этого ответа .Напомним, использование
xtable
из пакета eponym ненамногокороче, поскольку необходимо указать множество параметров, соответствующих спецификации, в дополнение к включению пакета:р 187 байт
Попробуйте онлайн!
источник