Il y a deux morceaux de bois. Les deux se composent d'un corps droit et de quelques blocs supplémentaires sous le corps. Un exemple de pièce avec des blocs supplémentaires aux positions (indexées 0) 0,4,7,9,10:
XXXXXXXXXXX
X X X XX
Le morceau peut être représenté comme une 01
séquence binaire avec le i
th caractère montrant s'il y a un bloc à la i
th position. L'exemple supérieur peut être représenté par 10001001011
.
Nous pouvons assembler deux morceaux en retournant verticalement le second (et peut-être en le retournant aussi horizontalement). Après le (s) flip (s), nous pouvons trouver un alignement où les deux pièces peuvent être assemblées pour avoir une hauteur 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
L'exemple a donné une largeur totale de 12 blocs.
Vous devez écrire un programme ou une fonction qui reçoit deux chaînes en entrée représentant les deux pièces et génère un entier de la largeur minimale réalisable avec une hauteur de 3.
Contribution
- Deux chaînes composées des caractères
0
et1
. - Les deux chaînes contiennent au moins un caractère.
- Vous pouvez choisir de recevoir les deux chaînes comme une jointe par un seul espace.
Production
- Un seul entier positif, la largeur totale minimale réalisable.
Exemples
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
C'est le golf de code, donc l'entrée la plus courte gagne.
Réponses:
Pyth,
3735343231 octetsPrend la nouvelle ligne d'entrée séparée.
Démonstration , test de harnais .
Explication:
Au niveau supérieur, pour chaque combinaison de chaînes normales et inversées, nous décalons la deuxième chaîne vers la gauche d'un nombre donné de positions et vérifions les chevauchements avec la première chaîne. Cette opération est répétée jusqu'à ce qu'un montant de décalage sans chevauchement soit trouvé. Cette quantité de décalage est ajoutée à la première longueur de chaîne et le résultat est comparé à la deuxième longueur de chaîne. La valeur la plus élevée est imprimée.
la source
Pip ,
727048 octetsPrend les deux chaînes comme arguments de ligne de commande. Formaté, avec commentaires:
Nous calculons uniquement les chevauchements là où la pièce du bas dépasse vers la gauche, nous devons donc l'essayer avec les pièces du haut et du bas inversées. Chaque fois à travers la boucle intérieure, s'il n'y a pas de 2 dans la somme, c'est un ajustement; nous plaçons ensuite un autre zéro à la fin de la pièce inférieure et réessayons.
Pour trouver la largeur totale, nous avons divisé les éléments de
p
en listes de caractères et somme. Les opérations par élément sur des listes de longueur inégale préservent la longueur de la plus longue, de sorte que la longueur de cette somme est exactement ce dont nous avons besoin. (Le fractionnement est nécessaire car la simple addition sous forme de nombres éliminera les zéros non significatifs:,$+[0101 10] = 111
mais$+^[0101 10] = [0 1 1 1]
.)la source
Rubis 127
130Cela s'est avéré si long ... :(
Tests: http://ideone.com/te8XWk
Rubis lisible:
la source
[[m,n],[m,n.reverse],[n,m],[n,m.reverse]]
pièce est peut-être incorrecte. (Je ne suis pas sûr mais j'ai fait une erreur similaire.)[n.reverse,m]
place de[n,m.reverse]
mais je ne connais pas Ruby.'0010110111100', '001011010101001001100'
disant Expected: 28, Actual: 30 . Tous les autres tests réussissent. Vous avez donc fait un bon travail de test des caisses d'angle. :)JavaScript ( ES6 ) 160
Impossible de raccourcir ...
la source