Bilden Sie eine Liste mit Primzahlen

10

Sie haben N Stapel Münzen erhalten. Sie haben beschlossen, jeden dieser Stapel B 1 , B 2 , ..., B N auf verschiedene Personengruppen aufzuteilen . Die Anzahl der Personen, die Münzen erhalten, muss eine Primzahl sein, und der Geldbetrag, der jeder Person gegeben wird, muss in jedem Stapel unterschiedlich sein.

Eingabe: N, B 1 , B 2 , ..., B N (Die Anzahl der Münzen in jedem einzelnen Stapel).

Ausgabe: NP 1 , NP 2 , ..., NP N, wobei NP die Anzahl der Personen (Primzahl) ist, die die Münzen erhalten. Wenn dies nicht möglich ist , dann ergibt einiges unachievable Ergebnis (wie 0, -1, None, [], oder "impossible") oder einen Fehler erhöhen.

Beispiel:

3
7 8 9

Ausgabe: 7 2 3

Da 7 die einzige Primzahl ist, die 7 gleichmäßig teilen kann, gilt dies auch für 8 und 2 sowie 9 und 3. Beachten Sie auch, dass (7/7 = 1) ≠ (8/2 = 4) ≠ (9/3 = 3) ).

McLinux
quelle
2
NIst eine redundante Eingabe, dürfen wir darauf verzichten?
Jonathan Allan
Dürfen wir 0für unmögliche Fälle ein anderes nicht erreichbares Ergebnis liefern (z. B. eine leere Liste, eine Zeichenfolge wie "unmöglich" oder einen Fehler auslösen)? (Ich würde eigentlich nur gültige Eingaben empfehlen oder undefiniertes Verhalten in solchen Fällen zulassen, aber es liegt an Ihnen.)
Jonathan Allan
2
Sie können auf die Eingabe von N verzichten. Und ja zur zweiten Frage.
McLinux
Also der niedrigste Primteiler jeder Zahl?
totalmenschlich
@totallyhuman nicht ganz - wenn der Eingang war sagen , [7,8,8]es wäre unmöglich , (da die Verwendung 2für beide 8in zwei Ergebnisse 4s.) Außerdem, wenn der Eingang sagen würde [7,30,30]dann [7,2,2]ungültig wäre aber [7,2,3]und [7,3,2]unter anderem funktionieren würde.
Jonathan Allan

Antworten:

5

05AB1E , 13 Bytes

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

Probieren Sie es online aus!

Ein Port meiner Pyth-Antwort.

  • Òbekommt die prime Tatsache Ò rs von jedem.
  • Falten einen dyadischen Befehl, â(c â rtesi â n - Produkt) zwischen je zwei Elementen in der Liste von rechts mit gegenüberliegenden rechten / linken Operanden nach links.
  • €˜flacht ach.
  • ʒ...}filt ʒ rs solche , die die folgende Bedingung erfüllen:
    • ÷ paarweise Ganzzahldivision mit der Eingabe.
    • D D uplicate (schiebt zwei Kopien des Gegenstands auf den Stapel).
    • ÙEntfernt doppelte Elemente und behält ein Ù niq bei Ù e Auftreten jedes Elements.
    • QKontrollen für e Q ualität.
  • θ bekommt das letzte Element.
Mr. Xcoder
quelle
4

Gelee ,  15  14 Bytes

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

Ein vollständiges Programm, das ein Argument, eine Liste von Zahlen, akzeptiert und eine Darstellung einer anderen Liste von Zahlen druckt oder 0wenn die Aufgabe unmöglich ist.

Probieren Sie es online aus!

Wie?

³:Œ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
Jonathan Allan
quelle
+1 Haha, ich denke, es µ⁼Qwäre eine Alternative zu dem ausgefallenen Sieb, aber gute Arbeit!
Herr Xcoder
2

Pyth , 15 Bytes

ef{I/VQT.nM*FPM

Probieren Sie es hier aus!

Wie?

ef {I / VQT.nM * FPM | Vollständiges Programm, das auf die Größe verzichtet.
                |
             PM | Primfaktorisierung jeder ganzen Zahl.
           * F | Falten Sie das kartesische Produkt über die Liste der Primzahlen.
        .nM | Jeweils abflachen.
 f | Filter.
  {I / VQT | Filterbedingung (verwendet eine Variable T).
    / V | Vektorisierte Ganzzahldivision ...
      QT | Über die Eingabe und das aktuelle Element.
  {I | Ist die Deduplizierung unveränderlich (Duplikate entfernen)?
e | Nimm das letzte Element.
                | Das Ergebnis implizit ausgeben.
Mr. Xcoder
quelle