Advent Challenge 3: Thời gian để tái sản xuất những món quà!


9

<< Trước đó tiếp theo >>

Thật không may, Santa đã không thể bắt kịp yêu tinh! Anh phải quay lại sản xuất quà bây giờ. Vì yêu tinh chắc chắn không phải là nô lệ của ông già Noel, anh ta phải tính toán chi phí cho việc trả bao nhiêu cho họ.

Thử thách

Đưa ra một số thông tin cho các món quà, xác định chi phí sản xuất tất cả chúng.

Mỗi món quà được đặt trong một hộp các tông và được bọc bằng giấy gói, với một dải ruy băng quấn quanh nó ở cuối. Giấy gói là ma thuật và không yêu cầu chồng chéo, vì vậy số lượng giấy gói được sử dụng chính xác tương đương với diện tích bề mặt của hộp. Tất cả các món quà là lăng kính hình chữ nhật bởi vì cách đó Santa có thể lưu trữ chúng nhỏ gọn hơn. Dải băng đi xung quanh theo cả ba hướng (vì vậy độ dài của dải băng được sử dụng để quấn bằng tổng của ba chu vi khác nhau).

Hiện tại bản thân nó có một chi phí được biết đến, may mắn thay. Các tông có giá $ 1 mỗi mét vuông, và giấy gói có giá $ 2 mỗi mét vuông. (Gợi ý: Bạn chỉ có thể nhân diện tích bề mặt với 3: P). Ribbon có giá $ 1 mỗi mét.

Định dạng thông số kỹ thuật

Đầu vào sẽ được đưa ra dưới dạng một danh sách các món quà trong đó mỗi món quà chứa chi phí của mặt hàng thực tế và ba chiều của hộp hiện tại. Đầu ra của bạn phải là tổng chi phí cần thiết.

Để được chính xác, công thức cho chi phí của một món quà duy nhất với chi phí mục cvà kích thước x, yzc + 6 * (x * y + y * z + z * x) + 4 * (x + y + z).

Các trường hợp thử nghiệm

[[7, 8, 6, 7], [7, 7, 5, 5], [8, 9, 6, 7], [6, 5, 10, 10], [5, 9, 6, 7], [9, 9, 10, 6], [8, 10, 10, 6], [6, 5, 7, 9], [7, 10, 8, 8], [5, 9, 9, 10]] -> 11866
[[5, 10, 8, 9], [8, 8, 5, 8], [8, 7, 7, 6], [5, 9, 9, 10], [9, 7, 5, 8], [9, 8, 9, 5], [7, 5, 6, 7], [5, 7, 6, 10]] -> 8854
[[9, 8, 8, 8], [10, 9, 8, 5], [10, 7, 5, 5], [10, 10, 6, 6], [8, 5, 8, 7]] -> 4853
[[7, 7, 8, 10], [8, 10, 7, 8], [9, 7, 7, 8], [8, 5, 10, 5], [6, 6, 6, 8], [8, 9, 7, 5], [8, 5, 6, 5], [7, 9, 8, 5], [10, 10, 10, 8]] -> 9717
[[5, 8, 9, 7], [5, 8, 7, 10], [5, 7, 7, 6], [5, 5, 5, 6], [9, 9, 5, 7], [5, 6, 7, 8], [8, 5, 8, 7], [6, 9, 5, 5], [10, 10, 9, 10]] -> 9418
[[9, 9, 7, 10], [5, 8, 7, 9], [5, 5, 9, 8], [10, 5, 9, 10], [8, 5, 10, 7], [8, 9, 5, 5], [5, 10, 6, 10]] -> 8178
[[5, 9, 5, 8], [7, 8, 10, 6], [7, 10, 7, 10], [8, 9, 7, 5], [5, 7, 8, 6], [9, 9, 6, 10], [6, 5, 9, 9], [7, 9, 9, 9]] -> 9766
[[7, 10, 5, 10], [8, 10, 8, 9], [8, 6, 7, 8], [6, 9, 8, 5], [6, 7, 10, 9], [7, 6, 5, 8]] -> 7118
[[10, 6, 7, 5], [5, 9, 5, 9], [9, 7, 8, 5], [6, 6, 9, 9], [9, 9, 6, 9], [10, 5, 8, 9], [7, 5, 6, 10], [9, 10, 5, 5]] -> 8007
[[8, 10, 7, 8], [9, 10, 5, 8], [6, 7, 5, 6], [10, 10, 9, 8], [7, 5, 8, 9], [10, 10, 6, 7], [10, 8, 9, 10], [5, 10, 5, 5]] -> 9331

