Cucinare con il codice


24

Sei uno chef e ami cucinare con le tue spezie, ma recentemente hai avuto la passione di organizzare le tue spezie in base alla frequenza con cui le usi. Ma non hai tempo di scrivere quando hai usato l'ultima spezia. Semplicemente, si scambiano e si spostano le spezie in giro, e questo sembra fare il trucco.

Ma ovviamente sei uno chef e questo significa che hai dei cuochi con te. Decidi di dire loro le semplici regole di impegno con le tue spezie.

  1. Se di recente hai usato una spezia, spostala verso l'alto di una nel porta spezie

  2. Se non hai usato alcuna spezia, ad esempio []un elenco di movimenti vuoto, l'elenco delle spezie non è interessato.

  3. Puoi mettere qualsiasi spezia nel mio portaspezie, ma se lo usi, assicurati di spostarlo.

  4. L'elenco può contenere qualsiasi cosa. Ma poiché queste sono spezie con cui stiamo lavorando. Si preferisce usare nomi di spezie.

  5. Le spezie dovrebbero essere uniche. Troppe spezie uguali rovinano il brodo ... o comunque dice questo

Si applicano le normali regole del code-golf.

Esempio di origano usato ancora e ancora.

pepper  pepper  pepper  pepper  oregano
paprika paprika paprika oregano pepper
salt    salt    oregano paprika paprika
cumin   oregano salt    salt    salt
oregano cumin   cumin   cumin   cumin

Compito

Inserisci un elenco di spezie e un elenco di quali spezie sono state utilizzate, quindi visualizza l'elenco finale.

Esempio

Ingresso

[pepper, paprika, salt, cumin, oregano], [oregano, cumin, cumin, salt, salt, salt]

Produzione

[salt, pepper, paprika, cumin, oregano]

Come appare

pepper  pepper  pepper  pepper  pepper  pepper  salt
paprika paprika paprika paprika paprika salt    pepper
salt    salt    salt    cumin   salt    paprika paprika
cumin   oregano cumin   salt    cumin   cumin   cumin
oregano cumin   oregano oregano oregano oregano oregano

Ingresso

[pepper, paprika, salt, cumin, oregano], [salt, salt, salt, salt, salt, salt, salt, salt, salt, salt, salt, salt, oregano]

Produzione

[salt, pepper, paprika, oregano, cumin]

Gli articoli nell'elenco delle spezie sono unici?
TSH

Sì, saranno unici
tisaconundrum

31
L'ho fatto abbastanza lontano in Chef, ma alla fine è diventato troppo stancante! Darò a qualcuno 50 doni se possono farlo.
geokavel,

5
Ecco una sintesi di ottenere l'input nelle ciotole di miscelazione. Il resto sarà molto difficile, ma fattibile per la persona giusta!
geokavel,

Risposte:


4

Buccia , 15 14 byte

