Triângulo do alfabeto


48

Você deve imprimir este texto exato:

A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A

Especificações

  • Novas linhas extras à direita são permitidas no final da saída.
  • Espaços extras à direita (U + 0020) são permitidos no final de cada linha, incluindo as novas linhas extras à direita.
  • Você pode usar todas as letras minúsculas em vez de todas as maiúsculas, mas não pode imprimir parcialmente minúsculas e parcialmente maiúsculas.
  • Você pode retornar o texto como uma saída de função em vez de imprimi-lo em um programa completo.

Pontuação

Como esse é um triângulo, e um triângulo possui 3 lados e 3 é um número pequeno, seu código deve ser pequeno em termos de contagem de bytes.


22
Tantos alfabetos recentemente
downrep_nation

11
Meu sinestesia vai porco selvagem, @downrep_nation
DoctorHeckle

5
"Como um triângulo tem 3 lados e 3 é um número pequeno, seu código deve ser pequeno em termos de contagem de bytes". parece legítimo
Rohan Jhunjhunwala

11
Quadrados de números compostos apenas de 1 parece estar relacionada: 1 * 1 = 1 ~ = A, 11 * 11 = 121 ~ = ABA, 111 * 111 = 12321 ~ = ABCBA ...
Caridorc

11
"Como um triângulo tem três lados e ..." Illuminati confirmou.
HyperNeutrino

Respostas:


38

Vim, 37 bytes

:h<_↵↵↵YZZPP$xqqxYpGP√2G$A♥-€k$q24@qJ

insira a descrição da imagem aqui

lenda

↵ = Return
√ = Ctrl+V
♥ = Ctrl+R
€ = Escape

2
Esse é um GIF muito legal.
AdmBorkBork

13
Nunca deixarei de me surpreender com as respostas do Vim.
DanTheMan

Gostaria de explicar como isso funciona para aqueles que não são fluentes no Vim?
R. Kap

6
@ R.Kap Eu recomendo que você baixe o Vim e experimente a solução - você pode assistir a solução se desenrolar, golpe por golpe! Essencialmente, roubo o alfabeto de um arquivo de ajuda ( :h<_↵↵↵YZZP), gravo uma macro ( qq…q) que corta repetidamente uma letra da linha superior, faz duas cópias para aumentar o triângulo verticalmente e depois anexa a letra cortada a todas as linhas para crescer horizontalmente. Repito essa macro mais 24 vezes para desenhar o triângulo completo.
Lynn

31

Logotipo, 232 207196 190 bytes

Alguém disse triângulos?

Tire sua bússola e transferidor, e vamos fazer isso da maneira gráfica. A geometria usa um triângulo equilátero para alinhar os resultados. Eu já tinha um triângulo isósceles, mas envolvia muitas casas decimais. Essa alteração também compactou a saída, reduzindo a quantidade de preparação da tela e a alteração da fonte que eu precisava fazer.

Eu usei o intérprete online Calormen para elaborar este. Se você não tiver espaço suficiente na tela, isso vai acabar, mas você também pode mexer em alguns números para cuidar disso. Eu usei o modo de tela cheia "F11" no meu navegador.

ht
pu
to r:n:b:l repeat:n[rt:b label char 90-:n lt:b fd:l] end
to t:s
fd 12 rt 120 bk 6
repeat 2[r:s 90 12]
repeat 2[rt 120 r:s 90-heading 24]
end
rt 90 label "Z lt 210
repeat 25[t repcount]

O rprocedimento desenha uma linha de ncaracteres. O caractere é determinado automaticamente, dependendo de quantos segmentos ele deve usar. O bparâmetro informa quanto girar temporariamente para que as letras estejam apontando na direção certa. O lparâmetro determina a distância linear entre as letras.

O tprocedimento passa para a próxima posição e chama a rfunção quatro vezes para criar um triângulo, girando quando apropriado. Liguei duas vezes para o lado vertical porque isso levou menos bytes do que chamá-lo uma vez com tratamento especial. O final do procedimento posiciona a tartaruga para o início do próximo triângulo, um passo acima.

Zé um caso especial, apenas imprimimos diretamente e giramos como se tivéssemos acabado de terminar um triângulo. Finalmente, té chamado 25 vezes.

Imagem anotada em andamentoResultado final


3
Sai da caixa. Bem feito.
CousinCocaine

