Devido a limitações técnicas do Stack Exchange, o título é renderizado incorretamente. O título correto para este desafio é
Faça um
Word Icicle!
Word Icicle
Word cicle
ord cicle
ord icle
ord i le
or i le
or i l
or l
or
r
O desafio de hoje é fazer pingentes de gelo da palavra de entrada. Dada uma sequência de caracteres ASCII totalmente imprimíveis e pelo menos 2 caracteres não espaciais, execute as seguintes etapas:
Imprima o estado atual da sequência.
Substitua o caractere lexicamente menor (exceto espaços) por um espaço. Se houver um empate, substitua o caractere mais à esquerda.
Repita em linhas consecutivas até que a sequência contenha apenas 1 caractere não espacial.
Isso cria o efeito de que a string de entrada parece estar derretendo ...
I'm Melting!!!
I'm Melting !!
I'm Melting !
I'm Melting
I m Melting
m Melting
m elting
m lting
m ltin
m lt n
m t n
t n
t
Regras
Após algumas iterações, sua saída quase certamente terá espaços à direita em cada linha. Se você optar por truncar esses, isso é permitido.
Você pode ter uma linha vazia à direita, mas não mais.
Lembre-se de que a entrada pode conter vários espaços, mas todos são efetivamente ignorados. Por exemplo, a entrada
a a
deve fornecera a a
Você pode considerar a entrada como uma lista de strings, se desejar. Para saída, você pode retornar ou imprimir uma lista de cadeias, uma única cadeia com novas linhas ou matriz de caracteres / matriz 2D. Geralmente, eu prefiro formatos de E / S permissivos; portanto, é provável que outros formatos sejam permitidos desde que sejam consistentes e correspondam claramente à saída correta. Em caso de dúvida, não hesite em perguntar. Como de costume, programas ou funções completos são permitidos.
Lembre-se, este é um concurso para obter a resposta mais curta em qualquer idioma! Se você optar por responder em Java, tente fazer a resposta Java mais curta possível (em bytes).
Casos de teste
Hello World! -->
Hello World!
Hello World
ello World
ello orld
ello orl
llo orl
lo orl
o orl
o or
or
r
AbCdEfGhIjKlMnOpQrStUvWxYz -->
AbCdEfGhIjKlMnOpQrStUvWxYz
bCdEfGhIjKlMnOpQrStUvWxYz
b dEfGhIjKlMnOpQrStUvWxYz
b d fGhIjKlMnOpQrStUvWxYz
b d f hIjKlMnOpQrStUvWxYz
b d f h jKlMnOpQrStUvWxYz
b d f h j lMnOpQrStUvWxYz
b d f h j l nOpQrStUvWxYz
b d f h j l n pQrStUvWxYz
b d f h j l n p rStUvWxYz
b d f h j l n p r tUvWxYz
b d f h j l n p r t vWxYz
b d f h j l n p r t v xYz
b d f h j l n p r t v x z
d f h j l n p r t v x z
f h j l n p r t v x z
h j l n p r t v x z
j l n p r t v x z
l n p r t v x z
n p r t v x z
p r t v x z
r t v x z
t v x z
v x z
x z
z
PPCG is da BEST -->
PPCG is da BEST
PPCG is da EST
PP G is da EST
PP G is da ST
PP is da ST
P is da ST
is da ST
is da T
is da
is d
is
s
({({})({}[()])}{}) -->
({({})({}[()])}{})
{({})({}[()])}{})
{ {})({}[()])}{})
{ {}) {}[()])}{})
{ {}) {}[ )])}{})
{ {} {}[ )])}{})
{ {} {}[ ])}{})
{ {} {}[ ] }{})
{ {} {}[ ] }{}
{ {} {} ] }{}
{ {} {} }{}
{} {} }{}
} {} }{}
} } }{}
} } } }
} } }
} }
}
Respostas:
Python 2 ,
7170 bytes-1 byte graças a ovs
Experimente online!
fonte
Retina , 28 bytes
Experimente online! Explicação:
Repita enquanto o valor de entrada não estiver em branco.
Imprima o valor atual.
Execute o restante do script no valor. Em seguida, execute o resultado desse script como um script no valor.
Classifique os caracteres em ordem.
Selecione o primeiro caractere não vazio e produza um programa Retina que substitua a primeira
$\
ocorrência literal ( ) desse caractere ($&
) por um espaço (espaço à direita no código original).fonte
APL (Dyalog Unicode) ,
1811 bytesExperimente online!
usos
⎕io←1
; retorna uma matriz de strings (vetor de vetores de caracteres)fonte
∪
necessário?⍋∘⍋
:)05AB1E , 9 bytes
Experimente online!
Explicação
fonte
{ðKv=yð.;
era minha, legal.:
Substitui todos os caracteres em vez de.;
substitui o primeiro (ou seja, veja o que o seu 7-byter faz!
no caso de teste). Além disso, o desafio afirma explicitamente a exclusão de espaços, para que o seu 7-byter não funcione para entrada com vários espaços. PS: Boa resposta, Luis! +1 de mim. :).;
em primeiro lugar. Lembro-me literalmente de ter lutado com isso em 1º de maio no início deste ano, agora que você mencionou.Pitão,
171413 bytesExperimente aqui
fonte
sed
-rn
, 142143bytesExperimente online!
(nota: existem abas no programa)
Como sed não tem um conceito de ordem lexicográfica, tive que codificar o conjunto de caracteres ASCII imprimíveis e ocupar mais da metade do número de bytes.
O uso do sed 4.2.2 reduzirá o número de unidades em 2, pois isso permite rótulos sem nome. Experimente online!
-r
permite expressões regulares estendidas (golfista)-n
desativa a impressão implícita do espaço do padrão no final do programaO espaço do padrão começa com a entrada
:a
etiquetaa
, este é o loop principal do programap
imprimir o espaço padrão (nome sofisticado para o buffer)agora anexamos o conjunto de caracteres ASCII imprimíveis (excluindo o espaço)
s/$/ ABCDEFGHIJKLMNOPQRSTUVWXYZ/
anexa uma guia, atuando como delimitador de 1 byte, seguido pelo alfabeto maiúsculos<tab>
substituto (sed pode assumir qualquer caractere como delimitador; nesse caso, a guia é usada para evitar que um byte escape do/
)\w+$
o alfabeto maiúsculo que acabamos de acrescentar<tab>
com!"#$%\&'()*+,-./0123456789:;<=>?@&[\\]^_\`\L&{|}~<tab>
o restante dos caracteres, observe que\L&
é a versão em minúscula do alfabeto em maiúsculas:b
etiquetab
, remova caracteres do conjunto inicial que não estão presentes na entrada/(.).* \1/!
se o primeiro caractere do conjunto ASCII não estiver na entradas/ ./ /
removatb
repitab
até a substituição falhars/(.)(.*) \1.*/ \2/
substitua o primeiro caractere no conjunto ASCII presente na entrada por um espaço e remova o conjunto ASCIIta
recursofonte
sed
suficiente para salvar pelo menos 4 bytes: Experimente online!Ruby ,
60585547 bytesExperimente online!
fonte
a-b=[' ']
ea-b
para uma rápida -2 bytesR ,
140100 bytes-40 bytes Graças a Giuseppe!
Experimente online!
Uma solução que usa
outer
a magia de Giuseppe para funcionar corretamente é maior em 104 bytes. Inspirado por esta resposta .Experimente online!
fonte
rank
!Python 3 , 71 bytes
Experimente online!
-4 bytes graças a ovs
fonte
*bool({*a}-{" "})
vez deif{*a}-{" "}else[a]
RecursionError
?if/else
atalhos, mas*bool
não, então sim, recursionerror como OVS dissePython 2 ,
70696664 bytesExperimente online!
Thx por 2 bytes de ovs via usando em
S and f()
vez deif S:f()
fonte
...If there is a tie, replace the leftmost character...
regra, você pode corrigir isso comreplace(min(...),' ',1)
Gelatina , 8 bytes
Experimente online!
Idéia
A idéia básica é construir diretamente as colunas da saída desejada, em vez de manipular a string e retornar todos os resultados intermediários.
Começamos numerando os caracteres da sequência de entrada na ordem em que serão removidos. Por enquanto, fingiremos que os espaços também serão removidos.
Agora, criamos as colunas repetindo cada caractere por seu índice nesta enumeração.
Tudo o que resta é remover duplicatas, para dar conta dos espaços.
Código
fonte
Perl 5
-n
,3734 bytesEliminou três bytes com a ajuda do @TonHospel
Experimente online!
fonte
\Q
para o último caso de teste ... Eu também perdi isso nas primeiras vezes!say&&s/\Q$a/ / while($a)=sort/\S/g
. Também lida corretamente0
JavaScript,
676665 bytesPorque não jogo bêbado há algum tempo!
Experimente online
Agradecemos a DanielIndie por apontar 4 bytes redundantes que a cerveja incluía!
fonte
K (ngn / k) ,
2624 bytesExperimente online!
fonte
{@[x;y;:;" "]}
poderia ter sido@[;;:;" "]
. Qual versão do k você usa? Eu não estou familiarizado com estes:_ci _ic _dv
.C # (compilador interativo do Visual C #) , 129 bytes
Experimente online!
fonte
c!=32
pode serc>32
;c==32
pode serc<33
; e(char)999
pode ser'¡'
(ou qualquer outro caractere acima do intervalo unicode ASCII imprimível).while
parafor
e colocando ovar s=ReadLine()
es=s.Remove(i,1).Insert(i," ")
dentro dele (para que os dois pontos e vírgulas não sejam mais necessários).Perl 5 com
-nlF/\s|/
, 39 bytesIsso pode estar ultrapassando os limites das bandeiras do Perl, caso contrário, voltarei à resposta anterior.
Experimente online!
fonte
-n
bandeira: codegolf.stackexchange.com/questions/162161/make-a-word-icicle/...Haskell , 67 bytes
12 bytes salvos graças a Laikoni
Experimente online!
Este termina com um erro
Haskell ,
8379 bytesExperimente online!
Este termina com um erro
Haskell , 86 bytes
Experimente online!
Haskell ,
1009188 bytesExperimente online!
fonte
f s|(a,_:b)<-span(/=minimum(id=<<words s))s=putStrLn s>>f(a++' ':b)
Experimente online!id=<<
isso é bastante inteligenteJavaScript (Node.js) ,
8065 bytesExperimente online!
Não sabia
replace
pegar string como string, não regexpfonte
K4 ,
282018 bytesSolução:
Exemplo:
Explicação:
É a mesma coisa que a ngn está fazendo. Encontre índices que resultem em uma lista crescente, substitua-os um por um e
" "
, em seguida, use o distinto para remover qualquer linha duplicada:fonte
gcc de 32 bits,
6665 bytesObrigado por Jonathan Frech por -1 byte
fonte
*p==i?...:0;
provavelmente poderia ser*p-i?0:...;
.*p-1||(...)
tenha o mesmo comprimento)f(a)
compila, comoa
deve ser do tipochar*
, mas presumo que isso tenha algo a ver com o uso do gcc de 32 bits.char*p,i;f(long long a){for(i=31;++i;)for(p=a;*p;)*p==i?puts(a),*p=32:++p;}
em tio (64 bits) pode explicar comof(a)
funcionaMATLAB, 74 bytes
Isso usa a forma de 2 saídas da função max () para recuperar o menor caractere e seu índice, depois de transformar a sequência em zero nos espaços e 256 em caracteres para os caracteres imprimíveis.
fonte
Lisp comum ,
240228224 bytesExperimente online!
Esta é a minha primeira vez postando.
Estou no processo de aprender cocô, então tenho certeza que alguém pode pensar em algo mais curto que isso.
fonte
APL (Dyalog Unicode) , SBCS de 39 bytes
Experimente online!
Dfn.
Quão?
fonte
V , 27 bytes
Experimente online!
Hexdump:
fonte
PowerShell ,
10399 bytesExperimente online!
Leva a entrada como uma string para
$a
. Em seguida, passamos de2
para$a.length
(ou seja, o número apropriado de vezes na vertical necessário para remover todos os caracteres, exceto um). A cada iteração, produzimos a string atual e salvamos convenientemente$x
ao mesmo tempo. Nós então construir um novo[regex]
objecto,$p
attern consistindo dos restantes caracteres em$a
que são-n
ote
qua a espaço,sort
ed, em seguida, o0
th um destes.Em seguida, definimos
$a
igual a uma nova string do objeto regex com o.Replace
método para substituir na string$x
, a$p
attern, por um espaço" "
, mas apenas a1
st corresponde. Sim, essa sintaxe é estranha.As strings são deixadas no pipeline e implícitas
Write-Output
nos dão uma nova linha entre elas de graça, mais uma nova linha à direita.fonte
Java (JDK 10) , 140 bytes
Experimente online!
Tecnicamente, há uma linha em branco, mas não está vazia .
fonte
Stax , 9 bytes
Execute e depure
Este é o mesmo algoritmo que a solução 05AB1E de Luis
fonte
MATL ,
1716 bytesExperimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Excel VBA, 167 bytes
Uma função de janela imediata anônima do VBE que leva a entrada do intervalo
[A1]
e sai para a janela imediata do VBE.Sem Golfe e Comentado
fonte
Japt ,
3218 bytesEconomizou 14 bytes graças a Shaggy!
Experimente online!
fonte