Ho pubblicato questa sfida qualche tempo fa, che riguarda il numero di elfi che Babbo Natale ha bisogno per consegnare i regali.
A causa dell'aumento della popolazione, quest'anno Babbo Natale ha un po 'più di tempo da perdere. Sebbene in passato operassimo in modo molto asincrono, stiamo iniziando a sperimentare di essere sempre più sincronizzati. Quindi, Babbo Natale deve sapere quanto tempo ci vorrà per consegnare regali in ogni regione con un determinato numero di elfi.
Il peso del carbone non è cambiato negli ultimi due anni - è ancora più pesante dei regali, quindi Babbo Natale ha bisogno di tre elfi per persona cattiva in casa e due elfi per persona simpatica in casa.
Gli elfi trascorrono tutto l'anno ad allenarsi per Natale, quindi non hanno bisogno di riposo tra le consegne. Possono consegnare regali a una sola casa alla volta e devono tornare sulla slitta di Babbo Natale e ritirare il regalo successivo prima di andare alla casa successiva. Per ragioni che non sono libero di condividere, gli elfi non trascorrono il tempo viaggiando tra la slitta di Babbo Natale e le case (ma possono viaggiare solo quando la slitta di Babbo Natale è sul tetto), né la sua slitta trascorre il tempo spostandosi da casa a casa. (Slitta di Babbo Natale fa ha bisogno di passare di casa in casa per raccogliere carburante, ma sto già dire troppo).
Gli elfi che consegnano regali devono spendere quattro secondi * ciascuno per consegnare i regali, e gli elfi che consegnano carbone devono spendere cinque secondi * ciascuno per consegnarli (come da regolamento dell'Amministrazione dell'Aviazione Santa, i guanti con polvere di carbone su di essi devono essere inceneriti immediatamente dopo salire a bordo della slitta, che richiede del tempo). Inoltre, le case devono essere visitate nell'ordine in cui si trovano sulla mappa, da sinistra a destra, e gli elfi non possono iniziare a consegnare regali ad altre case fino a quando tutti i regali non sono stati consegnati alla casa in cui si trovano attualmente.
Se assumessimo che Babbo Natale avesse elfi più che sufficienti per questa regione, ci vorrebbe solo il tempo necessario per consegnare un regalo a qualcuno nella lista dei cattivi, 5 secondi, per casa o 4 secondi per casa se tutti sono carini.
Tuttavia, a differenza delle precedenti stagioni, questo Babbo Natale in arrivo potrebbe non avere più di elfi sufficienti per ogni regione, quindi 4 secondi è il tempo minimo assoluto * che ci vorrà per consegnare i regali a una determinata casa, a meno che non ci siano 0 brave persone e 0 persone cattive nel qual caso ci vorranno 0 secondi.
Inoltre, se anche una delle case ha qualcuno nella lista dei cattivi, Babbo Natale avrà bisogno di almeno tre elfi. Se almeno una delle case ha qualcuno nella bella lista e nessuno di loro ha persone nella lista dei cattivi, Babbo Natale avrà bisogno di almeno due elfi. Se nessuna delle case è nello spirito natalizio, qualsiasi numero di elfi (incluso 0) impiegherà 0 secondi.
Sulla mappa di Babbo Natale, una casa è rappresentata da un *, e ogni casa è divisa da un +. Babbo Natale usa ancora le stesse mappe dell'altra sfida , ma includerò la documentazione su di esse qui.
Ci sarà un numero su entrambi i lati della casa - quello a sinistra che rappresenta il numero di persone cattive nella casa e quello a destra che rappresenta il numero di persone simpatiche nella casa. Se non c'è un numero su un lato, viene interpretato come uno 0.
So che può sembrare folle, ma alcune persone "non amano il Natale", quindi a volte una casa potrebbe non avere un numero su entrambi i lati.
Una delle mappe di Babbo Natale potrebbe assomigliare a questa.
1*3+2*+*5+*+4*7
Diciamo che Babbo Natale ha nove elfi nella sua slitta.
(0s) La prima casa ha 1 persone cattive e 3 simpatiche. Tre elfi consegnano carbone, impiegando cinque secondi e sei consegnano regali, impiegando quattro secondi. Dopo cinque secondi, la slitta di Babbo Natale si sposta nella casa successiva
(5s) La seconda casa ha 2 persone cattive e 0 simpatiche. Sei elfi consegnano carbone, impiegando cinque secondi. Dopo cinque secondi, la slitta di Babbo Natale si sposta nella casa successiva
(10s) La terza casa ha 0 persone cattive e 5 simpatiche. Otto elfi vanno a consegnare quattro regali (quello lasciato indietro non può consegnare un regalo). Dopo quattro secondi, tutti gli elfi sono tornati e due di loro vanno a consegnare l'altro presente (la slitta deve aspettare che gli elfi tornino prima di andare nella casa successiva), impiegando altri quattro secondi
(18s) La quarta casa non è nello spirito natalizio, quindi ha 0 persone cattive e 0 simpatiche ed è saltata
(18s) La quinta casa ha 4 persone cattive e 7 simpatiche. Questo diventa un po 'complicato ...
I. Tutti e nove gli elfi vanno a consegnare tre doni di carbone (lascia t + 0, ritorna t + 5) II. Dopo 5 secondi, sono tutti tornati sulla slitta e tre di loro vanno a consegnare l'ultimo regalo di carbone (lascia t + 5, restituisci t + 10) mentre gli altri sei vanno a consegnare tre bei regali (lascia t + 5s, ritorno t + 9s).
III. Dopo quattro secondi, sei elfi tornano e vanno a consegnare altri tre regali carini (lascia t + 9s, ritorna t + 13s).
IV. Un secondo dopo la loro partenza, i tre elfi che stavano consegnando il regalo di carbone tornano e due di loro partono per consegnare l'ultimo bel regalo (lasciare + 10 secondi, tornare t + 14 secondi)
(18 + 14 = 32 secondi ) Babbo Natale ha finito di consegnare regali in quella regione.
Come possiamo vedere, Babbo Natale impiega in totale 32 secondi per consegnare regali a questa regione. Quella era una versione troppo semplificata di una delle mappe di Babbo Natale, però. Normalmente, le mappe di Babbo Natale hanno più linee e sono di forma quadrata per adattarsi meglio alla sua lista. Una mappa normale potrebbe assomigliare a questa ( \na alla fine di ogni riga)
1*2+*+*4+1*
2*4+3*+1*6+*
*+*+4*2+1*1
*4+*3+1*+2*3
3*10+2*+*5+*
Con 26 elfi (o qualsiasi importo superiore), ci vorranno 71 secondi per Babbo Natale .
Con 20 elfi , ci sarebbero voluti 76 secondi a Babbo Natale .
Con 15 elfi , Babbo Natale impiegherebbe 80 secondi .
Con 3 elfi , ci sarebbero voluti 288 secondi di Babbo Natale .
Con 2 elfi (o qualsiasi importo inferiore), sarebbe impossibile.
Oh, e un'altra cosa: l'ordine in cui gli elfi consegnano presenta le cose (a causa della differenza di tempo nel consegnare regali alle persone cattive / simpatiche), quindi il tuo codice dovrebbe sempre generare il minor tempo che gli elfi possono impiegare per consegnare regali.
Sfida
Aiuta Babbo Natale a determinare quanto tempo impiegherà un determinato numero di elfi a consegnare i regali.
case
- Una casa è rappresentata da a
* - Le case sono divise per
+ - Il numero a sinistra della casa simboleggia il numero di persone cattive (nessun numero significa 0)
- Il numero a destra simboleggia il numero di persone simpatiche (nessun numero significa 0)
- Potrebbero esserci newline (
\n) nell'input, che dovrebbe anche essere gestito come una divisione
Elfi
- Babbo Natale ha bisogno dell'aiuto di tre elfi per i cattivi (il carbone è molto più pesante dei regali) e questi elfi impiegheranno cinque secondi * per consegnare i regali
- Babbo Natale ha bisogno dell'aiuto di due elfi per le persone simpatiche, e questi elfi impiegheranno quattro secondi * per consegnare i regali
- Se non ci sono numeri su entrambi i lati della casa, Babbo Natale non visiterà quella casa, e quindi non ci vorrà del tempo (le persone che non sono nello spirito natalizio non meritano nemmeno il carbone)
Babbo
- Babbo Natale deve consegnare i regali alle case uno a uno
- Babbo Natale non può spostarsi nella casa successiva fino a quando tutti gli elfi non sono tornati sulla slitta e tutti i regali non sono stati consegnati a quella casa (non vogliamo lasciare indietro gli elfi, adesso?)
- La slitta di Babbo Natale non passa il tempo viaggiando da casa a casa (Ancora una volta, per motivi che non sono libero di condividere)
Cosa fare
Data una mappa di case e un certo numero di elfi, stampa quanto tempo impiegherà Babbo Natale a consegnare i regali alle case sulla mappa.
* (Non posso condividere il tempo impiegato dagli elfi per consegnare regali. Non posso né confermare né negare che i tempi inclusi in questa sfida siano corretti)
Regole
- Ci sono due input: la mappa e il numero di elfi. Gli input possono essere presi come argomenti per una funzione oppure da STDIN o equivalenti. Se prendere due input è impossibile nella tua lingua, allora e solo allora puoi accettare i due input come una singola stringa di input, delimitata da un carattere che non è normalmente in un input (non uno
+*\no0-9- la stringa di input non può essere ambigua) es,. - Il numero di elfi sarà sempre un numero intero non negativo (0 è valido)
- L'output può essere il valore di ritorno di una funzione oppure può essere stampato su STDOUT o equivalente. Se per Babbo Natale è impossibile consegnare regali in una determinata regione con un determinato numero di elfi, devi emettere un numero negativo coerente o un messaggio coerente senza alcun numero al suo interno
- Tutto ciò che viene stampato su STDERR verrà ignorato, pertanto non è possibile stampare il risultato o il messaggio di errore su STDERR
- Il tuo programma non può andare in crash dato un numero non valido di elfi per una regione
- L'output dovrebbe essere solo il tempo totale necessario a Babbo Natale per consegnare i regali con il dato numero di elfi.
- L'output dovrebbe essere sempre il minor tempo necessario agli elfi per consegnare i regali
- L'ingresso conterrà solo numeri,
+,*, e ritorni a capo\n(se non si specifica un altro personaggio che l'ingresso comprenderà se la lingua non può prendere due ingressi (sguardo alla prima regola) ) - Si applicano scappatoie standard
Casi test
"1*1", 5 elves => 5
"1*1", 3 elves => 9
"1*2", 7 elves => 5
"1*2", 5 elves => 10
"1*2", 3 elves => 13
"2*1", 8 elves => 5
"2*1", 5 elves => 9
"2*1", 3 elves => 14
"1*" , 3 elves => 5
"1*" , 2 elves => (error message)
"*1" , 2 elves => 4
"*1" , 0 elves => (error message)
"*" , 0 elves => 0
"1*1+1*1", 5 elves => 10
"1*1+1*1", 3 elves => 18
"1*1+*+1*1", 3 elves => 18
"1*2+2*1", 8 elves => 10
"1*2+2*1", 7 elves => 14
"1*2+2*1", 6 elves => 18
"1*2+2*1", 3 elves => 27
"1*2+2*1", 2 elves => (error message)
"*+*+*+*", 2 elves => 0
"*+*+*+*", 0 elves => 0
"1*3+2*+*5+*+4*7", 9 elves => 32
(spero di aver capito tutto bene)
punteggio
Babbo Natale passa ogni giorno a guardare sempre un sacco di cose: tutti i regali che consegnerà, tutti gli elfi che ha, tutte le case a cui consegna regali per ... Per Babbo Natale, il miglior regalo di Natale sarebbe in grado di vedere un po 'di qualcosa. Per questo motivo, vince l'invio più breve in byte .
Classifica
Questo è uno snippet di stack che genera sia una classifica che una panoramica dei vincitori per lingua.
Per assicurarti che la tua risposta venga visualizzata, inizia la tua risposta con un titolo usando il seguente modello Markdown
## Language Name, N bytes
Dove N è la dimensione, in byte, dell'invio
Se desideri includere più numeri nell'intestazione (ad esempio, barrando i punteggi precedenti o includendo i flag nel conteggio dei byte), assicurati solo che il punteggio effettivo sia l' ultimo numero nell'intestazione
## Language Name, <s>K</s> X + 2 = N bytes
4*7impiega 14 secondi (che è coperto a circa metà del "saggio", poco prima dell'introduzione della mappa 2D) ma (4 * 5) + (7 * 4) = 48
naughty*5+nice*4in ogni casa, giusto? (nota che 4*7in questo esempio non ce n'è )
5*15e ci fossero 9elfi, occorrerebbero i (minimi) 20 secondi o 22 secondi? Vedi queste rappresentazioni testuali per vedere un'illustrazione di quell'esempio.
5*15dovrebbe leggere 4*15.
(1+0+0+1+2+3+1+0+0+0+4+1+0+0+1+2+3+2+0+0)*5+(2+0+4+0+4+0+6+0+0+0+2+1+4+3+0+3+10+0+5+0)*4=21*5+44*4=105+176=281(anche se devo dire che non ho letto l'intero "saggio"!)