Sua tarefa: escreva um programa / função que, ao receber uma sequência contendo apenas caracteres ASCII, produza / retorne a sequência em ordem inversa.
Exemplo:
1) Entrada
Hello, World!
2) Numere caracteres únicos na entrada. (String de entrada separada por pipes ( |
) para facilitar a leitura)
H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3 4 5 6 7 8 9 10
3) Para caracteres duplicados, encontre a primeira ocorrência desse caractere e numere o caractere duplicado com o mesmo número que o primeiro.
H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3 3 4 5 6 7 4 8 3 9 10
4) Inverta a string, mas não os números.
!|d|l|r|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
5) Exclua os caracteres acima dos números repetidos. (Caracteres excluídos representados com um asterisco.)
!|d|l|*|o|W| |,|*|l|*|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
6) Substitua os caracteres excluídos pelo caractere que aparece sobre a primeira ocorrência do número em que o caractere excluído acabou.
!|d|l|l|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
7) Saída
!dlloW ,olleH
Casos de teste:
Input -> Output
"Hello, World!" -> "!dlloW ,olleH"
"18464399" -> "99343488"
"Code Golf" -> "floG eloC"
"abcdefgABCDEFG" -> "GFEDCBAgfedcba"
"Mmm, marshmallows" -> "swwllwmhsrwm mms"
"15147" -> "74751"
Respostas:
Pitão , 1 byte
Verifique todos os casos de teste.
Pyth tem maravilhosos recursos embutidos :-)
Pitão ,
87 bytesVerifique todos os casos de teste.
Como funciona
Essa é a abordagem não integrada mais interessante.
fonte
Python 2 ,
4641 bytes-5 bytes graças a Artyer
Experimente online!
fonte
lambda x:''.join(x[~x.find(n)]for n in x)
em vez de reverter, em seguida, indexandoGelatina , 5 bytes
Experimente online!
fonte
CJam , 7 bytes
Experimente online!
Explicação
fonte
y
trabalhasse assim.y
trabalhasse assim. : PMATL , 6 bytes
Experimente online!
fonte
05AB1E , 2 bytes
Experimente online!
Explicação:
fonte
Alice , 17 bytes
Experimente online!
Explicação
Este é apenas o modelo usual para código linear no modo Ordinal. Se desdobrarmos isso, o programa atual se tornará:
A idéia aqui é semelhante à da minha resposta CJam . Como Alice não tem uma maneira fácil de indexar em seqüências de caracteres com números inteiros, é mais fácil replicar esse comportamento com transliteração (
y
em Alice). No entanto, a semântica de transliteração de Alice é muito mais geral que a de CJam, o que significa que Alice não apenas desconsidera os mapeamentos repetidos. Por exemplo, se quiséssemos transliterarMmm, marshmallows
para o reverso, isso representaria a seguinte lista de mapeamentos:Note que nós temos, por exemplo,
m -> w
,m -> o
,m -> a
em -> a
. O CJam descartaria todos, exceto o primeiro mapeamento, mas Alice passaria por eles. Portanto, o primeirom
seria mapeado paraw
, o segundo parao
, o quinto novamente paraw
e assim por diante. Neste caso, que não é útil, porque em geral se realizary
emAAB
(para algumas cordasA
eB
) como fizemos no CJam, vamos sempre é só pegarB
na Alice.Então, como calculamos um mapeamento que funciona
y
( por exemplo, como descartamos os mapeamentos repetidos manualmente)? Claro, usando outra transliteração. :)A fonte do mapeamento que queremos deve ser o número da entrada (isto é, a entrada deduplicada). Se aplicarmos o mapeamento acima ao nub, cada caractere aparecerá apenas uma vez; portanto, estamos usando apenas o primeiro de cada um dos mapeamentos repetidos. Portanto, ao transliterar o nub com a entrada e seu reverso, estamos efetivamente simplesmente descartando os mapeamentos duplicados. Podemos então usar o nub e esse novo resultado como um mapeamento para a entrada original. Tenho certeza de que fazia sentido para alguém ...
Então o código:
fonte
Pyke , 7 bytes
Experimente aqui!
fonte
Perl 5 , 23 + 1 (
-p
) = 24 bytesExperimente online!
Agradecimentos à entrada de Alice do @ MartinEnder pela idéia de transliteração
fonte
JavaScript ES6 50 bytes
3 bytes salvos graças a Justin Mariner
Teste-o:
fonte
R ,
68bytes 65Verifique os casos de teste!
Portos o método 05AB1E do Erik por 3 bytes a menos. Não foi o primeiro, mas foi o primeiro que vi.
versão antiga:
Verificar todos os casos de teste - imprime o vetor com a entrada como nomes e a saída entre aspas abaixo.
Uma implementação bastante ingênua, mas não acho que isso fique mais curto no R (e estou ansioso para estar errado sobre isso). É essencialmente uma porta R da resposta python de Rod, mas foi desenvolvida de forma independente.
Explicação ungolfed:
fonte
C (gcc) , 98 bytes
Experimente online!
O argumento deve ser uma sequência modificável; string é modificada no local.
fonte
Röda , 27 bytes
Experimente online!
Isso pega uma lista de caracteres como entrada e retorna um fluxo de caracteres.
Usando o tipo de dados string (40 bytes):
Experimente online!
fonte
Python ,
191128 bytesExperimente online
fonte
Java 10,
1009997 bytesPorto da resposta C de @ LeakyNun . Duvido que possa ser feito mais curto sem fazer algo semelhante em Java.
-1 byte graças a @ceilingcat .
Insira como
char[]
(matriz de caracteres) e modifique essa entrada em vez de retornar uma nova para salvar bytes.Experimente aqui.
fonte