Ci sono due pezzi di legno. Entrambi consistono in un corpo dritto e alcuni blocchi extra sotto il corpo. Un pezzo di esempio con blocchi extra nelle posizioni (indicizzate 0) 0,4,7,9,10:
XXXXXXXXXXX
X X X XX
Il pezzo può essere rappresentato come una 01
sequenza binaria con il i
carattere th che mostra se c'è un blocco nella i
posizione th. L'esempio superiore può essere rappresentato come 10001001011
.
Possiamo mettere insieme due pezzi capovolgendo verticalmente il secondo (e magari capovolgendolo anche in orizzontale). Dopo il flip (s) possiamo trovare un allineamento in cui i due pezzi possono essere uniti per avere un'altezza di 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
L'esempio ha comportato una larghezza totale di 12 blocchi.
Dovresti scrivere un programma o una funzione che riceve due stringhe come input che rappresentano i due pezzi e genera un numero intero la larghezza minima raggiungibile con un'altezza di 3.
Ingresso
- Due stringhe costituite dai caratteri
0
e1
. - Entrambe le stringhe contengono almeno un carattere.
- Puoi scegliere di ricevere le due stringhe come una unita da un singolo spazio.
Produzione
- Un singolo numero intero positivo, la larghezza totale minima raggiungibile.
Esempi
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
Questo è il codice golf, quindi vince l'ingresso più breve.