강도 : 숨겨진 OEIS 하위 문자열


23

이것은 경찰과 강도 도전입니다. 이것은 강도의 실입니다. 경찰의 스레드가 여기에있다 .

경찰은 OEIS 에서 시퀀스를 선택하고 해당 시퀀스에서 첫 번째 정수를 인쇄 하는 프로그램 p 를 작성합니다 . 또한 일부 문자열을 찾을 것 . p 어딘가에 s 를 삽입하면 이 프로그램은 시퀀스에서 두 번째 정수를 인쇄해야합니다. p 의 동일한 위치에 s + s 를 삽입하면 이 프로그램은 시퀀스에서 세 번째 정수를 인쇄해야합니다. 같은 위치에있는 s + s + s 는 네 번째 등을 인쇄합니다. 예를 들면 다음과 같습니다.

파이썬 3, 시퀀스 A000027

print(1)

숨겨진 문자열은 2 바이트 입니다.

+1프로그램 print(1+1)은 A000027에서 두 번째 정수를 print(1+1+1)인쇄하고 프로그램 은 세 번째 정수 등 을 인쇄 하기 때문에 문자열은입니다 .

경찰은 순서, 원래 프로그램 p 및 숨겨진 문자열 s 의 길이를 밝혀야합니다 . 강도는 해당 길이 까지의 문자열 과 시퀀스를 생성하기 위해 삽입 할 위치를 찾아서 제출을 해독합니다 . 문자열이 의도 한 솔루션과 일치하여 유효한 균열이 아니거나 삽입 된 위치가 아니어야합니다.

경찰 답변 중 하나를 해독하는 경우 솔루션 (숨겨진 문자열과 위치가 표시된 상태)과 답변 링크를 게시하십시오. 그런 다음 경찰이 여기에 당신의 균열에 대한 링크로 대답하십시오.

규칙

  • 솔루션은 순서에 관계없이 숫자에 상관없이 또는 메모리 제한, 정수 / 스택 오버플로 등으로 인해 실패하는 합리적인 한계까지 작동해야합니다.

  • 우승 강도는 가장 많은 제출물을 크랙하는 사용자이며 순위 결정자가 해당 크랙 수에 먼저 도달 한 사람입니다.

  • 우승 경찰이 가장 짧은 문자열과 경찰 인 금이되지 않습니다. Tiebreaker는 가장 짧은 p 입니다. 크랙되지 않은 제출물이 없으면 해결책을 가진 경찰이 가장 오랫동안 승리했습니다.

  • 안전하다고 선언하려면 솔루션이 1 주일 동안 크랙되지 않은 상태로 유지되고 숨겨진 끈 (및 삽입 위치)이 공개되어야합니다.

  • s 는 중첩 될 수 없으며, 엔드 투 엔드로 연결되어야합니다. 예를 들어, 이었다 10, 각 반복은 갈 것 10, 1010, 101010, 10101010...보다는10, 1100, 111000, 11110000...

  • 모든 암호화 솔루션 (예 : 하위 문자열의 해시 확인)이 금지됩니다.

  • s 에 ASCII가 아닌 문자가 포함 된 경우 사용중인 인코딩도 지정해야합니다.

답변:


13

Python 2 , xnor의 시퀀스 A138147

기발한:

print 10

깨진:

print "1%s0"%10
      ^^^^^^^

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


3
당신은 그것을 얻었다! 그것이 내가 생각한 해결책입니다. %왼쪽 연결 을 사용하면 작동한다는 것이 흥미 롭습니다 .
xnor

예, 그러나 형식 문자열은 문자열이며 "1 % s0"% "1 % s0"은 "11 % s00"이며 여전히 우리가 원하는 일을합니다.
홉스

10

뇌 - 플랙 , A000984 하여 Nitrodon

({({}<>({}))<>}<>){({}<>)<>}<>

이것은 Nitrodon이 무엇을 염두에 두 었는지 확실하지 않은 30 바이트입니다.

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

설명

나는 많은 것을 시도했지만 여기에 효과가 있습니다. A000984의 용어는 파스칼 삼각형의 핵심 요소입니다.

중심 요소

이제 대각선 위에 대각선을 추가하여 얻을 수 있다는 것을 알았습니다.

