Chuva de alfabeto
A tarefa:
A premissa básica é imprimir a sequência de entrada e depois repetir cada caractere verticalmente, com base em sua posição (indexada 0) no alfabeto (que não diferencia maiúsculas de minúsculas) A-Z
. A
está no local 0, então não se repete, e
está na posição 4, se repete 4 vezes, P
está na posição 15, se repete 15 vezes, !
não está no A-Z
modo se repete 0 vezes, etc.
Para maior clareza, qualquer coisa que esteja fora do intervalo B-Zb-z
, por exemplo, dígitos ou caracteres especiais, não será repetida e, portanto, aparecerá apenas na primeira linha.
Esse é o código-golfe , então a solução mais curta em cada idioma é a vencedora.
Entrada:
- A entrada estará no conjunto de caracteres ASCII imprimível padrão, de 32
~
. - A sequência de entrada terá 1 caractere ou mais.
- Não haverá espaços em branco à esquerda ou à direita.
- Você pode usar a entrada como uma string (
"hello"
) ou uma lista de caracteres (["h", "e", "l", "l", "o"]
)
Exemplos:
Entrada de aaaa
dá:
aaaa
Entrada de abcda
dá:
abcda
bcd
cd
d
Entrada de Programming Puzzles & Code Golf!
, dá:
Programming Puzzles & Code Golf!
Progr mming Puzzles Code Golf
Progr mming Puzzles Code Golf
Progr mming Puzzles ode Golf
Progr mming Puzzles o e Golf
Progr mming Puzzl s o Golf
Progr mming Puzzl s o Gol
Pro r mmin Puzzl s o ol
Pro r mmin Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzz s o o
Pro r n Puzz s o o
Pro r Puzz s o o
Pr r Puzz s
r r uzz s
r r uzz s
uzz s
uzz
uzz
zz
zz
zz
zz
zz
Entrada de ~|[abc<0>cba]|~
, dá:
~|[abc<0>cba]|~
bc cb
c c
Notas:
- lacunas padrão se aplicam
- output pode ser uma lista de strings, mas:
- novas linhas finais não são permitidas (uma única
\n
linha final é aceitável) - saída pode ser uma lista de listas de caracteres, desde que pareça chover caracteres
- nenhuma nova linha principal
- para nossos usuários nórdicos que têm algumas letras extras no alfabeto "AZ", sinta-se à vontade para apoiá-los, mas isso não faz parte do desafio
\n
aceitável?Respostas:
Código da máquina 6502 (C64), 113 bytes
Demonstração online
Uso:
sys49152,"[string]"
por exemplosys49152,"Programming Puzzles & Code Golf!"
.Importante: Se o programa foi carregado do disco (como na demonstração online), emita um
new
comando primeiro! Isso é necessário porque o carregamento de um programa de máquina elimina alguns ponteiros C64 BASIC.Nota: Por padrão, o C64 está em um modo sem letras minúsculas - para poder digitar uma sequência de maiúsculas e minúsculas, mude primeiro para o modo minúsculo pressionando
SHIFT
+CBM
.Explicação
Aqui está uma lista de desmontagem comentada:
fonte
05AB1E ,
1312 bytesExperimente online!
Explicação
fonte
Ask
para elePitão,
12109 bytesSuíte de teste.
Explicação:
12 bytes:
(com nova linha à direita)
Suíte de teste.
Explicação:
fonte
j
Python 3 , 83 bytes
Experimente online! Leva uma lista de caracteres. Retorna uma lista de listas de caracteres.
Python 2 , 90 bytes
Experimente online! Toma uma corda. Retorna uma string.
fonte
Mathematica,
11589 bytesToma como
input
uma lista de caracteres[{"a", "b", "c", "d", "a"}]
e gera uma lista de listas de caracteresExperimente online!
-26 bytes de Misha Lavrov
-5 bytes do usuário202729
mas se você quiser ver a saída como está no caso de teste, tente o código (128 bytes)
Experimente online!
fonte
∞
(3 bytes) ->\[Infinity]
(11 bytes)).\[Infinity]
(11 bytes) pode ser substituído porInfinity
(8 bytes) ou\:221e
(6 bytes). O último é a representação padrão de caracteres especiais sem nomes. (embora não seja a parte principal)Infinity
completamente. A parte problemática éIf[(d=Min@Position[Alphabet[],If[UpperCaseQ@#,ToLowerCase@#,#]])==∞,1,d]
e podemos mudar isso paraMax@Position[Alphabet[]/."a"->#,#|ToLowerCase@#]
. (Procurando na lista{#,b,c,d,...,y,z}
, que está garantido para encontrar#
pelo menos uma vez.)Dyalog APL ,
2722 bytes5 bytes salvos graças a @ Adám
Experimente online!
Quão?
⍴¨⍨
- modele cada caractere para o comprimento de1⌈
- pelo menos um ou⎕A⍳819⌶⍨∘1
- índice do caractere maiúsculo em alfabeto27|
- módulo 27↑
- achatar para uma matriz⍉
- e transporfonte
⍉∘↑⊢⍴¨⍨1⌈27|⎕A⍳819⌶⍨∘1
Carvão , 12 bytes
Experimente online!
-3 graças a Neil .
fonte
Python,
105103 bytes2 bytes salvos graças a @TFeld
Experimente online!
fonte
Python 2 ,
1111069998978793 bytesExperimente online!
fonte
while
pode ser substituído porexec
para salvar alguns bytes,i
pode começar com 65 para salvar mais um para atingir 87 bytes #z
ouZ
.exec
mudança ...C # (.NET Core) , 162 bytes
Experimente online!
fonte
using System.Linq;
Infelizmente, a importação necessária é obrigatória para adicionar à contagem de bytes (ou você deve alterarMax
paraSystem.Linq.Max
eSelect
paraSystem.Linq.Max
, o que seria maior do que apenasusing System.Linq;
uma vez.) Novamente, seja bem-vindo e aproveite a sua estadia. Ah, e vejo @IanH. já mencionado Dicas para jogar golfe em C #. Dicas para jogar golfe em <todos os idiomas> também podem ser interessantes para ler.Bash,
78,7671 bytesDependendo do agrupamento (padrão LC_ALL), você pode economizar mais alguns bytes
Experimente Online
fonte
Perl 5 , 43 bytes
Código de 41 bytes + 2 para
-nl
.Experimente online!
fonte
s/["-$c]/ /gi
e-l
não é necessárioJavaScript (ES6),
877876 bytes-9 bytes graças a @RickHitchcock .
-2 bytes graças a @Neil .
Recebe a entrada como uma sequência e retorna com uma nova linha à direita.
Casos de teste
Mostrar snippet de código
fonte
f=(s,i=10)=>s.trim()&&s+'newline'+f(s.replace(/./g,c=>parseInt(c,36)-i?c:" "),i+1)
s
é realmente muito boa.parseInt(c,36)-i>0
parseInt(c,36)>i
para salvar 2 bytes?R,
118114 bytesObrigado a @ Giuseppe por esses 4 bytes de desconto
Experimente online!
Breve explicação:
fonte
a
houver todos os espaços, isso não imprimirá nada ... mas você pode alterar awhile
condição para agrepl()|!F
qual ainda é um byte menor que a resposta original.R ,
125123 bytesSuperado por plannapus
Experimente online!
Imprime no stdout com uma única linha nova à direita e lê a partir de
stdin()
.Vamos dividir:
Resposta alternativa, 106 bytes
Experimente online!
Função; imprime em stdout, mas é basicamente minha resposta acima portada para aceitar uma lista de caracteres em vez de dividir a string, então eu sinto que está "trapaceando". Além disso, a abordagem do plannapus com o regex é bastante interessante!
fonte
Oitava / MATLAB,
7466 bytesExperimente online!
fonte
Japonês ,
15141110 bytesPrimeira chance de brincar com os novos métodos de preenchimento de cordas de Japt, para que ainda haja espaço para melhorias.
Tente
Explicação
Entrada implícita da sequência
U
.Passe cada coluna
U
através de uma função, ondeZ
está o elemento atual (ou letra, neste caso).Converta
Z
em maiúsculas (u
), obtenha seu código (c
) e subtraia (u
) 64 (I
).Almofada o início de
Z
si mesmo até atingir esse comprimento.Alternativa
Tente
fonte
ùZ
parap
salvar um b ... deixap
( pode haver 1 no histórico de edições), masù
venci no final.Haskell ,
137136127119 bytesExperimente online!
Muito longo, mas não consigo pensar em nenhuma maneira de reduzi-lo ainda mais.
Sinto que deve haver um pouco mais do que a sintaxe if-then, mas não a vejo.EDIT: Obrigado @streetster por me ajudar a raspar um byte! Não usei
toUpper
no início por causa do custo de importação,Data.Char
mas esqueci que ele também forneceord
um valor muito menor do quefromEnum
EDIT 2: Obrigado ao @Laikoni por remover outros 6 bytes e identificar um bug que eu corrigi agora. Eu usei 26 em vez de 25 porque esqueci que as matrizes Haskell são inclusivas. Então notei que eu poderia usar em
last
vez dohead
que me permitiria usar em0:
vez de++[0]
.EDIT 3: Mais uma vez obrigado Laikoni por esses 8 bytes. Na verdade, eu tinha me esquecido daquele espaço. Por alguma razão, o Sublime Text sai sem ele e eu esqueci de removê-lo. Eu não sabia que listas de linhas eram permitidas, eu deveria ter lido as regras com mais cuidado.
fonte
if i>p c then ' ' else c
pode ser reduzido paralast$c:[' '|i>p c]
.[k |
e o retorno de uma lista de linhas é permitido, portanto você não precisa dounlines
. Finalmente, você pode estar interessado em nossa sala de bate-papo em Haskell .Excel VBA, 110 bytes
Janela Imediata do VBE Anônimo Função que recebe a entrada do tipo esperado
Variant\String
do intervalo[A1]
e a utiliza para fazer chover o alfabeto na janela imediata do VBE.E / S de amostra
fonte
?A1:...
[]
indica que a cadeia contida deve ser avaliada para um objeto em / em / como uma pasta de trabalho, a[A1]
chamada não pode ser reduzida paraA1
- pois isso não será necessário e imprimirá a entrada inicial do intervalo[A1]
; em vez isso só vai deixar uma linha em branco e todas as linhas seguintes serão impressosPHP,
69 78 7785 + 1 bytesrequer PHP <7. Execute como pipe
-nR
ou experimente online .fonte
$c=A;!$c[1];$c++
. Agradável! Infelizmenteextraneous trailing newlines are not allowed (single \n on final line is acceptable)
. Portanto, falha em todas as strings que não contêmz
.Bash + sed, 37
Experimente online .
fonte
C (gcc) , 189 bytes
Experimente online!
fonte
puts("");
vez deputchar(10)
Ruby,
706774 bytesGraças a @TuukkaX por apontar que algumas parênteses podem ser eliminadas (-3 bytes)
Infelizmente, tive que adicionar 7 bytes porque a versão original falhou ao manipular "z".
Chamando:
fonte
Oracle SQL, 186 bytes
Assume que a string estará em uma tabela
t
na colunav
:SQL Fiddle
Configuração do esquema do Oracle 11g R2 :
Consulta 1 :
Resultados :
fonte
Gelatina , 15 bytes
Experimente online!
fonte
Haskell , 98 bytes
Experimente online!
Exemplo de utilização:
f "[Abc]"
produz uma lista de linhas:["[Abc]"," bc "," c "]
. UseputStr.unlines.f $ "[Abc]"
para impressões bonitas:Em parte inspirado peloNow, baseado diretamente na resposta de Haskell do usuário1472751 .Abordagem anterior (
10099 bytes)Experimente online!
fonte
PowerShell ,
122127 bytesExperimente online!
Breve agradecimento à forma como o PowerShell pode transmitir dinamicamente entre
[char]
e[int]
, mas muito tempo por causa da remoção de espaço em branco estranho e do cálculo da saída de um espaço ou do caractere.Correção de bug graças ao beatcracker.
fonte
~|[abc<0>cba]|~
caso de teste. Tente isto:param($a)$a;(1..25|%{$i=$_;(-join([char[]]$a|%{(' ',$_)[$_-match'[a-z]'-and[math]::Max(0,($_-bor32)-96-$i)]})).TrimEnd()})-ne''
Java 8,
151147144143139 bytesExplicação:
Experimente aqui.
fonte
q ,
4237 bytes-5 graças ao streetster!
solução antiga + explicação:
fonte
{(+)max[m]$(m:1+mod[.Q.a?(_)x]26)#'x}
por 37 anos, não consigo lembrar como resolvi ao criar a pergunta, provavelmente muito parecida!_
, digiteilower
o interpretador q e conseguik){$[~t&77h>t:abs@@x;.z.s'x;19<t;.z.s@. x;~t in 10 11h;'`type;_x]}
. por isso, dando a minha resposta em q hahaSOGL V0.12 ,
1211 bytesExperimente aqui!
Explicação:
fonte