Asal sayıları kullanarak liste oluşturma


10

Size N sikke yığını verildi. Bu B 1 , B 2 , ..., B N yığınlarının her birini ayrı gruplara ayırmaya karar verdiniz . Madeni para alan kişilerin miktarı asal sayı olmalı ve her bir kişiye verilen para miktarı her bir yığın için farklı olmalıdır.

Girdi: N, B 1 , B 2 , ..., B N (Her bir yığındaki jeton miktarı).

Çıktı: NP 1 , NP 2 , ..., NP N , NP paraları alan kişi sayısıdır (asal sayı). Bu mümkün ise, o zaman, bazı ulaşılmaz sonucu verir (gibi 0, -1, None, [], ya da "impossible") ya da bir hata.

Misal:

3
7 8 9

Çıktı: 7 2 3

7, 7'yi eşit olarak bölebilen tek asal sayı olduğu için, 8 ve 2 ve 9 ve 3 için aynıdır. Ayrıca, (7/7 = 1) ≠ (8/2 = 4) ≠ (9/3 = 3 ).


2
Ngereksiz bir girdidir, almaya devam edebilir miyiz?
Jonathan Allan

0İmkansız durumlar için ulaşılamayan başka bir sonuç verebiliriz (örn. Boş bir liste, "imkansız" gibi bir dize veya bir hata oluşturabilir)? (Aslında sadece geçerli bir girdi öneriyorum veya bu gibi durumlarda tanımsız davranışlara izin veriyorum, ancak bu size bağlı.)
Jonathan Allan

2
N'nin girişinden vazgeçebilirsiniz. Ve ikinci soruya evet.
McLinux

Yani, her sayının en düşük asal bölen?
totallyhuman

@totallyhuman oldukça - giriş ki olsaydı [7,8,8](kullanarak bu yana imkansız olur 2hem de 8iki sonuçları 4. s) Bundan başka, giriş ki eğer [7,30,30]sonra [7,2,2]geçersiz fakat olur [7,2,3]ve [7,3,2]diğerleri çalışmak arasında.
Jonathan Allan

Yanıtlar:


5

05AB1E , 13 bayt

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

Çevrimiçi deneyin!

Pyth cevabımın bir limanı.

  • Òasal gerçektir alır Ò her rs.
  • Bir diyadik komutu, kıvrımlar â(c â rtesi â karşıt sağ / sol işlenenler ile sağdan sola doğru listedeki her iki eleman arasında N ürünü).
  • €˜düzleşir ach.
  • ʒ...}filt ʒ rs aşağıdaki şartı yerine olanlar:
    • ÷ giriş ile ikili tamsayı bölümü.
    • D D yukarı (öğenin iki kopyasını yığına iter).
    • ÙBir tutma elemanları yinelenen kaldırır Ù niq Ù her bir elemanın, e oluşumu.
    • QE kontrol eder Q uality.
  • θ son elemanı alır.

4

Jöle ,  15  14 bayt

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

Bir bağımsız değişkeni, bir sayı listesini kabul eden ve başka bir sayı listesinin temsilini ya 0da görevin imkansız olduğunu gösteren tam program .

Çevrimiçi deneyin!

Nasıl?

³:Œ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 Haha, sanırım µ⁼Qsüslü farklı eleğe alternatif olarak çalışır, ama iyi iş çıkarır!
Bay Xcoder

2

Pyth , 15 bayt

ef{I/VQT.nM*FPM

Burada deneyin!

Nasıl?

ef {I / VQT.nM * FPM | Boyuttan önce gelen tam program.
                |
             PM | Her tamsayının birincil çarpanlara ayırımı.
           * F | Kartezyen Ürünü astar listesinin üzerine katlayın.
        .nM | Her birini düzleştirin.
 f | Filtre.
  {I / VQT | Filtre koşulu (değişken T kullanır).
    / V | Vectorized tamsayı bölümü ...
      QT | Giriş ve geçerli öğenin üzerinde.
  {I | Yinelenenleri tekilleştirme (yinelenenleri kaldırma) üzerinde mi?
e | Son elemanı al.
                | Sonucu dolaylı olarak çıktılayın.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.