Приготування їжі з кодексом


24

Ви шеф-кухар і любите готувати страви зі своїми спеціями, але останнім часом вам подобається впорядкувати свої спеції залежно від того, як часто ви їх вживаєте. Але у вас немає часу записувати, коли ви вживали спецію в останній раз. Просто ви обмінюєтесь і переміщуєте спеції, і це, здається, робить трюк.

Але, звичайно, ти шеф-кухар, і це означає, що з тобою є кухарі. Ви вирішите сказати їм прості правила взаємодії зі своїми спеціями.

  1. Якщо ви нещодавно вживали пряність, перемістіть її вгору в стійці для спецій

  2. Якщо ви взагалі не використовували прянощі, наприклад []порожній список руху, то список прянощів не впливає.

  3. Ви можете покласти будь-яку спецію в мій держатель спецій, але якщо ви її використовуєте, переконайтесь, що її перемістіть.

  4. Список може містити все, що завгодно. Але тому, що це спеції, з якими ми працюємо. Бажано використовувати назви спецій.

  5. Спеції повинні бути унікальними. Занадто багато тих самих прянощів псують бульйон ... або все-таки ця приказка

Діють звичайні правила гольф-коду.

Приклад орегано використовується знову і знову.

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

Завдання

Введіть список спецій та список тих спецій, які звикли, а потім виведіть остаточний список.

Приклад

Вхідні дані

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

Вихідні дані

[salt, pepper, paprika, cumin, oregano]

Як це виглядає

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

Вхідні дані

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

Вихідні дані

[salt, pepper, paprika, oregano, cumin]

Чи унікальні предмети в списку спецій?
tsh

Так, вони будуть унікальними
tisaconundrum

31
Я досить далеко роблю це в шеф-кухарі, але врешті-решт це стало занадто втомлює! Я дам комусь 50 баунті, якщо вони зможуть це зробити.
geokavel

5
Ось суть отримання входу в миски для змішування. Решта буде дуже важким, але виконаним для потрібної людини!
geokavel

Відповіді:


4

Лушпиння , 15 14 байт

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

Вхідні дані - це списки рядків (він також працює в інших видах списків). Спробуйте в Інтернеті!

-1 байт завдяки H.PWiz

Пояснення

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

Мені потрібно повторювати xнескінченно, оскільки в іншому випадку список втратить останній елемент, коли ми використовуємо найвищу спецію. Достатньо було б додати кінцевий 1, але для повторення потрібно менше байтів. Кращим способом було б поворот списку замість того, щоб скидати його перший елемент, але у Husk для цього немає вбудованого.


Σmє на один байт.
H.PWiz

8

Haskell , 48 байт

foldl(?)це анонімна функція, яка бере два аргументи списку та повертає список із усіма елементами одного ( Eq-порівнянного) типу.

Використовувати як 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

Спробуйте в Інтернеті!

  • foldl(?) s mпочинається зі списку (пряна стійка) sі поєднує його з кожним елементом (спецією) з mпорядку, використовуючи оператор ?.
  • s?nвикористовує пряність nзі стійки для спецій sі повертає отриману стійку для спецій.
    • Якщо sмає щонайменше два елементи, ?перевірте, чи є другий рівним n, і якщо так, перемикайте перші два елементи. Якщо вона не дорівнює, ?тримає перший елемент фіксованим і повторюється на решті.
    • Якщо sмає щонайменше один елемент, ?повертає його незмінним.

7

Шеф-кухар , 875 843 байт

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 байти завдяки Джонатану Аллану , видаливши theтам, де я не думаю, що це буде працювати.

Шеф-кухар не має рядкових типів, тому інгредієнти мають натуральні числа. 0 використовується для відділення початкового списку від використаних інгредієнтів та для закінчення списку використаних інгредієнтів. Для прикладу див. Посилання TIO.

Пояснення псевдокоду:

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

Спробуйте в Інтернеті!


Дивовижно! Чи ця мова була в TIO весь час?
geokavel

Видаливши кілька зайвих слів, ви можете зберегти 32 байти
Джонатан Аллан

@geokavel це додано вчора.
Джонатан Аллан

1
@geokavel Чи ви наливали вміст чаші для перемішування в форму для випічки перед подачею?
NieDzejkob

1
@NieDzejkob, Did you pour the contents of the mixing bowl into the baking dish before serving?що повністю звучить як коментар, який пішов би на приготування SE, а не тут: P lol (також дуже дивне питання для приготування, якщо ви запитаєте мене: P)
HyperNeutrino

6

JavaScript, 61 байт

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

Формат введення:

  • f (list_of_spices) (list_of_what_spices_got_used)
  • два списки - це масив рядків

Вихід:

  • list_of_spices змінюється на місці.




4

Java 8, 87 86 76 байт

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

Бере два входи як ArrayList<String>і змінює перший список замість повернення нового для збереження байтів.

-10 байт завдяки @Nevay .

Пояснення:

Спробуйте тут.

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 байт:a->b->b.forEach(x->{int i=a.indexOf(x);a.set(i,a.set(i>0?i-1:i,a.get(i)));});
Невай

Java помститься всім людям, які її знущалися.
геокавель

2

05AB1E , 20 18 байт

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

Спробуйте в Інтернеті!

Пояснення

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 байт

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

Спробуйте його на .NET Fiddle

гольф від 36 байт завдяки рознагулу


Відповідь як би було 117 байтів, оскільки у вас не вистачає простору імен Array.IndexOf. Але є кілька способів зробити відповідь коротшою: 1. Використовуйте foreach-loop замість for-loop. 2. Якщо cце List<string>замість того , string[]ви можете безпосередньо використовувати c.IndexOf. 3. Оскільки cце змінено на місці, повертати його не потрібно.
raznagul


1

Математика, 52 байти

але це моя перша публікація тут, тому будь ласка, будьте ласкаві, якщо рахувати неправильно :)

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

І приклад:

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

{сіль, перець, паприка, кмин, орегано}


Я не фахівець з математики, але ви, ймовірно, можете видалити пробіли, щоб зберегти кілька байтів.
pajonk

@pajonk вже порахував без них, але я також повинен був їх видалити сюди, дякую.
Куба

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.