Oh, amico, questa data di scadenza non scrive i mesi con le lettere! Non so se scade il 10 marzo o il 3 ottobre ... Aspetta, no, non importa, l'anno dice il 2012. (vicolo-oops ha usato mezzo mattone di formaggio nella spazzatura come un professionista)
Quindi supponiamo per un momento che sei troppo occupato per cercare di capire quando questo barattolo di marinara dovrebbe scadere. Vuoi solo la versione di Cliff Notes: quanto è probabile che sia scaduto? Scriviamo un po 'di codice!
Sai che i produttori stampano la data come un triplo ordinato di numeri interi, in uno dei tre formati:
YEAR MONTH DAY
MONTH DAY YEAR
DAY MONTH YEAR
E sai che alcune date possono essere interpretate solo in uno o due modi, non tutte e tre: il 55 in 55-11-5
deve essere un anno, il che significa che questa particolare scatola di Twinkies è scaduta il 5 novembre 1955. L'anno viene talvolta indicato in quattro cifre e non due, che possono escludere alcune opzioni. Quando sono due cifre, 50..99 significa 1950..1999 e 0..49 significa 2000..2049.
Il tuo compito è quello di scrivere un programma o una funzione che accetta un array di numeri interi che è una data valida in almeno una delle interpretazioni sopra e produce una probabilità percentuale che sia ancora buona. La probabilità percentuale è semplicemente la percentuale di interpretazioni valide della data in data successiva alla data odierna.
L'array di numeri interi sarà il [Int]
tipo di lunghezza tre della tua lingua se è un argomento per una funzione e dato come numeri interi con trattino, barra o spazio (puoi scegliere) se usato come input su STDIN in un programma completo. *
La "data odierna" può essere la data effettiva di oggi, ottenuta tramite una funzione di data o la data indicata in un argomento aggiuntivo per la funzione o un parametro aggiuntivo in STDIN. Può essere in epoca Unix secondi, un'altra tripla anno-mese-giorno inserita in una delle tre modalità sopra, o un'altra modalità più conveniente.
Facciamo alcuni esempi! L'input della data di scadenza sarà nello stile separato da trattini e supponiamo per gli esempi seguenti che la data odierna sia il 5 luglio 2006.
14-12-14
- Entrambe le interpretazioni valide per questo (DMY e YMD) sono equivalenti, 14 dicembre 2014. L'output è 100 perché questo prodotto è sicuramente ancora buono.8-2-2006
- L'ultimo numero è sicuramente un anno, dato che ha quattro cifre. Potrebbe essere l'8 febbraio (scaduto) o il 2 agosto (ancora valido). L'output è 50 .6-7-5
- Potrebbe essere qualsiasi cosa! L'interpretazione del "5 luglio 2006" è ancora valida (solo per un giorno), ma le restanti due sono entrambe nel 2005 e dovrebbero essere lanciate il più rapidamente possibile. L'output è 33 .6-5-7
- Qui, due interpretazioni su tre sono al sicuro. Puoi arrotondare il tuo decimale su o giù, quindi 66 o 67 vanno bene.12-31-99
- Va bene, questo è inequivocabilmente dall'inizio del secolo (gli anni da 50 a 99 sono 19XX e 31 non possono essere un mese). Un grande grasso 0 , e dovresti davvero pulire il tuo frigorifero più spesso.
Puoi tranquillamente supporre che qualsiasi input che non soddisfa gli standard di cui sopra non sia a conoscenza delle regole di output sopra.
Nessuna richiesta web o scappatoie standard. Le librerie di gestione della data sono consentite. Questo è il golf del codice: vinca il programma più breve.
* Se si utilizza brainfuck o un linguaggio per handicappati di tipo di dati simile, è possibile assumere che i valori ASCII dei primi tre caratteri in input siano i numeri interi per la data. Questo esclude la logica dell'anno a quattro cifre, certo, ma penso che saremmo troppo stupiti nel vedere una soluzione a Brainfuck per offenderti.