Imprimir uma onda do alfabeto


37

Você deve imprimir este texto exato:

ABABABABABABABABABABABABAB
BCBCBCBCBCBCBCBCBCBCBCBCBC
CDCDCDCDCDCDCDCDCDCDCDCDCD
DEDEDEDEDEDEDEDEDEDEDEDEDE
EFEFEFEFEFEFEFEFEFEFEFEFEF
FGFGFGFGFGFGFGFGFGFGFGFGFG
GHGHGHGHGHGHGHGHGHGHGHGHGH
HIHIHIHIHIHIHIHIHIHIHIHIHI
IJIJIJIJIJIJIJIJIJIJIJIJIJ
JKJKJKJKJKJKJKJKJKJKJKJKJK
KLKLKLKLKLKLKLKLKLKLKLKLKL
LMLMLMLMLMLMLMLMLMLMLMLMLM
MNMNMNMNMNMNMNMNMNMNMNMNMN
NONONONONONONONONONONONONO
OPOPOPOPOPOPOPOPOPOPOPOPOP
PQPQPQPQPQPQPQPQPQPQPQPQPQ
QRQRQRQRQRQRQRQRQRQRQRQRQR
RSRSRSRSRSRSRSRSRSRSRSRSRS
STSTSTSTSTSTSTSTSTSTSTSTST
TUTUTUTUTUTUTUTUTUTUTUTUTU
UVUVUVUVUVUVUVUVUVUVUVUVUV
VWVWVWVWVWVWVWVWVWVWVWVWVW
WXWXWXWXWXWXWXWXWXWXWXWXWX
XYXYXYXYXYXYXYXYXYXYXYXYXY
YZYZYZYZYZYZYZYZYZYZYZYZYZ
ZAZAZAZAZAZAZAZAZAZAZAZAZA

Especificações

  • Você pode imprimir todas as letras minúsculas em vez de todas as maiúsculas. No entanto, o caso deve ser consistente em toda a saída.
  • Você pode imprimir um avanço de linha à direita extra.

Pontuação

Como essa é uma onda do alfabeto que flutua em pequena extensão, seu código também deve ser pequeno em termos de contagem de bytes. De fato, o menor código em termos de contagem de bytes vence.


39
Sério, outro desafio do alfabeto?
Nathan Merrill

6
@NathanMerrill Por mais numerosos que sejam, não acho que sejam dignos de votos negativos. (Eu não significa que você downvoted, estou apenas dizendo.)
Conor O'Brien

14
Enquanto os padrões são suficientemente diferentes, eu não acho que isso importa se usamos o alfabeto, dígitos decimais, asteriscos e sublinhado, etc.
Dennis

9
@Dennis, independentemente dos caracteres utilizados, é esse tipo de desafio "padrão" que está sendo usado em excesso, IMO. Não acho que seja offtopic, mas gostaria de um pouco de ar fresco.
Nathan Merrill

13
É claro que não há mais demanda para os desafios do alfabeto - apenas 39 pessoas atendidas nas primeiras 15 horas ...
Trichoplax

Respostas:


37

C, 60 bytes

main(i){for(;i<703;)putchar(i++%27?65+(i/27+i%27%2)%26:10);}

10
Isso é genialidade.
Leaky Nun

É bom ver C em um desafio de código de golfe.
Micheal Johnson

@MichealJohnson " veja C ", IC o que você fez lá. ;) E eu concordo com a Leaky Nun . Às vezes me pergunto como as pessoas apresentam algumas dessas respostas engenhosas.
Kevin Cruijssen 02/09

@KevinCruijssen Isso foi sem querer lol.
Micheal Johnson

17

Brainfuck, 104 bytes

>+[+[<]>>+<+]><<+++++[>+++++>>++<<<-]>[-<+++++++++++++[->>.+.-<<]>>>.<+<]<----[>+<----]>++>>+++[-<.<.>>]

