Entrada : uma ou duas cadeias de '0 e' 1 '. Se houver 2, eles serão separados por um espaço. Todas as cadeias de comprimento têm pelo menos 1.
Saída : Se uma string foi inserida, 2 são produzidas. Se 2 foram inseridos, 1 é emitido. As cadeias de saída pode ser o que quiser, mas se executar o seu programa com a entrada A dá-lhe B, em seguida, executá-lo com B deve dar uma (se introduzir 111 11
dá 00000
, em seguida, introduzir 00000
deve dar 111 11
).
Isso significa que, se você canalizar seu programa para si mesmo, deverá recuperar tudo o que inserir. Se o seu programa se chama foo, você pode testar isso da seguinte maneira:
>echo 101 101|foo|foo
101 101
Para impedir o uso de técnicas de força bruta, seu código deve ser capaz de executar com seqüências de 1000 dígitos em menos de 10 segundos. Minha solução python para isso leva menos de 1 segundo em seqüências de 10.000 dígitos, portanto isso não deve ser um problema.
O menor código vence.
fonte
if x not in d:
comif(x in d)-1:
e salvar um byte.Python, 326
Exemplos de entradas / saídas:
fonte
Perl 5, 197 caracteres
Com algumas quebras de linha:
Este programa opera compondo duas bijections:
Um par de números naturais pode ser mapeado para uma cadeia binária convertendo um em um número de base 2 e o outro em zeros iniciais estranhos.
n
é essa função eN
é sua inversa (exceto queN
usa$_
como parâmetro).Um par de números naturais pode ser mapeado para um único número natural usando a função de emparelhamento Cantor . O primeiro
map
bloco é essa função e o segundo é o inverso.Assim, duas cadeias binárias são divididas em quatro números, combinadas em dois números e, em seguida, combinadas em uma cadeia binária - ou vice-versa.
Testado em 100 entradas aleatórias de cada tipo com seqüências de caracteres de até 8 símbolos. Eu tenho encontrado muitas maneiras de tornar isso um pouco mais curto, mas vou parar e postar. Se houver espaço para otimizar ainda mais, provavelmente está nas expressões aritméticas.
fonte
1111111111111111111111111111111111111111111111111111111111111111
(641
s) parece travar, e a entrada do par0
e 501
s fornece o mesmo resultado que0
e 511
s, os quais produzem 641
s. Eu acho que há algum tipo de excesso com o número de0
s iniciais , então uma solução pode ser obter oN
valor de saída de um emparelhamento deN
valores de entrada Cantor e on
valor de um emparelhamento den
valores (ou vice-versa para o inverso). Eu sou um perl noob, então eu poderia ter feito algo errado.Perl, 56 caracteres
adicionado +1 caractere para a
-p
opção de linha de comandofonte
Python, 394
Tenho certeza de que isso pode ser ainda melhor, mas esse monólito usa a Função de Emparelhamento Cantor e sua inversa.
Explicação
Existe uma associação natural entre uma string binária e um par de números naturais: o primeiro número da imagem é o número de zeros à esquerda e o segundo é o valor inteiro do número binário. Sabendo que temos:
S ~ N^2
e com a joia do Cantor
N ~ N^2
Portanto:
S ~ N^2 ~ N^4 ~ S^2
S ~ S^2
Onde S é definido de todas as cadeias binárias. Esta solução implementa a bijeção entre S e S ^ 2.
fonte