Faça um programa que simule os portões lógicos básicos.
Entrada: uma palavra em maiúsculas seguida por 2 números binários de 1 dígito, separados por espaços, como OR 1 0
. Os portões OR
, AND
, NOR
, NAND
, XOR
, e XNOR
são necessários.
Saída: qual a saída da porta lógica inserida receberia os dois números: 1 ou 0.
Exemplos:
AND 1 0
torna- 0
XOR 0 1
se 1
OR 1 1
torna- 1
NAND 1 1
se torna- se torna0
Este é um codegolf, então o código mais curto vence.
code-golf
logic-gates
hashing
code-golf
code-golf
number
array-manipulation
integer
code-golf
string
unicode
text-processing
cops-and-robbers
boggle
cops-and-robbers
boggle
code-golf
ascii-art
code-golf
word-puzzle
king-of-the-hill
python
code-golf
sequence
kolmogorov-complexity
code-golf
source-layout
code-golf
string
kolmogorov-complexity
math
number
code-golf
date
code-golf
combinatorics
recursion
game
king-of-the-hill
javascript
code-golf
array-manipulation
code-golf
radiation-hardening
self-referential
code-golf
integer
code-golf
number
code-golf
set-theory
code-golf
sequence
code-golf
string
sorting
natural-language
code-golf
decision-problem
number-theory
primes
code-golf
code-golf
ascii-art
code-challenge
array-manipulation
sorting
rubiks-cube
regular-expression
code-golf
counting
file-system
recursion
code-golf
string
kolmogorov-complexity
color
code-golf
game
code-challenge
permutations
encode
restricted-time
decode
code-golf
math
decision-problem
matrix
integer
palindrome
code-golf
matrix
statistics
king-of-the-hill
king-of-the-hill
python
card-games
code-golf
string
natural-language
code-golf
sequence
number-theory
qazwsx
fonte
fonte
Respostas:
Geléia ,
1310 bytesExperimente online!
Resposta do porto de Peter Taylor.
fonte
*256%339%2
) .Python 2 , 38 bytes
Experimente online!
Uma boa e antiga cadeia de módulos aplicada à soma dos valores ASCII da string de entrada, criando uma solução que é apenas sobreajustada. O valor ASCII total é distinto para cada entrada possível, exceto as que apresentam
0 1
e1 0
apresentam o mesmo resultado, o que ocorre porque todos os portões lógicos usados são simétricos.Ele
*3
separa valores adjacentes para entradas que diferem apenas nos bits, pois dificultam a divisão da cadeia de mods. O comprimento e o tamanho dos números na cadeia de mods cria aproximadamente a quantidade certa de entropia para atender a 18 saídas binárias.Uma solução mais curta é certamente possível usando
hash(s)
orid(s)
, mas eu as evitei porque elas dependem do sistema.Python 2 , 50 bytes
Experimente online!
Uma solução um pouco mais baseada em princípios. Cada porta lógica fornece um resultado diferente para cada contagem de zeros na entrada, codificável como um número de três bits de 1 a 6. Cada porta lógica possível é mapeada para o número correspondente, tirando
(s*9)[35]
todas as que são distintas. PoisOR
, isso acaba lendo um dos bits para que o personagem possa ser0
ou1
, mas acaba funcionando para verificar se é0
, e a1
dará um1
resultado corretamente de qualquer maneira.fonte
*a%b%c%d%e%2
, nada realmente inteligente. A única coisa interessante foi colocar um*
antes dos mods; Não tentei outros formatos.JavaScript (ES6), 39 bytes
Experimente online!
Quão?
Não podemos analisar espaços com
parseInt()
, independentemente da base com a qual estamos trabalhando. Portanto, injetamos uma representação de base 64 da string de entrada. Isso pode gerar=
caracteres de preenchimento (que também não podem ser analisadosparseInt()
), mas é garantido que esses caracteres estejam localizados no final da string e podem ser ignorados com segurança.Analisamos como base34 e aplicamos um módulo 86 , seguido por um módulo 23 , que fornece os seguintes resultados. Isso inclui imprecisões devido à perda de precisão. O resultado final está em [ 0..19 ] , com o maior índice de verdade sendo 18 , levando a uma máscara de pesquisa de 19 bits.
fonte
NOR
?NOR
. Agora consertado.CJam (13 bytes)
Assume que a entrada está sem uma nova linha à direita.
Conjunto de testes online
Este é apenas um hash simples que mapeia as 24 entradas possíveis em 17 valores distintos, mas consistentes, e depois as pesquisa em uma tabela compactada.
Python 2 (36 bytes)
Esta é apenas uma porta da resposta CJam acima. Conjunto de testes utilizando framework de testes de xnor.
fonte
05AB1E ,
1312108 bytesO cálculo alternativo de Port of @mazzy mencionado no comentário em sua resposta do Powershell (em
*256%339%2
vez de*108%143%2
).Experimente online ou verifique todos os casos de teste .
Explicação:
Veja este 05AB1E ponta do meu (seção Como comprimir grandes inteiros? ) Para entender por que
Ƶï
é339
.fonte
Carvão , 32 bytes
Experimente online! Link é a versão detalhada do código. Explicação: A cadeia compactada se expande para uma lista das operações suportadas, para que o índice da operação especificada seja então deslocado para a direita de acordo com as entradas e o bit assim extraído se torne o resultado.
A versão de 74 bytes funciona para todas as 16 operações binárias, que eu nomeei arbitrariamente da seguinte forma: ZERO E MENOS SEGUNDO MAIOR PRIMEIRO XOR OU NEM SINCRONIZA NORTE PRIMEIRO NORTE NSECOND NLESS NAND NZERO.
Experimente online! Link é a versão detalhada do código.
fonte
Mathematica, 55 bytes
Função pura. Toma uma string como entrada e retorna
True
ouFalse
como saída. DesdeOr
,And
,Nor
,Nand
,Xor
, eXnor
são todos built-ins, usamosToCamelCase
para mudar o operador caso Pascal, convertê-lo para o símbolo equivalente, e aplicá-lo aos dois argumentos.fonte
J , 21 bytes
Experimente online!
Porta da solução Python 2 do xnor .
J , 30 bytes
Experimente online!
Alguns pouco de diversão com eval
".
biblioteca e padrão (que já inclui corretaAND
,OR
,XOR
).J , 41 bytes
Experimente online!
Abordagem mais ao estilo J.
Como funciona
Um truque J muito geral está oculto aqui. Freqüentemente, a função desejada tem a estrutura "Executar F em uma entrada, executar H na outra e executar G nos dois resultados". Então deve funcionar como
(F x) G H y
. Na forma tácita, é equivalente a(G~F)~H
:E se
G
for uma primitiva assimétrica, basta trocar os argumentos esquerdo e direito da função alvo, e podemos salvar um byte.Agora, vamos à resposta acima:
fonte
Powershell,
3634 bytesInspirado no xnor , mas a sequência
*108%143%2
é mais curta que a original*3%61%37%9%7%2
Script de teste:
Resultado:
fonte
*16%95%7%2
falha nosXNOR
casos, no entanto. Você poderia usar @ nedla2004 's*6%68%41%9%2
, que é de 2 bytes menor do que @xnor ' s um, no entanto.xnor
. Eu acho isso*108%143
mais atraente :) Além disso, há um belo par*256%339
. Esse par é ainda melhor para idiomas que sabem trabalhar com bits e bytes.*256%339
.Perl 6 , 20 bytes
Experimente online!
Um porto da abordagem de maddy . Alternativamente,
*256%339%2
também funciona.Perl 6 , 24 bytes
Experimente online!
Uma porta da resposta do xnor . Vou tentar encontrar um mais curto, mas acho que provavelmente é o melhor que existe.
fonte
JavaScript (Node.js) ,
10694 bytesExperimente online!
Link para o código e todos os 24 casos.
+9 para esquecer de mapear o caso XNOR.
fonte
console.log(f("AND", 1, 1));
Java 10,
3028 bytesPorto da resposta do Powershell do @mazzy .
Experimente online.
fonte
JavaScript (Node.js) , 45 bytes
Apenas uma porta da excelente resposta Python 2 do xnor postada mediante consentimento, por favor, dê upvotes a essa resposta em vez disso.
Experimente online!
fonte
Anexo , 55 bytes
Experimente online!
Uma solução bastante brutal. Converte a entrada no comando Attache relevante e a avalia. (O anexo possui built-ins para cada um dos 6 portões lógicos.)
fonte
Ruby , 20 bytes
Experimente online!
Como funciona:
Basicamente, o mesmo que a resposta de Peter Taylor, mas Ruby facilita. O número mágico é diferente, mas a ideia era a mesma.
fonte