Nấu ăn với mã


24

Bạn là một đầu bếp và bạn thích nấu ăn với các loại gia vị của mình, nhưng gần đây bạn rất thích tổ chức các loại gia vị của mình dựa trên tần suất bạn sử dụng chúng. Nhưng bạn không có thời gian để viết ra khi bạn sử dụng gia vị của bạn lần cuối. Đơn giản, bạn trao đổi và di chuyển gia vị xung quanh, và điều này dường như thực hiện các mẹo.

Nhưng tất nhiên bạn là một đầu bếp và điều đó có nghĩa là bạn có một số đầu bếp với bạn. Bạn quyết định nói với họ các quy tắc đơn giản của sự gắn kết với gia vị của bạn.

  1. Nếu gần đây bạn đã sử dụng một loại gia vị, hãy di chuyển nó lên trên giá đựng gia vị

  2. Nếu bạn hoàn toàn không sử dụng bất kỳ loại gia vị nào, ví dụ như []danh sách chuyển động trống, thì danh sách gia vị sẽ không bị ảnh hưởng.

  3. Bạn có thể đặt bất kỳ gia vị nào vào ngăn đựng gia vị của tôi, nhưng nếu bạn sử dụng nó, hãy đảm bảo di chuyển nó.

  4. Danh sách có thể chứa bất cứ điều gì. Nhưng bởi vì đây là những gia vị mà chúng tôi đang làm việc. Bạn nên sử dụng tên của các loại gia vị.

  5. Gia vị nên là duy nhất. Quá nhiều gia vị giống nhau làm hỏng nước dùng ... hoặc nói rằng đi

Quy tắc golf-golf bình thường được áp dụng.

Ví dụ về Oregano được sử dụng nhiều lần.

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

Bài tập

Nhập danh sách các loại gia vị và danh sách các loại gia vị đã sử dụng, sau đó xuất danh sách cuối cùng.

Thí dụ

Đầu vào

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

Đầu ra

[salt, pepper, paprika, cumin, oregano]

Nó trông như thế nào

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

Đầu vào

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

Đầu ra

[salt, pepper, paprika, oregano, cumin]

Là các mặt hàng trong danh sách các loại gia vị độc đáo?
tsh

Vâng, chúng sẽ là duy nhất
tisaconundrum

31
Tôi đã làm khá xa việc này trong Chef nhưng cuối cùng thì quá mệt! Tôi sẽ cho ai đó 50 tiền thưởng nếu họ có thể làm được.
geokavel

5
Đây là ý chính của việc đưa đầu vào vào bát trộn. Phần còn lại sẽ rất khó khăn, nhưng có thể làm được cho đúng người!
geokavel

Câu trả lời:


4

Husk , 15 14 byte

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

Đầu vào là danh sách các chuỗi (nó cũng hoạt động trên các loại danh sách khác). Hãy thử trực tuyến!

-1 byte nhờ H.PWiz

Giải trình

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

Tôi phải lặp lại xvô hạn, vì nếu không thì danh sách sẽ mất phần tử cuối cùng khi chúng ta sử dụng gia vị trên cùng. Sẽ là đủ để thêm dấu 1, nhưng việc lặp lại cần ít byte hơn. Một cách tốt hơn sẽ là xoay danh sách thay vì bỏ phần tử đầu tiên, nhưng Husk không tích hợp sẵn cho điều đó.


Σmcho một byte.
H.PWiz

8

Haskell , 48 byte

foldl(?)là một hàm ẩn danh lấy hai đối số danh sách và trả về một danh sách, với tất cả các phần tử cùng loại (có thể Eqso sánh được).

Sử dụng như 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

Hãy thử trực tuyến!

  • foldl(?) s mbắt đầu với danh sách (giá gia vị) svà kết hợp nó với từng thành phần (gia vị) mtheo thứ tự, sử dụng toán tử ?.
  • s?nsử dụng gia vị ntừ giá đựng gia vị svà trả lại giá đựng gia vị.
    • Nếu scó ít nhất hai phần tử, hãy ?kiểm tra xem phần tử thứ hai có bằng không nvà nếu có thì chuyển đổi hai phần tử đầu tiên. Nếu không bằng nhau, ?giữ phần tử đầu tiên cố định và đệ quy trên phần còn lại.
    • Nếu scó nhiều nhất một phần tử, ?trả về nó không thay đổi.

7

Đầu bếp , 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 nhờ Jonathan Allan bằng cách xóa thenơi tôi không nghĩ nó sẽ hoạt động.

Đầu bếp không có loại chuỗi, vì vậy các thành phần là số nguyên dương. 0 được sử dụng để tách danh sách bắt đầu khỏi các thành phần đã sử dụng và kết thúc danh sách thành phần đã sử dụng. Xem liên kết TIO cho một ví dụ.

Giải thích mã giả:

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

Hãy thử trực tuyến!


Tuyệt vời! Ngôn ngữ này đã có trên TIO chưa?
geokavel

Bằng cách xóa một số từ dư thừa, bạn có thể lưu 32 byte
Jonathan Allan

@geokavel nó đã được thêm vào ngày hôm qua.
Jonathan Allan

1
@geokavel Bạn đã đổ nội dung của bát trộn vào đĩa nướng trước khi phục vụ chưa?
NieDzejkob

1
@NieDzejkob Did you pour the contents of the mixing bowl into the baking dish before serving?nghe hoàn toàn giống như một bình luận sẽ xuất hiện trên SE nấu ăn chứ không phải ở đây: P lol (cũng là một câu hỏi rất lạ khi nấu ăn nếu bạn hỏi tôi: 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]))

Định dạng đầu vào:

  • f (list_of_spices) (list_of_what_spices_got_use)
  • hai danh sách là mảng chuỗi

Đầu ra:

  • list_of_spices được sửa đổi tại chỗ.




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

Lấy hai đầu vào là ArrayList<String>và sửa đổi Danh sách đầu tiên thay vì trả về một danh sách mới để lưu byte.

-10 byte nhờ @Nevay .

Giải trình:

Hãy thử nó ở đây.

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 đang trả thù cho tất cả những người đã chế giễu nó.
geokavel

2

05AB1E , 20 18 byte

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

Hãy thử trực tuyến!

Giải trình

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

Dùng thử trên .NET Fiddle

đánh bại 36 byte nhờ raznagul


Câu trả lời sẽ là 117 byte vì bạn đang thiếu không gian tên cho Array.IndexOf. Nhưng có một số cách để làm cho câu trả lời ngắn hơn: 1. Sử dụng một foreach-loop thay vì for-loop. 2. Nếu clà một List<string>thay vì string[]bạn có thể trực tiếp sử dụng c.IndexOf. 3. Như cđã sửa đổi tại chỗ, bạn không cần phải trả lại.
raznagul


1

Toán học, 52 byte

nhưng đây là bài viết đầu tiên của tôi ở đây vì vậy hãy tử tế nếu tính không chính xác :)

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

Và một ví dụ:

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

{muối, hạt tiêu, ớt bột, thì là, oregano}


Tôi không phải là chuyên gia Mathicala, nhưng có lẽ bạn có thể xóa một số khoảng trắng để lưu một số byte.
pyjama

@pajonk đã được tính mà không có họ nhưng tôi cũng nên xóa chúng ở đây, cảm ơn.
Kuba

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.