19

Haskell, 58 bytes

f x=init x++reverse x
t=unlines$f[f['A'..c]|c<-['A'..'Z']]

Define uma função tque retorna a saída como uma sequência.

f x=               define a helper function
init x             take the argument minus its last element
++                 and concatenate it with
reverse x          the argument reversed, producing ex. [a,b,c,b,a] from [a,b,c]

t=                                    define the main function
           [         |c<-['A'..'Z']]  for every char c from 'A' to 'Z'...
             ['A'..c]                 generate the range from 'A' to c
            f                         call the helper function to "reflect" it
          f                           call the helper function on the entire list
  unlines$                            join on newlines

12

Geléia , 16 13 bytes

Ṗ;Ṛ
ØAḣJÇ€Çj⁷

Graças a @LeakyNun por jogar fora 3 bytes!

Experimente online!

Como funciona

Ṗ;Ṛ        Helper link. Argument: A (array)

Ṗ          Pop; yield A without its last element.
  Ṛ        Reversed; yield A with inverted order.
 ;         Concatenate the results to both sides.


ØAḣJÇ€Çj⁷  Main link. No arguments.

ØA         Alphabet; set link argument and return value to "A...Z".
   J       Indices; yield [1, ..., 26].
  ḣ        Head; take the first, the first two, etc. elements of the alphabet.
           This yields ["A", AB", ..., "A...Z"].
    ǀ     Apply the helper link to each string.
      Ç    Apply the helper link to the array itself.
       j⁷  Join, separating by linefeeds.


@LeakyNun Thanks.
Dennis

4
Eu seria curioso para saber como no mundo isso funciona ...
socrático Phoenix

talvez se o uso do link duplicador u pode salvar um byte
Leaky Nun

3
O @MathieuRodic Jelly usa uma página de códigos personalizada que codifica todos os 256 caracteres que entende como um único byte cada. O link de bytes no cabeçalho aponta para ele.
Dennis

10

Python, 74 bytes

def f(x=66,s='A'):
 t=s+s[-2::-1];print t
 if x<91:f(x+1,s+chr(x));print t

Uma função Python 2 que imprime e não aceita argumentos. A idéia principal é gerar o padrão triangular de retorno e retorno com recursão. Primeiro, considere esta função mais simples que imprime as letras 'A' até 'Z' e volta para 'A':

def f(x=65):
 t=chr(x);print t
 if x<90:f(x+1);print t 

A função imprime primeiro "A" (código de caractere 65), depois volta a imprimir "B" (66) e assim por diante para "Z" (90). A partir daí, ele pára de se repetir. No caminho de volta à pilha recursiva, ele imprime qualquer caractere timpresso na mesma camada, de "Y" a "A".

O código principal faz o mesmo, exceto que se acumula na ssequência de letras até o momento e imprime a sequência para cima e para baixo s+s[-2::-1].

Graças ao xsot por 2 bytes.

No Python 3, a mesma coisa é um byte mais curto (73 bytes), colocando tudo em uma linha.

def f(x=66,s='A'):t=s+s[-2::-1];print(t);x>90or[f(x+1,s+chr(x)),print(t)]

Você pode salvar 2 bytes se compensar as variáveis, ou seja f(x=66,s='A'). Isso permite que você atualize sa chamada de função em vez do corpo da função.
Xsot #

Eu acho que a sua versão do Python 3, como o seu parente do Python 2, precisa de um valor de 90 em vez de 89 para ter a linha mais longa que vai de Z a vice-versa.
Tebbe

@Tebbe Obrigado, corrigi-los.
Xnor

8

brainfuck, 1733 121 119 bytes

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

Versão um pouco mais legível:

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

Explicação possivelmente para vir.


Tente usar um loop em vez de criar cada caractere manualmente.
Leaky Nun

@LeakyNun Eu não tenho idéia de como fazer isso. Alguma sugestão?
DanTheMan

4
Bom, então você só dormiu por 4 horas.
Leaky Nun

11
Parabéns por ter o programa menor que a saída!
GuitarPicker 5/08/16

11
Como um golf fora de 1612 bytes?
FantaC

8

05AB1E , 20 13 12 6 bytes

Economizou 2 bytes graças a Adnan.
Economizou 6 bytes graças ao Magic Octopus Urn e algumas novas funcionalidades de idioma.

Aη€ûû»

Experimente online!

Explicação

Aη       # push prefixes of alphabet
  €û     # palendromize each prefix
    û    # palendromize the whole list
     »   # join on newlines

Muito agradável! Você pode mudar Œ26£para .p, que é o comando prefix. Além disso, você pode alterar D,para =, que imprime sem aparecer.
Adnan

Uau, truque inteligente com o gF,!
Adnan

@ Adnan: Obrigado! Eu sabia que havia um comando prefixo em algum lugar :) Eu raramente verifico os estendidos.
Emigna

