Imaginei que um "arco" era a melhor maneira de descrever esse padrão de números:
1234567887654321
1234567 7654321
123456 654321
12345 54321
1234 4321
123 321
12 21
1 1
Definido formalmente, cada linha consiste nos números de 1 a 9-n
, (n-1)*2
espaços e números de 9-n
1 (onde n
está a linha atual).
Sua tarefa é escrever, usando o código mais curto possível, um pequeno script / programa que imprima o padrão acima, sujeito às seguintes restrições:
- Você não pode codificar o padrão inteiro. Você pode codificar apenas uma única linha do padrão, no máximo.
- Seu programa deve imprimir uma nova linha (qualquer combinação de
\n
ou\r
) no final de cada linha.
Pronto ... pronto .... vai!
code-golf
ascii-art
number
kolmogorov-complexity
Nathan Osman
fonte
fonte
123456787654321
, uma vez que equivale a11111111^2
;-)11111111^2 == 123465787654321 != 1234567887654321
(aviso a repetida8
)Respostas:
Python 2,
65555351Encurtado usando algumas das idéias de ugoren .
fonte
s=s[1:]
por loop ewhile s:
GolfScript (25 caracteres)
fonte
APL (18)
Explicação:
1↓⎕D
: a sequência de dígitos ("0123456789") menos seu primeiro elemento↑∘(1↓⎕D)¨⌽⍳8
: selecione os primeiros [8..1] caracteres ('12345678', '1234567' ...)↑
: formato como matriz (preenchendo os caracteres não utilizados com espaços em branco)k,⌽k←
: armazenark
e exibir,k
seguido pelo espelhamento vertical dek
fonte
Ruby:
6150 caracteresExemplo de execução:
fonte
Befunge - 3 x 18 = 54
Eu senti que tinha que fazer algo com befunge, faz muito tempo desde a última vez que o usei. Esse problema foi o mais apropriado para o idioma.
É terrivelmente lento devido ao loop de impressão que leva cerca de 8 ações por caractere (os estilos de contagem são diferentes).
fonte
JavaScript, 71
fonte
s="1234567887654321";for(i=10;--i;)console.log(s=s.split(i).join(" "))
para 70 caracteres, @SteveWorleyC, 83 caracteres
fonte
Python 2,
7562Não vai superar a resposta do Volatility, mas aqui está outra abordagem usando as seqüências mutáveis do python (
bytearray
):Editar
Encontrei uma versão mais curta, usando
str.replace
:fonte
Perl, 41
-E
interruptor de mais . Total de caracteres na linha de comando: 50requer pelo menos perl5, versão 10.
fonte
-E
é uma adição de um byte ao programa.Mathematica
92 85 67 5451Método 1 : (54 caracteres) Cria um array usando o número da linha, o número da coluna e a distância da borda esquerda-direita.
Método # 2 : (67 caracteres) Preencher intervalos de encurtamento sempre.
Método 3 : (85 caracteres) Preencher seletivamente cada linha de uma matriz.
Comece com uma lista de 8 caracteres de espaço. Substitua as posições 1 e 16 por "1"; substitua "2" nas posições 2 e 15, etc.
Método 4 : (86 caracteres) Esvazie seletivamente cada linha de uma matriz.
Método # 5 : Usando strings (92 caracteres)
fonte
()
e substituir#1
por#
:Grid@Array[If[#2<9,#2,17-#2]/.x_/;x+#>9:>" "&,{8,16}]
Array
às vezes pode criar boas tabelas sem a necessidade de adicionar iteradores.PHP, 68
(Inspirado pela resposta de HamZa)
for($n=8;$n;$r[]=$n--)echo str_replace($r," ","1234567887654321\n");
Diz que o str_replace do PHP pode aceitar uma matriz para pesquisa e uma string para substituir, substituirá todos os itens da matriz pela string especificada. Após cada iteração, o número atual é adicionado à matriz de pesquisa, removendo-o do próximo loop.
Exemplo do código em ação: http://ideone.com/9wVr0X
fonte
<pre>
tags. Quando interpretados como texto html, os espaços são recolhidos e as novas linhas são ignoradas, mas se você verificar a fonte, verá o contrário.Marbelous 165
Pseudo-código:
fonte
Python 2.x -
73656361 caracteresfonte
PHP, 76
fonte
K, 28
.
Você pode generalizá-lo por 36:
{-1_a,'|:'a:(#*m)$'m:{-1_x}\,/$1+!x}
fonte
Javascript, 67 caracteres
Insipired pela resposta de steveworley (eu gostaria de comentar se eu pudesse):
Fragmento de código
A presença da última nova linha segue as regras.
update: recorte 2 caracteres removendo parênteses (precedência do operador) e 1 removendo um espaço desnecessário
Parecia que estava me controlando, porque, independentemente de quantas maneiras diferentes eu tentasse reduzir ou simplificar ao codificar um segmento de código, o comprimento permaneceu o mesmo até que eu aplicasse a regra "Eu acho que isso conta" escrita abaixo.
(Se a impressão contar como o que ocorre quando isso é executado no console do chrome)
fonte
Brainfuck: 542 bytes
fonte
Mathematica , 59
61 usando minhas próprias idéias:
Ou 59, emprestando da resposta de David:
fonte
R: 52
fonte
Haskell, 84
Um ponto de partida para alguém melhorar:
A parte mais provável seria
l++reverse l
deixarlet
claro o ponto, deixando-nos livrar da declaração, mas eu pude descobrir que eraap
, o que requer importações.fonte
PostScript: 105 caracteres
O manuseio de strings não é fácil no PS, mas pode ser um código relativamente simples:
Uma versão um pouco mais longa com 120 caracteres, mas pode gerar arcos numéricos diferentes, substituindo o 8 no início da segunda linha por qualquer número no intervalo de 1 a 9:
fonte
GoRuby 2.1
36 caracteres
Ungolfed
fonte
K 20
fonte
TSQL, 148
Editar: até 148 com a sugestão de manatwork e ajustar para ORDER BY.
Legível:
Golfe:
Saída:
fonte
1
vez de sequência de caracteres em'1'
que você ocast
coloca imediatamentevarchar
. Isso me dá 149 caracteres:with t as(select 1n,cast(1as varchar(max))o union all select n+1,o+char(n+49)from t where n<8)select o+space(16-2*n)+reverse(o)from t order by o desc
.Haskell, 79
Isso funciona substituindo os caracteres> n por
' '
, onde os caracteres n são originários de "87654321" (que por acaso é a cauda da string para a substituição).fonte
PHP: 61 caracteres (ou 60 caracteres se você substituir o \ n por uma nova linha ASCII real)
(Inspirado nas respostas de GigaWatt e HamZa)
http://ideone.com/FV1NXu
fonte
PowerShell: 38
Código de golfe
Passo a passo
8..1|%{
...}
integra de 8 a 1 em um loop ForEach-Object.-join(
...)
une a saída do código aninhado em uma única sequência sem delimitadores.1..$_
gera números inteiros ascendentes de 1 ao número inteiro atual no loop.+" "*(8-$_)
adiciona um espaço duplo, multiplicado pela diferença entre 8 e o número inteiro atual, à saída.+$_..1
adiciona números inteiros, descendentes do número inteiro atual a 1, na saída.fonte
Javascript com lambdas, 147
Pode ser verificado no Firefox.
fonte
CJam, 22 caracteres
Não é uma resposta válida (como a linguagem foi desenvolvida após a pergunta) e também não é a mais curta, mas aqui vai:
Experimente online aqui
fonte
Lua, 62
fonte