11
Praticamente do mesmo tamanho do Hello World. Impressionante!
Phyrfox

3
@phyrfox Na verdade ...
SP3000

14

Convexo, 10 bytes

U_(+]D*zN*

Experimente online!

U               Predefined Variable: "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 _(+            Push a copy with the 'A at the end.
    ]           Add both strings to an array.
     D*         Repeat array 13 times. D defaults to 13.
       z        Transpose.
        N*      Join by newlines. N defaults to "\n"


8

Vim, 85 83 bytes

:h<_<cr><cr><cr>YZZP:s/./\0\r/g<cr><c+v>ggy25Pqqlxj:let @a='xkPjj'<cr>25@akia<esc>25klq11@qh<ctrl+v>25jylpl<c+v>25jdGdd

Eu sei que isso pode ser mais jogado, mas minha cabeça dói, então eu tenho que parar por enquanto.

<cr>é a tecla enter, <c+v>é ctrl + v e <esc>é a tecla de escape. Todos foram contados como um byte.

Eu gravei um gif disso, mas ele estragou tudo. O vídeo está bom: http://recordit.co/ldLKvho9Gi


8

Ruby, 42 39 38 37 bytes

-3 bytes graças a @ user81655
-1 byte graças a @manatwork
-1 byte graças a @NotthatCharles

?A.upto(?Z){|a|puts (a+a.next[0])*13}

Veja em repl.it: https://repl.it/CmOJ


7

Cheddar, 48 bytes

print(65|>90).map(l->@"[l,l>89?65:l+1]*13).vfuse

Cheddar é bom com cordas: D

Experimente online!

Explicação

print
  (65|>90)            // Range from 65 (A) to 90 (Z)
  .map(l->            // Map through range
    @"                // Convert following array of char codes to string
      [l,             // The character 
       l>89?65:l+1]   // See below for explanation
      *13             // Repeat 13 times
  ).vfuse             // Vertically fuse

O que l>89?65:l+1faz? Bem, 89é o código de char para Y. Basicamente, l>89está verificando se a carta está Z, isso significa que devemos retornar A. Se l>89é falso. Vou voltar l+1, o próximo char


Eu pensei que você pode inserir @"entre eles.
Freira vazada

Isso não usa uma função de retorno?
Conor O'Brien

@ ConorO'Brien, sim?
Downgoat 9/08/16


@ ConorO'Brien oh, não vi na especificação do desafio. vai corrigir
Downgoat 9/08/16

7

Gelatina , 10 bytes

26ḶḂØAṙZj⁷

Experimente online!

Como funciona

26ḶḂØAṙZj⁷  Main link. No arguments.

26Ḷ         Yield [0, ..., 25].
   Ḃ        Bit; compute the parity of each intger.
    ØAṙ     Rotate the alphabet by these amounts.
       Z    Zip; transpose rows and columns.
        j⁷  Join, separating by linefeeds.

Não Yexistia naquela época? Também parabéns por 100k rep !!
Erik the Outgolfer

Obrigado! Eu verifiquei e, infelizmente, Yfui adicionado dois dias depois que o desafio foi lançado.
Dennis

Porque você poderia ter jogado ainda mais 26ḶḂØAṙZY. Mas, como está agora, ainda é bom.
Erik the Outgolfer

7

Haskell, 60 58 bytes

mapM putStrLn[[0..12]>>[a,b]|a:b:_<-scanr(:)"A"['A'..'Z']]

Começando com "A" scanr(:)cria a lista a a partir dos caracteres da ['A'..'Z']direita. (-> ["ABCDE...A", "BCDEF..A", ..., "XYZA", "YZA", "ZA", "A"]). (a:b:_)combina os dois primeiros caracteres de cada sublista (com pelo menos dois caracteres) e faz 13 cópias.


Considerando alguns truques usados ​​por outros idiomas regularmente, considero justo não incluir a impressão real. Nesse caso, você pode substituí-lo por "(++" \ n ") = <<" e salvar 2 bytes. Possivelmente mais.
MarLinn

@MarLinn: Não, acho que não. Os idiomas para golfe são projetados com a impressão implícita em mente e a maioria das outras respostas possui algum tipo de comando de impressão. Btw, unlinesé ainda mais curto que (++"\n")=<<.
nimi

7

PowerShell, 49 43 bytes

Remix de TimmyD:

65..89|%{-join[char[]]($_,++$_)*13};"ZA"*13

era, 49 bytes:

0..25|%{(""+[char]($_+++65)+[char]($_%26+65))*13}

Saída de exemplo


6

Python 2, 70 68 54 bytes

Solução baseada em lista:

L=map(chr,range(65,91))
for i in range(-26,0):print(L[i]+L[i+1])*13

Mas por que criar uma lista? Obrigado LeakyNun:

for i in range(26):print(chr(i+65)+chr(-~i%26+65))*13

6

R, 72 67 60 56 bytes

write(matrix(LETTERS[c(1:26,2:26,1)],26,26,T),"",26,,"")

Graças a @ Giuseppe pelos 4 bytes extras de desconto!

repSolução antiga com 60 bytes:

for(i in 1:26)cat(rep(LETTERS[c(i,i%%26+1)],13),"\n",sep="")

Veja aqui em um intérprete online. Obrigado a @ user5957401 pelos 7 bytes extras de desconto!

Solução antiga baseada em matriz em 72 bytes:

for(i in 1:26)cat(matrix(LETTERS[c(1:26,2:26,1)],26,26)[i,],"\n",sep="")

Veja aqui em um intérprete online.


11
se você alterar o indext para i in 1:26e, em seguida, a seleção de letras para LETTERS[c(i,i%%26+1)]você pode ser descartada como 6 ou 7 bytes
user5957401

11
@ user5957401 arf Eu estava teimosamente fazendo (i+1)%%26que não me ocorreu fazer o contrário! Obrigado!
plannapus

11
56 bytes , utilizando matrizes de novo :)
Giuseppe