예를 들면 다음과 같습니다.

1++6+10=20

중앙 합계

그리고 Nitrodon의 프로그램에서 마지막 조치는 모든 것을 요약하는 것입니다. 이것은 좋은 후보처럼 보였습니다 (더 많은 것들을 시도했지만이 작업은 끝났습니다).

그래서 우리는 하나의 부분 합계를 취하고 다음 부분을 생성하는 프로그램을 원합니다. 운 좋게도 이들 중 하나에서 다음으로 갈 수있는 깔끔한 방법이 있습니다. 각 행은 다음 행의 델타입니다. 있음 행 번째 항은 차이 인 번째 및 1 의 다음 행 번째 조건이.

다음 행 수식

한 가지 문제는 원하는 행을 계산하기에 마지막 행이 충분하지 않다는 것입니다. 행이 있으면 각 행이 마지막 행보다 하나 더 길기 때문에이 방법으로 다음 행의 마지막 멤버를 가져올 수 없습니다. 그러나 여기에는 또 다른 트릭이 있습니다. 각 행의 마지막 멤버는 해당 행의 모든 ​​이전 멤버와 같습니다!

1++6=10

마지막 멤버 공식

그리고 당신이 Brain-Flak에 익숙하다면 그것은 당신에게 정말로 쉬운 일로 튀어 나와야합니다.

이제 코드는 다음과 같습니다.

시작하기 위해 각 새 멤버가 인접한 두 개의 오래된 멤버의 합인 다음 행 계산을 수행합니다. 그것은 할 수 있습니다 :

{({}<>({}))<>}<>

기본적으로 요소를 옮기고 이미 위에 있던 것을 삭제하지 않고 추가합니다. 그러나 이것은 모든 것을 뒤집기 때문에 다음에 우리가 줄을 다시 넣으려면 다시해야합니다.

{({}<>({}))<>}<>{({}<>)<>}<>

이제 행의 마지막 멤버를 계산해야합니다. 전에 말했듯이 이것은 매우 쉽습니다. 우리는 행의 모든 ​​요소를 ​​반복하기 때문에 그 합계를 가져 와서 밀어 넣을 수 있습니다. 우리는 두 번째 루프 전에 밀어서 바닥에 닿습니다.

({({}<>({}))<>}<>){({}<>)<>}<>

그리고 그게 다야.


1
내가 생각했던 것보다 훨씬 좋습니다. 설명에 대한 한 가지 수정 : 한 대각선에서 다음 대각선으로 가려면 두 개의 이전 숫자를 추가하지 않고 새 숫자에 이전 숫자를 추가합니다 (이전 대각선의 누적 합계 계산).
니트로 돈

@Nitrodon 설명이 수정되었습니다. 내 코드를 읽었다면 그것이 잘못되었다는 것을 알 수 있었을 것입니다.
밀 마법사


6

MATL 시퀀스 A005206 의해 루이스 Mendo

기발한:

voOdoO

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

깨진:

voOdoOdNq17L/k
      ^^^^^^^^

MATL 전문가는 아니지만 원본 voOdoO[0]스택에 두 개의 빈 배열과 배열을 만듭니다 . 이것이 [0]시퀀스의 첫 번째 요소로 대괄호없이 인쇄됩니다. 그런 다음 균열 / 해결 방법은 다음을 수행합니다.

  • d스택에서 요소를 가져 와서 (숫자 또는 크기가 1 인 배열이라고 가정) 빈 배열로 바꿉니다. 이 빈 배열은 인쇄되지 않지만 스택 크기에 기여합니다
  • Nq스택의 크기를 세고 빼냅니다. 이것은 n+1함수를 평가할 때 의 용어입니다 ( d스택에 보이지 않는 것을 추가 하기 때문에 2에서 시작하여 반복마다 하나씩 증가하기 때문에 )
  • 17L 이것은 상수입니다 Phi = (1+sqrt(5))/2
  • /kfloor((n+1)/Phi)시퀀스의 요소를 계산하는 수식 중 하나를 수행합니다 . 이 공식은 a(n) = floor(sigma*(n+1)) where sigma = (sqrt(5)-1)/2우리가 신원을 사용하는 것을 제외하고 OEIS에 나와 있습니다(sqrt(5)-1)/2 = 1/Phi

