Se você se lembrar dos anos de escolaridade, lembre-se de aprender sobre as Tabelas da Verdade . Eles pareciam chatos, mas são a base da lógica e (alguns argumentariam) toda a computação ...
Problema
Sua missão, caso você aceite aceitá-la, é escrever um programa, função ou widget de código que possa gerar uma tabela verdade fornecida.
Entrada
A entrada será uma string (como estrutura de dados) contendo a instrução lógica na qual a Tabela da Verdade será inserida. Por exemplo:
p ∧ q
Isso significa p and q
(conjunção lógica) e produzirá:
p q p ∧ q
T T T
T F F
F T F
F F F
Observe o espaçamento: O item da coluna está no centro do cabeçalho
Personagens
Pontuação por caracteres, não bytes Os caracteres de comparação lógica são especiais e nem sempre são o que parecem. Use estes caracteres:
Conjunção lógica (AND): ∧
U + 2227
Disjunção lógica (OR): ∨
U + 2228
Negação lógica (NOT) ~
ou ¬
U + 7e e U + ac respectivamente
Bónus
Todos esses bônus são opcionais, mas eliminam pontos da sua pontuação. Escolha qualquer.
Negação Lógica
Negação lógica é um operador unário em tabelas verdadeiras. É o equivalente !
na maioria dos idiomas baseados em C. Faz false
=> true
e vice-versa. É anotado com um ¬
ou ~
(você deve suportar ambos). Apoiar isso derrubará 10% da sua pontuação. Você deve, no entanto, adicionar uma coluna adicional para mostrar seus resultados: Por exemplo:
~p ∧ q
irá produzir:
p ~p q ~p ∧ q
T F T F
T F F F
F T T T
F T F F
Pretty Print
A notação de tabela normal é chata. Vamos torná-lo bonito! O formato de impressão bonito é o seguinte para p ∧ q
:
+---+---+-------+
| p | q | p ∧ q |
+---+---+-------+
| T | T | T |
+---+---+-------+
| T | F | F |
+---+---+-------+
| F | T | F |
+---+---+-------+
| F | F | F |
+---+---+-------+
Detalhes especiais para impressão bonita:
- Há um preenchimento de 1 espaço em cada célula
- Os valores das células ainda estão centralizados
Se você imprimir suas tabelas, use seu código e multiplique por 0,6. Use esta função para este bônus:
score = 0.6 * code
Exemplos
p ∧ q
:
p q p ∧ q
T T T
T F F
F T F
F F F
p ∨ q
:
p q p ∨ q
T T T
T F T
F T T
F F F
~p ∧ q
:
p ~p q ~p ∧ q
T F T F
T F F F
F T T T
F T F F
~p ∨ q
:
p ~p q ~p ∧ q
T F T T
T F F F
F T T T
F T F T
Regras
- Aplicam-se brechas padrão
- Nenhum recurso externo
- Se você for violar as regras, seja inteligente;)
O código mais curto (em caracteres) vence. Boa sorte!
score = 0.6 * (code - 15)
=.6 * code - 9
p
q
e r
em uma tabela de verdade)
p
eq
. A menos que eles sempre tenham esses nomes, você pode mostrar algumas opções diferentes nos exemplos de teste. Eles são sempre uma única letra?