5

MATL , 13 bytes

1Y2tn:!to~!+)

Experimente online!

1Y2    % Predefined string literal: 'AB···Z'
tn:    % Duplicate, number of elements, range: gives [1, 2, ···, 26]
!      % Transpose into a column vector
to~!   % Duplicate and transform into [0, 1, 0, 1, ···, 1] using modulo 2
+      % Addition with broadcast. Gives 2D numeric array
)      % Index (modularly) into string. Implicitly display.

5

Água-viva , 26 bytes

P
+'A
~
| S
+$ r2
 ,'
r'

Observe os caracteres não imprimíveis à direita nas duas últimas linhas. Experimente online!

Explicação

Essa é basicamente uma abordagem de manipulação aritmética: faça uma grade 26 × 26 com padrão 0-1 alternado, adicione o índice de cada linha a cada elemento da linha, reduza o mod 26 e adicione o valor ASCII de A. Os caracteres em Jellyfish são apenas números com uma bandeira especial e toda aritmética funciona neles conforme o esperado.

De baixo para cima:

  • Os 's são caracteres literais; eles são seguidos por não imprimíveis com código ASCII 26 e representam esses caracteres.
  • O menor rcalcula o intervalo de caracteres de 0 a 25.
  • A ,forma um par dos dois caracteres não imprimíveis.
  • Quanto mais alto rfor o argumento 2, e formará o intervalo [0 1].
  • Ele $pega esse intervalo e o modifica para o formato dado por seu outro argumento, que é o par de não imprimíveis. Isso fornece uma matriz 26 × 26 de linhas alternadas0 1 0 1 0 1 ...
  • O menor +adiciona o intervalo de caracteres de 0 a 25 a essa matriz. A adição é distribuída nas linhas; portanto, a linha i é incrementada por i . Também é convertido em uma matriz de caracteres, já que o argumento sul consiste em caracteres.
  • O ~|módulo is é com argumentos invertidos: o argumento sul (a matriz de caracteres acima) é reduzido no módulo leste (o que Svira o processo de busca de argumentos para o sul, então esse é o literal não imprimível 26).
  • Quanto mais alto +adiciona o literal Aa todas as coordenadas da matriz resultante.
  • Ele Pimprime o resultado no formato de matriz, ou seja, cada linha em sua própria linha sem aspas.

