Kochen mit Code

24

Sie sind ein Koch und kochen gerne mit Ihren Gewürzen, aber in letzter Zeit möchten Sie Ihre Gewürze danach sortieren, wie oft Sie sie verwenden. Aber Sie haben keine Zeit aufzuschreiben, wann Sie Ihr Gewürz zuletzt verwendet haben. Sie tauschen einfach Gewürze aus und bewegen sie, und dies scheint den Trick zu tun.

Aber natürlich bist du ein Koch und das bedeutet, dass du ein paar Köche bei dir hast. Sie beschließen, ihnen die einfachen Regeln für den Umgang mit Ihren Gewürzen zu erläutern.

  1. Wenn Sie kürzlich ein Gewürz verwendet haben, schieben Sie es im Gewürzregal nach oben

  2. Wenn Sie überhaupt keine Gewürze verwendet haben, z. B. []leere Bewegungsliste, ist die Gewürzliste nicht betroffen.

  3. Sie können jedes Gewürz in meinen Gewürzhalter legen, aber wenn Sie es verwenden, stellen Sie sicher, dass Sie es bewegen.

  4. Die Liste kann alles enthalten. Aber weil dies Gewürze sind, arbeiten wir mit ihnen. Es wird bevorzugt, dass Sie Namen von Gewürzen verwenden.

  5. Gewürze sollten einzigartig sein. Zu viele der gleichen Gewürze verderben die Brühe ... oder wie auch immer das Sprichwort lautet

Es gelten die normalen Code-Golf-Regeln.

Beispiel von Oregano, das immer wieder verwendet wird.

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

Aufgabe

Geben Sie eine Liste der Gewürze und eine Liste der verwendeten Gewürze ein und geben Sie dann die endgültige Liste aus.

Beispiel

Eingang

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

Ausgabe

[salt, pepper, paprika, cumin, oregano]

Wie das aussieht

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

Eingang

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

Ausgabe

[salt, pepper, paprika, oregano, cumin]
tisaconundrum
quelle
Sind die Artikel in der Gewürzliste einzigartig?
Dienstag,
Ja, sie werden einzigartig sein
Tisaconundrum
31
Ich habe das in Chef ziemlich weit gebracht, aber irgendwann wurde es zu anstrengend! Ich werde jemandem 50 Kopfgeld geben, wenn er das kann.
Geokavel
5
Im Folgenden erhalten Sie einen Überblick über die Eingabe in die Rührschüsseln. Der Rest wird sehr schwierig, aber machbar für die richtige Person!
Geokavel
1
@geokavel Herausforderung angenommen
NieDzejkob

Antworten:

4

Schale , 15 bis 14 Bytes

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

Eingaben sind Listen von Zeichenfolgen (es funktioniert auch bei anderen Arten von Listen). Probieren Sie es online!

-1 Byte dank H.PWiz

Erläuterung

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"]

Ich muss es xunendlich wiederholen , da die Liste sonst ihr letztes Element verlieren würde, wenn wir das oberste Gewürz verwenden. Es würde ausreichen, eine nachfolgende 1 hinzuzufügen, aber die Wiederholung benötigt weniger Bytes. Ein besserer Weg wäre, die Liste zu drehen, anstatt das erste Element zu löschen, aber Husk hat dafür kein eingebautes Element.

Zgarb
quelle
Σmist für ein Byte.
H.PWiz
8

Haskell , 48 Bytes

foldl(?)ist eine anonyme Funktion, die zwei EqListenargumente verwendet und eine Liste mit allen Elementen desselben ( vergleichbaren) Typs zurückgibt.

Verwenden Sie als 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

Probieren Sie es online!

  • foldl(?) s mBeginnt mit der Liste (Gewürzregal) sund kombiniert sie mit jedem Element (Gewürz) min der angegebenen Reihenfolge mithilfe des Operators ?.
  • s?nVerwendet das Gewürz naus dem Gewürzregal sund gibt das resultierende Gewürzregal zurück.
    • Wenn smindestens zwei Elemente vorhanden sind, wird ?geprüft, ob das zweite gleich ist n, und wenn ja, werden die ersten beiden Elemente umgeschaltet. Wenn nicht gleich, wird ?das erste Element fixiert und der Rest wiederholt.
    • Wenn shöchstens ein Element vorhanden ist, wird ?es unverändert zurückgegeben.
