Considérons un morceau de ficelle (comme dans "corde", pas comme dans "un tas de caractères"), qui est plié dans les deux sens sur la ligne réelle. Nous pouvons décrire la forme de la chaîne avec une liste de points qu'elle traverse (dans l'ordre). Pour simplifier, supposons que tous ces points sont des entiers.
Prenons un exemple [-1, 3, 1, -2, 5, 2, 3, 4]
(notez que chaque entrée n’implique pas un pli):
La chaîne qui s'étend verticalement sert uniquement à la visualisation. Imaginez la chaîne tout aplatie sur la ligne réelle.
Maintenant, voici la question: quel est le plus grand nombre de pièces que cette ficelle peut être découpée en une seule coupe (qui devrait être verticale dans l'image ci-dessus). Dans ce cas, la réponse est 6 avec une coupure comprise entre 2
et 3
:
Pour éviter les ambiguïtés, la coupe doit être effectuée à une position non entière.
Le défi
Étant donné la liste des positions entières par lesquelles une chaîne est pliée, vous devez déterminer le plus grand nombre de pièces dans lesquelles la chaîne peut être coupée en une seule coupe à une position non entière.
Vous pouvez écrire un programme complet ou une fonction. Vous pouvez effectuer une entrée via STDIN, un argument de ligne de commande, une invite ou un paramètre de fonction. Vous pouvez écrire la sortie dans STDOUT, l'afficher dans une boîte de dialogue ou la renvoyer depuis la fonction.
Vous pouvez supposer que la liste est dans un format de liste ou de chaîne approprié.
La liste contiendra au moins 2 et pas plus de 100 entrées. Les entrées seront des entiers, compris entre -2 31 ≤ p i <2 31 . Vous pouvez supposer que deux entrées consécutives ne sont pas identiques.
Votre code doit traiter une telle entrée (y compris les cas de test ci-dessous) en moins de 10 secondes sur un ordinateur de bureau raisonnable.
Cas de test
Tous les cas de test sont simplement entrés, suivis par les résultats.
[0, 1]
2
[2147483647, -2147483648]
2
[0, 1, -1]
3
[1, 0, -1]
2
[-1, 3, 1, -2, 5, 2, 3, 4]
6
[-1122432493, -1297520062, 1893305528, 1165360246, -1888929223, 385040723, -80352673, 1372936505, 2115121074, -1856246962, 1501350808, -183583125, 2134014610, 720827868, -1915801069, -829434432, 444418495, -207928085, -764106377, -180766255, 429579526, -1887092002, -1139248992, -1967220622, -541417291, -1617463896, 517511661, -1781260846, -804604982, 834431625, 1800360467, 603678316, 557395424, -763031007, -1336769888, -1871888929, 1594598244, 1789292665, 962604079, -1185224024, 199953143, -1078097556, 1286821852, -1441858782, -1050367058, 956106641, -1792710927, -417329507, 1298074488, -2081642949, -1142130252, 2069006433, -889029611, 2083629927, 1621142867, -1340561463, 676558478, 78265900, -1317128172, 1763225513, 1783160195, 483383997, -1548533202, 2122113423, -1197641704, 319428736, -116274800, -888049925, -798148170, 1768740405, 473572890, -1931167061, -298056529, 1602950715, -412370479, -2044658831, -1165885212, -865307089, -969908936, 203868919, 278855174, -729662598, -1950547957, 679003141, 1423171080, 1870799802, 1978532600, 107162612, -1482878754, -1512232885, 1595639326, 1848766908, -321446009, -1491438272, 1619109855, 351277170, 1034981600, 421097157, 1072577364, -538901064]
53
[-2142140080, -2066313811, -2015945568, -2013211927, -1988504811, -1884073403, -1860777718, -1852780618, -1829202121, -1754543670, -1589422902, -1557970039, -1507704627, -1410033893, -1313864752, -1191655050, -1183729403, -1155076106, -1150685547, -1148162179, -1143013543, -1012615847, -914543424, -898063429, -831941836, -808337369, -807593292, -775755312, -682786953, -679343381, -657346098, -616936747, -545017823, -522339238, -501194053, -473081322, -376141541, -350526016, -344380659, -341195356, -303406389, -285611307, -282860017, -156809093, -127312384, -24161190, -420036, 50190256, 74000721, 84358785, 102958758, 124538981, 131053395, 280688418, 281444103, 303002802, 309255004, 360083648, 400920491, 429956579, 478710051, 500159683, 518335017, 559645553, 560041153, 638459051, 640161676, 643850364, 671996492, 733068514, 743285502, 1027514169, 1142193844, 1145750868, 1187862077, 1219366484, 1347996225, 1357239296, 1384342636, 1387532909, 1408330157, 1490584236, 1496234950, 1515355210, 1567464831, 1790076258, 1829519996, 1889752281, 1903484827, 1904323014, 1912488777, 1939200260, 2061174784, 2074677533, 2080731335, 2111876929, 2115658011, 2118089950, 2127342676, 2145430585]
2
a reasonable desktop PC
plutôt ambigu?