2
Esse comando bifurcado Âé muito bom e um recurso realmente interessante.
miles

11
@carusocomputing: infelizmente, ûé mais novo que o desafio e tornaria essa resposta não competitiva.
Emigna

6

J, 26 23 22 bytes

f(f=:,1}.|.)\u:65+i.26

Explicação

,1}.|.  Monad f: Input: A
    |.  Reverse the items in A
 1}.    Drop the first item in the reversed A
,       Join A and the previous

f(f=:,1}.|.)\u:65+i.26
                  i.26  Create the range [0, 1, ..., 25]
               65+      Add 65 to each
             u:         Convert to characters to get 'A..Z'
  f=:,1}.|.             Define a verb f
 (         )\           Call f monadically on each prefix of 'A..Z'
f                       Call f again on that result

f=:,1}.|.tente isto #
Leaky Nun

@LeakyNun Obrigado, não sei por que pensei que eram diferentes.
milhas




5

C, 272 247 234 230 144 137 bytes:

( Salvei muitos bytes ( 272 -> 230) no meu método anterior, graças às ótimas dicas e truques de golfe de sigalor ! )

( Economizou quase 100 bytes ( 230 -> 144) mudando para um método melhor. )

main(q,i,e,x){for(q=0;q<51;q++){i=q>25 ? 25-(q-25):q;for(e=65;e<66+i;e++)printf("%c",e);for(x=64+i;x>64;x--)printf("%c",x);printf("\n");}}

Minha primeira resposta C. Eu comecei a aprender sozinho recentemente, então vamos ver como vai.

C em ação! (Ideona)


11
Ahhh, eu também queria adicionar uma resposta C ... Seja como for, eu vou ajudá-lo então;) Primeiro, este é um código de golfe, você não precisa escrever um código perfeito. Os avisos do compilador estão completamente corretos. É por isso que você pode remover main()o tipo de retorno e até o #include <stdio.h>. O GCC (e também sites como o Ideone) está bem com isso. Em seguida, você pode terceirizar as definições de variáveis ​​para a lista de parâmetros de uma função. Vamos nos for(int i=65;...tornar for(i=65...e mudar main()para main(i). Faça o mesmo para todas as outras variáveis ​​int (o GCC usa como padrão os tipos ausentes int).
sigalor

@sigalor Obrigado pelas dicas! :) Só uma pergunta: por que eu preciso mudar main()para main(i)?
R. Kap

@sigalor Na verdade, agora estou recebendo um monte de erros de compilação.
R. Kap

Quando você não declara sua ivariável na inicialização do loop for, precisa declará-la em outro lugar. E porque (pelo menos em C) os parâmetros de uma função podem ser usados ​​como variáveis ​​normais, não deve haver problema. Btw, qual compilador você está usando?
Sigalor 03/08/19

@sigalor Atualmente Cem Ideone. Estou recebendo vários <variable> undeclarederros.
R. Kap

5

JavaScript (ES6), 81 bytes

[...'ZYXWVUTSRQPONMLKJIHGFEDCBA'].reduce((p,c)=>c+`
`+p.replace(/^|$/gm,c)+`
`+c)

5

Mathematica 59 bytes

