Você deve escrever um programa ou função que receba um número inteiro positivo N
como entrada e imprima os primeiros N
caracteres do seu código. Se N
for maior que o comprimento do seu código, você deve continuar produzindo seu código ciclicamente.
A leitura do código-fonte de qualquer forma e a leitura do arquivo, do stdio etc. não são permitidas.
Exemplos
(supondo que seu código seja yourcode
)
Entrada => Saída:
5
=> yourc
10
=> yourcodeyo
22
=>yourcodeyourcodeyour
Esclarecimento
Seu programa deve ter pelo menos 1 byte de comprimento.
Respostas:
Python 2, 61 bytes
Experimente online!
fonte
> <> , 49 bytes
Metade do código está convertendo a entrada de uma string para um int. Se for permitido usar o ponto de código de uma única leitura de char do STDIN, esse programa será muito menor em 21 bytes:
Explicação
Vou usar o segundo programa para a explicação.
'
inicia a análise de string, pressionando cada caractere até que uma cotação de fechamento seja encontrada. Como o restante da linha não tem'
aspas, todos os caracteres, exceto o inicial,'
são empurrados para a pilha.Mas> <> é uma linguagem 2D toroidal; portanto, depois que a linha termina, o ponteiro de instruções volta ao início, pressionando
'
novamente e para a análise de cordas. O resultado é que colocamos tudo o que é necessário, exceto a cotação inicial, a saber'
é ASCII 39, então pressionamos a cotação inicial pressionando3d* = 3*13 = 39
. Em seguida, deslocamos a pilha para a direita (}
) e invertemos (r
), dando:Agora estamos prontos para começar a imprimir.
i
lê um caractere de entrada, mas> <> chars são basicamente números inteiros. No primeiro programa, oi
é substituído por um loop que converte uma sequência de dígitos de STDIN em um número inteiro.Em seguida, executamos o seguinte loop para imprimir os primeiros N caracteres:
fonte
CJam,
34 1716 bytesIsso pode ser muito jogado ..
Expansão do código :
Finalmente, qualquer coisa na pilha é impressa no STDOUT automaticamente
Experimente online aqui
fonte
Python 2, 117 bytes
Protip de vida: não execute
list(itertools.cycle(x))
. Por alguma razão, não consigo imaginar o porquê, trava o intérprete.fonte
itertools.cycle()
é um gerador de infinito, de modo a menos que seu computador tem memória infinita que você vai ter problemas :)JavaScript (ES6),
655250474139Usa o ES6
repeat()
para clonar o código e, em seguida, corta. Usa um comprimento codificado.Versão antiga (50):
Cria uma função
q
, usando um único parâmetro.Ele especifica o texto da função e chama recursivamente a função se
n
for maior que o comprimento do texto. Caso contrário, ele retornará uma substring do texto.Versão não ES6 (65):
fonte
.repeat
, para os requisitos cíclicos era simplesmente genial.repeat()
me permitiu cortar um monte, então eu usei isso./39+1
? por que não deixar apenas uma corda longa o suficiente?q=n=>('q='+q).repeat(n).slice(0,n)
funciona bem no firefoxJ - 24 car
Pega um único argumento inteiro positivo e cospe uma string.
J não tem nenhum truque de auto-referência, então fazemos da maneira certa. Explicado por explosão:
O
$
operador diádico em J usa ciclicamente itens do seu argumento da direita para ajustar as dimensões especificadas à esquerda. Quando a dimensão é um único número, esta é uma lista 1D simples de caracteres, por isso fazemos exatamente o que a pergunta faz.Tente você mesmo no tryj.tk .
fonte
quote
verbo?''''&,@(,&'''')@(#~ >:@(=&''''))
, ou em inglês, "dobre quaisquer'
caracteres e adicione um ao início e ao fim". J usa literais de string do tipo Ada, para que isso escape da string.k2 - 7 car
Em inglês, esta é uma função com argumento
x
cuja definição é "x
pegar a própria corda"._f
) é a função atualmente em execução mais interna. Aqui está a função{x#$_f}
.$
) converte seu argumento em uma string. No caso de uma função, ele cria uma string com a definição original da função.#
) leva os itens do lado esquerdo da lista no lado direito . No caso de uma string, os itens são caracteres, portanto, isso está fazendo exatamente o que queremos.Isso não funcionará no Kona de código aberto, porque parece criar buracos negros que consomem todas as tentativas de usá-los como argumentos para qualquer coisa. Não tenho certeza da semântica adequada do k3, mas elas provavelmente não são muito mais gentis.
Em Q, este é
{x#string .z.s}
e em k4{x#2_$.z.s}
. Temos que usar2_
para soltar dois caracteres iniciais no k4, por razões que apenas uma mãe poderia amar.fonte
Ruby,
66 6463 bytesO mesmo usando uma função para evitar chamadas
gets
é um pouco mais longo (81 bytes):As versões lambda dos mesmos são 69 e 65 bytes:
fonte
.cycle
é legal, eu tenho que lembrar disso. :) Você provavelmente pode reduzir.join
para*''
.String#format
vez de interpolação:eval s="$><<('eval s=%p'%s).chars.cycle.take(gets.to_i)*''"
Mathematica, 65 bytes
Todos os espaços são necessários para torná-lo uma solução adequada, incluindo a traseira. Esta é uma função pura, que você pode usar da seguinte maneira:
que imprime
Infelizmente, a aplicação
ToString
de uma função não produz exatamente do jeito que você inseriu a função, por isso não pode encurtar este removendo espaços em branco, encurtando#1
a#
ou usando a notação de prefixo para chamadas de função.fonte
#
para#1
"?MATLAB,
319144caracteresConsegui espremer alguns bytes do original:
fonte
JavaScript, 34 bytes
Função recursiva que repete os
n
tempos do código e, em seguida, corta o resultado.fonte
Japonês , 2 bytes
Experimente online!
O primeiro
î
é um método numérico que pega um parâmetro e o repete no comprimenton
. Por ser o primeiro método,n
torna-se a entrada. O segundoî
é moldado em uma corda e repetido.Isso transpila para:
n.î("î")
-> Repita"î"
até atingir o comprimenton
Solução de 8 bytes
Experimente online!
îQi"îQi"
transpiles paran.î(Qi"îQi")
fonte
R, 203 bytes
Quando N = 203, o código é totalmente impresso.
Quando N = 50, o código se apara.
Quando N = 300, o código se repete parcialmente.
fonte
(f=function(N){s=paste0("(f=",paste0(capture.output(f),collapse=""),")");cat(rep(s,N%/%nchar(s)),substr(s,1,N%%nchar(s)),sep="")})(200)
Matlab (57)
O
1
índice inicial (em vez de0
) na última linha é porque a função do Matlabtype
introduz um avanço de linha inicial, que deve ser removido. Agradecemos a Dennis por sua correção (último índice) e por sua sugestão (nnz
menor quenumel
).fonte
-1
). - Acho que você também pode remover a segunda nova linha e trocarnumel
pornnz
.type f
parte não se choca com o requisito Ler seu código-fonte de qualquer forma e ler arquivos, stdio, etc. não é permitido ?type
provavelmente acessa o disco rígido. Você acha que eu deveria remover a resposta?mod
ideia -indexing pelo caminho.)Unário (versão 1-8) , 23855 bytes
Assume a entrada como unário de '1's e o código é 23855' 1's (
,[.,]
)fonte
Japonês ,
4028 bytesPrimeira vez que escrevemos um quine, então isso provavelmente pode ser bastante reduzido. Por outro lado, estou muito feliz por ter conseguido funcionar.
Levando a nova linha intencional, a segunda linha é data e o restante desembrulha os dados, depois repete toda a sequência resultante até atingir o comprimento igual à entrada.
Raspou uns impressionantes 12 bytes graças a Oliver .
Experimente online!
fonte
tTU
com¯U
e você pode usarî
no lugar dep
movendo-a para a frente: Experimente onlineîR+Q+V+Q+R+V
deve funcionar muito bem.î
, é muito útil. Muito obrigado!C ++, 305
Explicação Além do caractere de escape, todos os outros caracteres são impressos. O método principal está dentro da string se, dentro da main, a string completa é criada e impressa em stdout
fonte
Pitão,
151314 bytesExperimente online!
Versão modificada do Pyth quine padrão .
fonte
<jN*Q]"<jN*Q]<jN*Q]"<jN*Q]<jN
errado?<jN*Q]"<jN*Q]"
parece funcionar?Hoon , 185 bytes
Defina
f
o código do programa como uma fita, mas com "k" para si mesmo. Divida a fita no caractere 5, configurando variáveis[p=left q=right]
. Solde as cordasp
, a corda originalf
e tudo depois do primeiro caractere deq
. Repita essen
tempo da sequência e retorne os primeirosn
caracteres.Fazer isso foi um pouco dificultado pelo fato de o stdlib de Hoon não ter uma função de formato ou encontrar e substituir ... Além disso, não sei por que precisamos de outra conversão após a
scag
, pois ela deve manter as informações de tipo. Assim vai.fonte
Jstx , 7 bytes
Experimente online!
fonte
Perl 5 com
-pa
, 48 bytesExperimente online!
fonte
Gol> <> , 12 bytes
Experimente online!
Como funciona
k
pode quebrar várias vezes, portanto, não precisamos duplicar a pilha inteira, dependendo da entrada.fonte
SmileBASIC,
10666 bytesfonte
KSFTgolf - 4 caracteres, 6 bytes
KSFTgolf se um idioma que eu estou tentando criar para o código de golfe. Eu tenho mudado bastante, então isso provavelmente não deve contar.
fonte
☃
código, que se parece totalmente com algo que foi feito especificamente para esse desafio (como não há outros blocos de código baseados em unicode em todo o arquivo).Stax , 24 bytes
Execute e depure
Adaptação do
"34bL"34bL
quine.fonte
J, 41 bytes
Agora isso foi um quebra-cabeças!
Explicação:
Exemplos:
fonte
Ly , 28 bytes
Experimente online!
fonte
Java 10,
193176 bytesExplicação:
Experimente online.
quine -part:
var s
contém o código fonte não formatado.%s
é usado para inserir esta String em si mesma com os.format(...)
.%c
,%1$c
E34
são usados para formatar as aspas.s.format(s,34,s)
coloca tudo junto.Parte do desafio:
for(int i=n;i>n;i/=176)
loopsceil(n/176)
vezes, onde176
é o comprimento do código fonte.s+=s;
aumenta exponencialmente o tamanho do código-fonte String. (ab
torna- se ; torna- seabab
;abab
torna- se ; etc.)abababab
abababab
abababababababab
s.subtring(0,n);
pega os primeirosn
caracteres da String.fonte
> <> ,
2219 bytesExperimente online!
Recebe a entrada através da
-v
bandeira.fonte
Stax , 8 bytes
Execute e depure
fonte