Strings com contexto
Para os propósitos desse desafio, uma string com contexto é um triplo de strings, chamado contexto esquerdo , parte de dados e contexto correto . Representa uma substring de uma string mais longa. Usamos o tubo vertical |
como um separador; portanto, um exemplo de uma string com contexto é cod|e-go|lf
: onde está o contexto esquerdo cod
, os dados e-go
e o contexto correto lf
. Este exemplo representa a substring e-go
de code-golf
.
Agora, para concatenar duas seqüências de caracteres com o contexto, procedemos da seguinte maneira, usando aa|bcc|dee
e cc|de|eee
como exemplos. Alinhamos as strings como no diagrama
a a|b c c|d e e
c c|d e|e e e
para que suas partes de dados sejam adjacentes. A parte de dados da concatenação é a concatenação das partes de dados, neste caso bccde
. O contexto esquerdo é a parte que se estende mais à esquerda da primeira parte de dados, neste caso aa
. Da mesma forma, o contexto correto é eee
, portanto, a concatenação é a sequência com o contexto aa|bccde|eee
. Para um segundo exemplo, considere a|bb|cd
e aabb|cd|
, onde a segunda palavra tem um contexto correto vazio. O diagrama de alinhamento é
a|b b|c d
a a b b|c d|
onde o contexto esquerdo da segunda palavra se estende além do da primeira. A concatenação é aa|bbcd|
.
Mas espere, há uma dica: se as letras do diagrama de alinhamento não coincidirem, a concatenação não existe! Como exemplo, o diagrama de aa|bb|cc
e c|c|c
é
a a|b b|c c
c|c|c
onde b
e c
na quarta coluna discordam, portanto não podem ser concatenadas.
A tarefa
Seu trabalho é escrever um programa que use duas seqüências de caracteres com contexto cujas partes são separadas por |
acima, e que produza sua concatenação, se houver, e outra coisa, se não. O "algo mais" pode ter qualquer valor, incluindo nenhuma saída, desde que não seja uma sequência válida com contexto e seja a mesma em todos os casos. No entanto, lançar um erro não é aceitável. Você pode fornecer um programa STDIN para STDOUT ou uma função, e funções anônimas também são aceitas. A menor contagem de bytes vence e as brechas padrão não são permitidas.
Casos de teste
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=""
à definição de&
deve resolver isso. Me desculpe, eu não especificou isso mais explicitamente nas especificações, eu vou editá-lo no.'|'
sinais quando as strings não coincidem?Python (242 bytes)
Explicação
A função lambda
m
retorna a mais longa das duas seqüências, desde que elas compartilhem um prefixo comum. Ele faz isso através da concatenação a cadeia vazia''
em vez de todos os valores em falta, em seguida, transformando o resultado (o qual pode tomar a formaaa
,ab
,a
, oub
em casos de fósforo / desadaptação / comprimentos desiguais) para um conjunto de caracteres originais em cada posição.join
espera um único argumento, portanto, descompactar um conjunto com mais de um elemento fará com que ele aumente aTypeError
.A função principal então
m
para combinar o contexto esquerdo e os dados dividem a primeira palavra com o contexto esquerdo da segunda (da direita para a esquerda, sobre cadeias invertidas)m
para combinar o contexto correto da primeira palavra com a parte dos dados e o contexto correto da segundaAs partes de dados das duas palavras originais são cortadas dos lados direito e esquerdo dos novos contextos.
Como sabemos que os desalinhamentos causam
m
aumento de aTypeError
, nesses casos capturamos a exceção e retornamos implicitamenteNone
.Teste
Resultado
fonte