Column@FromCharacterCode[#@#@26+64]&[#-Abs@Range[1-#,#-1]&]

Eu acho que remover o //Columndo final e prefixar seu código com Column@obras.
Yytsi

2
Você parece ter contado e como bytes únicos. Duvido que exista uma página de código de byte único e que também seja suportada pelo Mathematica imediatamente. Eles teriam três bytes em UTF-8, para que não salvassem nada além da planície [[...]]. Também não tenho certeza de quão legítimo Columné, pois ele é exibido apenas como uma lista de linhas em um notebook Mathematica. A execução desse código a partir de um arquivo de script não exibirá nada. No entanto, Print/@é o mesmo número de bytes e funciona nos dois casos.
Martin Ender

Se você quiser fazer um link para uma página com o endereço de um tempo, você pode fazer o seguinte: [what you see](actual link). Ex. [Example Link](https://www.example.com), que é exibido como link de exemplo
Stan Strum 16/17


4

R, 63 61 59 bytes

for(i in c(1:26,25:1))cat(LETTERS[c(1:i,i:1-1)],"
",sep="")

Prestativamente LETTTERS[0]não retorna nenhum personagem.

Edit: perdeu um graças a @leakynun

Edit: mais dois agradecimentos a @plannapus


11
Você pode usar uma nova linha literal em vez de #\n
Leaky Nun

3

TSQL, 159 bytes

DECLARE @ varchar(52)='ABCDEFGHIJKLMNOPQRSTUVWXY',@o varchar(max)SELECT @+='Z'+REVERSE(@)+'
',@o=@
WHILE''<@
SELECT @=STUFF(@,LEN(@)/2,2,''),@o=@+@o+@
PRINT @o

Violino


11
Eu tentei fazê-lo, mas acabei com mais de 250 bytes para nunca postar isso. Você, de fato, tem uma solução melhor que a minha. Mais uma vez :)
Anuj Tripathi

3

Javascript (usando a biblioteca externa enumerável), 135 bytes

_.Range(1,51).WriteLine(x=>(g=_.Range(65,x>25?52-x:x)).Write("",y=>(w=String.fromCharCode)(y))+(g.Reverse().Skip(1).Write("",y=>w(y))))

Link para a biblioteca: https://github.com/mvegh1/Enumerable

Explicação do código: Crie um intervalo de ints começando em 1, para uma contagem de 51. Para cada um, escreva uma linha de acordo com o pred complexo. Faça alguma magia JS com variáveis ​​globais e cache ... e pronto. Para cada int no WriteLine, estamos criando o intervalo de entradas à esquerda e armazenando no global "g", e String Joining (Write) com ""delimitador e mapeando cada int para o mapeamento String para o código int char. Em seguida, concatizamos o lado direito, fazendo a reversão dessa sequência (e pulando o primeiro elemento, porque isso corresponderá ao último elemento da ordem original ...), escrevendo com a mesma lógica. EDIT: Atualizados os internos de gravação na biblioteca. Uma sequência vazia gravará uma sequência vazia em vez de nula agora. Isso também eliminou 15 bytes da resposta

insira a descrição da imagem aqui


11
Você não precisa incluir bytes para importar a biblioteca?
MatthewRock

11
Idk, eu publiquei mais de 20 respostas usando uma biblioteca e você seria o primeiro a dizer isso para mim. Eu não acho que alguém realmente se importa, porque minhas respostas nunca ganham de qualquer maneira
applejacks01

11
@ applejacks01 Com certeza, se você não o importa, é necessário dizer algo como "JS + Enumerable" na parte superior. Semelhante a "Bash + Coreutils"
mbomb007 3/08/16

2
É comum contar a importação. As respostas do Python + SymPy ainda têm import sympyou estão from sympy import*no topo. As respostas do Bash + x são diferentes porque você só precisa instalar o x , não ativá-lo de alguma forma.
Dennis3

11
@PatrickRoberts Desde que a biblioteca existisse antes do lançamento do desafio, sim. Python respostas fazem uso de sympy, numpy, scipy, etc. todo o tempo.
Dennis

3

Powershell, 61 52 bytes

Agradecimentos a TimmyD por salvar 9 bytes!

65..90+89..65|%{-join[char[]]((65..$_-ne$_)+$_..65)}

Faz um loop através dos valores ASCII para letras maiúsculas para frente e depois para trás. Para cada número, isso cria uma matriz dos primeiros números X, remove o número X-1 e adiciona o reverso dos primeiros números X, que são todos convertidos em caracteres e agrupados em uma sequência.


Ei, isso é bom, obrigado! Eu tinha me conectado 65..90..65com um capricho antes sem sucesso. Acho que esqueci que podia adicionar os intervalos juntos.
Ben Owen

3

Queijo Cheddar , 102 96 79 69 67 bytes

17 bytes graças ao Downgoat e inspiração para mais 10.

"A"+(2@"27+@"(25|>1)).bytes.map(i->65@"(64+i)+@"((64+i)|>65)).vfuse

O fato de que seqüências de caracteres podem concatenar, mas não matrizes, significa que eu teria que converter os dois intervalos em seqüências de caracteres, concatenar e depois converter novamente em matrizes.

Além disso, o fato de vfuseproduzir um newliens principal significa que eu precisaria gerar a primeira linha manualmente e depois concatenar com o resto.

@" como uma díade (função de dois argumentos) pode converter diretamente em string, mas não funciona para o intervalo invertido (se o primeiro argumento for maior que o segundo).

O alcance era meio inclusivo. Após a correção, tornou-se inclusivo.

Uso

cheddar> "A"+(2@"27+@"(25|>1)).bytes.map(i->(65@"(64+i)+@"((64+i)|>65))).vfuse
"A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A"

Cheddar, 55 bytes (não concorrente)

Na versão mais recente com todas as correções, a resposta é:

(|>25+24|>0).map(i->65@"(65+i)+(i?(64+i)@"65:"")).vfuse

mas foi feito após o desafio.


@"(1|>26)pode ser1@"26
Downgoat

String.letterspode ser(65@"91)
Downgoat

String.letters.slice(0,i)talvez pudesse ser65@"(66+i)
Downgoat

Ah, vejo que você está ralando seu número de bytes.
precisa


3

VBA, 94 bytes

Function T:For j=-25To 25:k=25-Abs(j):For i=-k To k:T=T &Chr(65+k-Abs(i)):Next:T=T &vbLf:Next

Ligue na janela Imediata com? T

Apenas para explicar o que está acontecendo: uso a função Abs duas vezes, para refletir a rotação do alfabeto e o comprimento da linha. É adequado para a tarefa devido ao valor extremo único em ambos os casos, que corresponde ao cruzamento zero da variável pré-Abs.

Como um conjunto simples de comandos na janela Imediata do VBA, em vez de um programa ou função, o seguinte precisaria de 72 bytes:

For j=-25To 25:k=25-Abs(j):For i=-k To k:?Chr(65+k-Abs(i));:Next:?:Next

(com agradecimentos a @GuitarPicker)


11
Eu usei uma lógica semelhante em uma das minhas submissões da bandeira da Islândia. Você não poderia avançar ainda mais, executando-o inteiramente na janela imediata e pulando a declaração de função, ou isso viola alguma regra com a qual não estou familiarizado?
GuitarPicker 4/08/16

@GuitarPicker; não tenho certeza se a execução em janela imediata conta como um programa completo, mas se sim, então, 8 bytes a menos, de forma eficaz; em vez de começar com Function T:, terminam com :?T(embora só funcionaria uma vez, porque depois que você precisa para redefinir T de "?" - mas quem precisa de mais do que um destes triângulos)
Joffan

2
Você não precisa mesmo de t se você ?como você ir com ;.
GuitarPicker 4/08/16

Consegui reduzi-lo para 71 usando esse método. Dica: você também não precisará do vbCrLf.
GuitarPicker 4/08/16

11
sim, eu tenho o mesmo; note que o retorno é necessário.
Joffan

3

Python, 73 71 bytes

Obrigado a @xnor pela recursão

f=lambda x=66,s='A',t='':x/92*t or t+f(x+1,s+chr(x),s+s[-2::-1]+"\n")+t

Explicação

  • Parâmetros :
    • x é o valor ascii da próxima letra do alfabeto
    • s é um acumulador para o alfabeto
    • té uma linha no triângulo (ou seja, s+ s backwards)
  • Retorno : tse o alfabeto estiver pronto (ou seja, estamos no centro)
  • Outro : t+f(...)+tcom:
    • x incrementado
    • s anexado com a próxima letra
    • tredefinir para s+ s backwards+\n

Atualizar

  • -2 [16-08-05] Remova o \ncondicional inicial (+1) e abreviado (-3) graças a @xnor

11
Que método inteligente, tpassando para o próximo loop. Há uma nova linha extra líder; x=66,s='A''se livra disso. O gabinete base pode ser reduzido para x/92*t or .
Xnor

3

HTML + CSS, 884 caracteres

(763 caracteres HTML + 121 caracteres CSS)

Apenas expansão Leaky Nun 's comentário sobre MonkeyZeus ' s resposta . (Embora eu possa interpretar mal o comentário ...)

p{margin:0}p:before{content:"ABCDEFGH"}p:after{content:"HGFEDCBA"}a:before{content:"IJKLMNOP"}a:after{content:"PONMLKJI"}
<pre>A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
<p>I</p><p>IJI</p><p>IJKJI</p><p>IJKLKJI</p><p>IJKLMLKJI</p><p>IJKLMNMLKJI</p><p>IJKLMNONMLKJI</p><p>IJKLMNOPONMLKJI</p><p><a>Q</p><p><a>QRQ</p><p><a>QRSRQ</p><p><a>QRSTSRQ</p><p><a>QRSTUTSRQ</p><p><a>QRSTUVUTSRQ</p><p><a>QRSTUVWVUTSRQ</p><p><a>QRSTUVWXWVUTSRQ</p><p><a>QRSTUVWXYXWVUTSRQ</p><p><a>QRSTUVWXYZYXWVUTSRQ</p><p><a>QRSTUVWXYXWVUTSRQ</p><p><a>QRSTUVWXWVUTSRQ</p><p><a>QRSTUVWVUTSRQ</p><p><a>QRSTUVUTSRQ</p><p><a>QRSTUTSRQ</p><p><a>QRSTSRQ</p><p><a>QRSRQ</p><p><a>QRQ</p><p><a>Q</a></p><p>IJKLMNOPONMLKJI</p><p>IJKLMNONMLKJI</p><p>IJKLMNMLKJI</p><p>IJKLMLKJI</p><p>IJKLKJI</p><p>IJKJI</p><p>IJI</p><p>I</p>ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A


3

Braquilog , 37 29 bytes

Créditos a Fatalize por sua assistência por toda parte.

4 bytes graças a Fatalize, e inspiração para outros 4 bytes.

@A:1&e:"a"yr:1&cw@Nw\
:Lc.r.!

Experimente online!

Predicado 0 (predicado principal)

@A:1&e:"a"yr:1&cw@Nw\
@A:1&                  Apply predicate 1 to @A, which is
                       basically "abcdefghijklmnopqrstuvwxyz"
     e                 Choose one element from the result (choice point)
      :"a"yr               generate substring from element to "a"
            :1&            apply predicate 1
               c           concatenate
                w          write to STDOUT
                 @Nw       write "\n" to STDOUT
                    \  Backtrack to last choice point to choose
                       another element until there is no more
                       choice left, then halt.

Predicado 1 (predicado auxiliar)

Basicamente, isso cria um palíndromo a partir da string especificada.

:Lc.r.!
:Lc.     output is [input:L]
   .r.   output reversed is still output
      !  stop searching after the first output

Você pode substituir ,Ano Predicado 1 por h, economizando um byte.
Fatalize 11/08/16

Você também pode salvar dois bytes, substituindo :1:2yt.com :2&.e adicionando um !(pontos de corte escolha) no final do predicado 2.
Fatalize


3

R, 127 125 bytes

k=cat;L=LETTERS;for(i in 1:26)k(c(L[1:i],L[(i-1):0],"\n"));for(i in 1:26)k(c(L[0:(26-i)],L[ifelse((25-i)>=0,25-i,0):0],"\n"))

Não completamente satisfeito com esta solução, especialmente os dois forloops, mas não pôde vir com algo melhor!
LETTERScontém as letras maiúsculas.

Ungolfed:

for(i in 1:26){
  cat(c(LETTERS[1:i],LETTERS[(i-1):0],"\n"))
               }

for(i in 1:26){
  cat(c(LETTERS[0:(26-i)],LETTERS[ifelse((25-i)>=0,25-i,0):0],"\n"))
               }

ifelseé uma maneira mais curta de cancelar o envio if... else...e funciona da seguinte maneira:ifelse(condition,action if TRUE, action if FALSE)

Uma solução de outros 125 bytes:

for(i in 1:26)(k=cat)(c((L=LETTERS)[1:i],L[(i-1):0],"\n"));for(i in 1:26)k(c(L[0:(26-i)],L[ifelse((25-i)>=0,25-i,0):0],"\n"))


3

Java 131 bytes

Sem usar String (131 bytes)

public static void main(String[] args) {
    for(int i = 0 ,k=1; i>-1; i+=k){
        for(int c= 65, d = 1; c>64;){
            d = d>-1 & c < 65+i?1:-1;
            System.out.print((char)c+((c+=d)<65?"\n":""));
        }
        k = k>-1 & i < 25?1:-1;
    }
}

Codegolfed

for(int i=0,k=1;i>-1;k=k>-1&i<25?1:-1,i+=k)for(int c=65,d=1;c>64;d=d>-1&c<65+i?1:-1,System.out.print((char)c+((c+=d)<65?"\n":"")));

Com String (173 bytes)

String a="abcdefghijklmnopqrstuvwxyz";
for(int i = 1 ,k=1; i>0; i+=k==1?1:-1){
    System.out.println(a.substring(0,i)+new StringBuilder(a).reverse().substring(27-i));
    k = k>-1 & i < 26?1:-1;
}

Codegolfed

String a="abcdefghijklmnopqrstuvwxyz";for(int i=1,k=1;i>0;k=k>-1&i<26?1:-1,System.out.println(a.substring(0,i)+new StringBuilder(a).reverse().substring(27-i)),i+=k==1?1:-1);

Graças a manatwork e Kevin Cruijssen


2
Bem-vindo ao PPCG. Por favor, leia o “Como devo responder a um código de golfe? Alguma dica? ”Na página de informações da tag code-golf . As respostas para esse tipo de desafio devem apresentar esforços para reduzir o tamanho do código. Nisto você pode encontrar ajuda em Dicas para jogar golfe em Java e Dicas para jogar golfe em <todos os idiomas> .
manatwork

11
Lá você usa quatro operadores ternários e todas as condições estão entre parênteses. Você pode removê-los para salvar 8 caracteres.
Manatwork

11
d e k não podem ir abaixo de -1, certo? Em seguida, você pode substituir d!=-1por d>-1, o mesmo para k. (BTW, você esqueceu-se de corrigir a versão golfed.)
manatwork

Movido as instruções do corpo do loop para incrementar a seção da instrução para economizar 3 bytes.
Syamesh K

11
Oi, eu sei que já faz um bom tempo, mas você pode jogar duas coisas: i+=k==1?1:-1pode ser i+=ke System.out.print((char)c+(c+d<65?"\n":"")),c+=d==1?1:-1);pode ser System.out.print((char)c+((c+=d)<65?"\n":"")));. Assim, no total, torna-se ( 131 bytes ):for(int i=0,k=1;i>-1;k=k>-1&i<25?1:-1,i+=k)for(int c=65,d=1;c>64;d=d>-1&c<65+i?1:-1,System.out.print((char)c+((c+=d)<65?"\n":"")));
Kevin Cruijssen

