Inspirado na saída com erros na resposta Clojure da @Carcigenicate para o desafio Print this diamond .
Imprima este texto exato:
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1234567890
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
(Do meio para fora em ambas as direções, cada dígito é separado por mais um espaço que a linha anterior.)
Regras do desafio:
- Não haverá entrada ( ou uma entrada não utilizada vazia ).
- Os espaços à direita são opcionais.
- Uma única linha nova à direita é opcional.
- Espaços iniciais ou novas linhas não são permitidos.
- Não é permitido retornar um array de strings. Você deve imprimir o texto ou ter uma função que retorne uma única string com o resultado correto.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.
code-golf
ascii-art
number
kolmogorov-complexity
Kevin Cruijssen
fonte
fonte
Respostas:
SOGL V0.12 , 12 bytes
Experimente aqui! Explicação:
fonte
Python 2 ,
59 57 5655 bytesExperimente online!
Explicação
i=8
- Atribui o valor8
a uma variável chamadai
.exec"..."*17
- Execute esse bloco de código (...
) 17 vezes.print(...)
- Saída do resultado.' '*abs(i)
- Crie uma String com um espaço repetido|i|
vezes..join('1234567890')
- Intercalar a sequência criada acima com1234567890
, de modo que|i|
sejam inseridos espaços entre os dígitos.i-=1
- Decrementai
e, executando-o 17 vezes, alcança-8
, o que cria um padrão repetitivo com a ajuda deabs()
.fonte
exec
Também pode ser feito sem 55 bytes . Utilizou uma abordagem semelhante para reduzir o Python 3 para 57 bytes . Não via nenhuma maneira óbvia de diminuí-lo, omitindoexec
, mas achava que eu mencionaria isso como uma possibilidade.Vim, 35 bytes:
Explicação:
fonte
05AB1E ,
1413 bytesExperimente online!
Explicação
fonte
s
... faz sentido juntar uma string a uma lista ou uma lista com uma string? Vou sugerir melhorias para Adnan. Ah, e há.∊
paraû»
.8F9ÝÀNð×ý}».∊
Eu fiz uma nave espacial! E fiquei empolgado ao sugerir uma edição de 12 bytes.C64 ASM, 358 bytes (102 bytes compilados com o basicstub)
Este é o mais próximo que pude obter devido a limitações óbvias:
(Provavelmente poderia ser otimizado um pouco)
fonte
TSQL,
220148 bytesMelhoria postada por ZLK:
Resultado:
fonte
DECLARE @ VARCHAR(MAX)=''SELECT TOP 17@+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))+' 'FROM sys.objects PRINT @
sys.objects
comsysobjects
, e 1object_id` comid
Olhei para tabelas curtas nosys
esquema, mas nada menos tinham colunas tão curto quantosysobjects
CAST
(com oPOWER(10)
) paraVARCHAR
LOG10
eREPLICATE
:DECLARE @o VARCHAR(MAX)=''SELECT TOP 17 @o+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',replicate(' ',LOG10(POWER(10,ABS(ROW_NUMBER()OVER(ORDER BY id)-9)+1)/10)))+' 'FROM sysobjects PRINT @o
@
três caracteres.APL (Dyalog) , 22 bytes
Experimente online!
⎕D
D igits de zero a nove1⌽
gire um passo para a direita (coloca zero no final)⊂
incluir (para tratar como unidade)(
…)↑¨¨
Para cada um desses números, use o número de caracteres de cada uma das letras:⍳17
um a dezessete¯9+
subtrair nove|
encontre os valores absolutos1+
Adicione um∊¨
alistar (achatar) cada↑
alterar uma camada de profundidade em um nível de classificação (matrificar)fonte
>:
.APL is not a golfing language
...↑⊃¨,/¨(1+|¯9+⍳17)↑¨¨⊂1⌽⎕D
... ಠ_ಠHaskell ,
5855 bytesExperimente online!
Esta é basicamente a solução da @nimi :)
fonte
Java 11 (JDK) , 98 bytes
Experimente online!
String::repeat
.Resposta anterior ( Java (OpenJDK 8) ),
113112 bytesExperimente online!
Explicações
Basicamente, estou construindo as seguintes
String
17 vezes (N
é uma variável, não um valor real):São todos os dígitos esperados, unidos por
%1$Ns
ondeN
está o número de espaços entre cada dígito.%1$Ns
basicamente significa "pegar o primeiro argumento e preenchê-lo até que o comprimento seja pelo menosN
". Além disso,%1$0s
não é suportado por isso um caso especial%1$s
é feita para0
.Por fim, formato-imprimo essa string usando um único argumento:
""
:, para que o formatador reutilize sempre a mesma string vazia, preenchendo-a com espaços, conforme necessário.Economizar
fonte
()->
poro->
para salvar um byte. :)o
umint
e usá-lo em seu loop for?for(o=-9;++o<9;)
Japt
-R
,1918161413 bytesTeste ou experimente online
Explicação
fonte
9ÆAõ%A qXîÃw ê ·
JavaScript (ES2017),
83737268 bytesObrigado Shaggy por salvar 10 bytes. Obrigado Craig por economizar 1 byte. Obrigado arcos por salvar 4 bytes.
fonte
Math.abs
. Eu também fez aa
lista não codificado, mas isso é uma preferência ...a=[...Array(10).keys()];for(i=-8;i<9;i++)console.log(a.join(' '.repeat(i<0?-i:i)))
[..."1234567890"].join("".padEnd(i<0?-i:i))
[...Array(10).keys]
teria0
como o primeiro elemento, não o último.for(i=-8,s="";i<9;i++)s+=[..."1234567890"].join("".padEnd(i<0?-i:i))+`X`
, ondeX
é uma nova linha realBrachylog ,
302928 bytesExperimente online!
Salvo um byte graças a Leaky Nun .
Explicação
fonte
Carvão , 18 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Nota:
Cast(1)
leva o mesmo número de bytes porque"1"
precisaria de um separador antes":"
(o que, por acaso, o deverbosifier falha ao inserir).fonte
R , 108 bytes
Apenas colando e recolhendo as cordas.
Experimente online!
Edit: obrigado por Challenger5 por apontar um problema. Corrigido agora.
Edit 2: salvou um byte graças ao bouncyball.
fonte
paste0
vez depaste
então tinha que adicionar um byte :(el
:el(strsplit("1234567890",""))
em vez destrsplit("1234567890","")[[1]]
paste
declarações, usando osep
argumento paracat
e fazer um pouco mais para obtê-lo para 70 bytesPython 3 ,
585754 bytesExperimente online!
(obrigado a @flornquake pelos últimos três bytes; esqueci completamente de usar
sep
para salvar vs..join
)fonte
while i+9:print(*'1234567890',sep=' '*abs(i));i-=1
Pitão ,
1413 bytes1 byte graças ao Mnemonic.
Experimente online!
fonte
Java 8,
235234206163 bytesAtualização : -28 bytes graças a Leaky Nun!
Atualização 2 : -43 bytes graças a Leaky Nun novamente!
Ungolfed:
Experimente online
EDIT: O código anterior estava errado! Cometi um erro ao jogar o código, ele deve funcionar como pretendido agora!
fonte
public
e livrar-se de alguns espaços desnecessários. E há mais algumas coisas a melhorar, mas sugiro ler as dicas e ver onde você pode melhorar. Mais uma vez bem-vindo, e aproveite a sua estadia! :)Casca , 21 bytes
Este é um programa completo que imprime em STDOUT. Experimente online! Existem muitos espaços à direita.
Explicação
O Husk ainda está faltando muitas coisas essenciais, como uma função de intervalo de dois argumentos, então partes desta solução são um pouco invasivas.
fonte
ṁs`:0ḣ9
poruṁsḣ10
para gerar a sequência "1234567890" com menos um byte!T-SQL 145
152bytesAtualizada para usar:
master..spt_values
para gerar números (WHERE type = 'P'
, estes são sempre consecutivos, começando em 0)TOP 17
ideia deResultados:
(Obrigado @JanDrozen pela idéia REPLACE)
fonte
SELECT TOP 17REPLACE('1x2x3x4x5x6x7x8x9x0','x',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))FROM sys.objects
(supondo que você não precise imprimir).Clojure,
12699 bytes-27, corrigindo alguns erros estúpidos. O uso externo de
a
não era necessário, então pude me livrara
completamente e escrever apenasapply str
uma vez. Isso também me permitiu usar uma macro de função para a função principal, que salvou alguns bytes. Também inline a chamada para, emMath/abs
vez de voltar a ligarn-spaces
.Basicamente, uma porta Clojure da idéia Python do @ Mr.Xcoder. Em retrospecto, eu deveria ter usado o
abs
/range
método para o desafio de diamantes, mas talvez não tenha produzido a saída com bug!Bem simples. Une a sequência numérica a um número de espaços que depende da linha atual.
fonte
Gelatina , 15 bytes
Experimente online!
fonte
Mathematica, 92 bytes
Experimente online
copiar / colar código com ctrl-v,
pressione Shift + Enter para executar
fonte
C, 97 bytes
Seu compilador provavelmente reclamará muito sobre esse código; o meu lançou 7 avisos de 4 tipos diferentes. Pode melhorar o código mais tarde.
Experimente online!
fonte
C (gcc) , 76 bytes
Experimente online!
Ele gera alguns espaços à direita, que deveriam estar OK.
Ele imprime os números usando campos justificados à esquerda de comprimento dinâmico - é isso que a string de formato
%-*d
serve a .O loop interno possui alguma inicialização engraçada (começa em 10; qualquer múltiplo de 10 seria bom) para "simplificar" sua condição de terminação.
fonte
Carvão ,
21 20 1918 bytesExperimente online!
Link para a versão detalhada . Basicamente, crio a parte inferior do desenho e depois reflito o texto.
fonte
E…⁹⪫E…·¹χI﹪κχ× ι‖B↑
(também por 19 bytes), mas o intérprete não parece gostar (não consigo ver o que há de errado nisso).Map
era um arenque vermelho, então agora eu postei minha resposta de 18 bytes.CJam , 21 bytes
Experimente online!
Explicação
fonte
9{S*A,(+\*}%_W%);\+N*
Lote, 163 bytes
Nota: A primeira linha termina em 9 espaços. Explicação: Usa numeração de linha criativa! O primeiro loop precisa executar 9 vezes e excluir um espaço a cada vez, enquanto o segundo loop precisa executar 8 vezes e adicionar um espaço a cada vez. O primeiro é alcançado executando-o 7 vezes e caindo pela 8ª vez, enquanto o último é alcançado adicionando dois espaços e caindo para excluir um deles novamente.
fonte
SOGL V0.12 , 14 bytes
Experimente aqui!
Explicação:
fonte
PHP , 69 bytes
Experimente online!
fonte
PowerShell , 30 bytes
Experimente online!
Constrói um intervalo de
8,7,6...2,1,0,1,2...8
loops através de cada número. Dentro do loop, construímos uma série de1..9
concatenada com0
, em seguida,-join
os números na gama juntamente com o número apropriado de espaços. Cada sequência é deixada no pipeline e a saída é implícita na conclusão do programa.fonte