코드 변경, 시퀀스 변경 : 강도


15

이것은 도전입니다. 경찰 실은 여기 로 이동 하십시오 .

이 과제에는 경찰이 선택한 2 개의 OEIS 시퀀스 ( S 1 , S 2) 와 해당 시퀀스를 얼마나 잘 골라 내고 난독 처리 할 수 ​​있는지가 포함됩니다.

경찰은 S 1 을 생성하는 코드 A 를 구성 하고 있으며 S 2 를 생성하는 B 를 생성 하기 위해 가능한 가장 좋은 거리 (문자)로 주장하는 숫자 X 를 제공합니다 .

강도의 도전

특정 경찰의 제출 균열, 강도는 프로그램을 마련한다 C S 생산하는 대답과 동일한 언어 (및 버전)에서 2 (N)와 인 Y의 문자에서 멀리 변경 (과 ). 강도는 경찰이 비밀리에 작성한 것과 동일한 B 코드를 반드시 찾을 필요는 없습니다 . 강도 제출은 경찰 제출에서 지정한 것과 동일한 0 인덱스 또는 1 인덱스를 준수해야합니다.Y <= X

이를 관리하는 경우 솔루션과 함께 답변을 게시하고 경찰의 답변에 연결하고 경찰의 답변에 대한 답변을 귀하의 답변과 다시 연결하십시오.

각 경찰 답변은 한 번만 금이 갈 수 있으며 물론 자신의 답변을 해독 할 수는 없습니다. 경찰의 답변이 크랙되기 전이나 후에 유효하지 않은 것으로 밝혀지면 강도 점수에 포함되지 않습니다.

승리와 득점

강도는 (X - Y)*5 + 5각각의 균열에 대해 점수가 매겨지며 전체적으로 가장 높은 점수를 얻은 강도가 승리합니다.

추가 규칙

  • 해시, 암호화 또는 난수 생성에 난수 생성기를 고정 된 값으로 시드하더라도 내장 기능을 사용해서는 안됩니다.
  • 프로그램이나 기능이 허용되지만 코드는 스 니펫이 아니어야하며 REPL 환경을 가정해서는 안됩니다.
  • 편리한 형식으로 입력하고 출력 할 수 있습니다 . 입력 / 출력 방법은 두 시퀀스에서 동일해야합니다.
  • 이 문제에 대한 Levenshtein 거리의 결정적인 계산기는 이 하나의 행성 석회질합니다.
  • CnR 챌린지 일뿐만 아니라 이것은 이므로 일반적인 모든 골프 규칙이 적용됩니다.

답변:


7

Pyke, Levenshtein 거리 1, A036487 , A135628- 점수 5

진흙탕 에 의한 진입 균열

wX*e

여기 사용해보십시오!

원래 코드 인 X*e, 입력의 제곱은 입력에 X곱한 *다음 절반을 곱한 결과 e입니다.

트릭은 'X'의 기본 96 표현에서 56 w이므로 wX56을 산출하고 입력에 바닥과 반을 곱한 다음 필요에 따라 입력의 28 배를 얻습니다.


정확히 내가 가진 것. 예상보다 약간 오래 지속
Blue

내가 보자 마자 그것이 의도 된 해결책이라는 것을 알았습니다.
Jonathan Allan

4

Brain-Flak , 28 바이트, 거리 4, A002817 , A090809

(({(({})[()])}{}){{({}[()])}{}})

이 답변은 35,000 개의 가능한 프로그램을 생성하는 무차별 강제 실행자의 도움으로 발견되었습니다. 이 프로그램은 약 2,000 번째 프로그램이었으며 발견하는 데 약 1 시간이 걸렸습니다.

이 프로그램이 어떻게 작동하는지 아직 완전히 이해하지 못했기 때문에이 답변을 게시하고 싶지 않았습니다. 그러나 대답은 안전하기 때문에 만료되기를 원하지 않습니다. 이 답변을 완전히 이해 하고이 답변을 찾는 데 사용한 코드를 게시하면이 답변을 더 업데이트 할 수 있기를 바랍니다. 그러나 지금은 부분 설명 만 게시하겠습니다.

#Push the sum of:
(

    #The (n-1)th triangular number, and the range [1, n] (The range doesn't count towards the sum I believe)
    ({(({})[()])}{})

    #Triangulate every number on the stack
    {{({}[()])}{}}

)

OEIS는 다음과 같이 진술하기 때문에 이치에 맞습니다 :

n> 0의 경우,이 시퀀스의 항은 a (n) = sum (i * A000124 (i), i = 0..n-1)에 의해 A000124와 관련이 있습니다. [Bruno Berselli, 2013 년 12 월 20 일]

그리고 A000124는 삼각수 + 1입니다. 그러나, 나는 토론장이 무엇인지 정확히 알지 못하므로 이것이 어떻게 작동하는지 완전히 설명 할 수는 없습니다.


3

Perl 6, 19 바이트, X = 1, A000045 → A000035

{(0,1,*+<*...*)[$_]}

+>대신에 +<작동합니다.

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

작동 원리

infix ... 는 간단한 재귀 시퀀스에 매우 유용합니다. (0,1,*+*...*)원래 코드 의 일부로,

(0, 1, -> $x, $y { $x + $y } ... *)

