소수를 사용하여 목록을 작성하십시오.


10

N 개의 동전 더미가 주어졌습니다. B 1 , B 2 , ..., B N 파일 각각을 별도의 그룹으로 나누기로 결정했습니다 . 동전을받는 사람들의 수는 소수 여야하며, 각 사람에게 주어진 돈의 양은 더미마다 달라야합니다.

입력 : N, B 1 , B 2 , ..., B N (각 개별 파일의 동전 양).

출력 : NP 1 , NP 2 , ..., NP N 은 동전을받는 사람의 수 (프라임 번호)입니다. 만약 이것이 불가능하면 다음과 일부 달성 할 수없는 결과를 얻을 수 (같은 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중복 입력입니까, 우리는 그것을 잊어 버릴 수 있습니까?
조나단 앨런

불가능한 경우에 달성 할 수없는 다른 결과 (예 : 0빈 목록, "불가능"과 같은 문자열 또는 오류 발생)를 얻을 수 있습니까? (실제로 유효한 입력 만 권장하거나 그러한 경우 정의되지 않은 동작을 허용하는 것이 좋지만 그것은 당신에게 달려 있습니다.)
Jonathan Allan

2
N의 입력을 잊어 버릴 수 있습니다. 그리고 두 번째 질문에는 그렇습니다.
McLinux

각 숫자의 가장 작은 소수입니다.
완전히 인간적인

@totallyhuman 꽤 - 입력이 말을한다면 [7,8,8](사용 이후는 불가능하다 2모두에 대해 8두 가지의 결과 4.들) 또한, 입력이 말을한다면 [7,30,30]다음 [7,2,2]유효하지만 것 [7,2,3][7,3,2]다른 사람이 작업 할 사이에.
Jonathan Allan

답변:


5

05AB1E , 13 바이트

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

온라인으로 사용해보십시오!

내 Pyth 답변의 포트.

  • Ò주요 사실 얻는다 Ò의 각각의 R을.
  • 이차원적인 명령을 접고 â (c â rtesi â 대향 오른쪽 / 왼쪽 피연산자가 우측에서 좌측으로 목록의 각 소자 사이의 N 개의 제품).
  • €˜평탄화 ach.
  • ʒ...}다음 조건을 만족하는 필터를 여과 하십시오 :
    • ÷ 입력과 쌍의 정수 나누기.
    • D uplicate은 (스택에 항목의 두 복사본을 밀어).
    • Ù중복 요소를 제거하고 Ù niq를 유지 Ù 각 소자의 전자 발생.
    • Q전자에 대한 검사 의 Q 를 uality.
  • θ 마지막 요소를 가져옵니다.

4

젤리 ,  15  14 바이트

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

하나의 인수, 숫자 목록을 허용하고 다른 숫자 목록의 표현을 인쇄하거나 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 | 크기를 앞둔 풀 프로그램.
                |
             오후 | 각 정수의 소인수 분해.
           * F | 소수 목록에 데카르트 곱을 접습니다.
        .nM | 각각 평평하게하십시오.
 f | 필터.
  {I / VQT | 필터 조건 (변수 T 사용)
    / V | 벡터화 정수 나누기 ...
      QT | 입력 및 현재 항목 위에.
  {I | 중복 제거에 변하지 않는가 (중복 제거)?
전자 | 마지막 요소를 가져 가라.
                | 결과를 암시 적으로 출력합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.