Advent Challenge 3: è ora di ricostruire i regali!


9

<< Precedente Successivo >>

Sfortunatamente, Babbo Natale non è stato in grado di catturare gli elfi in tempo! Ora deve tornare ai regali di produzione. Dato che gli elfi non sono sicuramente gli schiavi di Babbo Natale, deve capire le spese per quanto li paga.

Sfida

Date alcune informazioni per i regali, determinare il costo di produzione di tutti loro.

Ogni regalo viene messo in una scatola di cartone e avvolto con carta da imballaggio, con un nastro avvolto attorno alla fine. La carta da imballaggio è magica e non richiede sovrapposizioni, quindi la quantità di carta da imballaggio utilizzata è esattamente equivalente alla superficie della scatola. Tutti i regali sono prismi rettangolari perché in questo modo Babbo Natale li può conservare in modo più compatto. Il nastro gira in tutte e tre le direzioni (quindi la lunghezza del nastro usato per avvolgere è uguale alla somma dei tre diversi perimetri).

Il presente stesso ha un costo noto, per fortuna. Il cartone costa $ 1 al metro quadrato e la carta da imballaggio costa $ 2 al metro quadrato. (Suggerimento: puoi semplicemente moltiplicare la superficie per 3: P). Il nastro costa $ 1 al metro.

Specifiche del formato

L'input verrà fornito come un elenco di regali in cui ogni regalo contiene il costo dell'articolo reale e le tre dimensioni della casella attuale. Il tuo output dovrebbe essere il costo totale richiesto.

Per essere precisi, la formula per il costo di un singolo presente con costo dell'articolo ce le dimensioni x, yed zè c + 6 * (x * y + y * z + z * x) + 4 * (x + y + z).

Casi test

[[7, 8, 6, 7], [7, 7, 5, 5], [8, 9, 6, 7], [6, 5, 10, 10], [5, 9, 6, 7], [9, 9, 10, 6], [8, 10, 10, 6], [6, 5, 7, 9], [7, 10, 8, 8], [5, 9, 9, 10]] -> 11866
[[5, 10, 8, 9], [8, 8, 5, 8], [8, 7, 7, 6], [5, 9, 9, 10], [9, 7, 5, 8], [9, 8, 9, 5], [7, 5, 6, 7], [5, 7, 6, 10]] -> 8854
[[9, 8, 8, 8], [10, 9, 8, 5], [10, 7, 5, 5], [10, 10, 6, 6], [8, 5, 8, 7]] -> 4853
[[7, 7, 8, 10], [8, 10, 7, 8], [9, 7, 7, 8], [8, 5, 10, 5], [6, 6, 6, 8], [8, 9, 7, 5], [8, 5, 6, 5], [7, 9, 8, 5], [10, 10, 10, 8]] -> 9717
[[5, 8, 9, 7], [5, 8, 7, 10], [5, 7, 7, 6], [5, 5, 5, 6], [9, 9, 5, 7], [5, 6, 7, 8], [8, 5, 8, 7], [6, 9, 5, 5], [10, 10, 9, 10]] -> 9418
[[9, 9, 7, 10], [5, 8, 7, 9], [5, 5, 9, 8], [10, 5, 9, 10], [8, 5, 10, 7], [8, 9, 5, 5], [5, 10, 6, 10]] -> 8178
[[5, 9, 5, 8], [7, 8, 10, 6], [7, 10, 7, 10], [8, 9, 7, 5], [5, 7, 8, 6], [9, 9, 6, 10], [6, 5, 9, 9], [7, 9, 9, 9]] -> 9766
[[7, 10, 5, 10], [8, 10, 8, 9], [8, 6, 7, 8], [6, 9, 8, 5], [6, 7, 10, 9], [7, 6, 5, 8]] -> 7118
[[10, 6, 7, 5], [5, 9, 5, 9], [9, 7, 8, 5], [6, 6, 9, 9], [9, 9, 6, 9], [10, 5, 8, 9], [7, 5, 6, 10], [9, 10, 5, 5]] -> 8007
[[8, 10, 7, 8], [9, 10, 5, 8], [6, 7, 5, 6], [10, 10, 9, 8], [7, 5, 8, 9], [10, 10, 6, 7], [10, 8, 9, 10], [5, 10, 5, 5]] -> 9331

