Dada qualquer sequência, imprima-a na forma de um triângulo, onde o texto corre para cima e para baixo ao longo de cada diagonal. Por exemplo, uma entrada de "Hello World"
deve produzir:
d
l
r d
o l
W r d
o l
o W r d
l o l
l o W r d
e l o l
H l o W r d
e l o l
l o W r d
l o l
o W r d
o l
W r d
o l
r d
l
d
O espaço entre cada caractere em uma linha deve ser pelo menos 1, para manter o formato adequado.
code-golf
string
ascii-art
code-golf
string
abstract-algebra
code-golf
ascii-art
binary
fractal
code-golf
array-manipulation
sorting
permutations
code-golf
code-generation
code-golf
sequence
binary
code-golf
date
code-golf
array-manipulation
restricted-source
decision-problem
primes
code-golf
multi-threading
code-golf
array-manipulation
code-challenge
decision-problem
natural-language
test-battery
code-golf
array-manipulation
code-golf
array-manipulation
code-golf
code-golf
graph-theory
maquiavel
fonte
fonte
H l o W r d
é uma linha central válida? Perguntando, porque no seu exemplo, cada linha tem 3 espaços entre cada caractere.Respostas:
Carvão ,
107 bytesExperimente online!Experimente online! Os links são para a versão detalhada do código. Explicação:Primeira vez que pude usar oUE
comando.fonte
UE
...UE
..05AB1E ,
1087 bytesObrigado a Emigna por economizar 2 bytes!
Usa a codificação 05AB1E . Experimente online!
fonte
¶«
. (também verificou a validade com OP)â
emðâ
vez deSð«
!Python 2 , 75 bytes
Experimente online!
Ruud salvou 3 bytes.
fonte
C,
86787370 caracteresExperimente online!
Explicação
Implementação ingênua: dois ciclos, preenchidos de cima para baixo, da esquerda para a direita (99 bytes):
Aqui, o puts () apenas imprime \ n na saída. Vamos combinar declarações de variáveis e combinar j ++ com algo (94 bytes):
Boa. A variável j tem um intervalo de 0 a 2n; seja em -n ... n, isso simplifica a matemática. Observe que a expressão booleana à direita de && sempre tem o valor 0 ou 1. Isso significa que podemos substituir && por &. 91 bytes:
E agora percebemos que estávamos imprimindo um espaço extra. E sim, não precisamos de printf () para imprimir apenas um único símbolo. 86 bytes:
Melhor ainda. Observe que a condição i * i> = j * j é a mesma que i> = abs (j), mas menor. Vamos mover puts () para a expressão de incremento do loop. E adivinha? Na verdade, não precisamos do aparelho em torno de i + j. 78 bytes:
Você sabia que putchar () retorna o caractere impresso? Vamos usar o XOR para testar os números de equivalência. Vamos substituir o espaço pelo código ASCII, 32. Lembre-se que o código de final de linha é 13. E finalmente: você sabia que o GCC / Clang suporta https://en.wikipedia.org/wiki/Elvis_operator ? 73 bytes:
Finalmente, adivinhe? Não precisamos de dois para loops. Podemos substituir feio ~ i + j por apenas ij. 70 bytes:
Trabalho futuro: mudar a direção do loop? Isso pode economizar alguns bytes, se feito corretamente.
fonte
SOGL V0.12 ,
13109 bytesIsso usa um recurso que acabei de adicionar , mas foi documentado há um tempo atrás.
Experimente aqui!
Nesse link
,
é adicionado porque isso espera a entrada na pilha e{
adicionado porque, caso contrário,,
seria executado toda vez que o loopfonte
Haskell , 73 bytes
Experimente online!
fonte
Gaia , 16 bytes
Experimente online!
Explicação
fonte
Python 2 ,
8683 bytes-3 graças a officialaimm
Experimente online!
fonte
Gelatina , 15 bytes
Experimente online!
fonte
Oitava,
59635857 bytesExperimente online!
fonte
99
: Boa idéia :-)Java, 292 bytes (desculpe)
fonte
boolean a=1<0,o=L%2>0;
.. 2. Se você não precisai
, usar este loop:for(i=0;i++<n;)
. 3. Você pode se livrar deo
:j%2<L%2
thenj%2>L%2
. 4. Usard
como flip leva tantos caracteres: apenas façaj<(x<0?-x:x)
. 5. Você tem muito mais variáveis do que o necessário. 6. Você não precisa de um programa completo: um lambda ou método é suficiente. - Se você quiser um exemplo de Java, verifique minha resposta .Haskell , 81 bytes
Experimente online!
fonte
Java (OpenJDK 8) , 116 bytes
Experimente online!
Explicação
fonte
C ++, 135 bytes
Ok, aqui está minha chance com C ++:
Experimente Online (ideone)!
fonte
Haskell ,
140137 bytesExperimente online!
Salva 3 bytes thanls no Challenger5
Eu não acho que isso é ótimo ...
f
produz uma das linhas (m
= 0 ou 1 é o módulo do número da linha,n
é o número da linha)g
intercala linhas "ímpares" e "pares" e adiciona ao resultado um espelho de si mesmo.fonte
f
como uma função de infixo (como em(m#n)s=...
) em vez de uma função de prefixo.Pitão , 25 bytes
Experimente aqui.
fonte
Gelatina , 18 bytes
Experimente online!
fonte
Mathematica 105 Bytes
Talvez eu possa cortar outro byte ou dois, mas a sobrecarga de caracteres no processamento de strings no Mathematica cria desafios simples como esse não competitivo.
fonte
J, 54 bytes
Experimente online! (observe que a saída no TIO tem uma nova linha e três espaços, mas isso não é da chamada de função - provavelmente é exatamente o que o intérprete J faz automaticamente).
Acho que a idéia geral para resolver isso é correta, mas há pequenas coisas que provavelmente estou fazendo de maneira subótima que estão adicionando ao número de bytes.
Variantes anteriores
55 bytes
56 bytes
Explicação
Isso será dividido em algumas funções. Além disso, não fui tão meticuloso com as últimas partes da explicação, então deixe-me saber se você deseja uma explicação melhor para uma determinada parte e posso editá-la.
dup
duplica cada caractere tantas vezes quanto seu índice (mais um) na stringspace
insere espaços entre cada caracterepad
preenche os caracteres com a quantidade certa de espaçostrans
transpõe a matriz resultanteExemplo de chamada:
Dup
Os resultados estão em caixas para impedir que J preencha as extremidades com espaços (já que são de comprimento desigual).
Exemplo de chamada:
Espaço
Exemplo de chamada:
Almofada
Basicamente, preencha o primeiro elemento com comprimento - 1 espaços, o segundo com comprimento - 2, etc. Ele também remove o boxe.
Exemplo de chamada:
Transpor
Esta é apenas a função
|:
interna que aceita a transposição de uma matriz.fonte
|:@(-@i.@-@#|."0 1((,@,.~' '#~#)@$"0~1+i.@#))
. certamente poderia ser jogado ainda mais. esta parte-@i.@-@#
é um pouco de frutas penduradas, provavelmentef=. <some tacit expression>
, em seguida,5!:2 <'f'
dá uma visualização em caixa e5!:4 <'f'
dá uma visualização de árvore. no meu caso, tente executar$"0~1+i.@#
com alguma corda primeiro, depois execute tudo à direita de|."0 1
, entenda isso|."0 1
e tudo à esquerda, salve a transposição final, está apenas fazendo as rotações necessárias.#
help aqui, 26 bytes with|:@((-#)|."_1(1j1##)"0)~#\
JavaScript (ECMAScript 6), 161 bytes
Experimente online!
fonte
Perl 5 , 86 + 2 (-F) = 88 bytes
Usei as sugestões do @ Dom e alguns dos meus próprios ajustes para diminuir a contagem de bytes.
Experimente online!
fonte
-aF
para inserir todas as letras@F
e alguns pequenos ajustes (-F
conta como 3, pois precisa de um espaço depois): Experimente online!perl -e'code...'
eperl -eF 'code...'
. Também-a
é desnecessário ao usar-F
, para que o byte possa ser cortado.-F
aceita um argumento, mas não queremos passar um (-F
nos permite controlar o que se-a
divide, sem argumento, divide cada caractere sozinho), portanto é a diferença entreperl -ae '...'
eperl -aF -e '...'
. Por padrão,-a
divide-se em/\s+/
. Espero que ajude a esclarecer!$#F
! Sempre esqueça disso!q / kdb +, 55 bytes
Solução:
Exemplo:
Explicação:
FAÇAM. versão não-gasta é 66 bytes:
Bônus:
Para obter a mesma saída que o exemplo (74 bytes):
fonte