Quy tắc

  • Áp dụng sơ hở tiêu chuẩn
  • Đầu vào và đầu ra có thể được cung cấp và trình bày ở bất kỳ định dạng hợp lý nào
  • Bạn phải lấy đầu vào làm danh sách quà tặng, không phải 4 danh sách các thuộc tính.
  • Đây là một , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng
  • Không có câu trả lời sẽ được chấp nhận

Hy vọng rằng thử thách này dễ dàng hơn những thử thách trước: P

Lưu ý: Tôi đã lấy cảm hứng cho loạt thử thách này từ Advent Of Code . Tôi không có liên kết với trang web này

Bạn có thể xem danh sách tất cả các thử thách trong chuỗi bằng cách xem phần 'Liên kết' của thử thách đầu tiên tại đây .


Có phải chúng ta đã mất "thêm 1 mét cho dải băng" trongc + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)
Graham

@Graham Vâng, hóa ra tôi đã quên thêm nó vào. Xóa khỏi thông số kỹ thuật.
HyperNeutrino

@cairdcoinheringaahing Xin lỗi vì sự nhầm lẫn. Tôi quyết định gắn bó với ý tưởng ban đầu và tôi đã chỉnh sửa các trường hợp thử nghiệm của mình để phản ánh điều đó. Cảm ơn!
HyperNeutrino

6
Tôi đã được thưởng thức một loạt các thử thách này nhưng (phải thừa nhận rằng, sau một vài loại bia tốt!) Cái này có vẻ như ngôn ngữ nào có thể thực hiện công thức đóng trong vài byte mà không có chỗ cho việc chơi golf sáng tạo, trong trường hợp này, không + 1 từ tôi.
Shaggy

1
Đối với cử tri gần gũi hơn sau khi tôi làm rõ các điểm nhận xét hiện tại, tôi cần làm rõ thêm điều gì nữa?
HyperNeutrino

Câu trả lời:


5

JavaScript (ES6), 58 byte

a=>a.reduce((p,[c,x,y,z])=>p+c+6*(y*z+x*(y+=z))+4*(x+y),0)

Các trường hợp thử nghiệm

Làm sao?

Thủ thuật duy nhất được sử dụng ở đây là nhân tố (xy + xz)x (y + z) và sử dụng lại tổng (y + z) trong phần cuối của công thức.

a => a.reduce(                    // for each present in a:
  (s, [c, x, y, z]) =>            //   s = sum, [c, x, y, z] = present parameters
    s +                           //   add to s:
    c +                           //     c
    6 * (y * z + x * (y += z)) +  //     6(yz + x(y + z))
    4 * (x + y),                  //     4(x + (y + z))
  0                               //   initial sum = 0
)                                 // end of reduce()




2

C (gcc) , 104 100 99 93 byte

  • Đã lưu bốn năm mười một byte nhờ PrincePolka .
t,x,y,z;f(A,a)int*A;{for(t=0;a--;)t+=*A+++6*((x=*A++)*(y=*A++)+(z=*A++)*(x+=y))+4*(x+z);t=t;}

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

Lấy danh sách các thuộc tính hiện tại (độ dài danh sách chia hết cho bốn) và một số nguyên chỉ định số lượng quà tặng. Trả về chi phí sản xuất tất cả các món quà.


100 byte nếu không bắt buộc phải làm việc nhiều hơn một bạn có thể cạo j = t = 0,
PrincePolka


@PrincePolka Cảm ơn bạn. Theo sự đồng thuận, một chức năng phải làm việc nhiều lần, vì vậy j=t=0phải ở lại. Tôi không thể tìm ra cách sắp xếp lại phép tính để tiết kiệm một byte; nó sẽ giúp ích nếu bạn liên kết với một phiên bản hoàn chỉnh của mã với golf của bạn được triển khai.
Jonathan Frech


@PrincePolka Cảm ơn rất nhiều.
Jonathan Frech

1

05AB1E , 17 byte

vyćsO4*y¦æ2ùPO6*O

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

Giải trình

v                  # for each present y
 yć                # extract the head (cost)
   s               # swap the dimensions to the top
    O4*            # sum and multiply by 4
       y¦          # push y with the head (cost) removed
         æ         # compute the powerset
          2ù       # keep only elements of length 2
            PO     # product and sum
              6*   # multiply by 6
                O  # sum everything



0

Excel, 60 byte

Đầu vào được lấy từ Cột Ađến D, hàng mới mỗi hiện tại. Công thức trong bất kỳ cột nào khác.

=SUMPRODUCT(A:A+6*(B:B*C:C+C:C*D:D+B:B*D:D)+4*(B:B+C:C+D:D))

Bạn có thể giảm 2 byte bằng cách chuyển mã này sang Google Sheets và thả thiết bị đầu cuối))
Taylor Scott
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.