Vous devez écrire un programme ou une fonction qui reçoit un entier positif N
en entrée et imprime les premiers N
caractères de votre code. Si N
est plus grand que la longueur de votre code, vous devez continuer à produire votre code de manière cyclique.
La lecture de votre code source de quelque façon que ce soit et la lecture depuis un fichier, stdio, etc. sont interdites.
Exemples
(en supposant que votre code est yourcode
)
Entrée => Sortie:
5
=> yourc
10
=> yourcodeyo
22
=>yourcodeyourcodeyour
Clarification
Votre programme doit être d'au moins 1 octet.
Réponses:
Python 2, 61 octets
Essayez-le en ligne!
la source
> <> , 49 octets
La moitié du code convertit l'entrée d'une chaîne en un entier. Si nous sommes autorisés à utiliser le point de code d'un seul caractère lu à partir de STDIN, alors ce programme serait beaucoup plus court à 21 octets:
Explication
Je vais utiliser le deuxième programme pour l'explication.
'
démarre l'analyse de chaîne, en poussant chaque caractère jusqu'à ce qu'une citation de fermeture soit trouvée. Étant donné que le reste de la ligne n'a pas de'
guillemet, chaque caractère, sauf l'initiale,'
est poussé dans la pile.Mais> <> est un langage 2D toroïdal, donc une fois la ligne terminée, le pointeur d'instruction revient au début, en appuyant de
'
nouveau sur et arrête l' analyse de la chaîne. Le résultat est que nous avons poussé tout le nécessaire sauf la citation initiale, à savoir'
est ASCII 39, nous poussons donc la citation initiale en appuyant sur3d* = 3*13 = 39
. On décale ensuite la pile vers la droite (}
) et l'inverse (r
), donnant:Maintenant, nous sommes tous prêts à commencer l'impression.
i
lit un caractère d'entrée, mais> <> les caractères sont essentiellement des entiers. Dans le premier programme, lei
est remplacé par une boucle qui convertit une chaîne de chiffres de STDIN en un entier.Nous exécutons ensuite la boucle suivante pour imprimer les N premiers caractères:
la source
CJam,
34 1716 octetsCela peut être beaucoup joué au golf ..
Expansion du code :
Enfin, tout ce qui se trouve sur la pile est automatiquement imprimé sur STDOUT
Essayez-le en ligne ici
la source
Python 2, 117 octets
Life protip: ne pas exécuter
list(itertools.cycle(x))
. Pour une raison quelconque, je ne peux pas imaginer pourquoi, cela bloque l'interprète.la source
itertools.cycle()
est un générateur infini, donc à moins que votre ordinateur n'ait une mémoire infinie, vous allez avoir des problèmes :)JavaScript (ES6),
655250474139Utilise ES6
repeat()
pour cloner le code, puis tranche. Utilise une longueur codée en dur.Ancienne version (50):
Crée une fonction
q
, en prenant un seul paramètre.Il stringifie le texte de la fonction et appelle récursivement la fonction si
n
est supérieur à la longueur du texte. Sinon, il renvoie une sous-chaîne du texte.Version non ES6 (65):
la source
.repeat
, pour les exigences cycliques était tout simplement génial.repeat()
m'a permis de le réduire, alors je l'ai utilisé à la place./39+1
? pourquoi ne pas simplement laisser une chaîne assez longue?q=n=>('q='+q).repeat(n).slice(0,n)
fonctionne bien sur firefoxJ - 24 caractères
Prend un seul argument entier positif et crache une chaîne.
J n'a pas d'astuces d'auto-référence, nous le faisons donc simplement de la manière la plus simple. Expliqué par l'explosion:
Le dyadique
$
opérateur dans J prend cycliquement les éléments de son argument de droite pour s'adapter aux dimensions spécifiées à gauche. Lorsque la dimension est un nombre unique, il s'agit d'une simple liste 1D de caractères, nous faisons donc exactement ce que la question pose.Essayez - le pour vous - même à tryj.tk .
la source
quote
verbe?''''&,@(,&'''')@(#~ >:@(=&''''))
, ou en anglais, "doublez n'importe quel'
caractère, puis ajoutez-en un au début et à la fin." J utilise des littéraux de chaîne de type Ada donc cela échappe à la chaîne.k2 - 7 caractères
En anglais, il s'agit d'une fonction avec argument
x
dont la définition est "x
take string self"._f
) est la fonction la plus interne en cours d'exécution. Ici, c'est la fonction{x#$_f}
.$
) convertit son argument en chaîne. Dans le cas d'une fonction, il crée une chaîne avec la définition d'origine de la fonction.#
) prend les éléments d' argument de gauche de la liste dans l' argument de droite . Dans le cas d'une chaîne, les éléments sont des caractères, donc cela fait exactement ce que nous voulons.Cela ne fonctionnera pas dans l'open source Kona, car il semble créer des trous noirs qui dévorent toutes les tentatives de les utiliser comme arguments pour quoi que ce soit. Je ne suis pas sûr de la bonne sémantique de k3, mais ils ne sont probablement pas beaucoup plus gentils.
En Q, c'est
{x#string .z.s}
et en k4{x#2_$.z.s}
. Nous devons utiliser2_
pour supprimer deux caractères initiaux en k4, pour des raisons que seule une mère pourrait aimer.la source
Rubis,
66 6463 octetsLa même chose en utilisant une fonction pour éviter d'appeler
gets
est un peu plus longue (81 octets):Les versions Lambda du même sont 69 et 65 octets:
la source
.cycle
est bien, je dois m'en souvenir. :) Vous pouvez probablement raccourcir.join
en*''
.String#format
au lieu de l'interpolation:eval s="$><<('eval s=%p'%s).chars.cycle.take(gets.to_i)*''"
Mathematica, 65 octets
Tous les espaces sont nécessaires pour en faire un quine approprié, y compris celui qui suit. Il s'agit d'une fonction pure, que vous pouvez utiliser comme suit:
qui imprime
Malheureusement, l' application
ToString
d'une fonction ne la fonction, donc je ne peux pas donner exactement la façon dont vous avez entré raccourcir en supprimant les espaces, ce qui réduit#1
à#
ou en utilisant la notation préfixe pour les appels de fonction.la source
#
à#1
"?MATLAB,
319141 caractèresJ'ai réussi à extraire quelques octets de l'original:
la source
JavaScript, 34 octets
Fonction récursive qui répète les
n
temps de code , puis tranche le résultat.la source
Japt , 2 octets
Essayez-le en ligne!
La première
î
est une méthode numérique qui prend un paramètre et le répète à longueurn
. Parce que c'est la première méthode,n
devient l'entrée. Le secondî
est jeté dans une chaîne et répété.Cela se traduit par:
n.î("î")
-> Répéter"î"
jusqu'à ce qu'il atteigne la longueurn
Solution de 8 octets
Essayez-le en ligne!
îQi"îQi"
transpile versn.î(Qi"îQi")
la source
R, 203 octets
Lorsque N = 203, le code s'imprime entièrement.
Lorsque N = 50, le code se coupe lui-même.
Lorsque N = 300, le code se répète partiellement.
la source
(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)
L'
1
index initial (au lieu de0
) dans la dernière ligne est dû au fait que la fonction de Matlabtype
introduit un saut de ligne initial, qui doit être supprimé. Merci à Dennis pour sa correction (dernier index) et pour sa suggestion (nnz
plus courte quenumel
).la source
-1
). - Je pense que vous pouvez également supprimer le deuxième saut de ligne et d' échanger surnumel
pournnz
.type f
partie ne s'oppose-t-elle pas à l'exigence de lire votre code source de quelque manière que ce soit et de lire à partir d'un fichier, stdio, etc. ne sont pas autorisés ?type
accède probablement au disque dur. Pensez-vous que je devrais supprimer la réponse?mod
idée d'indexation.)Unaire (version 1-8) , 23855 octets
Prend l'entrée comme unaire de '1, et le code est 23855' 1 (
,[.,]
)la source
Japt ,
4028 octetsLa première fois que vous écrivez un quine, cela peut probablement être un peu raccourci. D'un autre côté, je suis assez content de l'avoir fait fonctionner du tout.
Début de ligne intentionnel, la deuxième ligne est des données et le reste déballe les données, puis répète toute la chaîne résultante jusqu'à ce qu'elle atteigne une longueur égale à l'entrée.
Rasé un énorme 12 octets grâce à Oliver .
Essayez-le en ligne!
la source
tTU
par¯U
et vous pouvez utiliserî
à la place dep
en le déplaçant vers l'avant: Essayez-le en ligneîR+Q+V+Q+R+V
devrait fonctionner très bien.î
, c'est très pratique. Merci beaucoup!C ++, 305
Explication À part le caractère d'échappement, tous les autres caractères sont imprimés. La méthode principale se trouve à l'intérieur de la chaîne s et à l'intérieur de la chaîne principale, la chaîne complète est construite et imprimée sur stdout
la source
Pyth,
151314 octetsEssayez-le en ligne!
Version modifiée du quine Pyth standard .
la source
<jN*Q]"<jN*Q]<jN*Q]"<jN*Q]<jN
faux?<jN*Q]"<jN*Q]"
semble fonctionner?Hoon , 185 octets
Définissez
f
le code du programme sous forme de bande, mais avec "k" pour lui-même. Divisez la bande au caractère 5, en définissant des variables[p=left q=right]
. Soudez ensemble les cordesp
, la chaîne d'originef
et tout ce qui se trouve après le 1er caractère deq
. Répétez cette chaînen
fois, puis renvoyez-en les premiersn
caractères.Cela a été légèrement gêné par le fait que stdlib de Hoon n'a pas de fonction de formatage ou de recherche et remplacement ... De plus, je ne sais pas pourquoi nous avons besoin d'une autre distribution après le
scag
, car il devrait conserver les informations de type. Alors ça va.la source
Jstx , 7 octets
Essayez-le en ligne!
la source
Perl 5 avec
-pa
, 48 octetsEssayez-le en ligne!
la source
Gol> <> , 12 octets
Essayez-le en ligne!
Comment ça marche
k
peut encapsuler un certain nombre de fois, nous n'avons donc pas besoin de dupliquer la pile entière en fonction de l'entrée.la source
SmileBASIC,
10666 octetsla source
KSFTgolf - 4 caractères, 6 octets
KSFTgolf si une langue que j'ai essayé de concevoir pour le golf de code. Je l'ai beaucoup changé, donc cela ne devrait probablement pas vraiment compter.
la source
☃
Stax , 24 octets
Exécuter et déboguer
Adaptation de la
"34bL"34bL
quine.la source
J, 41 octets
Maintenant, c'était un casse-tête!
Explication:
Exemples:
la source
Ly , 28 octets
Essayez-le en ligne!
la source
Java 10,
193176 octetsExplication:
Essayez-le en ligne.
quine -part:
var s
contient le code source non formaté.%s
est utilisé pour entrer cette chaîne en elle-même avec les.format(...)
.%c
,%1$c
Et34
sont utilisés pour formater les guillemets doubles.s.format(s,34,s)
met tout cela ensemble.Partie défi:
for(int i=n;i>n;i/=176)
bouclesceil(n/176)
fois, où176
est la longueur du code source.s+=s;
augmente de façon exponentielle la taille de la chaîne de code source. (ab
devientabab
;abab
devientabababab
;abababab
devientabababababababab
; etc.)s.subtring(0,n);
prend les premiersn
caractères de la chaîne.la source
> <> ,
2219 octetsEssayez-le en ligne!
Prend des informations via le
-v
drapeau.la source
Stax , 8 octets
Exécuter et déboguer
la source