Dado um número binário A como entrada com d> 1 dígitos, imprima um número binário B com dígitos d de acordo com as seguintes regras para encontrar o enésimo dígito de B:
O primeiro dígito de B é zero se o primeiro e o segundo dígitos de A forem iguais; caso contrário, é um.
Se 1 <n <d, então se os dígitos (n-1) enésimo e enésimo (n + 1) de A são iguais, o enésimo dígito de B é zero; caso contrário, é um.
O d-ésimo dígito de B é zero se os dígitos (d-1) e d-ésimo de A forem iguais; caso contrário, é um.
Regras
O formato de entrada / saída de sequência / lista está bom. Outra maneira permitida de entrada / saída é um número inteiro seguido pelo número de zeros anteriores (ou após o número de zeros anteriores).
Faça seu código o mais curto possível.
Casos de teste
00 -> 00
01 -> 11
11 -> 00
010111100111 -> 111100111100
1000 -> 1100
11111111 -> 00000000
01010101 -> 11111111
1100 -> 0110
1100 -> 0110
(os 2 primeiros dígitos da saída são sempre idênticos em todos os outros casos de teste; idem para os últimos 2 dígitos)Respostas:
Haskell,
595854 bytesExperimente online!
Edit: @ Ørjan Johansen salvou 4 bytes. Obrigado!
fonte
"0110"!!(a+b+c)
salva um byte.[last s]
pode ser movido para oscanr
valor inicial.Geléia , 9 bytes
Experimente online!
E / S como lista de dígitos.
Explicação:
fonte
.ị
- Obtém o elemento no índice 0.5 . Como floor (0.5) ≠ ceil (0.5) ,ị
retorna os elementos nos índices 0 e 1 . A geléia é uma indexada, portanto, 0 realmente pega o último elemento.Ṛ
inverte o par (porque eles são retornados comolast, first
). Em seguida,j
junta o par na entrada e oṡ3
divide em fatias sobrepostas de comprimento 3.E€
verifica (para cada lista) se todos os elementos são iguais e¬
nega logicamente cada um.05AB1E , 6 bytes
A E / S está na forma de matrizes de bits.
Experimente online!
Como funciona
fonte
05AB1E , 11 bytes
Experimente online! ou como um conjunto de testes
Explicação
fonte
Haskell ,
666159 bytesExperimente online! Input é uma lista de zeros e uns, output é uma string. Exemplo de uso:
g [0,1,0,1,1,1,1,0,0,1,1,1]
rendimentos"111100111100"
.Solução anterior de 61 bytes:
Experimente online!
fonte
J ,
2614 bytesCrédito para a solução 05AB1E da Emigna
Experimente online!
Tentativa original
Experimente online!
fonte
Python 3 , 58 bytes
Experimente online!
fonte
Casca ,
1511 bytesLeva a entrada como uma lista, tente online! Ou tente este que usa cadeias de caracteres para E / S.
Explicação
fonte
Geléia , 8 bytes
A E / S está na forma de matrizes de bits.
Experimente online!
Como funciona
fonte
I0,0jI¬¬
JavaScript (ES6), 45 bytes
Recebe a entrada como uma matriz de caracteres. Retorna uma matriz de números inteiros.
Casos de teste
Mostrar snippet de código
Comentado
fonte
Mathematica, 56 bytes
Experimente online!
fonte
Gelatina , 16 bytes
Experimente online!
Eu estava indo para o golfe, mas Erik já tem uma solução mais curta e a minha só traria a minha para mais perto da dele. Ainda estou jogando golfe, mas não atualizo a menos que possa vencê-lo ou encontrar uma idéia única.
Explicação
fonte
Perl 5 , 62 + 1 (
-n
) = 63 bytesExperimente online!
fonte
s;..$;
construção no final é bacana. Vou ter que lembrar disso.Casca , 10 bytes
Experimente online!
Agradecimentos a Zgarb por -1 byte.
fonte
Ẋo±≠
salva um byte.Japt ,
141312 bytesParcialmente portado da solução Dennis 'Jelly. Entrada e saída são matrizes de dígitos.
Economizou um byte graças à ETHproductions.
Tente
Explicação
Entrada implícita da matriz
U
.ä-
obtém os deltas da matriz.pT
empurra 0 para o final da matriz.äaT
primeiro adiciona outro 0 ao início da matriz antes de obter os deltas absolutos.mg
mapeia os elementos da matriz retornando o sinal de cada elemento como -1 para números negativos, 0 para 0 ou 1 para números positivos.fonte
.ø
na resposta 05AB1E. Eu acho que isso tornaria 1 byte menor ...A.ä()
que antecede seu segundo argumento, você pode adicionar um terceiro argumento que é anexado. Portanto, nesse caso,pT äaT
pode seräaTT
uma economia de 2 bytes.Python 3 , 54 bytes
A E / S está na forma de matrizes booleanas.
Experimente online!
fonte
J, 32 bytes
Como funciona:
Eu deixei de fora alguns @s e parênteses, que apenas garantem que tudo corra bem.
Um exemplo passo a passo:
fonte
Retina , 35 bytes
Experimente online! O link inclui casos de teste. Explicação: O regex inicia combinando cada dígito de entrada por vez. Um grupo de captura tenta corresponder a um dígito diferente antes ou depois do dígito em consideração. O
?
sufixo permite que a captura seja igual a 0 ou 1 vezes;$#2
transforma isso no dígito de saída.fonte
Pitão , 15 bytes
Experimente aqui!
Alternativamente:
mtl{d.:s+hQeBQ3
..aM._M.+++Z.+QZ
.Anexa o primeiro elemento e o último, obtém todas as subseqüências sobrepostas de comprimento 3 e, finalmente, pega o número de elementos distintos em cada sub-lista e o diminui. Essa bagunça foi feita no celular à meia-noite, então eu não ficaria surpreso se houvesse alguns campos fáceis.
fonte
Gaia , 9 bytes
Experimente online!
Explicação
Gaia , 9 bytes
Experimente online!
fonte
C , 309 bytes
Não é exatamente um idioma adequado para o golfe, mas vale a pena responder. Experimente aqui !
Explicação
fonte
APL + WIN, 29 bytes
Solicita a entrada na tela como um vetor de dígitos e gera um vetor de dígitos.
Explicação
fonte
SNOBOL4 (CSNOBOL4) , 273 bytes
Experimente online!
fonte
C (tcc) ,
646256 bytesAE / S está na forma de cadeias. A função f modifica seus argumentos s no lugar.
Experimente online!
fonte
Lisp comum, 134 bytes
Experimente online!
fonte