Sie sollten ein Programm oder eine Funktion schreiben, die eine positive Ganzzahl N
als Eingabe empfängt und die ersten N
Zeichen Ihres Codes ausgibt. Wenn N
größer als die Länge Ihres Codes ist, sollten Sie Ihren Code weiterhin zyklisch ausgeben.
Das Lesen Ihres Quellcodes in irgendeiner Weise und das Lesen von Dateien, Stdio usw. ist nicht gestattet.
Beispiele
(vorausgesetzt, Ihr Code ist yourcode
)
Eingabe => Ausgabe:
5
=> yourc
10
=> yourcodeyo
22
=>yourcodeyourcodeyour
Klärung
Ihr Programm sollte mindestens 1 Byte lang sein.
Antworten:
Python 2, 61 Bytes
Probieren Sie es online!
quelle
> <> 49 Bytes
Der halbe Code konvertiert die Eingabe von einer Zeichenfolge in eine Ganzzahl. Wenn wir stattdessen den Codepunkt eines einzelnen aus STDIN gelesenen Zeichens verwenden dürfen, wäre dieses Programm mit 21 Byte viel kürzer:
Erläuterung
Ich werde das zweite Programm für die Erklärung verwenden.
'
Startet das Parsen der Zeichenfolgen und drückt jedes Zeichen, bis ein schließendes Anführungszeichen gefunden wird. Da der Rest der Zeile kein'
Anführungszeichen enthält, wird jedes Zeichen außer dem Anfangsbuchstaben'
auf den Stapel geschoben.Aber> <> ist eine toroidale 2D-Sprache. Nachdem die Zeile überstrichen ist, springt der Anweisungszeiger zum Anfang zurück und trifft
'
erneut und stoppt das Parsen der Zeichenfolgen. Das Ergebnis ist, dass wir bis auf das ursprüngliche Zitat alles Nötige getan haben, nämlich'
ist ASCII 39, also drücken wir das anfängliche Anführungszeichen, indem wir drücken3d* = 3*13 = 39
. Wir verschieben dann den Stapel nach rechts (}
) und umgekehrt (r
) und geben:Jetzt können wir mit dem Drucken beginnen.
i
Liest ein Zeichen der Eingabe ein, aber> <> Zeichen sind im Grunde genommen ganze Zahlen. Im ersten Programm wird dasi
durch eine Schleife ersetzt, die eine Ziffernfolge von STDIN in eine Ganzzahl umwandelt.Wir führen dann die folgende Schleife aus, um die ersten N Zeichen auszudrucken:
quelle
CJam,
34 1716 BytesDies kann viel golfen werden ..
Code-Erweiterung :
Schließlich wird alles auf dem Stapel automatisch in STDOUT gedruckt
Probieren Sie es hier online aus
quelle
Python 2, 117 Bytes
Lebensprotip: nicht ausführen
list(itertools.cycle(x))
. Aus irgendeinem Grund kann ich mir nicht vorstellen, warum der Interpreter abstürzt.quelle
itertools.cycle()
ist ein unbegrenzter Generator, also wenn Ihr Computer unbegrenzten Speicher hat, werden Sie Probleme haben :)JavaScript (ES6),
655250474139Verwendet ES6
repeat()
, um den Code zu klonen, und schneidet dann ab. Verwendet eine fest codierte Länge.Alte Version (50):
Erstellt eine Funktion
q
unter Verwendung eines einzelnen Parameters.Sie fasst den Funktionstext zusammen und ruft die Funktion rekursiv auf, wenn sie länger
n
als der Text ist. Andernfalls wird eine Teilzeichenfolge des Texts zurückgegeben.Nicht-ES6-Version (65):
quelle
.repeat
für die zyklischen Anforderungen war einfach genial.repeat()
mir die Verwendung von die Möglichkeit gegeben zu haben, einen Haufen zu reduzieren, also habe ich das stattdessen verwendet./39+1
? warum nicht einfach eine Schnur lang genug lassen?q=n=>('q='+q).repeat(n).slice(0,n)
funktioniert gut auf FirefoxJ - 24 Zeichen
Nimmt ein einzelnes positives ganzzahliges Argument und spuckt eine Zeichenfolge aus.
J hat keine Selbstreferenztricks, also machen wir es einfach so. Erklärt durch Explosion:
Der dyadische
$
Operator in J nimmt zyklisch Elemente aus seinem rechten Argument, um sie an die links angegebenen Dimensionen anzupassen. Wenn es sich bei der Dimension um eine einzelne Zahl handelt, handelt es sich um eine einfache 1D-Liste von Zeichen. Wir tun also genau das, was in der Frage gefragt wird.Probieren Sie es selbst bei tryj.tk .
quelle
quote
Verbs?''''&,@(,&'''')@(#~ >:@(=&''''))
oder auf Englisch: "Verdoppeln Sie beliebige'
Zeichen, und fügen Sie dann am Anfang und am Ende ein Zeichen hinzu." J verwendet Ada-ähnliche String-Literale, so dass dies dem String entgeht.k2 - 7 Zeichen
Im Englischen ist dies eine Funktion mit Argument,
x
deren Definition "x
take string self" ist._f
) ist die innerste derzeit ausgeführte Funktion. Hier ist es die Funktion{x#$_f}
.$
) konvertiert sein Argument in einen String. Im Fall einer Funktion wird eine Zeichenfolge mit der ursprünglichen Definition der Funktion erstellt.#
) nimmt links-arg Elemente aus der Liste in rechts-arg . Im Fall einer Zeichenfolge sind die Elemente Zeichen, und genau das tun wir, was wir wollen.Das wird nicht in der Open-Source-Version von Kona funktionieren, da es schwarze Löcher zu erzeugen scheint, die alle Versuche aufzehren, sie als Argumente für irgendetwas zu verwenden. Ich bin mir nicht sicher, ob die K3-Semantik korrekt ist, aber wahrscheinlich sind sie nicht besonders nett.
In Q ist dies
{x#string .z.s}
und in k4{x#2_$.z.s}
. Wir müssen verwenden2_
, um zwei Anfangsbuchstaben in k4 abzulegen, aus Gründen, die nur eine Mutter lieben kann.quelle
Ruby,
66 6463 BytesDie Verwendung einer Funktion zur Vermeidung von Aufrufen
gets
ist ebenfalls etwas länger (81 Byte):Lambda-Versionen desselben sind 69 und 65 Bytes:
quelle
.cycle
ist ordentlich, das muss ich mir merken. :) Sie können sich wahrscheinlich verkürzen.join
zu*''
.String#format
anstelle der Interpolationeval s="$><<('eval s=%p'%s).chars.cycle.take(gets.to_i)*''"
Mathematica, 65 Bytes
Alle Leerzeichen sind erforderlich, um dies zu einem korrekten Quine zu machen, einschließlich des nachfolgenden. Dies ist eine reine Funktion, die Sie wie folgt verwenden können:
welche druckt
Leider
ToString
ergibt die Anwendung auf eine Funktion nicht genau die Art und Weise, wie Sie die Funktion eingegeben haben. Daher kann ich diese nicht durch Entfernen von Leerzeichen, Verkürzen#1
auf#
oder Verwenden der Präfixnotation für Funktionsaufrufe verkürzen .quelle
#
auf#1
"?MATLAB,
319141 ZeichenIch habe es geschafft, ein paar Bytes aus dem Original herauszuholen:
quelle
JavaScript, 34 Bytes
Rekursive Funktion, die die Codezeiten wiederholt
n
und dann das Ergebnis aufteilt.quelle
Japt , 2 Bytes
Probieren Sie es online!
Die erste
î
Methode ist eine Zahlenmethode, die einen Parameter annimmt und auf Länge wiederholtn
. Weil es die erste Methode ist,n
wird die Eingabe. Die Sekundeî
wird in eine Zeichenfolge geworfen und wiederholt.Dies überträgt sich auf:
n.î("î")
-> Wiederholen,"î"
bis die Länge erreicht istn
8-Byte-Lösung
Probieren Sie es online!
îQi"îQi"
transpiles zun.î(Qi"îQi")
quelle
R 203 Bytes
Bei N = 203 wird der Code vollständig gedruckt.
Wenn N = 50 ist, schneidet sich der Code von selbst.
Wenn N = 300 ist, wiederholt sich der Code teilweise.
quelle
(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)
Der anfängliche
1
Index (anstelle von0
) in der letzten Zeile ist, weil die Matlab-Funktiontype
einen anfänglichen Zeilenvorschub einführt, der entfernt werden sollte. Vielen Dank an Dennis für seine Korrektur (letzter Index) und für seinen Vorschlag (nnz
kürzer alsnumel
).quelle
-1
). - Ich glaube , Sie können auch das zweite Newline und Auslagerungs entfernennumel
zunnz
.type f
kollidiert der Teil nicht mit der Anforderung, dass das Lesen Ihres Quellcodes in irgendeiner Weise und das Lesen von Dateien, Stdio usw. verboten ist ?type
greift wahrscheinlich auf die Festplatte zu. Denkst du, ich sollte die Antwort entfernen?mod
übrigens Ihre -Indizierungsidee gestohlen .)Unary (1-8 Version) , 23855 Bytes
Nimmt Eingaben als unär von '1' an und der Code ist 23855 '1' (
,[.,]
)quelle
Japt ,
4028 BytesSchreiben Sie zum ersten Mal ein Quine, so kann dies wahrscheinlich ziemlich viel verkürzt werden. Andererseits bin ich ziemlich froh, dass ich es überhaupt zum Laufen gebracht habe.
Bei der zweiten Zeile handelt es sich absichtlich um Daten. Der Rest entpackt die Daten und wiederholt die gesamte resultierende Zeichenfolge, bis die Länge der Eingabe erreicht ist.
Dank Oliver satte 12 Bytes eingespart .
Probieren Sie es online!
quelle
tTU
mit¯U
und Sie verwenden können ,î
anstattp
es durch die Bewegung nach vorne: Try it OnlineîR+Q+V+Q+R+V
sollte gut funktionieren.î
, das ist sehr praktisch. Vielen Dank!C ++, 305
Erklärung Außer dem Escape-Zeichen werden alle anderen Zeichen ausgedruckt. Die Hauptmethode befindet sich in der Zeichenfolge s, und in main wird die vollständige Zeichenfolge erstellt und nach stdout gedruckt
quelle
Pyth,
151314 BytesProbieren Sie es online!
Modifizierte Version des Standard Pyth Quine .
quelle
<jN*Q]"<jN*Q]<jN*Q]"<jN*Q]<jN
falsch sein?<jN*Q]"<jN*Q]"
scheint Arbeit?Hoon , 185 Bytes
Stellen Sie
f
den Programmcode als Band ein, aber mit "k" für sich. Teilen Sie das Band bei Zeichen 5 und stellen Sie die Variablen ein[p=left q=right]
. Schweißen Sie die Saitenp
, die ursprüngliche Saitef
und alles nach dem ersten Zeichen von zusammenq
. Wiederholen Sie diese Zeichenfolgen
, und geben Sie dann die erstenn
Zeichen davon zurück.Dies wurde ein wenig behindert durch Hoons stdlib ohne Formatierungsfunktion oder Suchen und Ersetzen ... Ich bin mir auch nicht sicher, warum wir nach dem eine weitere Besetzung benötigen
scag
, da sie die Typinformationen behalten sollte. So geht es.quelle
Jstx , 7 Bytes
Probieren Sie es online!
quelle
Perl 5 mit
-pa
48 BytesProbieren Sie es online!
quelle
Gol> <> , 12 Bytes
Probieren Sie es online!
Wie es funktioniert
k
kann beliebig oft umbrochen werden, sodass wir nicht den gesamten Stapel abhängig von der Eingabe duplizieren müssen.quelle
SmileBASIC,
10666 Bytesquelle
KSFTgolf - 4 Zeichen, 6 Bytes
KSFTgolf ist eine Sprache, die ich für Code Golf entworfen habe. Ich habe es sehr verändert, daher sollte dies wahrscheinlich nicht wirklich zählen.
quelle
☃
Code entsprechende Block ist, der genau wie etwas aussieht, das speziell für diese Herausforderung erstellt wurde (da Ihre gesamte Datei keine anderen Unicode-basierten Codeblöcke enthält).Stax , 24 Bytes
Führen Sie es aus und debuggen Sie es
Anpassung der
"34bL"34bL
Quine.quelle
J, 41 Bytes
Das war ein Rätsel!
Erläuterung:
Beispiele:
quelle
Ly , 28 Bytes
Probieren Sie es online!
quelle
Java 10,
193176 BytesErläuterung:
Probieren Sie es online aus.
quine -Teil:
var s
enthält den unformatierten Quellcode.%s
wird verwendet, um diesen String in sich selbst mit dem einzugebens.format(...)
.%c
,%1$c
Und die34
werden verwendet , um die doppelten Anführungszeichen zu formatieren.s.format(s,34,s)
setzt alles zusammen.Herausforderungsteil:
for(int i=n;i>n;i/=176)
Schleifenceil(n/176)
mal, wo176
ist die Länge des Quellcodes.s+=s;
Erhöht die Größe des Quellcodes String exponentiell. (ab
wirdabab
;abab
wirdabababab
;abababab
wirdabababababababab
; etc.)s.subtring(0,n);
Nimmt die erstenn
Zeichen des Strings.quelle
> <> ,
22 bis19 BytesProbieren Sie es online!
Übernimmt die Eingabe durch die
-v
Flagge.quelle
Stax , 8 Bytes
Führen Sie es aus und debuggen Sie es
quelle