素数を使用してリストを形成する


10

あなたはコインの山を与えられました。これらの各B 1、B 2、...、B Nパイルを別々のグループに分割することにしました。コインを受け取る人の数は素数でなければならず、各人に与えられる金額は山ごとに異なっている必要があります。

入力:N、B 1、B 2、...、B N(各山のコインの量)。

出力:NP 1、NP 2、...、NP N NPは、コインを受け取る人の数(素数)です。これが不可能な場合は、(のようないくつかの達成不可能な結果をもたらす0-1None[]、または"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冗長な入力ですが、それを無視することはできますか?
ジョナサンアラン

不可能な場合に、他の達成不可能な結果(たとえば0、空のリスト、「不可能」のような文字列、またはエラーを発生させる)を生成できますか?(実際には、有効な入力のみ、またはそのような場合に未定義の動作を許可することをお勧めしますが、それはあなた次第です。)
Jonathan Allan

2
Nの入力は省略できます。そして2番目の質問は「はい」です。
McLinux 2017

それでは、各数値の最も低い素数ですか?
完全に人間的な2017

@totallyhuman完全ではありません-入力が言わ[7,8,8]れたら不可能です(2両方の8結果を2 4秒で使用するため)。さらに、入力が言われた[7,30,30]場合[7,2,2]は無効になりますが[7,2,3][7,3,2]とりわけ機能します。
ジョナサンアラン

回答:


5

05AB1E、13バイト

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

オンラインでお試しください!

私のPyth回答のポート。

  • Òそれぞれの主要な事実Òrsを取得します。
  • ダイアディックコマンド、ひだâ(C â rtesi â反対の右/左オペランドと右から左にリスト内の各2つの要素間のn個の製品)。
  • €˜ユーロを平坦化します。
  • ʒ...}FILT ʒ RS以下の条件を満足するものを:
    • ÷ 入力とのペアごとの整数除算。
    • D D複製(アイテムの2つのコピーをスタックにプッシュします)。
    • Ù維持重複する要素、除去Ù NIQ Ù各素子の電子発生を。
    • QEのチェックのQ uality。
  • θ 最後の要素を取得します。

4

ゼリー 15  14 バイト

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

1つの引数、数値のリストを受け入れ、別の数値のリストの表現を出力する、または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は空想の異なるふるいの代わりとして働くと思いますが、良い仕事です!
氏Xcoder

2

Pyth、15バイト

ef{I/VQT.nM*FPM

ここでお試しください!

どうやって?

ef {I / VQT.nM * FPM | サイズを見越した完全なプログラム。
                |
             午後| 各整数の素因数分解。
           * F | 素数のリスト上でデカルト積を折る。
        .nM | それぞれを平らにします。
 f | フィルタ。
  {I / VQT | フィルター条件(変数Tを使用)。
    / V | ベクトル化された整数除算...
      QT | 入力と現在のアイテム。
  {私| 重複排除の重複はありますか(重複の削除)?
e | 最後の要素を取ります。
                | 結果を暗黙的に出力します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.