Wie kompatibel sind meine Saiten?

12

Einführung

Man betrachte zwei Strings A und B mit der gleichen Länge L und einer ganzen Zahl K ≥ 0 . Für die Zwecke dieser Herausforderung wird gesagt, dass die Zeichenfolgen K- kompatibel sind, wenn eine Zeichenfolge C der Länge K vorhanden ist , sodass A eine zusammenhängende Teilzeichenfolge der Verkettung BCB ist . Beachten Sie, dass A eine Teilzeichenfolge von BAB ist , sodass A und B immer L- kompatibel sind (aber auch K- kompatibel für einige andere K <L sein können ).

Eingang

Ihre Eingaben bestehen aus zwei Zeichenfolgen mit der gleichen positiven Länge, die aus ASCII-Groß- und Kleinbuchstaben bestehen.

Ausgabe

Ihre Ausgabe soll die niedrigste nicht negative ganze Zahl K sein, so dass die Eingaben K- kompatibel sind.

Beispiel

Betrachten Sie die Eingaben

A = HHHHHH
B = HHttHH

Sie sind nicht 0-kompatibel, da A keine Teilzeichenfolge von ist HHttHHHHttHH. Sie sind auch nicht 1-kompatibel, da A kein Teilstring ist, HHttHH#HHttHHunabhängig davon, welcher Buchstabe auf dem steht #. Allerdings A ist ein Teil von HHttHHHHHHttHH, wo C die aus zwei Buchstaben bestehenden Zeichenfolge ist HH. Somit sind die Eingänge 2-kompatibel und der richtige Ausgang ist 2.

Regeln und Wertung

Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.

Testfälle

Die Kompatibilitätsbedingung ist symmetrisch, daher sollte das Vertauschen der beiden Eingänge den Ausgang nicht verändern.

E G -> 1
E E -> 0
aB Bc -> 1
YY tY -> 1
abcd bcda -> 0
abcXd bxcda -> 4
Hello Hello -> 0
Hello olHel -> 1
aBaXYa aXYaBa -> 1
aXYaBa aBaXYa -> 1
HHHHHH HHttHH -> 2
abcdab cdabcd -> 2
XRRXXXXR XRXXRXXR -> 4
evveeetev tetevevev -> 7
vzzvzJvJJz vJJvzJJvJz -> 10
JJfcfJJcfJfb JcfJfbbJJJfJ -> 5
GhhaaHHbbhGGH HHaaHHbbGGGhh -> 9
OyDGqyDGDOGOGyG yDGqOGqDyyyyOyD -> 12
ffKKBBpGfGKpfGpbKb fGpbKbpBBBffbbbffK -> 9
UZuPPZuPdVdtuDdDiuddUPtUidtVVV dtUPtUidtVVVtDZbZZPuiUZuPPZuPd -> 21

Bestenliste

Hier ist ein Stack-Snippet, um eine Rangliste und eine Liste der Gewinner nach Sprache zu erstellen. Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie sie mit einer Kopfzeile des Formulars

## Language, N bytes

Sie können alte Ergebnisse in der Kopfzeile behalten, indem Sie die durchgestrichenen Tags verwenden: <s>57</s>wird als 57 angezeigt .

Zgarb
quelle

Antworten:

8

Pyth, 16

lhf}QjT,vzvz+k.:

Suchen Sie die kürzeste Teilzeichenfolge von A, die beim Einfügen zwischen zwei Kopien von B zu einer Zeichenfolge mit A führt.

Dies könnte zwei Bytes kürzer sein, wenn die zweite Zeile keine Anführungszeichen enthält, aber das fühlt sich komisch an?

Test Suite

FryAmTheEggman
quelle
4

Python 3, 155 168 157 Bytes

