Esta questão está se espalhando como um vírus no meu escritório. Existem várias abordagens:
Imprima o seguinte:
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
123456787654321
1234567654321
12345654321
123454321
1234321
12321
121
1
As respostas são pontuadas em caracteres com menos caracteres sendo melhores.
code-golf
ascii-art
kolmogorov-complexity
Eric Wilson
fonte
fonte
Respostas:
J,
29 26 24 23 2221 caracteresObrigado a FUZxxl pelo
"+
truque (acho que nunca useiu"v
antes, heh).Explicação
fonte
"0]
escrever"+
.,.0(<#":)"+9-+/~|i:8
⍪↑{(0<⍵)/⍕⍵}¨9-∘.+⍨|9-⍳17
APL (
3331)Se espaços que separam os números forem permitidos (como na entrada Mathematica), ele poderá ser reduzido para
2826:Explicação:
⍳9
: uma lista dos números de 1 a 91↓⎕D
:⎕D
é a sequência '0123456789',1↓
remove o primeiro elemento⍴∘(1↓⎕D)¨⍳9
: para cada elemento N de⍳9
, retire os primeiros N elementos de1↓⎕D
. Isso fornece uma lista: ["1", "12", "123", ... "123456789"] como seqüências de caracteres⌽¨
: inverta cada elemento desta lista. ["1", "21", "321" ...](Programa curto :)
⍳¨⍳9
: a lista de 1 a N, para N [1..9]. Isso fornece uma lista [[1], [1,2], [1,2,3] ... [1,2,3,4,5,6,7,8,9]] como números.⌽∘⍕∘
: o reverso da representação de string de cada uma dessas listas. ["1", "2 1" ...]A←⌽↑
: cria uma matriz da lista de listas, preenchendo à direita com espaços e depois inverta isso. Isso fornece o quadrante superior do diamante. É armazenado em A.A←A,0 1↑⌽A
: A, com o reverso de A menos sua primeira coluna anexada à direita. Isso fornece a metade superior do retângulo. Isso é armazenado em A novamente.A⍪1↓⊖A
:⊖A
é A espelhado verticalmente (dando a metade inferior),1↓
remove a linha superior da metade inferior eA⍪
fica a metade superior em cima1↓⊖A
.fonte
Clojure,
191179 bytes-12 bytes, alterando o externo
doseq
para aloop
, o que me permitiu me livrar doatom
(yay).Um duplo "for-loop". O loop externo (
loop
) passa por cada linha, enquanto o loop interno (doseq
) passa por cada número da linha, que está no intervalo(concat (range 1 n) (range n 0 -1))
, onden
é o número mais alto da linha.Devido a um erro na lógica da minha primeira tentativa (inserindo acidentalmente os espaços de prefixo entre cada número), consegui o seguinte:
Nem mesmo correto, ignorando o bug óbvio, mas parecia legal.
fonte
Mathematica
83 49 43 5451Com 3 bytes salvos, graças a Kelly Lowder.
Análise
A parte principal do código ,,
Sum[DiamondMatrix[k, 17], {k, 0, 8}]
pode ser verificada no WolframAlpha .A seguir, é mostrada a lógica subjacente da abordagem, em uma escala menor.
fonte
f = Table[# - Abs@k, {k, -8, 8}] &; f[f[9]] /. n_ /; n < 1 -> "" // Grid
Table[9 - ManhattanDistance[{9, 10}, {j, k}], {j, 18}, {k, 18}] /. n_ /; n < 1 -> "" // Grid
Grid@#@#@9&[Table[#-Abs@k,{k,-8,8}]&]/.n_/;n<1->""
50 caracteres.ArrayPlot[Sum[k~DiamondMatrix~17, {k, 0, 8}], AspectRatio -> 2]
Python 2,
72696761Não inteligente:
fonte
s=`0x2bdc546291f4b1`
'L'
.C, 79 caracteres
fonte
Python 2,
6059Abusa de backticks e repunits.
fonte
in
palavra-chave pode ser removido, assim como você fez com oprint
teclado.L
nas sete linhas do meio de saída.GolfScript,
333130 caracteresOutra solução GolfScript
Obrigado a @ PeterTaylor por outro char.
Versões Previos:
( online )
fonte
17,{8-abs." "*10@-,1>.-1%1>n}%
Mathematica
5550454138fonte
Javascript, 114
Minha primeira entrada no Codegolf!
Se isso puder ser reduzido, por favor, comente :)
fonte
PHP,
9290 caracteresCalcula e imprime a distância de Manhattan da posição do centro. Imprime um espaço se for menor que 1.
Um usuário anônimo sugeriu a seguinte melhoria (84 caracteres):
fonte
<?
saltado por meta . Além disso, você parece ter alguns problemas de codificação no segundo código.<?
no bytecount. Também fiz outras melhorias.Carvão (não concorrente), 13 bytes
Não está competindo porque o idioma é (muito) mais novo que a questão.
Experimente online!
Quão?
Desenha nove diamantes numéricos concêntricos sucessivamente menores, um em cima do outro:
fonte
Lisp comum, 113 caracteres
Primeiro notei que os elementos do diamante podiam ser expressos assim:
etc.
x
calcula recursivamente a base (1, 11, 111, etc), que é ao quadrado e depois impressa centralizada porformat
. Para fazer os números subirem para o termo mais alto e recuar novamente, eu costumava(- 8 (abs (- n 8)))
evitar um segundo loopfonte
JavaScript, 81
fonte
PowerShell (2 opções):
928445 bytesExplicação:
1..8+9..1
ou1..9+8..1
gera uma matriz de números inteiros ascendendo de 1 a 9 e depois retornando a 1.|%{
...}
canaliza a matriz inteira em umForEach-Object
loop por meio do alias embutido%
.' '*(9-$_)+
subtrai o número inteiro atual de 9 e, em seguida, cria uma sequência de muitos espaços no início da saída para esta linha.[int64]($x='1'*$_)*$x
define$x
como uma sequência de1
s, desde que o número inteiro atual seja grande. Em seguida, é convertido em int64 (necessário para gerar corretamente 111111111 2 sem usar a notação E) e ao quadrado.fonte
long
, em vez deint64
1..8+9..1|%{' '*(9-$_)+ +($x='1'*$_+'L')*$x}
Vim,
623938 pressionamentos de teclaObrigado a @DJMcMayhem por salvar uma tonelada de bytes!
Minha primeira resposta Vim, tão emocionante!
Tentei escrever os números através de uma gravação, mas é muito mais longo
Experimente online!
Explicação:
EDITAR:
Eu usei em
H
vez degg
e salvei 1 bytefonte
ma
e alterar`ai<space>
paraI<space>
.APL (Dyalog Classic) ,
2019 bytesExperimente online!
⎕d
são os dígitos'0123456789'
1↓
solte o primeiro ('0'
),⍨\
varredura de catenação trocada, ou seja, os prefixos invertidos'1' '21' '321' ... '987654321'
↑
misture em uma matriz preenchida com espaços:⌽
inverter a matriz horizontalmente(
...)⍣2
faça isso duas vezes:⍉⊢⍪1↓⊖
a transposição (⍉
) da própria matriz (⊢
) concatenada verticalmente (⍪
) com a matriz verticalmente invertida (⊖
) sem sua primeira linha (1↓
)fonte
R, 71 caracteres
Para os registros:
fonte
message(rep(" ",9-i),s[c(1:i,i:1-1)])
for(i in s<-c(1:9,8:1))...
para salvar um bytek (
6450 caracteres)Método antigo:
fonte
(1+!9)#'"1"
is,\9#"1"
CJam,
3127 bytesO CJam é muito mais recente que esse desafio, portanto, essa resposta não é elegível para ser aceita. Este foi um pequeno desafio à noite de sábado, no entanto. ;)
Teste aqui.
A idéia é formar primeiro o quadrante superior esquerdo. Aqui está como isso funciona:
Primeiro, forme a string
" 123456789"
usando8S*9,:)+
. Esta cadeia tem 17 caracteres. Agora, repetimos a sequência 9 vezes e depois a dividimos em substrings de comprimento 9 com9/
. A incompatibilidade entre 9 e 17 compensará todas as outras linhas um caractere à esquerda. Imprimindo cada substring em sua própria linha, obtemos:Portanto, se simplesmente soltarmos todas as outras linhas (o que funciona convenientemente
2%
), obteremos um quadrante conforme desejado:Finalmente, espelhamos isso duas vezes, transpondo a grade no meio para garantir que as duas operações de espelhamento sigam eixos diferentes. O espelhamento em si é apenas
Por fim, apenas juntamos todas as linhas com novas linhas, com
N*
.fonte
GolfScript, 36 caracteres
Supondo que isso seja um desafio ao código-golfe , aqui está uma solução básica do GolfScript:
fonte
Ruby, 76 caracteres
Melhorias são bem-vindas. :)
fonte
f=->x{[*1..x]+[*1...x].reverse};puts f[9].map{|i|(f[i]*'').center 17}
[*-8..8].map{|i|puts' '*i.abs+"#{eval [?1*(9-i.abs)]*2*?*}"}
Befunge-93 , 155 caracteres
Experimente online!
Definitivamente poderia ser mais jogado, mas é o meu primeiro programa Funge e minha cabeça já está doendo. Nos divertimos muito,
fonte
JavaScript, 170 bytes
Meu primeiro código de golfe :)
Golfe
Ungolfed
fonte
Perl
5654 caracteresAdicionado 1 caractere para o
-p
switch.Usa repunhas ao quadrado para gerar a sequência.
fonte
Perl, 43 + 1
adicionando +1 para o
-E
qual é necessário parasay
say$"x(9-$_).(1x$_)**2for 1..9,reverse 1..8
editar: encurtou um pouco
fonte
Python, 65
fonte
I=int;
seu código e substituir todas as instâncias subseqüentes deint
porI
int
é usado e é usado 3 vezes, portanto, salva 6 caracteres a um custo de 6 caracteres.Groovy
7775versão antiga:
fonte
each
porany
para salvar dois caracteres.Scala - 86 caracteres
fonte
Javascript, 137
Com recursão:
Primeira vez em CG :)
Ou 118
Se eu conseguir encontrar uma implementação JS que seja executada
111111111**2
com maior precisão.(Aqui: 12345678987654320).
fonte