Ørjan Johansen
quelle
7

Chef , 875 843 Bytes

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 Bytes dank Jonathan Allan durch Entfernen, thewo ich nicht denken würde, dass es funktionieren wird.

Chefkoch hat keine Schnurarten, die Zutaten sind also positive ganze Zahlen. 0 wird verwendet, um die Startliste von den verwendeten Zutaten zu trennen und die Liste der verwendeten Zutaten zu beenden. Ein Beispiel finden Sie unter dem TIO-Link.

Pseudocode-Erklärung:

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())

Probieren Sie es online!

NieDzejkob
quelle
Genial! War diese Sprache die ganze Zeit bei TIO?
Geokavel
Indem Sie einige überflüssige Wörter entfernen, können Sie 32 Bytes sparen
Jonathan Allan
@geokavel es wurde gestern hinzugefügt.
Jonathan Allan
1
@geokavel Haben Sie den Inhalt der Rührschüssel vor dem Servieren in die Auflaufform gegossen?
NieDzejkob
1
@NieDzejkob Did you pour the contents of the mixing bowl into the baking dish before serving?das hört sich ganz nach einem Kommentar an, der auf die Koch-SE gehen würde und nicht hier: P lol (auch eine sehr seltsame Frage zum Kochen, wenn du mich fragst: P)
HyperNeutrino
6

JavaScript, 61 Bytes

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

Eingabeformat:

  • f (list_of_spices) (list_of_what_spices_got_used)
  • Liste zwei sind Reihe der Zeichenkette

Ausgabe:

  • list_of_spices wird direkt geändert.

tsh
quelle
4

Python 2 , 80 Bytes

def g(r,q):
 for s in q:
  i=r.index(s)
  if i:r[i-1],r[i]=r[i],r[i-1]
 return r

Probieren Sie es online!

Chas Brown
quelle
1
Einige Einsparungen: Verwenden Sie Tabulatoren, um den inneren Block einzurücken und zuzuweisen r[i-1:i+1].
Ørjan Johansen
Durch Ersetzen returndurch printkann ein weiteres Byte gespeichert werden .
Jonathan Frech
4

Java 8, 87 86 76 Bytes

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

Nimmt zwei Eingaben als ArrayList<String>und ändert die erste Liste, anstatt eine neue zurückzugeben, um Bytes zu sparen.

-10 Bytes dank @Nevay .

Erläuterung:

Probieren Sie es hier aus.

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)
Kevin Cruijssen
quelle
1
77 Bytes: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 rächt sich für all die Leute, die sich darüber lustig gemacht haben.
Geokavel
2

05AB1E , 20 18 Bytes

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

Probieren Sie es online!

Erläuterung

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
Emigna
quelle
2

C #, 125 117 81 79 Bytes

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

Probieren Sie es auf .NET Fiddle

36 Bytes abgespielt dank Raznagul

Ceshion
quelle
Die Antwort wäre 117 Bytes, da der Namespace für fehlt Array.IndexOf. Es gibt jedoch mehrere Möglichkeiten, die Antwort zu foreachverkürzen : 1. Verwenden Sie eine -Loop anstelle der for-Loop. 2. Wenn cist ein List<string>anstelle von können string[]Sie direkt verwenden c.IndexOf. 3. cSie müssen es nicht zurückgeben, da es an Ort und Stelle geändert wurde.
Raznagul
1

Mathematica, 52 Bytes

aber es ist mein erster Beitrag hier, sei also bitte nett, wenn er falsch gezählt wird :)

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

Und ein Beispiel:

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

{Salz, Pfeffer, Paprika, Kreuzkümmel, Oregano}

Kuba
quelle
Ich bin kein Mathematica-Experte, aber Sie könnten wahrscheinlich einige Leerzeichen entfernen, um einige Bytes zu sparen.
Pajonk
@pajonk hat bereits ohne sie gezählt, aber ich hätte sie auch hier entfernen sollen, danke.
Kuba