Existem dois pedaços de madeira. Ambos consistem em um corpo reto e alguns blocos extras abaixo do corpo. Uma peça de exemplo com blocos extras nas posições (indexadas em 0) 0,4,7,9,10:
XXXXXXXXXXX
X X X XX
A peça pode ser representada como uma 01
sequência binária com o i
caractere th mostrando se existe um bloco na i
posição th. O exemplo superior pode ser representado como 10001001011
.
Podemos montar duas peças girando verticalmente a segunda (e talvez também horizontalmente). Após o flip (s), podemos encontrar um alinhamento no qual as duas peças podem ser montadas para ter uma altura de 3.
Two example pieces:
XXXXXXXXXXX XXXXXXXX
X X X XX XXX
Second piece flipped vertically and horizontally:
XXXXXXXXXXX
X X X XX
XXX
XXXXXXXX
Pieces put together:
XXXXXXXXXXX
XXXXX X XX
XXXXXXXX
O exemplo resultou em uma largura total de 12 blocos.
Você deve escrever um programa ou função que receba duas seqüências como entrada, representando as duas partes e produza um número inteiro com a largura mínima possível com uma altura de 3.
Entrada
- Duas strings consistindo nos caracteres
0
e1
. - Ambas as cadeias contêm pelo menos um caractere.
- Você pode optar por receber as duas seqüências como uma unida por um único espaço.
Resultado
- Um único número inteiro positivo, a largura total mínima alcançável.
Exemplos
0 0 => 1
1 0 => 1
1 1 => 2
11 111 => 5
010 0110 => 5
0010 111 => 5
00010 11011 => 6
01010 10101 => 5
1001 100001 => 6
1110001100001 1100100101 => 14
001101010000101 100010110000 => 16
0010110111100 001011010101001000000 => 21
0010110111100 001011010101001001100 => 28
100010100100111101 11100101100010100100000001 => 27
0010 10111 => 5
0100 10111 => 5
0010 11101 => 5
0100 11101 => 5
10111 0010 => 5
10111 0100 => 5
11101 0010 => 5
11101 0100 => 5
Este é o código de golfe, portanto a entrada mais curta vence.