나는 MATL 전문가가 아닙니다. 글쎄, 당신은 하나가 된 것 같습니다 :) 참고로, 숨겨진 문자열은 \N17L/k&( &코드의 중간과 끝에 두 가지 다른 용도에 유의 하십시오) 솔루션은 더 간단하고 더 우아한
Luis Mendo

5

파이썬 3- A__

print(100+-1)

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

맥주 100 병 -1, 다음 번호를 얻기 위해 추가하십시오 99.


7 초나 날 이겼어 :) 또한 규칙은 해당 길이 까지 문자열 찾는 것으로-1 대신 사용할 수 있습니다 . 좀 더 명확하게 설명하겠습니다.
DJMcMayhem

@DJMcMayhem 제가 제출 한 후에 읽었지만 그런 쉬운 균열에 대해 추가 제한을 두는 것이 더 재미 있습니다 :-)
Giuseppe

5

A__ 에 의한 Keg 시퀀스 A000045

기발한:

0.

깨진:

01":&+.
 ^^^^^

도전 과제는 길이 <= 6의 하위 문자열을 찾는 것이지만 찾은 문자열의 길이는 5입니다.

술통 사양을 보면 너무 게으른 사람들을위한 명령의 정의 : 01스택에 각각의 수를 밀어; "스택 상단을 스택 하단으로 이동 (롤); &스택이 비어 있으면 스택 상단을 레지스터로 팝하고 그렇지 않으면 스택에 레지스터를 비 웁니다. +상위 2 개의 스택 값을 추가합니다.

초기 1"는 스택 맨 아래에 1을 삽입합니다. 이 1의 증가하는 목록은 첫 번째 반복에서만 역할을 수행하여 스택 1 0이 단지 시작이 아니라 시작한다고 가정 할 수 있습니다 0. 실제로, 부분이 반복 10:&+.되는 프로그램 :&+은 맨 아래에 증가하는 1의 목록이 없다는 것을 제외하고는 위의 솔루션과 정확히 동일한 동작을합니다.

&반복 부분에서 한 번만 사용되며 교대 동작이 있기 때문에 동작은 1":&+반복 패리티에 따라 다릅니다.

이제이 프로그램은 시작부터 0, 1로 시작하는 피보나치 시퀀스를 실제로 인쇄하지 않습니다. 실제로 2, 즉 0에서 1, 0 피보나치 시퀀스를 인쇄합니다. (이것은 동일한 시퀀스로 나타납니다.) 이것을 알면 프로그램은 쉽게 분석됩니다.

  • 첫 번째, 세 번째, ... 반복에서 상태는로 시작 [a, b]하고로 끝납니다 a+b (&=b).
  • 두 번째, 네 번째, ... 반복에서 상태는로 시작 [b] (&=a)하고로 끝납니다 [b, b+a].

이것은 실제로 필요에 따라 시퀀스를 계산합니다.


1
좋아, 이제 나와 같은 술통을 사용하는 사람이 있습니다.
A̲̲

@A__ 원래 6 문자열은 무엇입니까? :)
tomsmed

실제로 문자열과 매우 유사합니다. 유일한 차이점은 :문자열의 시작 부분에 명령을 추가했다는 것 입니다.
A̲̲

찾을 수있는 가장 짧은 삽입 문자열입니까?
A̲̲

2
아아 나는 이것을 찾았지만 챌린지가 <= 4 바이트 일 때 되돌아왔다.
Khuldraeseth na'Barya



4

Pyret 시퀀스 A083420 의해 MLavrentyev

fold({(b,e):(2 * b) + 1},1,[list: 0,0,])
                                  ^^^^

여기서 실행할 수 있지만 코드에 연결하는 방법을 찾지 못했습니다. 복사하여 붙여 넣어야합니다.

제공된 함수는 두 번째 인수를 무시합니다. 첫 번째를 두 배로 늘리고 2^n - 1여기에 필요한 시퀀스 를 생성합니다. 필요한 것은 접힌 목록의 길이를 변경하여 해당 작업을 수행하는 횟수를 알려주는 것입니다. 다행스럽게도 Pyret은 후행 쉼표에 대해 불평하지 않습니다.


4

파이썬 3 , 시퀀스 A268575 에 의해 NieDzejkob