Regole

  • Si applicano scappatoie standard
  • L'input e l'output possono essere dati e presentati in qualsiasi formato ragionevole
  • È necessario prendere l'input come un elenco di regali, non 4 elenchi degli attributi.
  • Questo è un , quindi vince la risposta più breve in byte
  • Nessuna risposta sarà accettata

Speriamo che questa sfida sia più semplice delle precedenti: P

Nota: ho tratto ispirazione per questa serie di sfide da Advent Of Code . Non ho affiliazione con questo sito

Puoi vedere un elenco di tutte le sfide della serie guardando la sezione "Linked" della prima sfida qui .


Abbiamo perso l '"1 metro aggiuntivo per il nastro" inc + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)
Graham il

@Graham Sì, risulta che mi sono dimenticato di aggiungerlo. Rimozione dalle specifiche.
HyperNeutrino,

@cairdcoinheringaahing Ci scusiamo per la confusione. Ho deciso di attenermi all'idea originale e ho modificato i miei casi di test per riflettere anche quello. Grazie!
HyperNeutrino,

6
Mi sono goduto questa serie di sfide ma (è vero, dopo alcune buone birre!) Questa sembra proprio quale lingua può eseguire la formula chiusa nel minor numero di byte senza spazio per il golf creativo, quindi, in questo caso, no + 1 da me.
Shaggy,

1
Per il voto ravvicinato dopo aver chiarito i punti commentati esistenti, cosa devo chiarire di più?
HyperNeutrino il

Risposte:


5

JavaScript (ES6), 58 byte

a=>a.reduce((p,[c,x,y,z])=>p+c+6*(y*z+x*(y+=z))+4*(x+y),0)

Casi test

Come?

L'unico trucco usato qui è di fattorizzare (xy + xz) come x (y + z) e riutilizzare la somma (y + z) nell'ultima parte della formula.

a => a.reduce(                    // for each present in a:
  (s, [c, x, y, z]) =>            //   s = sum, [c, x, y, z] = present parameters
    s +                           //   add to s:
    c +                           //     c
    6 * (y * z + x * (y += z)) +  //     6(yz + x(y + z))
    4 * (x + y),                  //     4(x + (y + z))
  0                               //   initial sum = 0
)                                 // end of reduce()




2

C (gcc) , 104 100 99 93 byte

t,x,y,z;f(A,a)int*A;{for(t=0;a--;)t+=*A+++6*((x=*A++)*(y=*A++)+(z=*A++)*(x+=y))+4*(x+z);t=t;}

Provalo online!

Accetta un elenco di attributi presenti (lunghezza elenco divisibile per quattro) e un numero intero che specifica il numero di regali. Restituisce il costo di produzione di tutti i regali.


100 byte se non è necessario per funzionare più di uno, puoi radere di j = t = 0,
PrincePolka,


@PrincePolka Grazie. Per consenso, una funzione deve funzionare più volte, quindi j=t=0deve rimanere. Non riuscivo a capire come riorganizzare il calcolo per salvare un byte; sarebbe utile se ti collegassi a una versione completa del codice con il tuo golf implementato.
Jonathan Frech,


@PrincePolka Grazie mille.
Jonathan Frech,

1

05AB1E , 17 byte

vyćsO4*y¦æ2ùPO6*O

Provalo online!

Spiegazione

v                  # for each present y
 yć                # extract the head (cost)
   s               # swap the dimensions to the top
    O4*            # sum and multiply by 4
       y¦          # push y with the head (cost) removed
         æ         # compute the powerset
          2ù       # keep only elements of length 2
            PO     # product and sum
              6*   # multiply by 6
                O  # sum everything

0

Pyth , 39 byte

u+G++hH*6++*@H1@H2*@H1@H3*@H2@H3*4stHQ0

Provalo online!

Accetta l'input come rappresentazione di stringa di un elenco nidificato e somma la formula di costo.



0

Excel, 60 byte

Input prelevato da Columns Ato D, nuova riga per presente. Formula in qualsiasi altra colonna.

=SUMPRODUCT(A:A+6*(B:B*C:C+C:C*D:D+B:B*D:D)+4*(B:B+C:C+D:D))

Puoi rilasciare 2 byte trasferendo questo su Fogli Google e rilasciando il terminale))
Taylor Scott
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.