Càng xấu xa càng tốt


16

Giới thiệu

Đây là phần tiếp theo của thử thách này , nơi bạn đang đảm nhận vai trò sinh đôi xấu xa của người đó. Trở nên xấu xa, bạn không muốn tối đa hóa chia sẻ của mình, nhưng thay vào đó là không công bằng và bạn sẽ không làm cho nó quá rõ ràng, đó là lý do tại sao bạn đưa ra kế hoạch sau:

Bạn sẽ nói với những người khác rằng bạn muốn công bằng nhất có thể như anh chị em của bạn và do đó bạn sẽ chia số nguyên thành các phần có độ dài bằng nhau. Vì vậy, với mỗi số nguyên, bạn sẽ đưa ra số lượng người phù hợp sao cho sự khác biệt giữa phần lớn nhất và phần nhỏ nhất là tối đa.

Ví dụ: nếu bạn được cung cấp số nguyên, 6567bạn có thể để nguyên như vậy, chia nó thành hai 65,67hoặc bốn phần 6,5,6,7. Điều này cung cấp cho bạn sự khác biệt tối đa sau:

6567    -> max() = 0
65,67   -> max(|65-67|) = 2
6,5,6,7 -> max(|6-5|,|6-5|,|6-6|,|6-7|,|5-6|,|5-7|,|6-7|) = 2

Vì bạn chỉ muốn trở nên xấu xa, bạn không thích 67hơn 7và do đó bạn sẽ xuất ra 2hoặc 4.


Khác (trường hợp ít đặc biệt hơn); đưa ra số nguyên 121131bạn có thể chia nó như thế này:

121131      -> max() = 0
121,131     -> max(|121-131|) = 10
12,11,31    -> max(|12-11|,|12-31|,|11-31|) = 20
1,2,1,1,3,1 -> max(…) = 2

Lần này chỉ có một giải pháp - cụ thể là 3- vì với ba người, sự khác biệt là tối đa.

Thử thách

Đưa ra một số nguyên xác định bất kỳ cách nào có thể là xấu xa tối đa và báo cáo số người cần thiết để đạt được điều này.

Quy tắc

  • Đầu vào sẽ luôn là ≥ 1
  • Đầu vào có thể là số nguyên, danh sách các chữ số hoặc chuỗi
  • Bạn không phải xử lý đầu vào không hợp lệ

Tủ thử

Bạn chỉ cần báo cáo số lượng người cần thiết, các phân vùng có thể chỉ để minh họa:

In -> splits (difference) -> Out
1 -> [1] (0) -> 1
10 -> [1,0] (1) -> 2
11 -> [11] or [1,1] (0) -> 1 or 2
12 -> [1,2] (1) -> 2
42 -> [4,2] (2) -> 2
101 -> [1,0,1] (1) -> 3
2222 -> [2222] or [22,22] or [2,2,2,2] (0) -> 1 or 2 or 4
6567 -> [65,67] or [6,5,6,7] (2) -> 2 or 4
123000 -> [123,000] (123) -> 2
123001 -> [123,001] (122) -> 2
121131 -> [12,11,31] (20) -> 3
294884 -> [294,884] (590) -> 2
192884729 -> [192,884,729] (692) -> 3
123456189012 -> [123456,189012] (65556) -> 2
123457117346 -> [1234,5711,7346] (6112) -> 3

1
Tôi tự hỏi nếu ai đó sẽ gửi một giải pháp trong ngôn ngữ lập trình ác? : D
SK19

Câu trả lời:


5

Thạch ,  16  14 byte

Ṁ_Ṃ
sLÆD$ḌÇÞṪL

Một liên kết đơn âm lấy một danh sách các số nguyên (các chữ số) và trả về một số nguyên.

Hãy thử trực tuyến! hoặc xem một bộ thử nghiệm

Làm sao?

Ṁ_Ṃ - Link 1, maximal difference: list of numbers
Ṁ   - maximum
  Ṃ - minimum
 _  - subtract

sLÆD$ḌÇÞṪL - Main link: list of numbers, theDigits  e.g. [1,2,3,0,0,1]
    $      - last two links as a monad:
 L         -   length                                    6
  ÆD       -   divisors                                  [1,2,3,6]
s          - split into chunks (vectorises)              [[[1],[2],[3],[0],[0],[1]],[[1,2],[3,0],[0,1]],[[1,2,3],[0,0,1]],[[1,2,3,0,0,1]]]
     Ḍ     - from decimal (vectorises)                   [[1,2,3,0,0,1],[12,30,1],[123,1],[123001]]
       Þ   - sort by:
      Ç    -   call last link (1) as a monad              3             29        122     0
           -                                         ... [[123001],[1,2,3,0,0,1],[12,30,1],[123,1]]
        Ṫ  - tail                                        [123,1]
         L - length                                      2

Yup, tôi biết bạn không biết Pyth! +1 vì tâm trí Jelly nghĩ giống nhau! Quá tệ ŒṖ./cả hai đều dài hơn
Ông Xcoder


4

05AB1E , 12 byte

gDÑΣôDδαà}θ÷

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

05AB1E , 12 byte

gDÑΣôàsß-}θ÷

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

Làm thế nào nó hoạt động

gDÑΣôDδαà} θ | Chương trình đầy đủ.

g | Độ dài (đếm các chữ số).
 D | Nhân đôi (đẩy hai bản sao của chiều dài vào ngăn xếp).
  Ñ ​​| Lấy các ước số (của đỉnh ngăn xếp).
   Σ} | Sắp xếp theo một chức năng chính.
-------------------------------------------------- ------------
    ôDδαà | Chức năng chính # 1.
    ô | Chia (đầu vào) thành các khối có kích thước đó.
     D | Bản sao.
      | Sản phẩm bên ngoài của sự khác biệt tuyệt đối.
        à | Nhận tối đa.
    ôàsß- | Chức năng chính # 2 (thay thế).
    ô | Chia (đầu vào) thành các khối có kích thước đó.
     à | Tối đa.
      s | Trao đổi hai yếu tố hàng đầu.
       ß | Tối thiểu.
        - | Trừ đi.
-------------------------------------------------- ------------
          θ ÷ | Chia chiều dài cho phần tử tối đa bằng cách sử dụng sắp xếp tùy chỉnh.

05AB1E thực sự vô cùng ngắn gọn cho thử thách này.


4

JavaScript (ES6), 118 115 byte

Đã lưu 3 byte nhờ @ edc65

Đưa đầu vào dưới dạng một chuỗi.

f=(s,k=l=s.length,m)=>k?f(s,k-1,l%k||(d=Math.max(...a=s.match(eval(`/.{${l/k}}/g`)))-Math.min(...a))<m?m:(r=k,d)):r

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


1
Bạn đã thử eval thay vì RegExp?
edc65

@ edc65 Tôi cứ quên cái đó. Cảm ơn bạn!
Arnauld




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.