Desafio
Escreva o trecho mais curto possível de código, de modo que, quando N cópias forem concatenadas, o número de caracteres de saída seja N 2 . N será um número inteiro positivo.
Por exemplo, se o snippet fosse soln();
, a execução soln();
imprimiria exatamente 1 caractere e a execução soln();soln();
imprimiria exatamente 4 caracteres, e a execução soln();soln();soln();
imprimiria exatamente 9 caracteres, etc.
Qualquer caractere pode estar na saída enquanto o número total de caracteres estiver correto. Para evitar confusão entre sistemas operacionais, as \r\n
novas linhas são contadas como um caractere.
Os programas podem não ler sua própria fonte ou seu tamanho de arquivo ou usar outras brechas. Tratar este como um estrito Quine desafio.
A saída pode ir para stdout ou um arquivo ou uma alternativa semelhante. Não há entrada.
Os comentários no código estão corretos, assim como o meio da execução.
Qualquer caractere pode estar no programa. O menor envio em bytes vence.
fonte
Respostas:
TECO, 4 bytes
V
imprime o conteúdo da linha atual no buffer de texto.1\
insere a representação de sequência do número 1 na posição atual.Portanto, na n- ésima iteração do programa, a primeira
V
produzirá N-1 cópias do caractere1
, depois adicionará outra1
ao texto e depois produzirá n1
s.fonte
Brainfuck,
1716 bytesVocê pode testá-lo aqui . Apenas use o fato disso .
n2+2n+1=(n+1)2
fonte
Brainfuck, 11
Eu vi a primeira resposta de Brainfuck e pensei que era muito longo :)
A saída pode ser mais fácil de ver se você substitui o plus por muito mais vantagens.
Na enésima iteração, cada loop gera N - 1 cópias do caractere com valor ASCII 1 e, em seguida, mais uma com
+.
.fonte
Python 2, 22
Imprime a sequência vazia, depois dois
x
, depoisx
quatro e assim por diante. Com a nova linha após cada sequência, isso sai paran*n
caracteres.Uma cópia:
"\n"
(1 caractere)Duas cópias:
"\nxx\n"
(4 caracteres)Três cópias:
"\nxx\nxxxx\n"
(9 caracteres)Para impedir que a variável inicial
a
seja reinicializada a cada execução, encerro o código com a;a
, que é benigno por si só, mas combinado com o próximo loop para criar o bode expiatórioaa
a ser atribuído. Esse truque não é meu; Eu vi isso em uma resposta anterior. Eu apreciaria se alguém pudesse me apontar para que eu pudesse dar crédito.fonte
,
depoisprint a
deve funcionar.print a
imprime uma nova linha após cada impressão.CJam, 6 bytes
Usa o fato de que .
n2 + n + (n+1) = (n+1)2
fonte
:L..1+
é a mesma ideia no GolfScript...n+
em GolfScript, mas essa nova linha traquina ... :(:L
porque não é usado./// , 21 bytes
Tenho certeza de que existe uma maneira muito curta e distorcida de resolver isso em ///, mas ainda não consegui encontrar nada além da maneira "direta":
Isso se baseia na abordagem da impressão de números ímpares consecutivos. O snippet consiste em um
1
no início que é impresso e duas substituições que adicionam mais dois1
s à primeira parte de cada cópia consecutiva do snippet. Vamos passar por isso porN = 3
. O seguinte deve ser lido em grupos de 3 ou mais linhas: 1. o código atual, 2. o (s) token (s) processado (s), 3. (e seguintes) um comentário sobre o que o token acima faz.Curiosamente, funciona tão bem se movermos
1
o final:fonte
> <> , 14 bytes
Usa a idéia "soma de números inteiros ímpares consecutivos iniciando em 1". Ele começa com 1 e o multiplica por 100 a cada vez, aumentando progressivamente a duração da saída em incrementos de 2.
Por exemplo, anexar 5 cópias dá
Testei canalizando a saída para um arquivo e não vi uma nova linha à direita.
Demolir
fonte
CJam,
109 bytesIsso imprime N 2 espaços onde
N
é o número de cópias do código.Expansão do código :
Experimente online aqui
fonte
Python 2, 20 bytes
fonte
Java - 91 bytes
Esta solução é equivalente a outra em Python. Certamente não vai ganhar, mas foi divertido :)
fonte
Perl, 14 bytes
Isso precisa ser executado com a
-l
opção de comando do Perl , que fazprint
acrescentar novas linhas.Ele imprime a variável padrão e
$_
, em seguida, acrescenta dois sublinhados por substituição.Exemplo:
fonte
say
?-E
.Brainfuck, 10 caracteres
Ambas as soluções anteriores Brainfuck foram waaay muito longo (16 e 11 caracteres) então aqui está um mais curto:
No
n
-ésimo bloco, imprime2*n-1
caracteres (com pontos de código de2*n-1
até1
)fonte
Prelúdio ,
1812 bytesIsso imprime N 2 guias. Ele assume um intérprete compatível com o padrão que imprime caracteres em vez de números; portanto, se você usar o intérprete Python, precisará definir
NUMERIC_OUTPUT
comoFalse
.A idéia é simplesmente usar o topo da pilha (que é inicialmente 0) como
2(N-1)
e imprimir as2N-1
guias, depois incrementar a parte superior da pilha em 2. Portanto, cada repetição imprime o próximo número ímpar de guias.fonte
Java - 59/44 (dependendo dos requisitos)
Aparentemente, podemos assumir que o código é executado em uma classe.
Se puder ir dentro de um método principal:
fonte
C, 87 bytes
Isso usa duas macros mágicas.
__COUNTER__
é uma macro que se expande para0
a primeira vez em que é usada,1
a segunda etc. É uma extensão do compilador, mas está disponível no mínimo pelo gcc, clang e pelo Visual Studio.__FILE__
é o nome do arquivo de origem. Incluir um arquivo no C / C ++ é literalmente o mesmo que colá-lo diretamente no seu código-fonte, por isso foi um pouco complicado de usar.Ainda seria possível usar essa técnica sem
__COUNTER__
. Nesse caso, a proteção padrão contra o uso do código duas vezes poderia ser usada para a#if
instrução e__LINE__
poderia ser usada para contar o número de caracteres necessários.fonte
Dyalog APL,
2019 bytesUma solução baseada em matriz.
Experimente aqui . Retorna uma sequência de repetições de . Explicação por explosão para :
N2
a
N = 2
fonte
STATA 20
Há uma nova linha à direita para garantir que a instrução display (di) funcione. Primeiro, exiba o número atual em $ a novas linhas (e um adicional do padrão de exibição). Adicione 2 a $ a.
Usa a abordagem de números pares (ou seja, números ímpares se aproximam de menos 1) com uma nova linha extra toda vez.
fonte
T-SQL 117
Observe o espaço à direita para garantir que a condição if seja verificada corretamente sempre.
Usa a abordagem de números ímpares. Não tenho certeza se há uma nova linha nas instruções selecionadas.
Não tenho certeza se existe uma maneira mais curta de criar uma tabela, se ela não existir.
fonte
PostScript, 35 caracteres
Cada passe "vaza" uma coisa na pilha, então
count
aumenta 1 em cada vez. Então ele usa o truque da soma dos números ímpares.A saída de bytes é toda
\000
porque esse é o valor inicial das strings.fonte
Haskell, 72
Explicação
O operador apply
$
atua como se você colocasse parênteses ao redor do resto da linha (há exceções, mas funciona neste caso).aputStr
é uma função que usa uma string com o formato "abc ...", em que "abc" é a raiz quadrada do comprimento da string, incluindo abc. Ele analisará a string como um número inteiro e retornará uma string iniciando com abc + 1 e tendo esse comprimento ao quadrado. Por causa do$
operador, isso será chamado recursivamente em "1" N vezes.fonte
Pitão, 8 bytes
Isso se baseia no fato de que N 2 é igual à soma dos
N
números ímpares. Agora Pyth auto imprime uma linha nova, então eu tenho que apenas imprimirZ * 2
caracteres em cada código ondeZ
vai desde0
aN - 1
.Expansão do código :
Experimente online aqui
fonte
Golflua, 23 bytes
produz uma combinação de
&
e\n
caracteres.Código Lua equivalente
Cada vez que o snippet de código é executado, produz mais 2 caracteres de saída que na última vez, começando com 1 caractere. A
print
função acrescenta uma nova linha, então eu inicializo X para 0 em vez de 1.fonte
ActionScript - 27/26 bytes
ou
Como funciona:
Simplesmente comenta a primeira linha. Nota:
trace
adiciona uma nova linha. Ou talvez todos os IDEs que eu faço façam isso automaticamente.fonte
GML, 27
fonte