자르기 쉬운 소수와 소수 프로그램이 판독되는 경우에는, 배치를 거꾸로 , 상기

마우스 오른쪽 절단 가능 소수는 모든 접두사 (기본 10)는 소수 소수입니다. A는 왼쪽 절단 가능 소수는 정확하게 모든 접미사가 소수 반대, (0으로 시작 소수은 허용되지 않습니다). 이 두 시퀀스는 모두 유한합니다 (오른쪽 잘림은 83 개이고 왼쪽 잘림은 4260 개입니다).

단일 숫자를 입력으로 허용하고 n 번째 오른쪽 잘림 가능한 소수를 생성하는 프로그램을 작성해야합니다 . 프로그램이 판독되는 경우에는, 배치를 거꾸로 , 상기 생성한다 N 왼쪽 truncatable 번째 프라임.

프로그램을 뒤로 정렬하기 위해 프로그램을 단어로 나누고 단어의 순서를 반대로 바꿉니다. 단어는 여러 문자로 구성 될 수 있습니다.

예를 들어, 다음이 프로그램 인 경우 :

hello world
1234567890

다음은 가능한 한 역방향 배열이 가능합니다.

각 캐릭터를 나누기 :

0987654321
dlrow olleh

공백으로 나누기 :

1234567890
world hello

임의로 분할 (명확성을 위해 추가 된 파이프) :

hel|lo w|orld
1|23456|7|8|90

908723456orld
1lo whel

프로그램을 거꾸로 배열 할 때는 다른 모든 문자와 마찬가지로 모든 공백을 고려해야합니다.

순방향 테스트 입력 :

1:  2
2:  3
21: 379
60: 239933
83: 73939133

뒤로 테스트 입력 :

1:    2
2:    3
39:   647
187:  29173
4260: 357686312646216567629137

프로그램은 합리적인 시간 (1 분 미만)에 실행될 수 있어야합니다.

이것은 이므로 가장 적은 바이트를 가진 프로그램이 승리합니다!



답변

젤리 , 26 23 바이트

앞으로

Ѷp9¶7ÆR2ĿV€$ÆPÐf$ÐĿFị@

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

Ñ p 9 7ÆR2ĿV€$ÆPÐf$ÐĿFị@

뒤로

7ÆR2ĿV€$ÆPÐf$ÐĿFị@¶9p¶Ñ

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

7ÆR2ĿV€$ÆPÐf$ÐĿFị@ 9 p Ñ

작동 원리

모든 Jelly 프로그램은 링크 (Jelly의 기능 수행)로 구성되며, 줄 바꿈 또는 순례자 ( ) 로 구분됩니다 . 그들 중 마지막은 메인 링크입니다 . 프로그램이 실행될 때 자동으로 호출됩니다.

전달 프로그램은 다음과 같이 작동합니다.

Ñ                   Helper link. Unused.


p9                  Helper link. Take the Cartesian product with [1, ..., 9].


7ÆR2ĿV€$ÆPÐf$ÐĿFị@  Main link. Argument: n

7ÆR                 Yield all primes up to 7.
             ÐĿ
            $ÐĿ     Combine the two quicklinks to the left into a monadic chain,
                    and call it repeatedly until the results are no longer unique.
                    Return the array of all intermediate results.
       $              Combine the two links to the left into a monadic chain.
   2Ŀ               Call the helper link on line 2.
     Ṿ€                 Eval each array in the product. This casts to string
                        before evaluating, thus concatenating both numbers.
        ÆPÐf        Filter by primality; keep only primes.
               F    Flatten the resulting array.
                ị@  Retrieve the element at index n.

후진 프로그램은 거의 동일하게 작동합니다. 두 가지 차이점 만 있습니다.

  • 메인 링크는 이제 Ñ아래 링크 (포장), 즉 순방향 프로그램의 메인 링크를 호출합니다.

  • 9pp9역 카티 전 곱을 반환하는 대신 .


답변

파이썬 2, 143 139 바이트

I=1
a={2}
def f(s):
 for d in'123456789':u=d[I:]+s+d*I;z=int(u);z+=z<3;z%91>0<2==pow(2,z,z)>a.add(z)<f(u)
f('')
lambda n:sorted(a)[~-n]
I=0

다섯 부분으로 구성됩니다.

  1. I=1
  2. 개행
  3. a={2}…[~-n]
  4. 개행
  5. I=0

따라서 반전은의 가치를 뒤집는 것입니다 I.

설명

이 함수 f는 global 값에 따라 왼쪽 잘림 가능한 소수 (LTP) 또는 오른쪽 잘릴 수있는 소수 (RTP)에 대한 재귀 검색을 수행합니다 I. 이 값은 세트에 추가됩니다 a. 그런 다음- 번째를 lambda n:sorted(a)[~-n]리턴합니다 n.

리프 를 LTP, RTP, 0이 아닌 숫자 + LTP 또는 RTP + 0이 아닌 숫자로 정의합시다 . 이것들은 우선 성 f을 검사하고 싶었던 모든 값입니다 .

나는 모든 잎에서 작동하는 Fermat 의사 프라임 테스트를 설계했습니다.

      

(63973은 Carmichael 번호 입니다.)

이 테스트가 true를 반환 z하면 집합에 추가 a해야하고에 반복해야합니다 str(z). 책임있는 코드는 다음과 같습니다.

z+=z<3;z%91>0<2==pow(2,z,z)>a.add(z)<f(u)

먼저, 우리는 사건을 다루고 싶습니다 z == 2. 우리는 단순히 여기에 그것을 피하고 2처음 정의 할 때 하드 코딩함으로써 그렇게 합니다 a! (편집 : 그리고 우리가 잡으면 해로운 일도 일어나지 않습니다 z == 1.) 그래서 우리는 지금 그것을 가정 할 수 있습니다 z ≥ 3.

필자는“및”을 단락 체인 비교로 변환했습니다. 처음 세 비교는 이전에 성공 a.add(z)했고 f(u)평가되었습니다. 모든 역할은 다음과 같습니다.

  1. z%91>0첫 번째 조건을 인코딩합니다. (63973은 91로 나눌 수 있는데, 잎 자체는 아니기 때문에이를 인식합니다.)
  2. 0<2항상 사실이지만 체인은보다 짧습니다 and.
  3. 2==pow(2,z,z) 두 번째 조건을 인코딩합니다.
  4. pow(2,z,z)>a.add(z)set.add반환 None을 추가하고 정수는 항상보다 크므로 더하기를 트리거하고 항상 참 None입니다.
  5. a.add(z)<f(u)재귀를 트리거합니다. 진실의 가치는 중요하지 않습니다.

감사의 말

  • Dennis는 4 바이트를 절약했습니다 ( u=[d+s,s+d][I]u=d[I:]+s+d*I; z==2z<3mod 91 트릭). 감사!