Considera un pezzo di corda (come in "corda", non come in "un mucchio di personaggi"), che è piegato avanti e indietro sulla linea reale. Possiamo descrivere la forma della stringa con un elenco di punti che attraversa (in ordine). Per semplicità, supponiamo che tutti questi punti siano numeri interi.
Prendi come esempio [-1, 3, 1, -2, 5, 2, 3, 4]
(nota che non ogni voce implica una piega):
La stringa che si estende lungo la direzione verticale è solo a scopo di visualizzazione. Immagina la corda tutta appiattita sulla linea reale.
Ora ecco la domanda: qual è il maggior numero di pezzi in cui questa corda può essere tagliata con un singolo taglio (che dovrebbe essere verticale nella figura sopra). In questo caso, la risposta è 6 con un taglio ovunque tra 2
e 3
:
Per evitare ambiguità, il taglio deve essere eseguito in una posizione non intera.
La sfida
Dato un elenco di posizioni di numero intero in cui viene piegata una stringa, devi determinare il maggior numero di pezzi in cui la stringa può essere tagliata con un singolo taglio in una posizione non intera.
È possibile scrivere un programma completo o una funzione. È possibile accettare input tramite STDIN, argomento della riga di comando, prompt o parametro di funzione. È possibile scrivere l'output su STDOUT, visualizzarlo in una finestra di dialogo o restituirlo dalla funzione.
Si può presumere che l'elenco sia in qualsiasi elenco o formato stringa conveniente.
L'elenco conterrà almeno 2 e non più di 100 voci. Le voci saranno numeri interi, ciascuno compreso nell'intervallo -2 31 ≤ p i <2 31 . Si può presumere che non vi siano due voci consecutive identiche.
Il tuo codice deve elaborare tali input (compresi i casi di test di seguito) in meno di 10 secondi su un PC desktop ragionevole.
Casi test
Tutti i casi di test sono semplicemente input seguiti da output.
[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
piuttosto ambiguo?