기발한:

from itertools import product
S,F,D=lambda*x:tuple(map(sum,zip(*x))),lambda f,s:(v for x in s for v in f(x)),lambda s:{(c-48>>4,c&15)for c in map(ord,s)}
W=D("6@AQUVW")
print(len(W))

깨짐 (100 바이트) :

from itertools import product
S,F,D=lambda*x:tuple(map(sum,zip(*x))),lambda f,s:(v for x in s for v in f(x)),lambda s:{(c-48>>4,c&15)for c in map(ord,s)}
W=D("6@AQUVW");A=-1,1,0;*X,=F(lambda a:(S(a,x)for x in product(A,A)),W);W={p for p in X if 2<X.count(p)<4+({p}<W)}
print(len(W))

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

내가 수집 할 수있는 것에서 원래 코드는 숨겨진 문자열을 가능한 한 약어로 만들고 정의를 설정 한 다음 초기 게임 오브 라이프 패턴을 정의합니다. 숨겨진 문자열은 Conway의 Game of Life 반복을 102 바이트로 작성하는 것과 같습니다.

이 균열의 목적을 위해 S인수 내의 요소 (반복 가능)를 합산하고 F목록의 모든 요소에 iterable을 반환하는 함수를 적용하고 모든 결과를 함께 분쇄하는 함수입니다.

  • ;A=-1,1,0;앞의 문을 끝내고 튜플 (-1,1,0)을 A로 축약합니다. A product(A,A)는 주어진 셀과 셀 자체에 상대적인 모든 이웃을 제공합니다.
  • *X,=F(lambda a:(S(a,x)for x in product(A,A)),W);새로운리스트 생성 X세포의 모든 이웃 유지 W및 셀 W각각의 셀에 대한 이웃의 상대 위치를 가산하고,리스트에 이들을 함께 분쇄 이르렀.
  • W={p for p in X if 2<X.count(p)<4+({p}<W)}이 목록을 살펴 보고 다음 반복에서 X각 셀이 셀 X세트 에 속 하는지 여부를 판별합니다 . 이 게임은 Life of Life 골프 에서 거의 그대로 사용되었습니다 .

나는 NieDzejkob의 답변 (102 바이트 숨겨진 문자열!)에 너무 충격을 받아 StackExchange에 가입하여 균열을 시도했지만 새 계정이 다른 사람들의 게시물에 댓글을 달 수 없으므로 규칙을 완전히 준수 할 수없는 것으로 나타났습니다 ( 내 잘못이야)
Liresol

CGCC에 오신 것을 환영합니다! 경찰의 답변에 대해 언급했습니다. 나는 당신이 주위에 붙어 있기를 바랍니다!
조 왕

감사! 나는 실제로 이와 같은 코드 도전을 시도하지는 않았지만 이것을하는 것은 폭발적이었습니다.
Liresol

잘 했어! 시간을 찾으면 원하는 문자열을 공개하겠습니다.
NieDzejkob

3

하스켈, A014675 하여 Khuldraeseth na'Barya

원본 코드

main=print$uncurry(!!)([2],0)

부분 문자열로

main=print$uncurry(!!)                                   ([2],0)
                      $(\(a,n)->(a>>= \e->2:[1|e>1],n+1))

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


그렇게 할 것입니다! 나는 flip take[1,2]그 내부 람다 대신에했다. 그렇지 않으면 동일합니다.
Khuldraeseth na'Barya

1
@ Khuldraesethna'Barya : (`take`[2,1])1 바이트 더 짧습니다
nimi

