Є два шматки дерева. Обидва складаються з прямого тіла і деяких зайвих блоків нижче корпусу. Приклад шматка з додатковими блоками в (0-індексованих) позиціях 0,4,7,9,10:
XXXXXXXXXXX
X X X XX
Елемент може бути представлений у вигляді 01
двійкової послідовності із i
символом th, що показує, чи є блок у цьому i
положенні. Верхній приклад може бути представлений як 10001001011
.
Ми можемо скласти два шматки, вертикально перевернувши другий (а може і перевернути його по горизонталі). Після перегортання ми можемо знайти вирівнювання, де обидва шматки можна скласти разом, щоб мати висоту 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
Приклад призвів до загальної ширини 12 блоків.
Ви повинні написати програму або функцію, яка отримує два рядки як вхід, що представляє дві частини, і виводить ціле число мінімально досяжної ширини з висотою 3.
Вхідні дані
- Дві рядки, що складаються з символів
0
та1
. - Обидва рядки містять щонайменше один символ.
- Ви можете вибрати два рядки як один, з'єднаний єдиним пробілом.
Вихідні дані
- Єдине додатне ціле число, досяжна мінімальна загальна ширина.
Приклади
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
Це кодовий гольф, тому найкоротший запис виграє.