Insgesamt ist die Länge von A. Vergleichen Sie den Anfang von Abis zum Ende von Bund subtrahieren Sie diesen vom Gesamtwert. Vergleichen Sie den Anfang von Bbis zum Ende von Aund subtrahieren Sie diesen vom Gesamtwert. Gibt den absoluten Wert von total zurück, es sei denn, total entspricht der Länge. In diesem Fall wird 0 zurückgegeben.

def f(A,B):
    T=L=len(A)
    C=D=1
    for i in range(L,0,-1):
        if A[:i]==B[-i:]and C:
            T,C=T-i,0
        if A[-i:]==B[:i]and D:
            T,D=T-i,0
    return (0,abs(T))[T!=-L]

Bearbeiten: Behandeln Sie den f("abcdab","cdabcd")==2Fall

NichtlinearFruit
quelle
3
Leider funktioniert dies nicht, für f("abcdab", "cdabcd")die 2. sein sollte
Neil
@ Neil Guter Fang. Ich werde das zu den Testfällen hinzufügen.
Zgarb
@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu Ich sah mir das Bild an und dachte: "Dies ist eine clevere Debugger-Idee, um Emojis zu verwenden, aber ich sehe keinen Fehler ...". Ich denke, dass dieses Add-on auf dieser Site Chaos anrichten würde.
NonlinearFruit
3

Netzhaut , 49 Bytes

.*?(?<=^(?=(.*)(?<4-3>.)*(.*) \2.*\1$)(.)*).+
$#4

Probieren Sie es online! (Leicht modifiziert, um alle Tests gleichzeitig auszuführen.)

Der Trick ist, dass wir den Teil zurückverfolgen müssen A, den wir nicht finden B, und bis jetzt habe ich keinen Weg gefunden, dies zu tun, ohne störende Lookarounds und Balancing Groups.

Martin Ender
quelle
3

Jolf, 40 Bytes

Wά)Ζ0W<ζli)? h++i]Iζ+ζniIoά0nΖhζ}onhn}wn

Versuch es!

Ich bin ganz neu bei Jolf und habe viel gelernt, als ich das herausgefunden habe. Scheint ein bisschen umständlich, könnte wohl noch weiter runtergolfen werden. Sogar 2 Bytes beim Schreiben dieser Erklärung abgeschlagen.

Erläuterung:

  Wά)                                      While ά (initialized to 16)
     Ζ0                                    Set ζ to 0
       W<ζli)                              While ζ < length(A)
             ? h++i]Iζ+ζniIoά0n            Set ά to 0 if (A + a substring from B of length n + A) contains B
                               Ζhζ         Increment ζ
                                  }onhn    Increment n (initialize to 0
                                       }wn Decrement n and print
schwillt an
quelle
Ich habe es nicht ernsthaft versucht, und dies ist möglicherweise eine optimale Lösung, aber ich schlage vor, eine Zuordnung über Bereiche vorzunehmen. ( s0zliSie erhalten ein Array [0 ... Länge i], wenn Sie diesen Ansatz ausprobieren möchten.)
Conor O'Brien
@ Cᴏɴᴏʀ O'Bʀɪᴇɴ Hmm, ich gebe das mal nach ... gibt es auch einen if-Befehl, den ich beim Durchsuchen der Dokumentation / Quelle verworfen habe oder ist das die einzige Möglichkeit? mit einem irrelevanten dritten Argument?
schwillt
?ist am nächsten an einem wenn es in Jolf ist. Es ist wie ein Dreiklang, wenn. ?ABCs returns B` wenn a wahr ist, und Csonst.
Conor O'Brien
2

JavaScript (ES6), 110 Byte

(a,b)=>{for(i=0;;i++)for(j=i;j<=a.length;j++)if(b.startsWith(a.slice(j))&&b.endsWith(a.slice(0,j-i)))return i}

Arbeiten Sie, indem Sie immer längere Stücke aus der Mitte herausschneiden, abis sie zu den beiden Enden von passen b. Die Schleife ist nicht unendlich, da sie am oder vor dem Ende stoppt i == a.length.

Neil
quelle