저리 아마도 내가 이것을 깨달았을 때 더 안전한 터치를 위해이 것을 가질 수 있었을 것입니다. (`take`)컴파일 오류가 발생하여 그럴 (`take`[2,1])것이라고 생각 했습니다. :(
Khuldraeseth na'Barya



2

파이썬 3 - agtoever

from sympy import isprime, primerange
from itertools import count
r=1
r+=1
while isprime(r-2)or r&1<1and r>3:r+=1
print(r)

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


2
내가 Goldbach 추측에 대해 물었던 이유는 이와 같은 해결책이 2 이외의 시리즈에 짝수 항목이있는 경우 정확하지 않기 때문입니다 . 추측을 추측 할 수 없다면 이것이 효과가 있다고 생각 하지만 동일한 기본을 사용합니다. 아이디어 (이 균열을 남기고 자유롭게 느끼십시오, 나는 단지 pedantic되고 싶습니다).
FryAmTheEggman

좋은 해결책. 내 것보다 짧습니다. 내일 내일 게시 할 예정입니다 (CET). 현재 코드를 가지고 있지 않습니다. 내 솔루션은 생성기 표현을 사용하고 Gb 추측에 의존하지 않지만 여전히 골프 (그리고 내 견해) 대답으로 남습니다.
agtoever

1
@FryAmTheEggman 그래, OEIS의 "수식"섹션은 그것이 추측에 의존한다고 언급하지 않았다 ... 증거가있는 brb;)
NieDzejkob

2

MATL 시퀀스 A000796 의해 루이스 Mendo

기발한:

'pi'td1_&:_1)Y$J)

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

깨진:

'pi'td1_&:|SQ_1)Y$J)
          ^^^

원래의 저자는 배열을 몰래 만든 다음 배열 [-7:-1]의 첫 번째 요소를 추출하여 부정했습니다 7. 그런 다음 그것을 사용하여 반올림 된 7 번째 자리수 (pi)를 얻었으며, 3이를 첫 번째 자리수로 표시했습니다. 에 추가 |SQ하면 원래 배열이 모두 양수이고 정렬되어 모든 것에 배열이 추가됩니다. 즉, 인덱스를 얻는 대신 모든 후에는 한 응용 프로그램 후, 두 응용 프로그램 후 등 의 인덱스 7를 가져옵니다 . 는 그것이 알려주기 때문에 중요하다 숫자하지 라운드 기능.-2-3-Y$


나의 정확한 숨겨진 줄! 잘 했어!
Luis Mendo

2

넷째 (gforth) , A000042 하여, NieDzejkob

.( 1)1 .
^^^^^

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

사소한 1- 바이 터는 단순히 문자 그대로 확장됩니다. 문제는 19 번째 자릿수만큼 64 비트가 넘친다는 것입니다. 쉬운 수정은 한 자릿수를 반복적으로 인쇄하는 것입니다. 그러나 쉽지는 않습니다. 1 .끝까지 시침 하면 실제로 필요한 추가 숫자가 인쇄되지만 공백으로 구분됩니다. 작동하지 않습니다.

이제 Wikipedia에 따르면 " .((점-파렌)은 괄호로 구분 된 문자열을 구문 분석하여 표시하는 즉각적인 단어입니다." 다행히도 표시에는 다른 이상한 문자가 없으므로 .(단일 1을 인쇄하는 데 사용 하면 충분합니다. 그리고 그렇습니다. 친밀한 후에는 공간이 필요하지 않으므로이 다섯 문자 (열린 후의 공간이 있음)는 우리 마음의 내용에 반복 될 수 있습니다. 시연하기 위해 TIO에 64 비트 int가 여러 번 오버플로 된 예제를 포함 시켰습니다. 매력처럼 작동합니다.


잘 했어! 정확히 내 문자열입니다.
NieDzejkob

2

Unefunge-98 (PyFunge) , 서열 A000108 의해 NieDzejkob

1# 2g1+:2p4*6-*2g/.@
 ^^^^^^^^^^^^^^^^^

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

6 번 반복

19 개를 절약하기위한 2 바이트! 공백으로 보이는 것은 실제로 0x01 헤더의 시작 문자입니다.

설명:

이 도전은 모든 a(n)것에서 발생 하는 a(n-1)n입니다. OEIS는 다음과 같이 a(n) = (2n)!/(n!(n+1)!)쉽게 변환 할 수 있는 명시 적 공식을 제공합니다.a(n) = a(n-1) * (4n-6) / n . 이제 이것을 Funge에서 구현하십시오.

1와 사이에 코드를 삽입해야 합니다 .. 그것은 이미 완료된 퍼즐의 절반입니다. 남은 것은 어떤 코드를 삽입하는 것입니까? Funge는 스택 조작 도구에서 특히 부족하므로 스택의 하단은 제한이 없습니다. 나는 모두를 추적해야 n하고a(n) 스택을 성장하지 않고. 그리고 Funge 공간보다 더 나은 방법은 무엇입니까?

그 0x01 문자는 내 카운터 n입니다. a(n)비트 실행이 완료된 후에 스택에 있어야하므로 스택을 유지 합니다.

1# 2g1+:2p4*6-*2g/.@
1                       Push 1. This is a(0).
 #                        Skip the next instruction. Without this, I believe the instruction pointer will reverse direction upon encountering 0x01.
   2g                     Push the third character in the source, which starts out as 1.
     1+                   Increment it...
       :                  ...copy it...
        2p                ...and put it back. One copy remains atop the stack.
          4*6-            Multiply by four. Subtract six.
              *           Multiply by a(n), leaving the result alone on the stack.
               2g         Push n again...
                 /        ...and divide our intermediate result by it. Ta-da!
                          At this point, the stack is the same as at the start of the indented block, except the one item has been advanced one place in the sequence.
                          The source of the program has changed; the third character holds the number of times this indented block has run.
                  .@    Print and terminate.


2

V, A000290 , DJMcMayhem에 의해

é*Ä2é*Ø.
  ^^^^

1에서 제곱을 산출합니다.

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

기본 은 전체 버퍼에서 줄 바꿈이 아닌 문자 수를 é*삽입 *하고 Ø.계산합니다. 삽입 Ä은 상단 라인을 자체 라인에 복제 2é*합니다 **. 삽입을 연결하면 맨 위에 가장 큰 연속 홀수가 나타납니다. Ø.사실상 최종 은 첫 번째 n 홀수를 합산하여 n 번째 제곱을 산출합니다.


아, 홀수를 합하면, 나는 그것에 대해 생각하지 않았습니다. 멋지게 수행 :) 내가 구문했다 평방 번호 와 함께 더 많은 문자 그대로ÄÎé*<CR>
DJMcMayhem

