Memasak dengan Kode

24

Anda seorang koki dan Anda suka memasak dengan rempah-rempah Anda, tetapi baru-baru ini Anda suka mengatur rempah-rempah Anda berdasarkan seberapa sering Anda menggunakannya. Tetapi Anda tidak punya waktu untuk menulis ketika Anda menggunakan rempah terakhir. Cukup, Anda bertukar dan memindahkan rempah-rempah, dan ini tampaknya berhasil.

Tapi tentu saja Anda seorang koki dan itu berarti Anda memiliki beberapa koki. Anda memutuskan untuk memberi tahu mereka aturan sederhana tentang keterlibatan dengan rempah-rempah Anda.

  1. Jika Anda baru-baru ini menggunakan rempah-rempah, pindahkan ke atas di rak rempah-rempah

  2. Jika Anda tidak menggunakan rempah-rempah sama sekali, misalnya []daftar gerakan kosong, maka daftar rempah tidak akan terpengaruh.

  3. Anda bisa memasukkan bumbu apa saja ke dalam wadah bumbu saya, tetapi jika Anda menggunakannya, pastikan untuk memindahkannya.

  4. Daftar dapat berisi apa saja. Tetapi karena ini adalah rempah-rempah yang sedang kami tangani. Lebih disukai Anda menggunakan nama rempah-rempah.

  5. Rempah-rempah harus unik. Terlalu banyak rempah yang sama merusak kaldu ... atau bagaimanapun pepatah itu berlaku

Aturan kode-golf normal berlaku.

Contoh Oregano digunakan berulang kali.

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

Tugas

Masukkan daftar rempah-rempah, dan daftar rempah-rempah yang digunakan, kemudian tampilkan daftar akhir.

Contoh

Memasukkan

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

Keluaran

[salt, pepper, paprika, cumin, oregano]

Bagaimana ini terlihat

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

Memasukkan

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

Keluaran

[salt, pepper, paprika, oregano, cumin]
tisaconundrum
sumber
Apakah item dalam daftar rempah unik?
tsh
Ya, mereka akan menjadi unik
tisaconundrum
31
Saya melakukan ini cukup jauh di Chef tapi akhirnya terlalu melelahkan! Saya akan memberi seseorang hadiah 50 jika mereka bisa melakukannya.
geokavel
5
Inilah intisari memasukkan input ke dalam mangkuk pengaduk. Sisanya akan sangat sulit, tetapi bisa dilakukan untuk orang yang tepat!
geokavel
1
@geokavel Challenge diterima
NieDzejkob

Jawaban:

4

Sekam , 15 14 byte

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

Input adalah daftar string (ini juga berfungsi pada jenis daftar lainnya). Cobalah online!

-1 byte terima kasih kepada H.PWiz

Penjelasan

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

Saya harus mengulangi xtanpa batas, karena kalau tidak, daftar akan kehilangan elemen terakhir ketika kita menggunakan bumbu paling atas. Ini akan cukup untuk menambahkan trailing 1, tetapi pengulangan membutuhkan lebih sedikit byte. Cara yang lebih baik adalah memutar daftar alih-alih menjatuhkan elemen pertamanya, tetapi Husk tidak memiliki bawaan untuk itu.

Zgarb
sumber
Σmadalah untuk satu byte.
H.PWiz
8

Haskell , 48 byte

foldl(?)adalah fungsi anonim yang mengambil dua argumen daftar dan mengembalikan daftar, dengan semua elemen dari tipe yang sama ( Eq-comparable).

Gunakan sebagai 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

Cobalah online!

  • foldl(?) s mdimulai dengan (rak rempah-rempah) daftar sdan menggabungkannya dengan setiap elemen (rempah-rempah) dari mdalam urutan, menggunakan operator ?.
  • s?nmenggunakan bumbu ndari rak bumbu sdan mengembalikan rak bumbu yang dihasilkan.
    • Jika smemiliki setidaknya dua elemen, ?periksa apakah yang kedua sama dengan n, dan jika demikian beralih dua elemen pertama. Jika tidak sama, ?pertahankan elemen pertama tetap dan berulang pada sisanya.
    • Jika smemiliki paling banyak satu elemen, ?kembalikan itu tidak berubah.
