Inspirado por um meme que vi hoje mais cedo.
Descrição do Desafio
Considere uma grade de alfabeto infinita:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
...
Pegue uma palavra ( CODEGOLF
neste exemplo) e faça dela uma subsequência da grade, substituindo letras não usadas por um espaço e removendo as letras no final da grade infinita:
C O
DE G O
L
F
Exemplos
STACKEXCHANGE
ST
A C K
E X
C H
A N
G
E
ZYXWVUTSRQPONMLKJIHGFEDCBA
Z
Y
X
W
V
U
T
S
R
Q
P
O
N
M
L
K
J
I
H
G
F
E
D
C
B
A
F
F
ANTIDISESTABLISHMENTARIANISM
A N T
I
D I S
E ST
AB L
I S
H M
E N T
A R
I
A N
I S
M
Notas
- Espaços em branco à direita são permitidos.
- Você não precisa preencher
a últimalinha com espaços. Por exemplo, se a entrada forABC
, você poderá gerar apenasABC
sem 23 espaços à direita. - Você pode assumir que a entrada corresponderá a
[A-Z]+
regex. - Como alternativa, você pode usar o alfabeto em letras minúsculas; nesse caso, a saída corresponderá
[a-z]+
. - Você deve usar uma nova linha (
\n
,\r\n
ou equivalente) para separar linhas, que é uma lista de strings não é um formato de saída adequada. - Este é um desafio do código-golfe , portanto, faça o seu código o mais curto possível!
BALLOON
(dois caracteres adjacentes iguais).Respostas:
Casca , 15 bytes
Experimente online!
Explicação
fonte
Java 10,
161159152 bytes-2 bytes graças a @Nevay .
Impressão de -7 bytes diretamente em vez de retornar uma String e converter em Java 10.
Explicação: "
Experimente aqui.
A primeira parte do método divide a palavra de entrada em partes com um delimitador.
Por exemplo:
CODEGOLF
→CO;DEGO;L;F
ouBALLOON
→B;AL;LO;O;N
.A segunda parte faz um loop sobre essas partes e usa o regex
[^...]
para substituir tudo que não corresponde a um espaço.Por exemplo,
.replaceAll("[^CO]"," ")
deixa oC
, eO
, e substitui todo o resto por um espaço.fonte
B;AL;LO;O;N
?for(char c:s)x+=p<(p=c)?c:";"+c;
.C (gcc) , 69 bytes
Experimente online!
fonte
Perl 5 , 44 bytes
Código de 40 bytes + 4 para
-lF
.Experimente online!
fonte
Python 2 , 92 bytes
Experimente online!
fonte
JavaScript (ES6), 79
Editar Como uma nova linha principal é aceita, eu posso salvar 2 bytes
Por mais 1 byte, posso aceitar entrada em minúsculas ou maiúsculas:
Menos golfe
Teste
fonte
\n
por uma nova linha literal dentro dos backticks por -1 byte.MATL ,
2423 bytesUsa letras minúsculas.
Experimente no MATL Online!
Explicação
fonte
Japonês ,
1816 bytes-2 bytes graças a @Shaggy
Somente entrada em maiúsculas.
Experimente online!
Explicação
Alterne para variáveis alternativas, onde
B
está o alfabeto maiúsculo.Divida a sequência de caracteres de entrada entre os caracteres em que o primeiro é maior ou igual a (
¨
) o segundo.Mapeie cada partição pela função, onde
X
está a partição atual.Mapeie cada caractere no alfabeto maiúsculo para o seguinte, com
Z
a letra atual.Remova todas as letras da partição atual da letra atual. Se a letra atual estiver contida na partição atual, isso resultará em uma sequência vazia.
Se for verdade (não uma sequência vazia), retorne um espaço (
S
), caso contrário, retorne a letra atual.Associe o resultado da linha anterior com novas linhas e imprima o resultado.
fonte
r"[^{Z}]"S
parece um pouco ridículo, mas eu não consigo encontrar nenhuma maneira melhor ou ...kX
!kX ?S:Z
paraoX ªS
salvar dois bytesPitão, 18 bytes
Experimente aqui.
Nova linha principal na saída, alfabeto em minúsculas.
fonte
Geléia , 19 bytes
Experimente online!
fonte
OI<1®;
->>2\0;
para salvar um byte (Eu realmente fiz>2\0;œṗµØAf€ȯ€⁶µ€Y
para 18 também, que eu pessoalmente acho mais fácil de analisar)BALLOON
ou algo assim.<2\1;¬
; Ah bem.C (gcc),
9163 bytes-28 graças ao ASCII-only
Experimente online!
Anterior:
Sim, há uma solução mais curta, mas notei depois que escrevi esta ... Experimente online!
fonte
Mathematica, 101 bytes
Split
a entrada em seqüências de letras estritamente crescentes, comparando letras adjacentes comOrder
. SeOrder[x,y] == 1
, então,x
precedey
no alfabeto e, portanto, pode aparecer na mesma linha.Para cada sequência de letras, crie um padrão para corresponder as strings
Except
dessas letras;#|##
é uma abreviação deAlternatives
. Substitua as letrasAlphabet
que correspondem ao padrão por espaços.Ilustração das etapas intermediárias:
fonte
Golfscript,
2221 bytesExperimente online!
-1 byte graças à redefinição final cuidadosa do
n
built-in.Explicação (com uma versão ligeiramente diferente):
fonte
Retina , 80 bytes
Experimente online!
Sempre há exatamente uma nova linha principal. O código acrescenta um pouco de maneira desajeitada a palavra ao alfabeto, juntamente com um marcador (ponto e vírgula). Em seguida, move o marcador até a primeira letra da palavra, enquanto altera todas as outras letras que passa para os espaços. Também remove a primeira letra da palavra. Repete isso até que a primeira letra da palavra não esteja mais atrás do marcador. Em seguida, ele limpa esse marcador e o restante do alfabeto e o substitui por uma nova linha e o alfabeto por um marcador novamente. Ele continua repetindo isso até que a palavra de entrada esteja vazia e depois limpa o último alfabeto e marcador, deixando a saída desejada.
fonte
05AB1E , 18 bytes
Experimente online!
Ocorreu um problema com 05AB1E
ć
(extração 1) deixando uma lista / sequência vazia na pilha após a extração do último elemento. Essa solução seria 1-2 bytes mais curta se não fosse por isso.fonte
ð,
significa "imprimir um espaço e uma nova linha".Retina ,
130126 bytesExperimente online! Editar: salvou 4 bytes usando o gerador de alfabeto do @ MartinEnder. Explicação:
Acrescente o alfabeto.
Alinhe o maior número possível de letras com sua posição no alfabeto.
Inicie uma nova linha antes da primeira letra que não pôde ser alinhada.
Exclua o alfabeto, mas faça tudo novamente até que não haja letras desalinhadas.
fonte
q / kdb + ,
4845 bytesSolução:
Experimente online!
Nota: O link é para uma porta K (oK) desta solução, pois não há TIO para q / kdb +.
Exemplos:
Explicação:
Q é interpretado da direita para a esquerda. A solução é dividida em duas partes. Primeiro, divida a sequência em que o próximo caractere é menor ou igual ao atual:
"STACKEXCHANGE"
->"ST","ACK","EX","CH","AN","G","E"
Em seguida, pegue uma sequência de 26 espaços em branco e aplique a entrada nos índices em que a entrada aparece no alfabeto e imprima em stdout.
"__________________________"
->__________________ST______
Demolir:
Notas:
fonte
Powershell,
7063 bytes-7 bytes obrigado @Veskah
Experimente online!
Explicação:
Para cada caractere no argumento dividido:
$x
e$x
valor limpo (rv
é alias para Remove-Variable ), se um código do caractere atual for menor ou equivalente (-le
) a um código do caractere anterior.$x
, armazene-o$x
. Também atualiza um valor de caractere anterior.Última saída
$x
.fonte
|% *ht
para salvar alguns bytes, mas parece que ele quebrou mesmo.Geléia ,
2421 bytes3 bytes graças a Erik, o Outgolfer.
Experimente online!
fonte
SOGL V0.12 , 22 bytes
Experimente aqui!
fonte
JavaScript (ES6), 87 bytes
Aceita entrada em maiúsculas ou minúsculas. A saída corresponde ao caso da entrada.
Testes
Mostrar snippet de código
fonte
Haskell,
81 7473 bytesGuardado 1 byte graças a Laikoni !
Experimente online.
Otimizações de Haskell Hugs
O intérprete do Hugs me permite salvar mais um byte ao
(!cycle$['A'..'Z']++"\n")
invés de :,(!cycle(['A'..'Z']++"\n"))
mas o GHC não gosta do primeiro . (Isso agora está obsoleto; Laikoni já reescreveu essa linha de uma maneira que economizou 1 byte.)Aparentemente, o Hugs também não requer parênteses ao redor do correspondente de padrão de lista, para que eu pudesse salvar mais dois bytes indo de:
q@(w:y)!(x:z)
paraq@(w:y)!x:z
.fonte
a=['A'..'Z']++'\n':a;(!a)
. Interessante agora que o Hugs parece ter regras um tanto frouxas.a=...:a
truque. Obrigado!Python 3 ,
8785 bytesExperimente online!
fonte
J , 39 bytes
Experimente online!
fonte
Carvão , 15 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
APL (Dyalog Classic) , 20 bytes
Experimente online!
fonte
K (ngn / k) ,
2928 bytesExperimente online!
{
}
função com argumentox
>':x
para cada caractere, é maior que o caractere anterior?~
negar&
onde (em que índices) temos verdadeiros(
)_x
cortarx
nesses índices, retornar uma lista de strings{
}'
para cada uma dessas cordaso alfabeto inglês
x?
encontre o índice da primeira ocorrência de cada letra emx
, use0N
(um valor "nulo" especial) se não for encontradox@
indexex
com isso; indexando com0N
retornos" "
, então obtemos uma string de comprimento 26 na qual as letrasx
estão em suas posições alfabéticas e todo o resto é espaçosfonte
R ,
129117 bytesExperimente online!
Explicação (não destruída):
fonte
R , 95 bytes
Basta percorrer o alfabeto maiúsculo repetidamente enquanto avança um contador por 1 se encontrar a letra na posição contrária da palavra e imprimir a letra, um espaço caso contrário.
Experimente online!
fonte
GolfScript , 37 bytes
Experimente online!
Eu fiz um Golfscript com um nome diferente, mas tinha saída incorreta.
fonte