@DJMcMayhem 처음에 비슷하게 생각했지만 6 바이트를 엉망으로 만들었으므로 홀수를 합산하여 brainflak wiki의 제곱 수 구성에서 영감을 얻은이 다른 접근법을 시도했습니다.
Kritixi Lithos

2

AsciiDots 시퀀스 A019523 의해 Alion

\ +++ /
// \ / \

일단!

두번!

열 번!

코드 / 언어의 작동 방식을 알아 내려고 노력하면서 기존 코드의 처음 두 줄은 피보나치 시퀀스를 무한대로 출력하는 모든 작업을 수행한다는 것을 알게되었습니다. 점이에 도달하면 코드가 종료 &되므로 적절한 수의 항목을 출력 할 수 있도록 나머지 줄에 지연을 추가하기 만하면됩니다.

시행 착오와 관찰 후 올바른 지연 간격이 숫자 당 16 시간 단위라는 것을 알았습니다. 한 줄에 충분한 문자를 맞추는 것은 불가능 해 보였으므로 지연을 2 줄로 넣어야합니다. 실제 지연을 위해 10자를 남겨 두십시오. 패턴이 자체와 일치하도록하려면 두 행 모두 5자를 가져야하며 한 행의 가운데 3 개 문자를 두 번 순회 할 수 있으므로 원하는대로 16 개의 시간 단위를 제공합니다.

&여덟 번째 열에 이것을 맞추기위한 요구 사항 은 내가 세 번째 줄의 내부에서 줄 바꿈으로 시작할 수 있음을 깨달을 때까지 이것을 불가능하게하는 것처럼 보였습니다. 이렇게하면 두 번째 행이 올바른 길이가되고 세 번째 행의 현재 중복 된 끝이 제거됩니다.


1
다음도 작동합니다. \v/v>-----)
SamYonnou

잘 했어, 둘 @SamYonnou은 의도 된 솔루션 에 더 가깝습니다 . 또한 다른 해결 방법으로 나아가더라도 사고 과정이 의도 한 과정과 유사하다는 것이 기쁩니다!
Alion

2

Brachylog , 관련이없는 문자열에 의한 시퀀스 A114018

오리지널 프로그램 :

≜ṗ↔ṗb&w

삽입 할 문자열 :

≜ṗ↔ṗẹbb&w
    ^^

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

설명

다음은 원래 프로그램에 대한 설명입니다 (사용 된 시퀀스가 ​​"자리 반전도 소수 인 최소 n 자리 소수"임을 알고 있음).