3

brainfuck, 79 bytes

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

Formatado:

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

Experimente online


2

Sesos , 27 bytes

0000000: a85ab9 ac5daa f8b1c7 785f9b b961f7 665c1b 73ccfc  .Z..]....x_..a.f\.s..
0000015: c01ecb 987303                                     ....s.

Experimente online! Marque Debug para ver o código SBIN gerado.

Montagem Sesos

O arquivo binário acima foi gerado montando o seguinte código SASM.

add 65, rwd 1, add 10, rwd 2, add 25
jmp
    fwd 3
    jmp
        put, fwd 1
    jnz
    rwd 1
    jmp
        fwd 1, add 1, fwd 1, add 1, rwd 2, sub 1
    jnz
    fwd 2
    jmp
        rwd 2, add 1, fwd 2, sub 1
    jnz
    rwd 1, add 1, rwd 2
    jmp
        put, rwd 1
    jnz
    rwd 1, sub 1
jnz
fwd 3
jmp
    jmp
        put, fwd 1
    jnz
    rwd 1, get, rwd 1
    jmp
        put, rwd 1
    jnz
    fwd 2
; jnz (implicit)

2

/// , 208 bytes

/'/\/\///+/BA
AB'-/DC+CD'&/FE-EF')/HG&GH'=/JI)IJ'|/LK=KL'7/NM|MN'1/PO7OP'q/RQ1QR'p/TSqST'6/VUpUV'[/XW6WX/A
A+C+C-E-E&G&G)I)I=K=K|M|M7O7O1Q1QqSqSpUpU6W6W[Y[YZY[Y[W6W6UpUpSqSqQ1Q1O7O7M|M|K=K=I)I)G&G&E-E-C+C+A
A

Não vencendo, é claro, mas aqui está, anterior a Martin Ender ...

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.