Ørjan Johansen
sumber
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 terima kasih kepada Jonathan Allan dengan menghapus di themana saya tidak berpikir itu akan berhasil.

Koki tidak memiliki tipe string, jadi bahannya bilangan bulat positif. 0 digunakan untuk memisahkan daftar awal dari bahan-bahan bekas dan untuk mengakhiri daftar bahan-bahan bekas. Lihat tautan TIO untuk contoh.

Penjelasan kodesemu:

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

Cobalah online!

NieDzejkob
sumber
Luar biasa! Apakah bahasa ini sudah ada di TIO selama ini?
geokavel
Dengan menghapus beberapa kata yang berlebihan Anda dapat menyimpan 32 byte
Jonathan Allan
@geokavel sudah ditambahkan kemarin.
Jonathan Allan
1
@geokavel Apakah Anda menuangkan isi mangkuk ke dalam loyang sebelum disajikan?
NieDzejkob
1
@NieDzejkob Did you pour the contents of the mixing bowl into the baking dish before serving?yang benar-benar terdengar seperti komentar yang akan pergi pada memasak SE dan tidak di sini: P lol (juga pertanyaan yang sangat aneh untuk memasak jika Anda bertanya kepada saya: 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]))

Masukkan format:

  • f (list_of_spices) (list_of_what_spices_got_used)
  • dua daftar adalah larik string

Keluaran:

  • list_of_spices dimodifikasi di tempat.

tsh
sumber
5

Python 2 , 72 71 69 byte

Jawaban baru, dalam semangat upaya awal saya.

r,u=input()
for x in u:i=r.index(x);r.insert(i/~i+i,r.pop(i))
print r

Cobalah online!

Solusi lain:

Python 2 , 69 byte

r,u=input()
for x in u:i=r.index(x)-1;r[i:i+2]=r[i:i+2][::-1]
print r

Cobalah online!

TFeld
sumber
print(r)-> print r?
tsh
1
69 bytes
Halvard Hummel
4

Python 2 , 80 byte

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

Cobalah online!

Chas Brown
sumber
1
Beberapa penghematan: Gunakan tab untuk indentasi blok dalam, dan tetapkan r[i-1:i+1].
Ørjan Johansen
Mengganti returndengan printdapat menghemat byte lain .
Jonathan Frech
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)));})

Mengambil dua input sebagai ArrayList<String>dan memodifikasi Daftar pertama alih-alih mengembalikan yang baru untuk menghemat byte.

-10 byte berkat @Nevay .

Penjelasan:

Coba di sini.

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
sumber
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
Jawa membalas dendam untuk semua orang yang mengolok-oloknya.
geokavel
2

05AB1E , 20 18 byte

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

Cobalah online!

Penjelasan

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
sumber
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;}}};

Cobalah. NET Fiddle

bermain golf 36 byte berkat raznagul

Ceshion
sumber
Jawabannya adalah 117 byte karena Anda kehilangan namespace untuk Array.IndexOf. Tetapi ada beberapa cara untuk membuat jawaban menjadi lebih singkat: 1. Gunakan foreach-loop dan bukan for-loop. 2. Jika cadalah List<string>bukan string[]Anda langsung dapat menggunakan c.IndexOf. 3. Seperti cyang diubah di tempat Anda tidak perlu mengembalikannya.
raznagul
1

05AB1E , 16 byte

vÐyk©DĀ-DUè®ǝyXǝ

Cobalah online!

Erik the Outgolfer
sumber
1

Mathematica, 52 byte

tetapi ini adalah posting pertama saya di sini jadi harap berbaik hati jika salah menghitung :)

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

Dan sebuah contoh:

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

{garam, merica, paprika, jintan, oregano}

Kuba
sumber
Saya bukan ahli Mathematica, tetapi Anda mungkin dapat menghapus beberapa ruang untuk menghemat beberapa byte.
pajonk
@pajonk sudah dihitung tanpa mereka tetapi saya harus menghapusnya juga di sini, terima kasih.
Kuba
0

CJam , 18 byte

l~{a\_@#__g-e\}%~`

Cobalah online!

Erik the Outgolfer
sumber