No menor número de bytes possível, escreva um programa ou função que produz o seguinte:
Abcdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz
abcdefghijKlmnopqrstuvwxyz
abcdefghijkLmnopqrstuvwxyz
abcdefghijklMnopqrstuvwxyz
abcdefghijklmNopqrstuvwxyz
abcdefghijklmnOpqrstuvwxyz
abcdefghijklmnoPqrstuvwxyz
abcdefghijklmnopQrstuvwxyz
abcdefghijklmnopqRstuvwxyz
abcdefghijklmnopqrStuvwxyz
abcdefghijklmnopqrsTuvwxyz
abcdefghijklmnopqrstUvwxyz
abcdefghijklmnopqrstuVwxyz
abcdefghijklmnopqrstuvWxyz
abcdefghijklmnopqrstuvwXyz
abcdefghijklmnopqrstuvwxYz
abcdefghijklmnopqrstuvwxyZ
abcdefghijklmnopqrstuvwxYz
abcdefghijklmnopqrstuvwXyz
abcdefghijklmnopqrstuvWxyz
abcdefghijklmnopqrstuVwxyz
abcdefghijklmnopqrstUvwxyz
abcdefghijklmnopqrsTuvwxyz
abcdefghijklmnopqrStuvwxyz
abcdefghijklmnopqRstuvwxyz
abcdefghijklmnopQrstuvwxyz
abcdefghijklmnoPqrstuvwxyz
abcdefghijklmnOpqrstuvwxyz
abcdefghijklmNopqrstuvwxyz
abcdefghijklMnopqrstuvwxyz
abcdefghijkLmnopqrstuvwxyz
abcdefghijKlmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
Abcdefghijklmnopqrstuvwxyz
Uma nova linha à direita é permitida. Você pode encontrar uma implementação de Python não destruída de referência aqui .
code-golf
kolmogorov-complexity
absinto
fonte
fonte
Respostas:
Pitão, 12 bytes
Demonstração.
Em Pyth,
G
é o alfabeto em minúsculas.+Gt_G
éabcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba
o caractere que precisa ser maiúsculo em cada linha.V
configura um loop for sobre essa string, comN
como a variável loop.No corpo,
XGNrN1
é uma função de conversão de string.X
traduzG
, o alfabeto, substituindoN
porrN1
, a versão maiúscula deN
.r ... 1
é a função maiúscula. Isso fornece a saída desejada.fonte
C, 73
Às vezes, a melhor abordagem é a melhor: imprima todos os caracteres, um por um. isso supera muitas línguas que realmente não deveria.
explicação
fonte
Python 2, 69 bytes
Bonito e simples, eu acho.
fonte
Brainfuck (8 bits), 231 bytes
Ok, então nunca será o mais curto, mas é a participação que conta ... certo ?!
Experimente aqui (certifique-se de marcar 'Memória dinâmica')
fonte
>
desloca uma célula para a direita, por exemplo.Binário do MS-DOS, 61
Esse código não precisa ser compilado; ele será executado no MS-DOS se você o gravar em um arquivo chamado wave.com. O código em hexadecimal:
Ou, se você preferir algo mais legível, veja como produzi-lo usando o debug.exe (a linha vazia após o código é importante):
fonte
Ruby:
71686563 caracteresExemplo de execução:
fonte
puts f=(e=*?a..?z).map{|c|(e*"").tr c,c.upcase},f[0,25].reverse
Matlab,
605854 bytesCom agradecimentos a Dennis Jaheruddin por me salvar 4 bytes.
fonte
char(x)
por[x '']
e salvar um byte.end-1
é uma maneira bastante detalhada de escrever 25![x '']
truque não é nada usual para mim. Mas agora eu me lembro de vê-lo em um de seus anwers :-)SWI-Prolog, 136 bytes
Abusando do retrocesso para repetir ...
fonte
Haskell
1008988 bytesA função auxiliar lambda
\(h,c:t)
pega um par de listas de valores ascii e concatena ambos, mas com o primeiro valor da segunda lista em maiúscula. A função principal divide o alfabeto em minúsculas (fornecido em ascii97..122
) em todas as posições0,..,24,25,24,..,0
e chama o lambda em cada etapa. Antes de imprimir, cada valor é transformado no caractere correspondente.fonte
Scala
110109 caracteresfonte
foreach println
paramkString("\n")
, e mostrar uma string como valor de retorno em vez de imprimi-lo para a telaSQL (postgreSQL),
107101Generate são séries de -25 a 25 e usa o valor absoluto para substituir caracteres por sua versão em maiúscula. Obrigado ao manatwork pela dica sobre o operador @.
fonte
@
operador?Haskell, 81 bytes
Contando bytes da maneira que o @nimi fazia;
f
é uma ação de E / S que imprime a saída desejada.fonte
Pitão -
1817 bytesPrimeira passagem, provavelmente pode ser feita muito mais curta. Usa
X
para substituir er1
capitalizar.Experimente online aqui .
fonte
MATLAB - 58 bytes
Semelhante à solução de Luis Mendo , mas usando as habilidades de transmissão de
bsxfun
.Aproveitando que em ASCII, a diferença entre um caractere maiúsculo e minúsculo está exatamente a 32 valores um do outro, primeiro geramos letras minúsculas dos códigos ASCII 97 a 122, que são os códigos ASCII de z minúsculo a para minúsculo respeitosamente, depois crie uma matriz de 51 linhas que contém os 26 códigos ASCII de 97 a 122. Portanto, cada linha dessa matriz contém uma sequência numérica de valores de 97 a 122. Em seguida, criamos outra matriz em que cada iésima linha dessa matriz contém um 32 na i- ésima coluna. As primeiras 26 linhas desta matriz possuem esse padrão, que é essencialmente a matriz de identidade multiplicada por 32. A função
eye
cria uma matriz de identidade para você. As últimas 25 linhas desta matriz são a matriz de identidade em escala girada 90 graus.Ao pegar essa matriz de identidade ponderada personalizada e subtraí-la com a primeira matriz, e depois converter os códigos ASCII resultantes em caracteres, é produzida a sequência desejada "Chapéu mexicano".
Exemplo de execução
Você também pode executar este exemplo usando o ambiente Octave on-line da IDEone. O Octave é essencialmente o MATLAB, mas é gratuito: http://ideone.com/PknMe0
fonte
rot90
-- bem pensado!J,
3123 bytes8 bytes salvos graças a @Mauris.
Experimente online aqui.
fonte
u:|:(97+i.26)-32*=|i:25
(mônada=
é realmente útil aqui!)=
aqui. É muito bom!Perl, 51 bytes
Código de 50 bytes + parâmetro de linha de comando de 1 byte
Pode ser usado da seguinte maneira:
Ou online aqui (observe que eu tive que adicionar
,"\n"
isso, pois não consegui adicionar o argumento -l arg).Método muito mais longo Antes da versão abreviada acima, tentei um método diferente que acabou sendo bastante robusto. Deixei abaixo de qualquer maneira para referência.
Código de 86 bytes + linha de comando 1 byte arg
Primeiro Perl que eu já joguei corretamente, então imagino que há muito o que fazer com isso - sugira melhorias!
Pode ser usado da seguinte maneira:
Ou online aqui (observe que eu tive que adicionar. "\ N", pois não consegui adicionar o -l arg).
Explicação
A abordagem geral é usar a substituição de regex para fazer todo o trabalho duro. Começamos com:
Isso corresponde
(([A-Z])|0)(\D)
e é substituído por\U\3
(\ U muda para maiúsculas) para fornecer:A partir deste ponto, continuamos a corresponder à mesma regex e a substituir por
\L\2\U\3
:Agora, a segunda alternância da regex corresponde
(.)((?2))(1)
(que é igual a(.)([A-Z])(1)
). Substituímos por\U\4\6\L\5
para dar:Isso continua a corresponder e substituir até chegarmos a:
e não há mais correspondências regex.
Em cada ponto do loop, retiramos o '1' e imprimimos.
fonte
PHP,
877169 bytesNão é o mais curto, mas funciona como pretendido.
Obrigado a @manatwork por algumas dicas para reduzir muito o tamanho.
E, graças ao @Blackhole , o tamanho foi reduzido em 2 bytes.
Não é exatamente bonito, mas funciona.
fonte
join()
o primeiro parâmetro.$i<25?$i:25-($i-25)
→25-abs($i-25)
for(;$i<51;){$L=range(a,z);$L[25-abs($i++-25)]^=" ";echo join($L),"↵";}
(Apenas enrole a linha onde eu usei “↵” no código.)\n
estava lá. A inicialização de$i
foi deixada como um acidente. E muito obrigado pela25-abs($i-25)
. Eu não chegaria lá sozinho.for
loop pode ser otimizado:for(;$L=range(a,z),$L[25-abs($i++-25)]^=' ',$i<52;)echo join($L).'↵';
(-2 bytes).PowerShell 3.0, 82 bytes
fonte
Arquitetura do tipo T21 do nó TIS -
216215 bytesAssista em ação aqui! Há um
DOWN
vídeo em que eu joguei mais tardeANY
, mas é funcionalmente idêntico.Esta linguagem não tem conceito de strings ou caracteres, então devo salientar que estou usando valores ASCII, ou seja, a saída começa
97, 66, 67
...88, 89, 90, 10, 65, 98
...Aqui está o código no formato dos dados salvos do TIS-100, para fins de pontuação:
Explicação
fonte
JavaScript ES6, 121 bytes
Isso é muito longo, porque faz mais sentido codificar o alfabeto do que usar o absurdamente longo
String.fromCharCode
para gerar os caracteres. Teste abaixo com o snippet Stack, que usa o ES5 com melhor suporte e abaixo.fonte
CJam, 23 bytes
Experimente online no intérprete CJam .
Como funciona
fonte
R,
7870Melhorado por @MickyT
fonte
M=replicate(26,c(letters,"\n"))
ao invés de uma matriz. Ele economizará alguns bytes #write
: tio.run/##K/r/…Montagem Linux, 289
Infelizmente, não é competitivo com idiomas de alto nível e provavelmente está longe de ser o ideal, mas bastante direto. Execute-o usando
nasm -f elf64 -o a.o wave.S; ld -s -o a a.o; ./a
(o binário resultante tem apenas 568 bytes):fonte
montagem x86 para DOS, 41 bytes compilados
Binário:
Código-fonte, salve como "wave.asm", compile com "nasm -f bin -o wave.com wave.asm" e execute com "dosbox wave.com"
fonte
C #,
140139135132Expandido
Guardou 1 byte graças a @ Gunther34567 usando um ternário em vez de
if
Salvo 4 bytes, aninhando esse ternário dentro do loop e movendo o alfabeto para fora do loop
Economizou 3 bytes combinando declarações inteiras graças a @eatonphil
fonte
if(i==25)d=-1;
parad=i==25?-1:d;
var d=1
paraint d=1,i
.Bash:
7666 caracteresExemplo de execução:
fonte
printf
chamada. Rejeitei a edição , para que você possa testá-la.Sed:
135119116111 caracteres(Código de 109 caracteres + opção de linha de comando de 1 caractere + entrada de 1 caractere.)
Exemplo de execução:
fonte
Javascript (ES6), 113 bytes
110 bytes
102 bytes
A velha escola é imbatível, a menos que tenhamos operador / função / gerador de faixa / o que quer que seja em js
100 bytes
Infelizmente o Math.abs é muito longo
9694 bytesEmbora eu esteja sendo votado sem explicação, continuo minha luta
Podemos remover alguns bytes reorganizando as instruções do loop:
fonte
Perl -
9564 bytesAproveita o fato para
\u
que o próximo caractere seja impresso em maiúsculas no Perl.Obrigado ao manatwork por salvar 31 bytes e corrigi-lo (meu código anterior não funcionou.)
fonte
\u
parece funcionar em um exemplo separado, mas não no seu código. :( Todos os caracteres ficaram em letras minúsculas. Você poderia nos mostrar como seu código deve ser executado? (Eu o coloquei em um arquivo e o chamei deperl
passar o nome do arquivo, sem opções.) A propósito, eu uso operl
5.20.2.\u
é seguido pela letra para transformar na mesma string literal:for$c(0..50){$n=1;print map{++$n==27-abs$c-25?"\u$_":$_}a..z,$/}
q (37 caracteres)
Um primeiro corte
fonte
@[.Q.a;;upper]@'x,1_reverse x:til 26
por 36 bytes . Ou@[.Q.a;;.q.upper]@'x,1_|x:!26
para 29 bytes em K4.