Esta é a continuação desse desafio de Adnan . Se você gosta desse desafio, é provável que também goste do outro. Confira!
Um teste de escolha múltipla com 8 questões cada um com 4 opções pode ter as respostas: BCADBADA
. Convertido em quatro matrizes diferentes, com verdadeiro e falso, se a letra atual for a resposta, será semelhante a
Q#: 1 2 3 4 5 6 7 8
B C A D B A D A
A: [0, 0, 1, 0, 0, 1, 0, 1]
B: [1, 0, 0, 0, 1, 0, 0, 0]
C: [0, 1, 0, 0, 0, 0, 0, 0]
D: [0, 0, 0, 1, 0, 0, 1, 0]
Isso pode ser compactado usando um pouco de lógica. Cada uma das escolhas A
, B
, C
e D
pode ser representado por dois verdadeiros falsos valores / mostrado abaixo:
A: 1 0
B: 0 1
C: 0 0
D: 1 1
Usando essa lógica, podemos compactar os quatro vetores acima para apenas dois:
1 2 3 4 5 6 7 8
B C A D B A D A
[0, 0, 1, 1, 0, 1, 1, 1]
[1, 0, 0, 1, 1, 0, 1, 0]
Ou seja, a solução para o seu teste é simplesmente: 00110111
, 10011010
. Ao concatená-los, obtemos o número binário
0011011110011010
ou 14234
decimal. Use esse valor decimal para enganar seu teste!
Desafio
Pegue um número N
no intervalo (inclusive) [0, 65535]
e produza uma sequência com a resposta para o teste de múltipla escolha.
Casos de teste:
14234
BCADBADA
38513
ABBDCAAB
0
CCCCCCCC
120
CBBBBCCC
65535
DDDDDDDD
39253
ABCDABCD
A saída pode estar em letras maiúsculas ou minúsculas, mas você não pode usar outros símbolos.
fonte
A=10, B=01
, entãoC=nor(A,B)
, eD=and(A,B)
inspirado pelo desafio de Adnan. Em retrospectiva, poderia ter sido melhor fazê-lo ao contrário, mas bem ... Tarde demais agora ...Respostas:
Gelatina , 14 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
05AB1E ,
191816 bytesCódigo:
Usa a codificação CP-1252 . Experimente online!
Explicação:
Primeiro, adicionamos
65536
ao número (žH
é uma constante definida como65536
), que também é10000000000000000
binária. Isto é para preencher o número com zeros. Vamos pegar o número14234
como exemplo.14234 + 65536
é igual a79770
. Qual em binário é:Removemos o primeiro caractere, resultando em:
Dividimos a corda em duas partes usando
2ä
:Depois disso, compactamos o array com
ø
:Convertê-los novamente em decimal (usando
C
) resulta em:Agora, só precisamos indexá-lo com a string
cbad
. A versão compactada para essa string é’c‰±’
, que também pode ser testada aqui . Finalmente, obtemos os caracteres no índice da matriz acima. Para o exemplo acima, isso resulta em:fonte
JavaScript (ES6),
5548 bytesVersão não recursiva (55 bytes)
Usando uma expressão regular, podemos fazer:
fonte
Python 2, 53 bytes
Teste em Ideone .
fonte
(n&257)%127
mas é mais longo. Pena que 127 é primo. Talvez você possa pensar em uma maneira de otimizá-lo.Montagem CP-1610 , 24 DECLEs (30 bytes)
Este código deve ser executado em um Intellivision . (1)
Um código de operação CP-1610 é codificado com um valor de 10 bits, conhecido como 'DECLE'. A função real tem 24 DECLEs, iniciando
$4809
e terminando em$4820
.Os registradores da CPU são, porém, 16 bits de largura, por isso vai apoiar qualquer valor de entrada em
0x0000
..0xFFFF
.Saída
(1) Concedido que pelo menos um compilador, vários emuladores e arquivos ROM de substituição sem direitos autorais estejam disponíveis gratuitamente, acho que ele não viola nenhuma regra de envio de PPCG. Mas, por favor, deixe-me saber se estou errado.
fonte
CJam , 22 bytes
Experimente online!
Explicação
Alimentado por magia ...
O mapeamento de pares de bits para letras neste desafio é um pouco arbitrário. Se representamos
ABCD
por0, 1, 2, 3
(para que possamos adicioná-los ao personagemA
), queremos o seguinte mapeamento:Esse mapeamento pode ser calculado com uma pequena fórmula mágica:,
((i1 == i2) + 1) ^ i1
onde a verificação de igualdade retorna0
ou1
. Confira a tabela a seguir, onde cada coluna corresponde a uma entrada, cada linha corresponde a uma operação e cada célula mostra a pilha nesse ponto:Com isso em mente, aqui está a descrição completa do código fonte:
Uma solução alternativa com a mesma contagem de bytes que é decididamente menos mágica:
E, caso seja útil para qualquer pessoa, se você transformar os bits
i1
ei2
novamente em um único número (ou seja, quando desejar o mapeamento0 -> 2, 1 -> 1, 2 -> 0, 3 -> 3
), isso poderá ser calculado ainda mais facilmente,(~n - 1) & 3
ou(~n - 1) % 4
se seu idioma obtiver um módulo sobre valores negativos. Eu acho que isso pode ser escrito de forma concisa como3&~-~n
em muitos idiomas. No CJam, este acaba sendo um byte mais longo, devido à conversão adicional da base 2.fonte
PHP, 57 bytes
Versão sem operadores Bitwise 70 bytes
fonte
$i
definida?Mathematica,
75736866 bytesObrigado a @MartinEnder por salvar 2 bytes.
fonte
#+##
eInfix
trabalho, mas o usoStringPart
é inevitável, porque a cabeça do"C"["B","A","D"][[#+##]]
é"C"
, nãoList
;StringJoin
não funciona#
e#2
estava na lista inteira.Perl, 42 bytes
Inclui +1 para
-n
Dê entrada no STDIN:
Apenas o código:
fonte
JavaScript,
113939088 bytesUm grande obrigado a @ Neil por me ajudar a economizar 20 bytes!
-3 bytes graças a @Cyoce
Infelizmente, JavaScript carece de funções como
decbin
,bindec
estr_pad
que o PHP tem.fonte
(65536+n).toString(2).slice(1)
e[+b[i+8]+2*b[i]]
seria mais curto, por exemplo.padStart
, caso seja aceito em uma versão futura do ECMAscript, resultará em uma economia maior.{…;return }
, useeval("…")
padStart
agora existe no ECMAScript.MATL, 16 bytes
Experimente Online!
ou Verifique todos os casos de teste
Explicação
fonte
Julia, 73 bytes
Dá uma função f, recebendo N como entrada e retornando a resposta como sequência.
Tente
Dependendo se um array de caracteres conta como string, é possível omitir a junção ( 67 bytes )
Tente
fonte
R, 110 bytes
Criamos uma solução vetorizada em R. Isso provavelmente deveria ser praticado por golf, chegando a uma conversão mais inteligente em conversão binária.
fonte