Eingang
Die erste Zeile ist eine bestimmte Zeichenfolge, die beliebig oft wiederholt wird. Zum Beispiel könnte es sein abcabcabcabc
, [];[];[];
usw. Es kann abgeschnitten werden; zum Beispiel: 1231231231
. Finden Sie immer die kürzeste Zeichenfolge. Wenn die Zeile beispielsweise ist 22222
, dann ist die Zeichenfolge 2
nicht 22
oder 22222
oder irgendetwas anderes. Die Saite wird immer mindestens 2 Mal wiederholt.
Alle folgenden Zeilen sind das Muster, das um eine beliebige Zahl versetzt ist. Zum Beispiel könnte es sein:
abcabcabc
cabcabcab
bcabcabca
(um 1 versetzt), oder es könnte sein:
abcdefabcdefabcdefabc
cdefabcdefabcdefabcde
efabcdefabcdefabcdefa
(Versetzt um 4).
Eines der Zeichen in der Eingabe ist falsch. (Es ist garantiert, dass es sich nicht in der ersten Zeile befindet.) Beispiel:
a=1a=1a=1
=1a=1a=1a
1a=11=1a=
a=1a=1a=1
=1a=1a=1a
die 1
on line 3 ist die ungerade aus.
Ausgabe
Sie müssen die (nullbasierten, von links oben ausgehenden) Koordinaten der ungeraden ausgeben. Beispielsweise ist in der obigen Eingabe die entsprechende Ausgabe 4,2
. Sie können auch ein oder sogar ein anderes Format ausgeben 4 2
, sofern Sie wissen, wie die Ausgabe aussehen soll."4""2"
[[4],[2]]
Testfälle
Eingang:
codegolfcodegolfco
egolfcodegolfcodeg
lfcodegolfcodegoff
odegolfcodegolfcod
golfcodegolfcodego
fcodegolfcodegolfc
Ausgabe: 16,2
Eingang:
][[][][[][][[][][[][][[
[][][[][][[][][[][][[][
[][[][][[][][[][][[][][
[[][][[]]][[][][[][][[]
Ausgabe: 8,3
Eingang:
...
. .
...
Ausgabe: 1,1
Eingang:
ababa
babab
ababb
babab
Ausgabe: 4,2
abc/cab/abc
und Kleinschreibung wie folgt prüfen: - und0 2
hier ausgeben ?Antworten:
BashPerl,23122921817816416613810674 BytesDas Skript erfordert die Verwendung des
-n
Schalters, der zwei der Bytes ausmacht.Die Idee, zwei Kopien aller vollständigen Wiederholungen des Musters anzuhängen, wurde aus der Antwort von MT0 übernommen .
Im Gegensatz zu allen anderen Antworten wird bei diesem Ansatz versucht, das Muster der aktuellen Eingabezeile in jeder Iteration zu extrahieren. Es schlägt in der Zeile mit dem ungeraden Zeichen fehl (und verwendet stattdessen das Muster der vorherigen Zeile). Dies geschieht, um die Musterextraktion in die Schleife aufzunehmen, die es schafft, einige Bytes zu sparen.
Ungolfed-Version
Beispiel
Für den Testfall
Die Ausgabe der Golf-Version ist
was bedeutet, dass das ungerade Zeichen die Koordinaten hat
16,2
.Dieser
offensichtliche Missbrauchmacht sich das liberale Ausgabeformat zunutze.Kurz vor dem Beenden sind die Inhalte einiger spezieller Perl-Variablen:
(
$n
Enthält die Übereinstimmung des Submusters, auf das über die Rückreferenz zugegriffen werden kann\n
.)quelle
^((.*?)(.*?))(?=\1+\2$)
Perl,
212191181168 Byteschomp
stattchop
verwendet werden.Alte Version, 212 Bytes:
Ungolfed-Version:
quelle
chop
ist unnötig - sollte entfernt werden. die endgültigeexit print
ersetzt werden kanndie
(add,$/
das Extramaterial zu verstecken (falls erforderlich)). auchlength$_
kann ersetzt werden mity///c
chop
, da$
vor dem Zeilenumbruch am Ende der Zeichenfolge passt. Das Verstecken des zusätzlichendie
Materials über die hinzugefügte Newline scheint mir notwendig zu sein. Auchy///c
ist viel kürzer alslength$_
und ein Byte kürzer alslength
ohne das Unnötige$_
.C 187 Bytes
Einschränkungen.
Golf Version
Ungolfed-Version
quelle
Python
303,292Die Eingabe erfolgt über stdin. Ich werde es erklären, wenn es irgendeine Nachfrage gibt, aber es sieht nicht so aus, als würde ich trotzdem gewinnen.
quelle
Perl,
157,154Edit : -3 dank ardnew 'Vorschlag.
Ich brauchte einige Zeit (ein und aus, natürlich nicht 5 Tage ;-)) und die Idee zum Algorithmus war anfangs schwer zu fassen (obwohl ich das Gefühl hatte, dass er da war), aber schließlich (und plötzlich) wurde alles klar.
Wenn die Länge der Zeichenfolge ein Vielfaches der Länge des Musters ist und die Zeichenfolge nicht mit dem Anfang des Musters beginnt, wird durch Verketten der Zeichenfolge mit sich selbst ein Muster anstelle der Verkettung erzeugt (stellen Sie sich vor, Sie wiederholen ein Wort auf dem kreisförmigen Menüband endlos) Schweißen ist nicht wichtig). Daher besteht die Idee darin, die Linie auf mehrere Längeneinheiten zu kürzen und das Original damit zu verknüpfen. Das Ergebnis wird garantiert mindestens einmal mit dem Muster übereinstimmen, selbst wenn die Zeichenfolge das falsche Zeichen enthält. Von da an ist es leicht, die Position des beleidigenden Charakters zu finden.
Erste Zeile ist schamlos von Heiko Oberdieks Antwort entlehnt :-)
quelle
/.{$n}/;$_=$&.$_;
durchs/.{$n}/$&$&/;
JavaScript (ES6) -
147133136 ZeichenErwartet, dass die zu testende Zeichenfolge in der Variablen enthalten ist,
s
und gibt das Ergebnis an die Konsole aus.Testfall 1
Ausgänge
Testfall 2
Ausgänge
Testfall 3
Ausgänge
Testfall 4
Ausgänge
Testfall 5
Ausgänge
Testfall 6
Ausgänge
quelle
s="xyxy\nyyxy"
. Für die zweite Zeilematch[4]
wird seinyy
; es sollte einfach seiny
.abab
Ausdruck zeigt das Muster vonababaababa
; Sie müssen verwenden^…$
./^…\n/
funktioniert oder/^…$/m
^
(zumindest nicht für einen der 6 aufgelisteten Testfälle - aber es gibt wahrscheinlich ein Gegenbeispiel, in dem dies der Fall ist, in dem ich es belassen habe).