Einführung
Beobachten wir die folgende Zeichenfolge:
ABCDEFGHIJKLMNOP
Wenn wir die Enden der Zeichenkette vertauschen , sind dies:
ABCDEFGHIJKLMNOP
^^ ^^
Wir erhalten folgendes Ergebnis:
BACDEFGHIJKLMNPO
Danach löschen wir die Enden der Zeichenkette, die in diesem Fall B
und sind O
. Das Ergebnis ist:
ACDEFGHIJKLMNP
Wenn wir den Vorgang wiederholen, erhalten wir die folgende Liste:
N Result
2 ADEFGHIJKLMP
3 AEFGHIJKLP
4 AFGHIJKP
5 AGHIJP
6 AHIP
7 AP
Sie können sehen, dass für N = 5 das Ergebnis ist AGHIJP
. Bei N = 7 ist die Länge der Zeichenfolge kleiner als 3 , daher wird N> 7 in diesem Fall als ungültig betrachtet .
Die Aufgabe
Geben Sie bei einer Zeichenfolge S mit mindestens der Länge 4 und der Anzahl der Wiederholungen N > 0 das Endergebnis aus. Sie können davon ausgehen, dass N immer gültig ist .
Testfälle
Input > Output
N = 3, S = ABCDEFGHIJKLMNOP > AEFGHIJKLP
N = 1, S = Hello > Hlo
N = 2, S = 123321 > 11
Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes! Der Einfachheit halber können Sie davon ausgehen, dass die Zeichenfolge nur alphanumerische Zeichen enthält.
'
dem Zählcharakter in unary aufzunehmen ? Zum Beispiel''123321
:?N
, aber kann es eine Zeichenfolge mit Anführungszeichen sein? Ich meine, fürN=3
nehmen'111'
(im Gegensatz zu111
)Antworten:
MATL , 8
91213BytesEingaben sind: erstens
N
als unäre Zeichenfolge mit Anführungszeichen (durch die Abfrage zulässig); SekundeS
als Zeichenfolge mit Anführungszeichen (Anführungszeichen in Zeichenfolgen sind standardmäßig zulässig); durch einen Zeilenumbruch getrennt.Dies funktioniert, indem die Zeichenfolge gespiegelt, das zweite Element entfernt und insgesamt
2*N
mehrmals wiederholt wird .Probieren Sie es online!
quelle
Retina ,
4420 BytesDurchgestrichen 44 ist immer noch regulär 44 :(
Geht davon Eingang in folgendem Format (in unäre - Zählen Charakter:
'
):{number of repeats}{string}
Zum Beispiel:
'''''''ABCDEFGHIJKLMNOP
Es gibt keinen Raum zwischen der Anzahl der Wiederholungen und der Zeichenkette.
Danke @ MartinBüttner für das Abschneiden von 24 Bytes!
Probieren Sie es online!
quelle
Python 2, 31 Bytes
Ich denke das funktioniert?
quelle
Mathematica, 29 Bytes
Meine erste Antwort!
Das A und O von Mathematica ohne Klammern! Funktionseingaben sind eine Liste (von Zeichen oder was auch immer) und eine Zahl.
quelle
Labyrinth , 40 Bytes
Auf die Eingabe
N
folgt die Zeichenfolge, die durch ein beliebiges nicht numerisches Zeichen getrennt wird.Probieren Sie es online!
Dies wurde in Zusammenarbeit mit Sp3000 geschrieben (was bedeutet, dass ich nicht die Mühe hatte, einen Algorithmus zu finden, und er begann, daran zu arbeiten. Er kam auf eine 118-Byte-Lösung, konnte sich aber nicht die Mühe machen, sie zu spielen, also spielte ich Golf. .. yay für Teamarbeit).
Erläuterung
Sp's üblicher Primer (wie üblich leicht modifiziert):
<>^v
zyklisch eine Zeile oder Spalte oder das Raster verschoben wird."
sind No-Ops.Auf geht's.
Der Code beginnt mit dem
<
Golf-Trick, den ich einige Male verwendet habe, als ich mit einem langen Stück linearen Codes angefangen habe. Die erste Zeile wird zyklisch mit der IP- Adresse nach links verschoben , sodass die Quelle dann wie folgt aussieht:Aber jetzt kann sich die IP nirgendwo bewegen, also führt sie die
<
nochmal aus. Dies geht so lange weiter, bis wir diesen Zustand erreichen:An diesem Punkt kann die IP die Zelle verlassen und mit der Ausführung der zweiten Zeile beginnen, beginnend mit
?
. Hier ist der lineare Code:Die IP betritt nun diesen 3x2-Raum, der eigentlich zwei fest komprimierte (überlappende) 2 x 2-Schleifen im Uhrzeigersinn ist. Die erste Schleife liest und
N-1
löscht Zeichen aus STDIN.Nun betreten wir die zweite Schleife, die den Rest der Eingabezeichenfolge liest. Wir können erkennen , da EOF
,
zurückkehren wird-1
in diesem Fall, so dass die IP links abbiegen.Diese Dekrementierung ist eigentlich nicht sinnvoll, aber wir können sie später kostenlos rückgängig machen und hier können wir die beiden Schleifen überlappen.
Wenn wir die
5 ABCDEFGHIJKLMNOP
Eingabe als Beispiel nehmen, sieht der Stapel folgendermaßen aus:Beachten Sie, dass diese tatsächlich den eingegebenen Zeichen entsprechen
FGHIJKLMNOP
(weil wir sie dekrementiert haben) und dass wir die erstenN-1
Zeichen nicht drucken möchten (wir haben nur Zeichen verworfen , möchten sie aber überspringenN
).Jetzt gibt es ein kurzes lineares Bit, das den Stack für die nächste Schleife vorbereitet:
Die Stapel sehen nun so aus:
Wir betreten eine weitere 2 × 2-Schleife im Uhrzeigersinn. Dies verwirft die obersten
N
Zeichen vom Hauptstapel:Beim Verlassen der Schleife werden
=
dieses0
und das letzte Zeichen der Eingabezeichenfolge erneut ausgetauscht. Nun sehen die Stapel so aus:Wir möchten den Inhalt des Hauptstapels (mit Ausnahme des unteren Elements und alle um 1 erhöht) von links drucken . Das heißt, wir müssen es zum Hilfsstapel bringen. Das macht die nächste 2x2-Schleife (im Uhrzeigersinn):
Stacks jetzt:
Wir verschieben die erste davon (die, die wir nicht drucken möchten) zurück in den Hauptstapel mit
{
. Und jetzt geben wir die letzte 2x2- Schleife ( gegen den Uhrzeigersinn ) ein, die den Rest ausgibt:Zum Schluss beenden wir das Programm mit
@
.quelle
JavaScript (ES6), 39 Byte
Es stellte sich heraus, dass ich die Antwort von @ Sp3000 neu erfunden habe.
quelle
Gelee, 8 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Gelee , 10 Bytes
Eingang die Nummer über STDIN, und die Zeichenfolge über die Befehlszeile args . Vielen Dank an @Dennis für viele Hinweise / Hilfe, damit das funktioniert (Jelly entzieht sich mir immer noch).
Probieren Sie es online!
quelle
ḢṪḊṖƓ¡
alle mehr als 1 Byte verwenden) oder verwenden Sie eine Art Zeichencodetabelle zur besseren Lesbarkeit?Pyth, 13 Bytes
Erläuterung:
Probieren Sie es hier aus
quelle
Vitsy,
129 (Code) + 1 (Newline für Funktionsdeklaration) = 10 Bytes\O/
Erwartet die Eingabe auf dem Stapel als Zeichenfolge, gefolgt von der Zahl.
Mit welchen Sie anrufen können:
Dies ist eine Funktion, die die resultierende Zeichenfolge auf dem Stapel belässt. Ich habe es als Programm im TryItOnline-Link bereitgestellt.
TryItOnline!
quelle
Python 2,
4948 BytesProbieren Sie es hier mit Testfällen!
Einfache rekursive Lösung. Entfernt das zweite und letzte zweite Element aus der Eingabezeichenfolge und ruft sich mit diesem und
n-1
bis aufn=0
.edit: Ich fühle mich irgendwie dumm, wenn ich mir die andere Python-Lösung ansehe . Ich denke, ich mag Rekursion einfach zu sehr ...
quelle
C 96 Bytes
Ungolfed
quelle
Ruby, 29 Bytes
Sehr einfach.
~
Ein Trick, der aus der Antwort von Sp gestohlen wurde und der ein Byte überflüssig machts[n+1..-2-n]
. (Es funktioniert, weil~n
es sich um-1-n
ein Zweier-Komplement handelt und es sich dann...
um ein exklusives Sortiment handelt.)quelle
Perl,
3632 + 1 = 33 BytesBenötigt
-p
Flag und nimmt Eingaben in zwei Zeilen vor, mit der Anzahl der Iterationen am Ende:Ungolfed?
quelle
CJam, 12 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Oktave, 28 Bytes
Indizieren Sie die Zeichenfolge, lassen Sie
S(2:N+1)
und wegS(end-N:end-1)
.Probelauf auf ideone .
quelle
Rust, 135 Bytes
Nun, das ist eine ziemlich schreckliche Länge.
Hübsch gedruckt:
Sie können es auf 104 Bytes reduzieren, wenn wir Bytestrings anstelle von richtigen Strings zulassen.
Hübsch gedruckt:
Neugierig, wenn es jemand besser machen kann.
quelle
mSL - 137 Bytes
Erläuterung:
%l = $len($1)
Ruft die Länge der Eingabezeichenfolge ab und speichert sie in der Variablen l$right(<input>,<length>)
und$left(<input>,<length>
kann verwendet werden, um den linken oder rechten Teil der ursprünglichen Zeichenfolge respektabel zurückzugeben. $ left gibt den Text immer von der linken Seite aus zurück, während $ right den Text immer von der rechten Seite aus zurückgibt. Wenn die angegebene Länge eine negative Zahl ist, geben $ left und $ right den gesamten Text abzüglich der Anzahl der Zeichen von ihren jeweiligen Seiten zurück.$mid(<string>,<start>,[length])
wird verwendet, um eine Teilzeichenfolge aus der Mitte der Zeichenfolge abzurufen. Start ist der Anfang des Teilstrings von links. Ein negativer Wert zeigt einen Start von rechts an. In beiden Fällen kann eine optionale Länge angegeben werden. Eine negative Länge kann verwendet werden, um so viele Zeichen am Ende zu entfernen. Ich habe es also verwendet, um das zweite und das vorletzte Zeichen mithilfe der Länge der Eingabezeichenfolge abzurufen.$calc(<input>)
wird verwendet, um mathematische Berechnungen durchzuführenquelle
Ab noch unbenannter Sprache (also neu, nicht konkurrenzfähig) 9 Bytes
Den Quellcode finden Sie hier . Die Sprache ist vollständig instabil (erste Testanforderung). Erwarten Sie also nicht, dass sie in Zukunft funktioniert (Commit 7).
Dies ist eine stapelbasierte Sprache mit Funktionen, die Objekte zum Stapel hinzufügen und daraus entfernen. Derzeit gibt es 2 Stapelmanipulationsbefehle:
D
(Duplizieren Sie den oberen Teil des Stapels N-mal) undR
(Drehen Sie die oberen N-Elemente auf dem Stapel.)Erläuterung:
quelle
CJam, 14 Bytes
Teste es hier.
Erläuterung
quelle
Vim, 27 Bytes
Es wird erwartet, dass die Eingabe im Formular erfolgt
STRING N
in der ersten Zeile ohne andere Zeichen erfolgt.Erläuterung:
quelle
Brainfuck, 130 Bytes
Mein erster PPCG-Eintrag!
Offensichtlich nicht gewinnen, aber hey.
Nimmt Eingaben wie folgt entgegen: 4ABCDEFGHIJKL, wobei das erste Zeichen N ist.
Testen Sie es auf dieser wundervollen Seite.
Beschränkt auf N kleiner oder gleich 9, da zweistellige Zahlen nerven.
EDIT: Ich habe es aufgesaugt und Unterstützung für zweistellige Zahlen hinzugefügt. Mit einer Null für einzelne Ziffern auffüllen.
quelle
Perl, 27 Bytes
Fügen Sie +1 für
-p
Rennen wie
perl -p sdr.pl
Eingabe über STDIN, erste Zeile die Zeichenfolge, zweite Zeile die Anzahl Angenommen, die Zeichenfolge enthält nur "Wort" -Zeichen
sdr.pl
:quelle
PHP, 60 Bytes
Diese Lösung setzt iterativ Zeichen aus der Eingabezeichenfolge nach Index in eine leere Zeichenfolge. Ich manipuliere die Eingabezeichenfolge direkt, um eine lange zu verhindern
return
.Grundsätzlich
$w
sieht das im Speicher so aus:Laufen Sie wie folgt:
quelle
<?for(;$I;)$W[$I--]=$W[strlen($W)-$I-2]="";echo$W;
. Es erwartet die Werte auf den TastenW
undI
, über POST / GET / COOKIE ... Ein Beispiel wärehttp://example.com/a.php?W=MyString&I=5
register globals
mehr machen, die es erfordern . Vielen Dank für den Vorschlag aber :)Pylone , 16 Bytes.
Wie es funktioniert:
quelle
CJam, 15 Bytes
Ich bin sicher, es ist möglich, dies weiter zu golfen ...
quelle
Jolf, 13 Bytes
Eine Übersetzung der JavaScript-Antwort.
Erläuterung:
Probieren Sie es hier aus!
Eine interessantere Version nach der Frage:
quelle
Im Ernst, 17 Bytes
Übernimmt die Eingabe als
s \n n
.Probieren Sie es online!
Erläuterung:
quelle
129 Bytes
Da wir im Grunde 1 überspringen und entfernen N und das umgekehrte Szenario
ungolfed
quelle
Java, 144 Bytes
quelle