Tạo nếp gấp cho Loot


12

Giới thiệu

Sau một trận chiến dài, bạn đã tìm cách đánh bại một Nhân sư trong một cuộc thi câu đố. Nhân sư, ấn tượng với kỹ năng của bạn, mong muốn trao cho bạn một phần thưởng tương xứng với sự thông minh của bạn, và gợi ra sự tồn tại của một dải giấy da ma thuật được chia thành tám hộp, mỗi hộp chứa một chữ số.

Sphinx nói, "Làm nhăn giấy da", sao cho các hộp trùng nhau và các hộp đó sẽ hợp nhất thông qua phép cộng hoặc nhân. Khi một hộp còn lại, giá trị của nó sẽ là phần thưởng của bạn bằng tiền vàng. "

Bài tập

Bạn phải viết một chương trình hoặc hàm lấy đầu vào danh sách / mảng / bất cứ số nào trong tám số tự nhiên và trả về / in phần thưởng tối đa có thể đạt được thông qua một loạt các thao tác 'nhăn'.

Cơ học

Hoạt động 'nhăn' được thực hiện trên một số ô và với một trong hai + hoặc *là toán tử. N ô đầu tiên của danh sách được gấp lại và hợp nhất với các ô đích của chúng bằng toán tử. Bất kỳ ô nào không được tiêu thụ trong hoạt động hợp nhất sẽ không được sửa đổi.

Dưới đây là một ví dụ về nếp gấp bằng cách sử dụng n = 3 ô:

nhập mô tả hình ảnh ở đây

sử dụng một trong hai bổ sung, sẽ dẫn đến điều này:

nhập mô tả hình ảnh ở đây

hoặc nhân, sẽ dẫn đến điều này:

nhập mô tả hình ảnh ở đây

Lưu ý: Để đơn giản, việc tạo nếp nhăn có ít hơn 1 ô không được phép, cũng như tạo nếp với một số ô lớn hơn hoặc bằng độ dài của danh sách. Tuy nhiên, một danh sách có thể bằng cách tăng hơn một nửa số lượng tế bào của nó.

Một danh sách 8 ô có thể được tạo bởi 5 ô, dẫn đến một danh sách mới có độ dài 5: [0,1,2,3,4,5,6,7]được tạo bởi 5 ô bằng cách sử dụng +toán tử sẽ cung cấp[9,9,9,1,0] .

Chấm điểm

Quy tắc golf mã tiêu chuẩn - mã tạo ra đầu ra chính xác và có số byte chiến thắng ít nhất.

Phần thưởng: Nếu mã của bạn cũng trả về / in chuỗi các thao tác tạo nếp gấp dẫn đến phần thưởng tối đa, hãy nhân số điểm của bạn với 0,8. Ví dụ đầu ra có thể trông giống như:

crease 5 +
crease 2 *
crease 2 +
crease 1 *

Ví dụ

Kiểm tra mã của bạn bằng cách sử dụng các đầu vào và kết quả này, dưới dạng input - maximum reward:

[0, 1, 2, 3, 4, 5, 6, 7] - 7560
[0, 9, 0, 3, 2, 6, 1, 5] - 1944
[0, 1, 0, 3, 0, 2, 0, 4] - 36
[6, 0, 9, 1, 9, 0, 7, 3] - 11907
[0, 5, 2, 0, 1, 3, 8, 8] - 2560

Đầu ra ví dụ dưới tiêu đề "Ghi điểm" không hợp lệ. Sau khi tạo nếp gấp 5 và 2 chỉ còn lại 3 ô, vì vậy nếp gấp 3 không có ý nghĩa gì.
Thực phẩm điện tử

Điểm tốt. Tôi sẽ thay đổi nó.
phosgene

Câu trả lời:


2

Bình thường, 31 byte

Le+bSyMsm,sMJ.T,_<bd>bdm*FkJtUb

Điều này xác định một hàm, ytính toán giá trị nếp gấp.

Trình diễn.

Điều này sử dụng phương pháp tiếp nhận, lấy tối đa số điểm của mọi người kế vị có thể.

Trường hợp cơ bản của đệ quy được thực hiện bằng cách nối đầu vào với các giá trị được sắp xếp của các kế tiếp có thể, và sau đó lấy phần cuối của danh sách kết quả. Nếu chỉ có 1 phần tử trong đầu vào, thì không có phần tử kế, và do đó, phần cuối của danh sách là một phần tử trong phần đầu vào.


Thật khó để tưởng tượng điều này bị đánh bại. Có lẽ CJam có cơ hội?
phosgene

2

C #, 275 272 byte

Nó chỉ đơn giản là một hàm đệ quy đi qua mọi nhánh và trả về điểm số cao nhất.

Ấn định cho rõ ràng:

using M=System.Math;
int F(int[]n){
    int b=0,g,h,i=0,j,k,l=n.Length;
    if(l<2)
        return n[0];
    for(;++i<l;){
        int[]m=new int[k=M.Max(i,l-i)],o=new int[k];
        for(j=0;j<k;j++){
            m[j]=((g=i-j-1)<0?0:n[g])+((h=i+j)<l?n[h]:0);
            o[j]=h<l&g>=0?n[g]*n[h]:m[j];
        }
        b=M.Max(b,M.Max(F(m),F(o)));
    }
    return b;
}
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.