트위스트와 함께 프라임


13

참고 : 이것은 이 질문에서 많은 영감을 얻었습니다 .

직무:

당신의 임무는 n프로그램의 각 문자가 제 n위치에 반복 될 때, 소수 를 생성하는 것입니다.

프로그램이 다음과 같다고 가정 해 봅시다.

Derp

거기에있는 모든 문자는 한 번 반복되므로 출력해야합니다 2.

모든 문자가 제자리에 복제되면

DDeerrpp

2 번째 소수 인을 생성해야합니다 3.

명세서:

  • 프로그램은 입력을받지 않아야하며 해당 프라임을 출력해야합니다.
  • 충분한 시간과 기억력이 있다면 프로그램은 모든 프라임에서 작동해야합니다.
  • 선행 및 후행 줄 바꿈이 좋습니다.
  • 출력은 언어의 기본 기반이어야합니다. 기본이 없으면 기본은 괜찮습니다.

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.


6
않습니다 여러분의 프로그램은 모든 소수 충분한 시간 만 주어진 메모리 작동해야합니다. 예를 들어 C에서 int를 사용할 수 없다는 것을 의미합니까?
Dennis

답변:


21

젤리 , 13 바이트

“Ŀo‘’FQỌµḟ;¹V

온라인으로 사용해보십시오! 또는 처음 10 개 프로그램을 실행하십시오 .

배경

Jelly에는 여러 가지 유형의 문자열 리터럴이 있습니다. 그들 모두는로 시작합니다 . 리터럴에 둘 이상의이 포함 된 경우 문자열 배열이 반환 되고 문자열이 서로 분리됩니다.

예를 들어 “abc“def”yields ['abc', 'def']입니다.

(어떤의 문자의 마지막 문자에 따라 ”«»‘’경우, «현재 구현되지 않은 경우), 하나는 리터럴의 다른 유형 중에서 선택할 수 있습니다. 의 경우 , 해당 유니 코드 문자 대신 Jelly의 코드 페이지 에서 코드 포인트를 얻습니다 .

예를 들어 “abc“def‘yields [[97, 98, 99], [100, 101, 102]]입니다.

처음 세 프로그램의 리터럴은 다음 코드 포인트 배열에 해당합니다.

“Ŀo‘           -> [199, 111]
““ĿĿoo‘        -> [[], [199, 199, 111, 111]]
“““ĿĿĿooo‘     -> [[], [], [199, 199, 199, 111, 111, 111]]

작동 방식 ( n = 3 )

“““ĿĿĿooo‘‘‘’’’FFFQQQỌỌỌµµµḟḟḟ;;;¹¹¹VVV  Main link. Implicit argument: 0

“““ĿĿĿooo‘                               Yield the 2D array
                                         [[], [], [199, 199, 199, 111, 111, 111]].
          ‘‘                             Increment twice, yielding
                                         [[], [], [201, 201, 201, 113, 113, 113]].
            ’’’                          Decrement thrice, yielding
                                         [[], [], [198, 198, 198, 110, 110, 110]].
               F                         Flatten, yielding
                                         [198, 198, 198, 110, 110, 110].
                FF                       Twice more. Does nothing.
                  Q                      Unique; yield [198, 110].
                   QQ                    Twice more. Does nothing.
                     Ọ                   Unordinal; convert the Unicode code points
                                         198 and 110 to 'Æ' and 'n'.
                      ỌỌ                 Twice more. Does nothing.
                        µµµ              Begin three monadic chains, all with
                                         argument s := "Æn".
                           ḟ             Filter-false; remove the characters of s
                                         from s, yielding "".
                            ḟḟ           Twice more. Does nothing.
                              ;;;¹       Concatenate with s three times, yielding
                                         "ÆnÆnÆn".
                                  ¹¹     Identity function. Does nothing.
                                    V    Eval the resulting Jelly code, i.e.,
                                         call the next-prime atom thrice, with
                                         initial implicit argument 0.
                                     VV  Eval two more times. This is a no-op
                                         on integers.

1
이것은 분명히 설명이 필요합니다 ... 어떻게 배치되었는지에 따라 이것이 가능한 유일한 언어 일 수 있습니까?
Value Ink

6
뭐 ... 어떻게? 그것은 너무 빠르다.
clismique

@ValueInk 내 답변을 편집했습니다.
Dennis

21

GS2 ( 커밋 67fea47 ), 6 3 바이트

dnR

작동 원리

대부분의 명령과 마찬가지로 GS2 d는 과부하 상태입니다. 처음에는 스택에 빈 목록 (입력 또는 부족)이 있으므로 d합계를 계산합니다. 첫 번째 반복 후 스택에 0 이 있고 d해당 패리티 (또한 0 )를 계산합니다 . 따라서 몇 번이나 반복 d하더라도 결과는 항상 단일 0이 됩니다.

다음 부분은 간단합니다. 이 명령 n은 스택의 상단을 팝하고 다음 소수를 푸시합니다. 따라서 n k 번 반복 하면 k가 계산됩니다. 초기.

마지막으로, 명령은 단순히 스택의 맨 위에 str 을 적용 합니다. 이는 숫자를 문자열 표현으로 변환하고 문자열에 영향을 미치지 않습니다. 따라서 몇 번 반복 R하더라도 결과는 k 의 문자열 표현이됩니다. 초기.


2
지구상에서 무엇!?
downrep_nation

3
소생하지 말라
디지털 외상
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.