Desafio
Dado um não-vazia cadeia S de comprimento L que consiste inteiramente de caracteres ASCII imprimível, a produção de outra cadeia de comprimento L que consiste inteiramente de caracteres ASCII imprimível, mas não é igual a S .
Para os propósitos deste desafio, um caractere ASCII imprimível é aquele entre U + 0020 e U + 007E, inclusive; isto é, de
(espaço) a ~
(til). Novas linhas e guias não estão incluídas.
Por exemplo, dado "abcde"
, algumas saídas válidas podem ser:
"11111"
"abcdf"
"edcba"
Mas estes seriam inválidos:
"abcde"
"bcde"
"abcde0"
Casos de teste
"asdf"
"1111"
" "
"~~~~~"
"abcba"
"1"
" "
"~"
" ~"
"~ "
" 0"
"!@#$%^&*()ABCDEFGhijklmnop1234567890"
" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
Regras
- Você pode assumir que a entrada consiste inteiramente em caracteres ASCII imprimíveis.
- Você não pode assumir que a entrada não contém todos os 95 caracteres imprimíveis.
- Você pode assumir que a entrada contém pelo menos um caractere e tem menos de 256 caracteres.
- A saída também deve consistir inteiramente em caracteres ASCII imprimíveis. Não foi possível, por exemplo, gerar o byte \ x7F para entrada
"~"
. - A saída deve ser diferente da entrada com probabilidade 1; isto é, você pode gerar seqüências aleatórias até que uma seja diferente da entrada, mas não pode simplesmente gerar caracteres aleatórios L e esperar que seja diferente.
- As novas linhas não são permitidas na saída, mas você pode gerar uma nova linha à direita que não é contada na sequência.
Pontuação
Isso é código-golfe , então o código mais curto em bytes em cada idioma vence.
Respostas:
Python 2 , 21 bytes
Experimente online!
Pega a representação da string de entrada e a trunca para o comprimento da string de entrada. Para uma sequência típica, isso coloca-a entre
'
aspas e desbota:Observe que a nova string começa com
'
. Vamos mostrar que a saída sempre difere da entrada.Se a entrada não tiver
'
, a saída começará com'
e a entrada não.Se a entrada contiver um
'
e mas não"
, o Python usará"
para as aspas externas, fornecendo um primeiro caractere"
que não está na string de entrada.Se a entrada tiver ambos
'
e"
, as aspas externas serão'
e cada uma'
será escapada como\'
. Onde quer que o primeiro"
apareça na entrada, ele é deslocado para a direita pela inicial'
na saída e por qualquer possível escape. Isso significa que ele não pode corresponder a um"
na posição correspondente na saída.Por fim, observe que citar a entrada e, possivelmente, caracteres de escape sempre aumentam o número de caracteres, portanto, truncar a saída faz com que ela tenha o mesmo comprimento que a entrada.
Observe que era crucial que o Python alternasse adaptativamente
"
no segundo caso. Se não o fizesse, falharia na entrada de três caracteres'\'
. Ou, qualquer prefixo mais longo da correção mostra a cadeia usando'
. Portanto, esse método não funcionará na maioria dos idiomas.fonte
len(s)
e não-2
?'
e"
, mais de 2 caracteres foram adicionados porque as aspas precisam ser escapadas.[2:]
vez de[:len(s)]
reduzir para 16 caracteres.05AB1E , 3 bytes
Experimente online!
fonte
JavaScript (ES6),
3733362926182119 bytesExperimente online!
-4 bytes graças ao ETHProductions
-7 + -5 + -2 bytes graças ao CalculatorFeline
-3 bytes graças a Rick Hitchcock
Move o primeiro caractere para o final e o define como 0 se for numérico e diferente de zero e 1 caso contrário.
Explicação
Prova
Como o segundo caractere se torna o primeiro, o terceiro caractere se torna o segundo, etc. todos os caracteres teriam que ser idênticos. O último caractere restante pode ser apenas 0 ou 1, portanto, o caractere repetido deve ser 0 ou 1. Mas qualquer sequência de 0s produz um 1 no final e vice-versa; portanto, é impossível criar uma entrada igual à sua saída. -ETHProductions
Veja edições para versões anteriores e explicações.
fonte
Gelatina , 3 bytes
Saída é uma sequência de dígitos, vírgulas e caracteres de hífen-menos, cujo primeiro caractere será diferente do primeiro caractere da sequência de entrada.
Experimente online!
Como funciona
fonte
Haskell , 20 bytes
Experimente online!
Converte em uma sequência de
F
eT
. O que importa é que os personagensF
eT
convertidos para o outro. Isso é feito verificando se o caractere é menor doM
que getTrue
or ouFalse
, em seguida, obtendo o primeiro caractere da representação de string.Haskell , 23 bytes
Experimente online
Substitui todos os caracteres por
~
, exceto~
se torna um espaço.fonte
q '~'
? Por que não pode ser removido?'
como um personagem em identificadores, por issoq'~'=' '
seria analisado comoq' ~ '=' '
(relatando um erro lexical, porque a última'
é incomparável.)Espaço em branco, 59 bytes
Representação visível
O que faz:
Para cada caractere que lê, imprime um espaço, exceto quando é um espaço, e imprime um @.
Desmontagem:
fonte
SSSTSSSSSN (push 32)
paraSSSTSSTN (push 9)
e oTSSS (add)
paraTSSN (multiply)
. Ele imprimirá uma guia para cada caractere com um valor unicode acima de 9 e umaQ
(9 * 9 = 81) para cada caractere com um valor unicode0..9
. Experimente matérias-line 57 bytes , ou experimentá-lo online com destacando adicionado e explicaçãoMATL ,
65 bytesExperimente online!
Explicação
fonte
l'0f=
(se ele faz o que eu acho que ele faz)Haskell , 19 bytes
Uma função anônima que recebe e retorna a
String
. Use como(map$(!!1).show.succ) "1111"
.Experimente online! (Usando o equipamento de teste do @ xnor.)
'
citação inicial .&
e~
, que em vez disso dão\
, porque seus sucessores'
e\DEL
escapam em literais de caracteres.fonte
head
pode ser usado no lugar de(!!1)
por um byte extrahead
é(!!0)
, não(!!1)
. Isso falharia no personagem'
.05AB1E , 5 bytes
Experimente online!
Explicação
Substitui cada caractere pelo próximo caractere ascii imprimível, passando de til para espaço.
fonte
V , 7 bytes
Experimente online! ou Verifique todos os casos de teste!
Como funciona?
Considere todas as strings que consistem em ASCII imprimível. Cada string deve 1) conter caracteres alfabéticos ou 2) não conter caracteres alfabéticos.
Portanto, a maneira como esse programa funciona é primeiro convertendo um caractere não alfabético
'a'
e, em seguida, executando o ROT13 na sequência de entrada.fonte
9
sozinho, onde incrementando ele adiciona um outro personagem para a cadeiaC (gcc) , 22 bytes
Pega um ponteiro de seqüência de caracteres e modifica o primeiro caractere no lugar.
Experimente online!
fonte
*s=159-*s
. Sempre altera o último bit, portanto nunca fornece o mesmo caractere. Note que159 = ' ' + '~'
~
errado o código de caractere .C (gcc) , 20 bytes
Viu a resposta de Dennis, pensou em uma melhoria essencial de 2 bytes.
Experimente online! (Rodapé de Dennis.)
Como o original, modifica o primeiro caractere da string no lugar, mas o exorta com seu valor dividido por 3 (o menor número que funciona. 2 falha no caractere único
'U'
que fornece 127, não imprimível).fonte
Python 2 , 25 bytes
Experimente online!
Anders Kaseorg salvou um byte, extraindo o primeiro caractere de
True
ouFalse
.fonte
'?'
para um charCode 2 dígitos, mas Python não é um desses idiomas, onde você pode fazer que :(lambda s:`+(s<'1')`+s[1:]
lambda s:`s<'T'`[0]+s[1:]
Haskell,
3026 bytesExperimente online!
Substitui cada caractere por seu antecessor e espaço por til.
fonte
Oitava ,
1918 bytesExperimente online!
Explicação:
fonte
CJam , 5 bytes
Experimente online!
Converte o último caractere em seu ponto de código e leva esse módulo 10. Isso é claramente diferente para caracteres que não são dígitos na última posição. Mas os dígitos começam no ponto de código 48, portanto, pegar esses mod 10 mudará para a esquerda ciclicamente e, portanto, o último caractere é sempre alterado.
fonte
Retina ,
106 bytes4 bytes de golfe graças a @Neil
Experimente online!
Isso translitera
para
~
,!
para,
"
para!
, ...,~
para}
.fonte
Japonês , 4 bytes
Experimente online!
Explicação:
fonte
Cubix , 10 bytes
Experimente online! ou Assista correr!
Para cada caractere, imprime
1
se o caractere tiver um ponto de código par,2
caso contrário;1
possui um ponto de código ímpar e2
um par, portanto a saída nunca será igual à entrada.Explicação
Este código corresponde à seguinte rede de cubos:
O IP (ponteiro de instrução) começa no canto superior esquerdo da face esquerda, indo para leste. Segue esta série de instruções:
fonte
Alice , 9 bytes
Experimente online!
Explicação
A idéia foi tirada da submissão de Martin Ender ao CJam. O primeiro caractere é tomado como um ponto de código, mod 10 reduzido e movido para o final da saída. Como exatamente um caractere foi alterado, a permutação dos caracteres não pode resultar na obtenção da mesma string de volta.
fonte
t
mod 10 é muito inteligente, legal. :)Pushy , 1 byte
Experimente online!
Isso converte a sequência especificada na lista de códigos de caracteres ASCII, indexa-os (indexação modular) no alfabeto maiúsculo e depois imprime o resultado. Essencialmente, cada personagem
n
é mapeado parachr(ord(n) % 26 + 65)
. Você pode usar este programa para ver como o mapeamento funciona.A saída:
n
modo quechr(ord(n) % 26 + 65) == n
, para que isso seja verdade, deve haver um número inteirox
como aquele26x = 65
, para o qual não há solução.1 byte
Experimente online!
Essa resposta é exatamente a mesma, exceto que ela é mapeada para caracteres do alfabeto em minúsculas , em vez de caracteres do alfabeto em maiúsculas . Isso ainda é válido, pois não há um caractere de entrada possível
n
como essechr(ord(n) % 26 + 97) == n
.fonte
Brain-Flak , 53 bytes
Inclui +1 para
-c
Isso diminuirá o primeiro caractere, a menos que seja um espaço, nesse caso, incrementará o primeiro caractere.
Experimente online!
fonte
Gelatina , 4 bytes
Emite uma sequência de dígitos. Nenhum caractere de saída será igual ao caractere de entrada correspondente.
Experimente online!
Como funciona
fonte
Bash + coreutils, 13
Translitera os caracteres
para
~
(0x20 - 0x7e) com~
, depoispara
}
(0x7e, 0x20 - 0x7d).Experimente online .
fonte
PHP,
3027Altera cada caractere igual ao primeiro caractere pelo caractere que possui o bit menos significativo invertido.
fonte
~
funciona, produzindo1
.!$a
ou~$a
trabalha?!$a
se"12"
transformam"12"
porquefalse
são convertidas em uma sequência vazia, para que nada seja substituído e~$a
transforma tudo em imprimível, porque~"12"
não se converte em int primeiro, mas literalmente inverte todos os bits da sequência.Ruby , 20 + 1 = 21 bytes
Usa a
-p
bandeira.Experimente online!
Substitui o primeiro caractere na entrada por a,
0
se estiver1
, ou1
não.fonte
Braquilog , 9 bytes
Experimente online!
Explicação
Isso substitui todos os caracteres por um espaço, exceto os espaços com os quais ele substitui
"0"
.fonte
PHP <7,1, 31 bytes
Experimente online!
fonte
A non-numeric value encountered
. E você pode usar em~
vez dea&
.Golfscript, 3 bytes
Experimente online!
Pegue o módulo 5 do valor ASCII do último caractere e substitua o último caractere pelo resultado. Obviamente, isso funciona para caracteres que não são dígitos, mas se o último caractere for um dígito, ele também será alterado ("0" mod 5 = 3, "1" mod 5 = 4, etc.).
Isso também funcionaria com 7 ou 9, mantendo o mesmo comprimento.
Além disso, yay! Eu tenho uma solução Golfscript tão boa quanto as melhores soluções aqui!
fonte
Funky ,
2622 bytesCalcula
~a
que, para não dígitos, retornará NaN. Em seguida,1&
limita-o a 0 ou 1, para o dígito 0, este será1
e, para1
isso, será0
. Portanto, essa sequência é sempre única.Experimente online!
fonte