다른 기지의 소수


17

도전:

기본 10 자리가 부여됩니다. 10부터 카운트 2까지 각베이스에 대해 :

  1. 원래 입력 번호를 밑이 10 인 문자열로 취하고 밑이 유효하지 않은 숫자를 제거하십시오.
  2. 해당 밑수에서 결과 숫자 문자열을 해석하십시오. 이것이 1 또는 0을 제공하면 전체 프로세스를 종료하십시오.
  3. 최대 소수를 10 진수로 출력하거나 인쇄합니다.

출력은 가장 큰 주요 요소의 배열 일 수 있습니다.

샘플 사례 :

입력:

987654321

산출:

379721
10593529
1091
179
1493
293
19
7

번갈아:

[379721,10593529,1091,179,1493,293,19,7]

이것은 가장 큰 소수 인 987654321, 87654321 9 = 42374116 10 , 7654321 8 = 2054353 10 등을 인쇄하여 1 2에 도달 할 때까지 멈 춥니 다.


2
과정이 확실하지 않습니다. 아마도 예제에서 알아낼 수는 있지만 명확한 지침이 있어야하므로 필요하지 않습니다. 그래서 우리는 더 낮은 밑으로 변환하고 유효하지 않은 숫자를 제거한 다음 가장 큰 소수를 인쇄합니까? 이 요소를 어떤 기반으로 인쇄합니까? 그런 다음 가장 큰 주요 요소와 더 낮은 기본 요소로 동일한 프로세스를 수행합니까? 아니면 우리가 고려한 숫자로합니까? 우리는 10 또는 9로 시작합니까?
xnor

사이트에 오신 것을 환영합니다!
DJMcMayhem

2
나는 그것을 더 명확하게하기 위해 도전을 다시 쓰려고 노력했다. 이것이 당신이 의도 한 바램이기를 바랍니다. 그렇지 않은 경우 자유롭게 변경하십시오.
xnor

4
주요 작업에 가장 큰 기본 단계는 기본 변환입니다. 대부분의 언어는 기본적으로 기본 인수 분해 기능을 사용하여 직접 수행하며 나머지 언어는 기본적으로 두 번째 별도의 과제를 수행해야합니다. 기본 변환도 내장 또는 버스트입니다. 작업이 기본 제공으로 제공되면 골프를위한 기반이 충분할 것으로 예상되며 실제로 인수 분해 및 기본 변환이 가능합니다. 그래도 첫 번째 도전에는 좋지만 다음에 염두에 두어야 할 사항입니다.
xnor

3
이것이 Google Code Jam에서 영감을 얻은 것입니까?
Mego

답변:


6

Pyth, 25 바이트

sfTm>1PiFdC,.u-N`tYKrT1zK
                       z   get input as a string
            .u      rT1    cumulative reduce over [10,9,...,2]
              -N`tY        remove one minus the number (10,9,...) from the input
          C,       K    K  pair each step along the chain with corresponding base
   m                       map over [["987654321", 10],...]:
       iFd                   apply the base-conversion (splat over i)
      P                      prime factorization, smallest to largest
    >1                       take [the last element], or [] if empty (1 or 0)
 fT                        remove the []s from 0s or 1s
s                          join the one-element arrays together

여기에서 시도하십시오.



4

MATL , 17 15 바이트

9:PQ"G@ZAYfXzX>

이 숫자는 따옴표가있는 문자열로 사용되며 기본적으로 허용됩니다.

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

설명

9:PQ     % Push array [10, 9, ..., 2]
"        % For each number in that array. These are the bases to be considered
  G      %   Push input. Forces for input to be taken implicitly first time
  @      %   Push current base
  ZA     %   Convert from that base to base 10, discarding non-valid digits
  Yf     %   Prime factors. Gives empty for input 1, and 0 for input 0
  Xz     %   Non-zero values. Gives empty if previous result was 0, or else
         %   leaves it as it was
  X>     %   Maximum of array. For empty input gives empty
         % Implicitly end for each
         % Implicitly display. Empty arrays are not displayed

이것은 1로 끝나지 않는 입력에 대해 끝에 0을 출력합니다.
poi830

입력 '98765432'및 '98765'(임의의 예)의 경우 종료하기 전에 올바른 숫자를 출력 한 다음 0을 출력합니다.
poi830

1
@ poi830 해결됨
Luis Mendo

1

줄리아, 101 바이트

f(s,x=[],b=10)=(t=filter(c->c<=47+b,s))>"1"&&b>1?f(s,[x;maximum(keys(factor(parse(Int,t,b))))],b-1):x

입력을 문자열로 받아들이고 배열을 반환하는 재귀 함수입니다.

언 골프 드 :

function f(s, x=[], b=10)
    # Filter the string down to only the digits valid for base b
    t = filter(c -> c <= 47 + b, s)

    # If the filtered string isn't "1" or "0" and b is a valid base
    if t > "1" && b > 1
        # Call the function again, appending the maximum prime factor
        # of t in base b to the argument x and decrementing the base
        f(s, [x; maximum(keys(factor(parse(Int, t, b))))], b-1)
    else
        # Otherwise return the array
        x
    end
end

1

수학, 83 바이트

FactorInteger[Select[IntegerDigits@#,#<a&]~FromDigits~a][[-1,1]]~Table~{a,10,2,-1}&

익명 함수는 목록을 반환합니다. 정직하게 그렇게 복잡하지 않습니다.


0

루비, 120 바이트

재귀 함수는 입력을 문자열로 가져옵니다.

f=->n,b=2{require'prime';i=n.tr([*b.to_s..?9].join,"").to_i(b)
b>10?[]:f[n,b+1]+[*i>1?Prime.prime_division(i).max[0]:p]}

1
-rprime대신 명령 행 플래그를 사용하여 일부 바이트를 저장할 수 있습니다 require.
Doorknob

-rprime어떤 이유로 든 나를 위해 작동하지 않습니다 ...
Value Ink

0

파이크, 19 바이트, 비경쟁

(splat_node functon 추가)
DTAbPe
;1TtD=T`"":r

여기 사용해보십시오!

따옴표로 입력하고 오류와 함께 종료합니다.

설명 (줄 바꾸기가 \ n으로 바)) :

D                    - Duplicate the first item on the stack (And get it from input first time)
 TAb                 - Convert input to base (whatever's in T, 10 default)
    Pe               - get the highest prime factor of the number
      \n;1           - print it out and get rid of it
          TtD=T      - T -= 1
               `"":  - input = input.replace(str(t), "")
                   r - GOTO start
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.