01로 시작하는 시퀀스를 지정한 다음 시퀀스 의 이전 두 항목의 합계를 계산하여 항목을 추가합니다.

반대로, (0,1,*+<*...*)왼쪽 비트 시프트 ( +>, 오른쪽 비트 시프트도 작동 함)를 사용하여 패리티 시퀀스를 구성하십시오. 이후 이동 왼쪽 제로 유닛 것은 (1) 과 시프트 0 왼쪽에 하나의 단위 것은 0 , 우리는 1과 0의 교대 원하는 패턴을 얻는다.


2

펄 6 , 10 바이트, 거리 1-점수 5

의 균열 항목 개의 SML로

*[0]o 1***

된다 :

*[0]o 1*+*

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


잘 했어! 나는이 해결책을 생각하지 않았다. 내가 조금 더 까다로 웠고 실제로 *[0]o 거기에 있어야했다. 나는 ... :) 내 "속임수"를 기반으로 또 다른 도전을 마련 할 수있는 방법을 생각
SMLS

나는 실제로 Perl을 모른다. ***그리고 단지 그것을 보았을 때 , 이차 곱셈 연산을 전개 할 수 있다고 생각했다 *. 약간의 설명으로 자유롭게 편집하십시오!
Jonathan Allan

2
1***1 ** *즉, "1의 거듭 제곱"을 수행하는 람다 로 해석됩니다 . 1*+*1 * (+*)"1을 곱하여 (x를 숫자로 변환)"하는 람다 로 해석됩니다 .
smls


2

WolframAlpha, 거리 1, 그렉 마틴 , A002378 , A000537

(sum1to#of n^1)^2&

작동 원리

흥미롭게도 (n * (n + 1) / 2) ^ 2는 두 번째 시퀀스의 공식이라는 것을 깨달았습니다. sum (1에서 n)은 n * (n + 1) / 2와 동일하므로 *를 ^로 전환해야했습니다.


당신은 그의 대답을
깨뜨렸다

잘 발견되었습니다! :)
Greg Martin



1

JavaScript (ES6), 거리 1, Advancid

기발한:

as=function(){ return 2*2**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

갈라진 금:

as=function(){ return 0*2**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

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

또는

as=function(){ return 2*1**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

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

어떻게 든 TIO와 repl.it 사이에서 다르게 작동하도록 할 수있었습니다 (repl.it에 따라 2 * 1 ^ ...이 0이되는 이유는 전혀 없습니다)


나는 너무 바보입니다, 나는 2를 0으로 바꾸는 것에 대해 생각하지 않았습니다 as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}. B 함수는 다음과 같습니다 .


1

자바, 거리 4, Peech , A094683 , A000290

기발한:

int x{double r=1;for(int i=0;i<42;i++)r=r/2+n/r/2;int k=(int)((int)n*(float)n/Math.pow(n,(Math.sin(n)*Math.sin(n)+Math.cos(n)*Math.cos(n))/2));return n%4%2==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)r:k;}

갈라진 금:

int x{double r=1;for(int i=0;i<42;i++)r=r/2+n/r/2;int k=(int)((int)n*(float)n/Math.pow(n,(Math.sin(n)*Math.sin(n)+Math.cos(n)*Math.cos(n))/2));return n%4%1==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)n*n:k;}
                                                                                                                                                          ^                                                         ^^^

n * n을 반환


1

자바 스크립트, Advancid , 거리 2, A059841A000004

사이트를 손상시키는 것처럼 보이기 때문에 TIO 링크 뒤에 코드 만 남겨 두십시오.

@nderscore 덕분에 코드가 나는 초기 코드를 해독하는 데 사용

!! [] + [] 대신 !! [] + [] + []를 사용하는 것과 같은 중복 코드가있었습니다.

! + []-(! + []) (+ 1-1)을 추가하면 처음에는 암호 해독이 방지되었습니다.

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


1

Pyke, Levenshtein 거리 2, A008788, A007526

'SS^

여기 사용해보십시오!

작동 원리

이것은 혼합 기본 변환을 수행합니다.

'S입력 n을 잡고 스택에서 [1, ..., n] 을 눌러 적용 합니다. 다음 S은 입력 n을 가져와 같은 배열을 한 번 더 푸시합니다. '다음 명령이 스택의 이전 상단에 적용되는 것으로 보입니다. 나는 세부 사항에 약간 모호하다.

마지막으로 ^혼합 염기 변환을 적용하므로 [1, ..., n] [1, ..., n] f
a (n) : = [1] n + n + (n) (n-1)을 계산합니다. + [n!] 1 여기서 괄호는 자리 값과 숫자 오른쪽에 숫자를 나타냅니다.

이제 a (n) = (1 + (1) (n-1) + (n-1) (n-2) (n-3) + ... + (n-1)!) n = n ( a (n) + 1) [A007526]에서 a (n) 을 정의 하는 것과 동일한 재귀 수식입니다 . 빈 합이 0이므로 a (0) = 0 이고 기본 대소 문자도 일치합니다.


몇 번의 시도로 어떻게 얻었습니까? 나는 당신의 사고 과정에 관심이 있습니다
Blue

혼합 기본 변환은 다소 일반적인 골프 트릭입니다. 처음 사용한 것은 아닙니다.
Dennis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.