Introdução
Digamos que S 1 = a...b
e S 2 = ..c..
. Se os colocarmos um em cima do outro, obtemos:
a...b
..c..
Mesclamos as duas strings, com o .
caractere líquido (que pode se sobrepor). Temos isso:
a.c.b
Se uma das strings for mais longa que a outra, aplicaremos o mesmo algoritmo:
a.....b
..c..
becomes:
a.c...b
e
a.....b
..c.......
becomes:
a.c...b...
Se dois caracteres colidirem, apenas usamos o caractere inferior, por exemplo
a..b
...c
becomes:
a..c
A tarefa
Dadas duas cadeias não vazias, produza a cadeia mesclada . Observe que você pode supor que a entrada contenha apenas pontos e letras minúsculas (ou maiúsculas, se for mais conveniente).
Casos de teste
Input Output
a....b ..c... a.c..b
aaaaaa bbbbbb bbbbbb
ab.ab. b.b.b. bbbab.
a.......b c c.......b
Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
a.....b
..c.......
possível? Qual é o resultado então?a.c...b...
.Respostas:
Gelatina , 5 bytes
Entrada via argumentos da linha de comando.
Experimente online!
Explicação
Esta é uma porta direta da minha resposta CJam (veja isso para uma explicação sobre por que isso funciona):
fonte
CJam, 9 bytes
Teste aqui.
Explicação
Faz uso do fato de que
'.' < upper case letters < lower case letters
. Dessa forma, ao usar o máximo em elementos entre duas cadeias, qualquer letra substitui a.
, mas podemos fazer uma letra da segunda entrada substituir uma letra da primeira se colocarmos em maiúscula a primeira. Confuso? Aqui está um dos casos de teste como exemplo:Converter primeiro em maiúsculas:
Tome o máximo em elementos:
Converter de volta para minúsculas:
E aqui está como o código faz isso:
fonte
eu
/el
truque!Javascript ES6,
5255 caracteresTeste
fonte
f('c', 'a....b')
Pyth, 11
Experimente online ou execute o Test Suite
fonte
Sério, 10 bytes
Experimente online!
Usa a mesma estratégia da resposta CJam de Martin
Explicação:
fonte
Oitava, 50 bytes
fonte
!=
por>
Haskell,
4342 bytesExemplo de uso:
"ab.ab." # "b.b.b."
->"bbbab."
.Como funciona:
se as duas listas não estiverem vazias, escolha o cabeçalho da 1ª lista, se o cabeçalho da 2ª lista estiver
"."
, ou escolha o cabeçalho da segunda lista. Anexe uma chamada recursiva com as caudas das listas.se pelo menos uma lista estiver vazia, anexe as duas listas.
Editar: @Lynn salvou um byte. Obrigado!
fonte
c<'a'
salvar um byte.Python 2, 47 bytes
fonte
Julia, 101 bytes
Esta é uma função que aceita duas strings e retorna uma string.
Computamos
m
como o comprimento máximo das duas entradas, depois definimos uma funçãor
que preenche corretamente sua entrada com.
s para comprimentom
e a armazena como argumento de função. Em seguida,zip
as entradas acolchoadas à direita e verificamos o mínimo (conforme definido pelo código ASCII) de cada par. Se for um.
, usamos qualquer caractere com o código maior, caso contrário, usamos o que vier da segunda entrada. A matriz resultante éjoin
ed em uma string e retornada.fonte
C,
10689 bytesTeste ao vivo em ideone .
fonte
Retina , 55
A linha 5 é um espaço único. A linha 6 é uma linha vazia (sem nova linha à direita).
Experimente online.
Comecei este no GNU sed (com a opção -r). Porto direto para Retina, uma vez que eu tenho as regexes descobertas. A versão sed é:
fonte
a..k.f....b c...f.g...g. => .c..kffg...g
Python 2, 70 bytes
Experimente aqui!
Primeiro, criamos zip as duas strings em uma lista. Se a segunda corda for maior que a primeira, ela será preenchida com
None
(map(None,x,y)
faz isso).Em seguida, iteramos nesta lista
j
sendo o caractere da primeira string ek
o da segunda string. Nós escolhemosk
se não é um ponto e caso contrárioj
.Isso poderia ter 61 bytes se eu pudesse produzir o resultado como lista de caracteres em vez de uma sequência.
fonte
Perl, 48 + 3 = 51 bytes
Bah não consegue encontrar uma solução mais curta. (Mesma abordagem que a resposta do JavaScript de @ Qwertiy).
Requer
-pl
e recebe informações destdin
e-i
fonte
$_^=$^I^$^I;s/\.|\0/substr$^I,pos,1or$&/ge
PHP> = 7.1, 58 bytes
Versão Online
fonte
q / kdb +,
4340 bytesSolução:
Exemplo:
Explicação:
Notas: Estou aproveitando "Dadas duas strings não vazias " e assumindo que as entradas são strings. No kdb
"c"
é um átomo,(),"c"
é uma string, caso contrário, precisamos adicionar 6 bytes à pontuação, pois não podemos usar$
para preencher um átomo ...fonte