≜         Assign an integer value to a variable named ? 
            (try 0, then 1, then -1, then 2, etc.)
 ṗ        ? must be prime
  ↔ṗ      The reverse of ? must be prime
    b     Remove the first element of ?
     &    Ignore that we removed that element
      w   Write ? to STDOUT

보시다시피, 프로그램은 한 가지를 제외하고는 매우 간단합니다. 완전히 쓸모없는 b - behead술어 호출이 있습니다.이 호출은 우리가 아무것도하지 않는 번호의 첫 번째 요소를 제거합니다.

이것은 우리가 문자열을 찾는 방법에 대한 확실한 단서입니다. 문자열을 추가 할 때마다 숫자의 길이를 1 자리 씩 늘리려면 쓸모없는 것을 사용하여 해당 숫자의 길이를 "평가"하는 문자열이 필요합니다 b.

해결책은 다음과 ẹb같습니다. 먼저 ẹ - elements숫자를 숫자 목록으로 변환합니다. 그런 다음 b - behead첫 번째 요소를 제거합니다. 트릭은 b자릿수 목록이 비어 있으면 실패합니다. 따라서을 추가 할 때마다 b필요한 숫자의 길이가 1 씩 증가합니다 (할당 된 값이 ?충분히 많은 숫자를 포함 할만큼 충분히 높아질 때까지 실패 하므로 마지막 b숫자가 한 자리 목록에 적용됨).

매번 다시 적용해도 이미 자릿수 목록이므로 효과가 없습니다. 우리는 처음에 한 번만 필요합니다. 왜냐하면 9001우리가 자릿수 목록 대신 같은 숫자를 001 = 1참 으면 자릿수에 대한 정보를 잃어 버릴 것 입니다.


1
아주 잘 했어요 나는 심지어 9001b1문제를 생각하지 않았다. 실제로 숫자 목록 이 비어 b있으면 실패 하지만 실제로 목록 이 없으면 실패하지 않을 것입니다. 단일 자리 숫자는 0 자체를 포함하여 0으로 오릅니다. .
관련없는 문자열

1
@UnrelatedString 간단히 말해 : b이상합니다
치명적입니다

2

VDM-SL , A000312 , 만료 된 데이터에 의해

let m={1|->{0}}in hd reverse[let x=x+1 in x**x|x in set m(1)&x<card m(1)]
                             ^^^^^^^^^^^^^

VDM-SL의 let표현식은 이미 포함 범위에 바인딩 된 변수를 리 바인드 x**x할 수 있으므로 x이전 범위보다 하나 이상인 범위에 임의로 중첩 될 수 있지만 원래 x는의 카디널리티보다 작습니다 m(1).


나는 그것을 n = 11까지 테스트했고 잘 작동했습니다.
관련없는 문자열

... 하나의 숫자 일뿐입니다. If you insert s somewhere into p, this program must print the second integer from the sequence. If you insert s + s into the same location in p, this program must print the third integer from the sequence. 예제의 동작에 유의하십시오 print(1).
관련이없는 문자열

아 찢어, 이해할 수있는
관련이없는 문자열

1
이것이 아주 사소한 것이라고 생각하지 마십시오. 여전히 멋지다!
만료 된 데이터

1
++재정의 매핑에 사용
만료 된 데이터


2

Rin 's Fourier 변환에 의한 Haskell , A000045 (Fibonacci)

f = head $(flip(:)<*>sum.take 2)[0, 1]
         ^^^^^^^^^^^^^^^^^^^^^^^

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

정확히 23 바이트

이것은 재미 있고 조금 까다로웠다. 거꾸로 된 0과 1은 문제가 아니라는 것을 깨닫기 전에 조금 나를 버렸습니다. $원래 의 부족으로 인해 $...$id모든 것을 괄호로 묶을 수 있기 전에 (1 바이트가 너무 길다) 스케치 작업을 시도 했습니다. 대체로 멋진 작은 퍼즐.

H.PWiz 는 패턴 일치로 최소 5 바이트를 절약 할 수 있다고 지적했습니다 $(\[x,y]->[y,x+y]). 그 무의미한 도전은 어디에서나 무의미하게 생각합니다.

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