สร้างรายการโดยใช้หมายเลขเฉพาะ


10

คุณได้รับเหรียญ N กอง คุณได้ตัดสินใจแบ่งกองB 1 , B 2 , ... , B N แต่ละกองในกลุ่มคนที่แยกกัน จำนวนคนที่รับเหรียญจะต้องเป็นจำนวนเฉพาะและจำนวนเงินที่มอบให้กับแต่ละคนจะต้องแตกต่างกันในแต่ละกอง

อินพุต: N, B 1 , B 2 , ... , B N (จำนวนเหรียญในแต่ละกอง)

เอาท์พุท: NP 1 , NP 2 , ... , NP Nโดย NP เป็นจำนวนคน (จำนวนเฉพาะ) ที่ได้รับเหรียญ ถ้าเรื่องนี้เป็นไปไม่ได้แล้วให้ผลผลิตผลบางอย่าง unachievable (เช่น0, -1, None, []หรือ"impossible") หรือเพิ่มข้อผิดพลาด

ตัวอย่าง:

3
7 8 9

เอาท์พุท: 7 2 3

เนื่องจาก 7 เป็นหมายเลขเฉพาะเท่านั้นที่สามารถหาร 7 ได้เท่ากันจึงเท่ากับ 8 และ 2 และ 9 และ 3 และสังเกตว่า (7/7 = 1) ≠ (8/2 = 4) ≠ (9/3 = 3 )


2
Nเป็นข้อมูลซ้ำซ้อนเราขอนำมาใช้ก่อนหรือไม่
Jonathan Allan

เราอาจให้ผลลัพธ์ที่ไม่สามารถทำได้อื่น ๆ (เช่น0รายการว่างสตริงเช่น "เป็นไปไม่ได้" หรือเพิ่มข้อผิดพลาด) สำหรับกรณีที่เป็นไปไม่ได้? (จริง ๆ แล้วฉันขอแนะนำให้ป้อนข้อมูลที่ถูกต้องเท่านั้นหรืออนุญาตพฤติกรรมที่ไม่ได้กำหนดในกรณีเช่นนี้ แต่ขึ้นอยู่กับคุณ)
Jonathan Allan

2
คุณอาจนำอินพุตของ N และใช่ไปยังคำถามที่สอง
McLinux

ดังนั้นตัวหารที่ต่ำที่สุดของแต่ละหมายเลข?
สิ้นเชิงมนุษย์

@tallyallyhuman ไม่มาก - หากข้อมูลถูกบอกว่า[7,8,8]มันจะเป็นไปไม่ได้ (ตั้งแต่ใช้2สำหรับ8ผลลัพธ์ทั้งสองในสอง4s.) นอกจากนี้หากข้อมูลที่ถูกพูด[7,30,30]แล้ว[7,2,2]ก็จะไม่ถูกต้อง แต่[7,2,3]และ[7,3,2]ในหมู่คนอื่นจะทำงาน
โจนาธานอัลลัน

คำตอบ:


5

05AB1E , 13 ไบต์

Ò.»â€˜ʒ÷DÙQ}θ

ลองออนไลน์!

พอร์ตคำตอบ Pyth ของฉัน

  • Òได้รับความเป็นจริงที่สำคัญÒอาร์เอสของแต่ละ
  • พับคำสั่ง dyadic, â(c â rtesi â n ผลิตภัณฑ์) ระหว่างแต่ละสององค์ประกอบในรายการจากขวาไปซ้ายกับขวา / ซ้ายถูกดำเนินการตรงข้าม
  • €˜เรียบ ach
  • ʒ...}filt ʒอาร์เอสผู้ซึ่งตามเงื่อนไขต่อไปนี้:
    • ÷ การหารเลขจำนวนเต็มคู่กับอินพุต
    • D D uplicate (ดันสำเนาสองรายการไปยังสแต็ก)
    • Ùเอาองค์ประกอบของที่ซ้ำกันรักษาÙ Niq Ùอีเกิดขึ้นของแต่ละองค์ประกอบ
    • Qตรวจสอบ e Q uality
  • θ รับองค์ประกอบสุดท้าย

4

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

³:ŒQẠ
ÆfŒpÇÐfṪ

full-program ซึ่งยอมรับอาร์กิวเมนต์หนึ่งรายการตัวเลขและพิมพ์การแทนค่าของรายการตัวเลขอื่นหรือ0ถ้างานเป็นไปไม่ได้

ลองออนไลน์!

อย่างไร?

³:ŒQẠ - Link 1, unique after division?: list of primes, Ps   e.g. [7,2,2]  or  [7,3,3]
³     - program's first input                                e.g. [7,8,8]  or  [7,9,30]
 :    - integer division by Ps                                    [1,4,4]      [1,3,10]
  ŒQ  - distinct sieve                                            [1,1,0]      [1,1,1]
    Ạ - all truthy?                                               0            1

ÆfŒpÇÐfṪ - Main link: list of coin stack sizes, Bs   e.g. [7,8,12]
Æf       - prime factorisation (vectorises)               [[7],[2,2,2],[2,2,3]]
  Œp     - Cartesian product                              [[7,2,2],[7,2,2],[7,2,3],[7,2,2],[7,2,2],[7,2,3],[7,2,2],[7,2,2],[7,2,3]]
     Ðf  - filter keep if:
    Ç    -   call last link (1) as a monad                 1       1       0       1       1       0       1       1       0
         -                                                [[7,2,2],[7,2,2],[7,2,2],[7,2,2],[7,2,2],[7,2,2]]
       Ṫ - tail (note: tailing an empty list yields 0)    [7,2,2]
         - implicit print

+1 ฮ่าฮ่าฉันคิดว่าµ⁼Qจะเป็นทางเลือกแทนตะแกรงที่แตกต่างแฟนซี แต่เป็นงานที่ดี!
Mr. Xcoder

2

Pyth , 15 ไบต์

ef{I/VQT.nM*FPM

ลองที่นี่!

อย่างไร?

ef {I / VQT.nM * FPM | โปรแกรมเต็มรูปแบบซึ่ง foregoes ขนาด
                |
             PM | การแยกตัวประกอบเฉพาะของแต่ละจำนวนเต็ม
           * F | ผลิตภัณฑ์คาร์ทีเซียนพับกว่ารายการของจำนวนเฉพาะ
        .nM | แผ่แบน
 f | กรอง.
  {I / VQT | เงื่อนไขตัวกรอง (ใช้ตัวแปร T)
    / V | การหารจำนวนเต็ม Vectorised ...
      QT | เหนืออินพุตและไอเท็มปัจจุบัน
  {I | ค่าคงที่ของการซ้ำซ้อน (ลบรายการที่ซ้ำกัน) หรือไม่
e | ใช้องค์ประกอบสุดท้าย
                | แสดงผลลัพธ์โดยปริยาย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.