Istnieją dwa kawałki drewna. Oba składają się z prostego korpusu i kilku dodatkowych bloków poniżej korpusu. Przykładowy kawałek z dodatkowymi blokami w pozycjach (0-indeksowanych) 0,4,7,9,10:
XXXXXXXXXXX
X X X XX
Kawałek może być reprezentowany jako 01
sekwencja binarna ze i
znakiem th pokazującym, czy w i
pozycji th znajduje się blok . Górny przykład można przedstawić jako 10001001011
.
Możemy złożyć dwa elementy, obracając drugi pionowo (i być może również poziomo). Po odwróceniu (ach) możemy znaleźć wyrównanie, w którym dwa elementy mogą być złożone, aby mieć wysokość 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
W wyniku uzyskano całkowitą szerokość 12 bloków.
Powinieneś napisać program lub funkcję, która odbiera dwa ciągi jako dane wejściowe reprezentujące dwa kawałki i wyprowadza liczbę całkowitą o minimalnej możliwej do osiągnięcia szerokości o wysokości 3.
Wejście
- Dwa ciągi znaków złożone z znaków
0
i1
. - Oba ciągi zawierają co najmniej jeden znak.
- Możesz wybrać otrzymanie dwóch ciągów jako jednego połączonego pojedynczym odstępem.
Wynik
- Pojedyncza dodatnia liczba całkowita, minimalna możliwa do osiągnięcia szerokość całkowita.
Przykłady
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
To jest golf golfowy, więc wygrywa najkrótszy wpis.