11
Eu queria tentar jogar golfe, mas depois vi o nome daquele que escreveu o código.
Leaky Nun

@LeakyNun Você ainda pode tentar! Embora 26 bytes sejam adequados para esse desafio.
Zgarb

5

Vim, 31 bytes

:h<_↵↵↵YZZPJra0qqy2l13Plr↵25@qD

Onde está a tecla Return.

insira a descrição da imagem aqui


5

Perl, 26 bytes

Solução da @Dom Hastings . (12 bytes mais curto que o meu!)
-1 byte graças a @Ton Hospel

say+($_++,chop)x13for A..Z

Executar com -M5.010ou -E:

perl -E 'say+($_++,chop)x13for A..Z'

Conseguiu obter esse baixo para 33: say+($_++,$_--=~/^./g)x13for A..Z, mas eu tenho certeza que há uma maneira de obter um mais curto a partir de: say+($_++,$_--)x13for A..Z...
Dom Hastings

Não sei por que eu tenho o --lá, não é necessário! O_o. 27:say+($_++,/^./g)x13for A..Z
Dom Hastings

@DomHastings Bem feito! Eu tentei say+($_,$_++)x13for A..Zno começo o que não funcionou, mas parece que eu deveria ter empurrado ainda mais nessa direção!
Dada

11
say+($_++,chop)x13for A..Zsalva mais um byte
Ton Hospel 10/16/16

@ TonHospel ótimo, obrigado por isso.
Dada

5

T-SQL 133 bytes (disponível por: @ t-clausen.dk)

SELECT REPLICATE(Char(number+65)+IIF(number=25,'A',Char(number+66)),13)FROM spt_values WHERE number<26and'P'=TYPE

T-SQL, 151 bytes

Usando CTE para gerar sequência de número

;WITH n(a,v) AS(SELECT CHAR(65)+CHAR(66), 66 UNION ALL SELECT CHAR(v)+CHAR(v+1), v+1 FROM n WHERE v < 91)SELECT REPLICATE(REPLACE(a,'[','A'),13) FROM n

T-SQL, 155 bytes

SELECT REPLICATE(Char(number+65)+ CASE WHEN number=25 THEN 'A' ELSE Char(number+66) END, 13) FROM master.dbo.spt_values  WHERE name IS NULL AND number < 26

A sua resposta foi reduzida em 113 caracteres. Eu forneci uma resposta muito diferente no TSQL
t-clausen.dk

@ t-Clausen.dk Isso é excelente. Por favor, poste sua resposta. Eu excluiria o meu.
Anuj Tripathi

Não há razão para excluir sua resposta, você pode simplesmente usar o meu violino para melhorar sua resposta. Eu já postei há 1 hora atrás, se você gosta do TSQL, dê uma olhada nas minhas outras respostas. Fiz Violinos para a maioria deles
t-clausen.dk


4

Pitão, 10 bytes

jCm.<G~!ZG

Demonstração

Explicação:

jCm.<G~!ZG
  m      G    Map over G, predefined to the lowercase alphabet.
              This will give 26 columns.
   .<G        Left shift (cyclically) G by
        Z     Z elements. Z is initialized to 0.
      ~!      After using its value, logical not Z. (0 -> 1, 1 -> 0)
 C            Transpose
j             Join on newlines

Bom, gostaria de saber tanto quanto você faz sobre Pyth
Stan Strum

4

Brainfuck, 88 86 bytes

++[[+>]<+<++]+>-[[->+>+<<]>>-]++++++++[<[++++++++<+<]>[>]<-]<<++<[>+++[->.<<.>]<<++.<]

