Formare un elenco usando i numeri primi


10

Ti sono state date N pile di monete. Hai deciso di dividere ciascuna di quelle pile B 1 , B 2 , ..., B N tra gruppi separati di persone. La quantità di persone che ricevono monete deve essere un numero primo e la quantità di denaro data a ogni persona deve essere diversa in ogni pila.

Input: N, B 1 , B 2 , ..., B N (La quantità di monete in ogni singola pila).

Uscita: NP 1 , NP 2 , ..., NP N con NP come numero di persone (numero primo) che ricevono le monete. Se questo è impossibile poi cedere qualche risultato irrealizzabile (come 0, -1, None, [], o "impossible") o generare un errore.

Esempio:

3
7 8 9

Produzione: 7 2 3

Perché 7 è l'unico numero primo che può dividere 7 in modo uniforme, lo stesso per 8 e 2 e 9 e 3. Inoltre, si noti che (7/7 = 1) ≠ (8/2 = 4) ≠ (9/3 = 3 ).


2
Nè un input ridondante, possiamo rinunciare a prenderlo?
Jonathan Allan il

Possiamo dare qualche altro risultato non raggiungibile (ad esempio 0, un elenco vuoto, una stringa come "impossibile" o generare un errore) per casi impossibili? (In realtà consiglierei solo input validi, o consentire comportamenti indefiniti in questi casi, ma dipende da te.)
Jonathan Allan il

2
È possibile rinunciare all'inserimento di N. E sì alla seconda domanda.
McLinux il

Quindi, il divisore primo più basso di ogni numero?
totalmente umano il

@totallyhuman non del tutto - se l'input dicesse [7,8,8]che sarebbe impossibile (dal momento che usando 2per entrambi i 8risultati in due 4secondi). Inoltre, se l'input fosse detto, [7,30,30]allora non [7,2,2]sarebbe valido ma [7,2,3]e [7,3,2]tra l'altro funzionerebbe.
Jonathan Allan il

Risposte:


5

05AB1E , 13 byte

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

Provalo online!

Una porta della mia risposta Pyth.

  • Òottiene i primi effetti Ò rs di ciascuno.
  • pieghe un comando diadica, â(c â rtesi â n prodotto) tra ogni due elementi della lista da destra a sinistra con destra / sinistra operandi opposte.
  • €˜appiattisce ach.
  • ʒ...}FILT ʒ rs quelli che soddisfano la seguente condizione:
    • ÷ divisione intera a coppie con l'input.
    • D D uplicate (spinge due copie dell'articolo nella pila).
    • Ùrimuove gli elementi duplicati, mantenendo una Ù niq Ù e occorrenza di ciascun elemento.
    • Qcontrolli per l'e Q ualità.
  • θ ottiene l'ultimo elemento.

4

Gelatina ,  15  14 byte

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

Un programma completo che accetta un argomento, un elenco di numeri e stampa una rappresentazione di un altro elenco di numeri o 0se l'attività è impossibile.

Provalo online!

Come?

³:Œ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, penso µ⁼Qche funzionerebbe come un'alternativa al setaccio distinto fantasia, ma buon lavoro!
Mr. Xcoder il

2

Pyth , 15 byte

ef{I/VQT.nM*FPM

Provalo qui!

Come?

ef {I / VQT.nM * FPM | Programma completo, che rinuncia alle dimensioni.
                |
             PM | Fattorizzazione primaria di ogni numero intero.
           * F | Piega il prodotto cartesiano sull'elenco dei numeri primi.
        .nM | Appiattire ciascuno.
 f | Filtro.
  {I / VQT | Condizione del filtro (utilizza una T variabile).
    / V | Divisione intera vettorializzata ...
      QT | Oltre l'input e l'elemento corrente.
  {I | È invariante rispetto alla deduplicazione (rimozione dei duplicati)?
e | Prendi l'ultimo elemento.
                | Emette il risultato implicitamente.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.