Stringhe con contesto
Ai fini di questa sfida, una stringa con contesto è una tripla di stringhe, denominata contesto sinistro , parte dati e contesto giusto . Rappresenta una sottostringa di una stringa più lunga. Usiamo il tubo verticale |come separatore, quindi un esempio di stringa con contesto è cod|e-go|lf, dove si trova il contesto sinistro cod, i dati e-goe il contesto giusto lf. Questo esempio rappresenta la sottostringa e-godi code-golf.
Ora, per concatenare due stringhe con il contesto, procediamo come segue, usando aa|bcc|deee cc|de|eeecome esempi. Allineamo le stringhe come nel diagramma
a a|b c c|d e e
c c|d e|e e e
in modo che le loro parti di dati siano adiacenti. La parte di dati della concatenazione è la concatenazione delle parti di dati, in questo caso bccde. Il contesto di sinistra è la parte che estende i fianchi alla sinistra della prima parte di dati, in questo caso aa. Allo stesso modo, il giusto contesto è eee, quindi la concatenazione è la stringa con il contesto aa|bccde|eee. Per un secondo esempio, considera a|bb|cde aabb|cd|, dove la seconda parola ha un contesto giusto vuoto. Lo schema di allineamento è
a|b b|c d
a a b b|c d|
dove il contesto sinistro della seconda parola si estende oltre quello della prima. La concatenazione è aa|bbcd|.
Ma aspetta, c'è un gotcha: se le lettere del diagramma di allineamento non corrispondono, la concatenazione non esiste! Ad esempio, il diagramma di aa|bb|cced c|c|cè
a a|b b|c c
c|c|c
dove be csulla quarta colonna non sono d'accordo, quindi non possono essere concatenati.
L'obiettivo
Il tuo compito è quello di scrivere un programma che includa due stringhe con il contesto le cui parti sono separate da |come sopra, e genera la loro concatenazione se esiste, e qualcos'altro in caso contrario. Il "qualcos'altro" può essere qualsiasi valore, incluso nessun output, purché non sia una stringa valida con contesto ed è la stessa in tutti i casi. Tuttavia, lanciare un errore non è accettabile. È possibile assegnare un programma STDIN-to-STDOUT o una funzione e sono accettate anche funzioni anonime. Vince il conteggio di byte più piccolo e non sono consentite scappatoie standard.
Casi test
aa|bcc|dee cc|de|eee -> aa|bccde|eee
a|bb|cd aabb|cd| -> aa|bbcd|
a|b|cccd aab|cc|c -> aa|bcc|cd
a|b|c b||cd -> a|b|cd
aa|bb|cc c|c|c -> None
aaa|b|c abb|cd|d -> None
|bb|cd abb|c|ed -> None
a|b|c a||cd -> None
|1<2=""alla definizione di&dovrebbe risolverlo. Mi dispiace di non averlo specificato più esplicitamente nelle specifiche, lo modificherò in.