Fλṁ↔`C⁰tMo→=¢⁰

Gli input sono elenchi di stringhe (funziona anche su altri tipi di elenchi). Provalo online!

-1 byte grazie a H.PWiz

Spiegazione

Fλṁ↔`C⁰tMo→=¢⁰  Implicit inputs (two lists).
F               Fold second input using the first as initial value
 λ              with this anonymous function:
                 Arguments x (list of spices) and s (used spice).
                 For example, x=["a","b","c","d"] and s="c".
            ¢⁰   Repeat x infinitely: ["a","b","c","d","a","b","c","d"..
        M        For each item,
           =     test equality to s: [0,0,1,0,0,0,1,0..
         o→      and increment: [1,1,2,1,1,1,2,1..
       t         Drop first element: [1,2,1,1,1,2,1..
    `C⁰          Cut x to these lengths: [["a"],["b","c"],["d"]]
  ṁ↔             Reverse each slice and concatenate: ["a","c","b","d"]

Devo ripetere xall'infinito, poiché altrimenti l'elenco perderebbe il suo ultimo elemento quando usiamo la spezia più in alto. Basterebbe aggiungere un 1 finale, ma la ripetizione richiede meno byte. Un modo migliore sarebbe quello di ruotare l'elenco invece di eliminare il suo primo elemento, ma Husk non ha un built-in per quello.


Σmè per un byte.
H.Piz,

8

Haskell , 48 byte

foldl(?)è una funzione anonima che Eqaccetta due argomenti dell'elenco e restituisce un elenco, con tutti gli elementi dello stesso tipo ( -comparabile).

Usa come foldl(?)["pepper", "paprika", "salt", "cumin", "oregano"]["oregano", "cumin", "cumin", "salt", "salt", "salt"].

foldl(?)
(x:y:r)?n|y==n=y:x:r|s<-y:r=x:s?n
s?n=s

Provalo online!

  • foldl(?) s minizia con l'elenco (portaspezie) se lo combina con ciascun elemento (spezia) mdall'ordine, usando l'operatore ?.
  • s?nusa la spezia ndal portaspezie se restituisce il portaspezie risultante.
    • Se sha almeno due elementi, ?controlla se il secondo è uguale ne in tal caso cambia i primi due elementi. Se non è uguale, ?mantiene fisso il primo elemento e ricorre sul resto.
    • Se sha al massimo un elemento, lo ?restituisce invariato.

7

Chef , 875 843 byte

S.

Ingredients.
1 g T
0 g Z
J
I

Method.
Put Z into mixing bowl.Take I from refrigerator.B I.Put I into mixing bowl.Take I from refrigerator.B until bed.Take I from refrigerator.V I.Put Z into 2nd mixing bowl.N T.Fold J into mixing bowl.Put J into mixing bowl.Remove I.Fold T into mixing bowl.Put J into 2nd mixing bowl.N until ned.Fold T into mixing bowl.Put T into mixing bowl.Fold J into 2nd mixing bowl.Put J into mixing bowl.C T.Stir for 1 minute.Put Z into mixing bowl.Fold T into mixing bowl.C until ced.Fold T into 2nd mixing bowl.G T.Put T into mixing bowl.Fold T into 2nd mixing bowl.G until ged.Put I into mixing bowl.Fold T into mixing bowl.Take I from refrigerator.V until ved.Fold T into mixing bowl.L T.Put T into 2nd mixing bowl.Fold T into mixing bowl.L until led.Pour contents of 2nd mixing bowl into baking dish.

Serves 1.

-32 byte grazie a Jonathan Allan rimuovendo thedove non penserei che funzionerà.

Lo chef non ha tipi di stringa, quindi gli ingredienti sono numeri interi positivi. 0 viene utilizzato per separare l'elenco di partenza dagli ingredienti usati e per terminare l'elenco degli ingredienti usati. Vedere il collegamento TIO per un esempio.

Spiegazione pseudocodice:

A, B: stack
T, J, IN: int
T = 1
A.push(0) // used as the marker for the bottom of the stack
IN = input() // input the first list
while(IN):
    A.push(IN)
    IN = input()
IN = input() // for each used ingredient
while(IN):
    B.push(0)
    while(T): // move all ingredients up to and including the one we are moving right now to the second stack
        T = A.peek() - IN
        B.push(A.pop())
    A.push(B.pop())
    if(A.peekUnderTop() != 0):
        A.swapTopTwoItems()
    T = B.pop() // move the ingredients from the second stack back to the first
    while(T):
        A.push(T)
        T = B.pop()
    T = IN // to make it non-zero for next iteration
    IN = input(0
print(A.inverted())

Provalo online!


Eccezionale! Questa lingua è sempre stata su TIO?
geokavel,

Rimuovendo alcune parole ridondanti è possibile salvare 32 byte
Jonathan Allan,

@geokavel è stato aggiunto ieri.
Jonathan Allan,

1
@geokavel Hai versato il contenuto della ciotola nella teglia prima di servire?
NieDzejkob,

1
@NieDzejkob Did you pour the contents of the mixing bowl into the baking dish before serving?che suona completamente come un commento che andrebbe sulla cottura SE e non qui: P lol (anche una domanda molto strana per cucinare se mi chiedi: P)
HyperNeutrino

6

JavaScript, 61 byte

a=>b=>b.map(v=>(p=a.indexOf(v))&&a.splice(p-1,2,a[p],a[p-1]))

Formato di input:

  • f (list_of_spices) (list_of_what_spices_got_used)
  • due elenchi sono array di stringhe

Produzione:

  • list_of_spices viene modificato sul posto.




4

Java 8, 87 86 76 byte

a->b->b.forEach(x->{int i=a.indexOf(x);a.set(i,a.set(i>0?i-1:i,a.get(i)));})

Accetta due input come ArrayList<String>e modifica il primo Elenco invece di restituirne uno nuovo per salvare i byte.

-10 byte grazie a @Nevay .

Spiegazione:

Provalo qui.

a->b->{                  // Method with two ArrayList<String> parameters and no return-type
  b.forEach(x->{         //  Loop over the second input-List
    int i=a.indexOf(x);  //   Get the index of the current item in the first input-List
    a.set(i,a.set(       //    Swap items:
      i>0?               //     If the current item is not the top item yet:
       i-1               //      Use the item above it
      :                  //     Else:
       i,                //      Use itself
         a.get(i)));     //     And swap it with the current item
  })                     //  End of loop
                         // End of method (implicit / single-line body)

1
77 byte:a->b->b.forEach(x->{int i=a.indexOf(x);a.set(i,a.set(i>0?i-1:i,a.get(i)));});
Nevay,

Java si sta vendicando per tutte le persone che lo hanno preso in giro.
geokavel,

2

05AB1E , 20 18 byte

vDyk>Ig‚£`U`2(@)X«

Provalo online!

Spiegazione

v                    # for each used spice
 D                   # duplicate current spice order
  yk                 # get the index of the current spice
    >                # increment
     Ig‚             # pair with the number of unique spices
        £            # split the spice list into pieces of these sizes
         `           # split as 2 separate lists to stack
          U          # store the list of spices below the current one in X
           `         # push the current spice and all above separately to stack
            2(@      # swap the second item to the top of the stack
               )     # wrap in a list
                X«   # append the rest of the spices


2

C #, 125 117 81 79 byte

(c,n)=>{foreach(var i in n){var j=c.IndexOf(i);if(j!=0){c[j]=c[--j];c[j]=i;}}};

Provalo su .NET Fiddle

golfed 36 byte grazie a raznagul


La risposta così com'è sarebbe 117 byte in quanto manca lo spazio dei nomi per Array.IndexOf. Esistono diversi modi per ridurre la risposta: 1. Utilizzare un foreach-loop anziché il for-loop. 2. If cis a List<string>invece di string[]te può usare direttamente c.IndexOf. 3. Poiché cviene modificato in atto, non è necessario restituirlo.
raznagul,


1

Mathematica, 52 byte

ma è il mio primo post qui, quindi sii gentile se contato in modo errato :)

Keys@Sort@Merge[{PositionIndex@#,-Counts@#2},Total]&

E un esempio:

Keys@Sort@Merge[{PositionIndex@#, -Counts@#2}, Total] &[
    {pepper, paprika, salt, cumin, oregano}
  , {oregano, cumin, cumin, salt, salt, salt}
]

{sale, pepe, paprika, cumino, origano}


Non sono un esperto di Mathematica, ma probabilmente potresti rimuovere alcuni spazi per salvare alcuni byte.
pajonk,

@pajonk ha già contato senza di loro, ma avrei dovuto rimuoverli anche qui, grazie.
Kuba,

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.