Requer um intérprete com células de 8 bits e uma fita não delimitada à esquerda. Experimente online!


3

Lua, 80 65 bytes.

s = string c = s.char for i=1,26 do print(s.rep(c(64+i)..c((65+(i%26))),13)) end

Com a ajuda de Leaky Nun

c=("").char for i=1,26 do print((c(64+i)..c(65+i%26)):rep(13))end

Lua é uma linguagem bastante ineficiente em relação ao manuseio de strings e afins, portanto é o melhor que posso restringir.


Bem-vindo ao PPCG! Bom primeiro post! Você pode salvar 5 bytes se remover algum espaço em branco desnecessário:s=string c=s.char for i=1,26 do print(s.rep(c(64+i)..c((65+(i%26))),13))end
GamrCorps

for i=1,26 do print(((64+i):char()..(65+(i%26)):char()):rep(13))end(não testado)
Leaky Nun

Porque string.rep(x,13)é basicamentex:rep(13)
Freira vazada

Direita! Esqueci que a cadeia de caracteres metável indexa por padrão a biblioteca de cadeias.
ATaco 10/08

Embora bons, números como 65+ (i% 26) não contam como strings, a menos que sejam armazenados como tal. Vou trabalhar em uma maneira de fazer isso funcionar para o inferno.
ATaco 10/08


3

05AB1E, 12 bytes

ADÀ)øvyJ5Ø×,

Explicação

AD            # push 2 copies of the alphabet
  À           # rotate the 2nd one left by 1
   )ø         # add to list and zip
     v        # for each
      yJ      # join the pair
        5Ø×   # repeat it 13 times
           ,  # print with newline

Experimente online


Eu sei que esta é uma pergunta antiga, mas eu simplesmente não posso me ajudar. ADÀ)ø13×»funciona bem com 9 bytes.
Datboi

@Datboi: Isso realmente funciona agora, mas infelizmente não funcionou no momento em que esta pergunta foi publicada :(
Emigna

3

Mathematica, 82 75 67 66 bytes

Print@FromCharacterCode@PadLeft[{},26,{i-1,i}~Mod~26+65]~Do~{i,26}

Tecnicamente mais curto, embora seja impresso em letras minúsculas em vez de maiúsculas:

Mathematica, 64 bytes

Print[""<>FromLetterNumber@Table[{i-1,i}~Mod~26+1,13]]~Do~{i,26}

11
Bom truque usando PadLeft.
Leaky Nun


1

MATLAB, 47 38 bytes

a=(65:90)';char(repmat([a a([2:end 1])],1,13))

char(repmat([65:90;[66:90 65]]',1,13))

O primeiro cria uma matriz de colunas do alfabeto em ASCII, anexa uma cópia deslocada como uma coluna à direita, replica a matriz 26 * 2 resultante 13 vezes em colunas, converte para uma matriz de caracteres e imprime por padrão.

O segundo cria uma matriz 2 * 26 de alfabeto e alfabeto deslocado, transpõe-o e continua como acima.


Você pode salvar um byte usando em [... '']vez de char(...).
Pajonk

E você pode usar simplesmente [65:90;66:90 65]salvando dois bytes.
Pajonk



1

PHP, 102 bytes

<?php $a='ABCDEFGHIJKLMNOPQRSTUVWXYZA';$i=-1;while($i++<25){echo str_repeat(substr($a,$i,2),13)."\n";}

Você pode remover as aspas da string do alfabeto. Substitua \ n por um enter real em vez de \ n. Roubei essa ideia de @insertusernamehere. Portanto, verifique a resposta dele para o que quero dizer. Editar: use também a notação de marca curta <?. Você também não precisa de um espaço depois de <?. Então <?$a='ABC'também funciona.
Jeroen

1

Ruby, 41 bytes

26.times{|i|puts [*?A..?Z,?A][i,2]*''*13}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.