เป็นคนชั่วร้ายที่สุด


16

บทนำ

นี่คือการติดตามความท้าทายนี้ที่คุณรับบทเป็นฝาแฝดผู้ชั่วร้าย การเป็นคนชั่วคุณไม่ต้องการเพิ่มส่วนแบ่งให้มากที่สุด แต่จะไม่ยุติธรรมเท่าที่จะเป็นไปได้และคุณจะไม่ทำให้ชัดเจนเกินไปนั่นคือสาเหตุที่คุณคิดแผนการดังต่อไปนี้:

คุณจะบอกคนอื่น ๆ ว่าคุณต้องการที่จะยุติธรรมเท่าที่จะทำได้เหมือนพี่น้องของคุณและคุณจะต้องแบ่งจำนวนเต็มออกเป็นความยาวเท่ากัน ดังนั้นสำหรับแต่ละจำนวนเต็มคุณจะได้จำนวนคนที่เหมาะสมเช่นความแตกต่างระหว่างชิ้นใหญ่ที่สุดกับชิ้นเล็กที่สุดคือสูงสุด

ตัวอย่างเช่นถ้าคุณได้รับจำนวนเต็ม6567คุณสามารถปล่อยให้มันเป็นแยกออกเป็นสองชิ้นหรือสี่65,67 6,5,6,7สิ่งนี้ให้ความแตกต่างสูงสุดต่อไปนี้:

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

เนื่องจากคุณเพียงต้องการที่จะเป็นความชั่วร้ายที่คุณไม่ชอบ67มากกว่า7และทำให้คุณจะได้ผลลัพธ์อย่างใดอย่างหนึ่งหรือ24


อื่น (กรณีพิเศษน้อยกว่า); รับจำนวนเต็ม121131คุณสามารถแยกเช่นนี้

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

เวลานี้มีทางออกเดียว - คือ3- เนื่องจากมีสามคนความแตกต่างคือสูงสุด

ท้าทาย

ได้รับการตรวจสอบจำนวนเต็มใด ๆทางเป็นไปได้ของการเป็นความชั่วร้ายที่สุดและรายงานจำนวนของคนที่จำเป็นเพื่อให้บรรลุนี้

กฎระเบียบ

  • ข้อมูลที่ป้อนจะเป็น. 1 เสมอ
  • ข้อมูลที่ป้อนอาจเป็นจำนวนเต็มรายการหลักหรือสตริง
  • คุณไม่ต้องจัดการอินพุตที่ไม่ถูกต้อง

Testcases

คุณจะต้องรายงานจำนวนคนที่ต้องการผลลัพธ์เท่านั้นพาร์ติชั่นที่เป็นไปได้มีไว้เพื่อประกอบการอธิบายเท่านั้น:

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
ฉันสงสัยว่าใครบางคนจะส่งคำตอบในการเขียนโปรแกรมภาษาชั่ว? : D
SK19

คำตอบ:


5

เยลลี่ ,  16  14 ไบต์

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

ลิงก์ monadic ที่รับรายการจำนวนเต็ม (ตัวเลข) และส่งคืนจำนวนเต็ม

ลองออนไลน์! หรือดูชุดทดสอบ

อย่างไร?

Ṁ_Ṃ - 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

ใช่ฉันรู้ว่าคุณไม่รู้จัก Pyth! +1 เพราะจิตใจของ Jelly คิดเหมือนกัน! เลวร้ายเกินไปŒṖและ./ทั้งคู่ก็ยาวขึ้น
Mr. Xcoder


4

05AB1E , 12 ไบต์

gDÑΣôDδαà}θ÷

ลองออนไลน์!

05AB1E , 12 ไบต์

gDÑΣôàsß-}θ÷

ลองออนไลน์!

มันทำงานอย่างไร

gDÑΣôDδαà} θ÷ | โปรแกรมเต็มรูปแบบ

g | ความยาว (จำนวนหลัก)
 D | ทำซ้ำ (ดันสำเนาสองชุดของความยาวไปยังสแต็ก)
  Ñ ​​| รับตัวหาร (ของส่วนบนสุดของสแต็ก)
   Σ} | เรียงตามฟังก์ชั่นหลัก
-------------------------------------------------- ------------
    ôDδαà | ฟังก์ชั่นที่สำคัญ # 1
    ô | แยก (อินพุต) เป็นชิ้นขนาดนั้น
     D | ซ้ำ
      |α | ผลิตภัณฑ์ชั้นนอกที่มีความแตกต่างแน่นอน
        à | รับสูงสุด
    ôàsß- | ฟังก์ชั่นที่สำคัญ # 2 (ทางเลือก)
    ô | แยก (อินพุต) เป็นชิ้นขนาดนั้น
     à | ขีดสุด.
      s | สลับองค์ประกอบสองอันดับแรก
       ß | ขั้นต่ำ
        - | ลบออก
-------------------------------------------------- ------------
          θ÷ | หารความยาวด้วยองค์ประกอบสูงสุดโดยใช้การเรียงลำดับแบบกำหนดเอง

05AB1E เป็นเพียงบทสรุปที่เหลือเชื่อสำหรับความท้าทายนี้


4

JavaScript (ES6), 118 115 ไบต์

บันทึกแล้ว 3 ไบต์ขอบคุณ @ edc65

รับอินพุตเป็นสตริง

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

กรณีทดสอบ


1
คุณลอง eval แทน RegExp หรือไม่
edc65

@ edc65 ฉันลืมเรื่องนั้นไปเรื่อย ๆ ขอขอบคุณ!
Arnauld




โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.