경찰과 강도의 하드 코딩 (경찰)


28

이것은 도전입니다. 강도의 실이 여기 있습니다 .

고려해야 할 흥미로운 질문은 다음과 같습니다.

일련의 숫자가 있다면 어떤 시퀀스에 대해 이야기하기 전에 몇 개의 숫자를 제공해야합니까?

예를 들어 부터 시작하여 양의 정수에 대해 이야기하고 싶다면 라고 말할 수 있지만 실제로 충분합니까?1 , 2 , 3 , 11,2,3,

이 질문에 대답하는 한 가지 방법이 있으며 코드 골퍼가되기 위해서는 코드 골퍼가 필요합니다. 해당 항을 생성하는 가장 짧은 코드가 시퀀스의 모든 항을 생성하는 경우 시퀀스의 충분한 항을 제공했습니다. 우리가 이것을 코드 골프로 생각한다면, 이는 테스트 케이스를 통과하는 가장 짧은 코드가 원하는 작업을 수행 할 수 있도록 충분한 테스트 사례를 제공했음을 의미합니다.

도전

이 도전은 도전입니다. 경찰이 테스트 사례를 제시 할 것이며 강도는 의도 된 순서 이외의 다른 테스트 사례를 속일 수있는 더 짧은 방법을 찾아야합니다. 경찰은 다음과 같은 것들을 발표 할 것입니다.

  • 음수가 아닌 정수를 입력으로 사용하고 출력으로 정수를 생성하는 코드입니다. 이 코드는 시퀀스를 정의합니다. 코드는 0을 입력으로 지원하지 않아도되며 1을 가장 작은 입력으로 사용합니다. 이것이 귀하의 답변에 해당되는지 분명히해야합니다.

  • 출력에 영향을 줄 수있는 관련 플랫폼 또는 언어 요구 사항 (예 : longint 크기)

  • 코드에 의해 계산 된 시퀀스 의 첫 번째 항 과 함께 숫자 입니다. 이것들은 "테스트 케이스"로 작동합니다.nnn

시퀀스의 기능을 설명하고 OEIS가있는 경우 연결하는 것이 좋습니다. 그러나 설명이 아닌 시퀀스를 정의하는 것은 코드입니다.

강도는 제시된 언어보다 짧은 언어를 사용하고 모든 테스트 사례를 통과하는 프로그램을 찾을 것입니다 ( 경찰 코드 와 같은 첫 번째 입력에 대해 동일한 출력을 생성 함 ). 강도 코드는 또한 보다 큰 숫자에 대해 경찰의 프로그램 출력과 달라야합니다 .nnn

경찰은 답변을 제출하기 전에 자신의 답변을 해독 할 수 있어야합니다.

일주일 후 경찰 균열을 밝히고 답변을 안전하다고 표시 할 수 있습니다 . 그렇게 표시된 답변은 더 이상 금이 갈 수 없습니다.

채점

더 적은 바이트가 더 나은 바이트 수로 경찰의 답변이 채점됩니다. 크랙 된 답변은 무한 점수를 얻습니다.


모든 테스트 사례를 인쇄하는 것과 같이 수학적으로 문제를 해결하는 방법이 있지만,이 문제는 경찰이 제공 한 사례에 따라 달라집니다. 그것에 관한 규칙이 있어야합니까? 시퀀스 또는 램지 이론의 계산에 대한 제한이 있습니까? (즉, 머신에서 크랙이 가능해야합니까?)
theREALyumdub

2
@theReallyumdub 질문은 자신의 제출물을 해독 할 수 있어야한다고 명시합니다.
위저드 마법사

@ CatWizard 고마워, 나는 앞서 갔고 그것은 이미 명백한 메타 포스트에 있으며,이 사람들 중 일부를 분명히 방해합니다. 그것을 확인하기 위해 태그의 정신에없는 그래서 균열은 계산 또는 뭔가 한 시간 이상 걸릴
theREALyumdub


"이론적으로 솔루션은 실제로 모든 숫자에 대해 작동해야하지만 실제로는 작동해야합니다 ..."조건이 있습니까?
user202729 2016 년

답변:


6

cQuents , 4 바이트 ( 크랙 )

"::$

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

8 가지 n=8경우가 있습니다 :

1 1
2 12
3 123
4 1234
5 12345
6 123456
7 1234567
8 12345678

코드 설명 :

"      Stringify sequence (join on "", remove it and see what happens)
 ::    Given input n, output all items in the sequence up to and including n
   $   Each item in the sequence equals the index

순서가되도록 1,2,3,4,5 ..., 그것의 접합 ""은가되도록 12345 ...하고, ::그 입력에 최대 출력을 의미한다.



5

파이썬 (3) , 66 (57) 바이트 ( )

xnor에 의해 금이
또한 편집 전에 고양이 마법사에 의해 금이

def f(n):x=n/10-2;return int(x*60-x**3*10+x**5/2-x**7/84)

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

안녕하세요! 다음은 크랙 시퀀스 입니다. 0 인덱싱을 사용하여 처음 40 개 요소를 제공하지만 OEIS 시퀀스가 ​​아닙니다.n=40

[-54, -56, -58, -59, -59, -59, -59, -57, -55, -53, -50, -46, -43, -38, -33, -28, -23, -17, -11, -5, 0, 5, 11, 17, 23, 28, 33, 38, 43, 46, 50, 53, 55, 57, 59, 59, 59, 59, 58, 56]

나는 공백을 제거하는 것을 잊었다. 나는 아직 프로 골퍼가 아니다.
crashoz

응 해봐. 균열을 제거하겠습니다.
위트 마법사


5

파이썬 2 , 44 바이트 ( 크랙 )

f=lambda n,i=1,p=1:n and-~f(n-p%i,i+1,p*i*i)

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

소수. 어떤 순서가 더 순결 할 수 있습니까? 또는 더 과장 ? 당신의 목표는에 대한 첫 50 개의 소수를 생산하는 n=1n=50입니다.

이 코드는 이 팁 에서 정확히 복사 된 윌슨 정리 생성기 입니다.

대체 시퀀스의 다른 값은 오버플로 및 정밀도와 같은 기계 제한으로 인한 것이 아닙니다. 타사 라이브러리가 없습니다.


Arnauld, @PoonLevi, 씨 Xcoder에 의해.


확실히 당신 이 이것에 의해 금이 간다는 것을 의미하지 않았다 ; "Python (타사 라이브러리 없음)"또는 "Python (가져 오기 없음)"또는 무언가를 지정할 수 있습니까?
Jonathan Allan

@JonathanAllan 감사합니다. 타사 라이브러리가 없도록 편집했습니다.
xnor

pii[1,50]N2pi2(mod pi)더 높은 가치를 위해. 다른 사람들이 언급 된 기술을 사용하여 균열을 시도하고 더 나은 점수를 얻을 수 있도록이 아이디어를 여기에 남겨두고 있습니다.)
Mr. Xcoder

@ Mr.Xcoder 다음 은 제안 된 방법을 기반으로 한 최선의 시도입니다. N = 69에서 성공적으로 분기되어 341 (첫 번째 Fermat 의사 프라임은 기본 2로 또는 첫 번째 Poulet 번호)을 반환 하지만 N = 1에서도 실패합니다. 나는 그것을 스스로 고칠 수 있을지 의심스러워서 내가 가진 것을 더 잘 공유 할 것이라고 생각했다. (내 최선의 수정은 46 바이트입니다 ...)
Arnauld

1
@ Arnauld 이 방법을 사용하여 44 바이트 솔루션 을 찾았습니다 . 더 이상 갈 수없는 것 같습니다. 다른 사람이 이것을 알아낼 수있을 것입니다.
Poon Levi

4

Wolfram Language (Mathematica) , 39 34 바이트 (안전)

Check[{1,9,7}[[#]],18+Boole[#>9]]&

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

간단 해 보입니다. 해결책은 어려워 야합니다.

n=99

{1, 9, 7, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}

이 목록은 다음과 같습니다.

Join[{1, 9, 7}, Table[18, 6], Table[19, 90]]

솔루션을 확인하기위한 템플릿은 다음과 같습니다. 온라인으로 사용해보십시오!

의도 된 균열

여기서 중요한 것은 처음 세 항을 제외하고 숫자가 1 씩 증가하면 출력이 1 씩 증가한다는 것입니다. 의도 된 솔루션은 문자열 변환과 관련이 있습니다.

따라서 Expressions & String 변환에 대한 문서를 읽으면 함수를 찾을 수 있습니다 SpokenString.

해결책은 단순히 x^n다양한 입력 에 대한 표현의 음성 문자열 버전의 길이입니다 .StringLength@SpokenString[x^#]&


3

Haskell , 29 바이트 (크랙 : 1 , 2 )

a n=n*ceiling(realToFrac n/2)

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

a(n)=nn2

0n20map a [0..20]

[0,1,2,6,8,15,18,28,32,45,50,66,72,91,98,120,128,153,162,190,200]

의도 된 솔루션 (20 바이트)

b n=sum$n<$show(3^n)

n=23a(23)=276b(23)=253

b(n)=n len(3n)=nlog10(1+3n)022

출처



@ Laikoni, 의도 된 균열이 짧으면 다른 누군가가 BMO에서 강도를 주장 할 수 있습니다.
fəˈnɛtɪk

@ fəˈnɛtɪk 고마워, 나는이 규칙을 몰랐다.
Laikoni


2
@BMO 당신은 간다 :)
Laikoni

2

자바 스크립트 (ES6), 12 바이트 ( Cracked )

이것은 다소 쉽습니다.

n=>n*(8*n+1)

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

이것은 A139275입니다 .

a(n)=n(8n+1)

0n<9

0,9,34,75,132,205,294,399,520

그리고 도전 규칙에 따라 넘어야합니다.


n=>8*n*n+n에 대해 다릅니다 n=94906273. 유효한 균열입니까?
ngn

@ngn 챌린지 규칙에 따라 나에게 유효 해 보이지만 OP의 정밀도 손실이 유효한 발산으로 간주되는지 여부를 OP에 문의해야합니까? 그러나 의도 한 균열은 다릅니다 n=9.
Arnauld

@CatWizard ^
ngn

나는 그것이 유효한 균열이라고 말하고 싶다.
밀 마법사

2
금이 간 ( |대신 +)
ngn


2

> <> , 276 바이트 ( 크랙 됨 )

1$1-:?!v$:      1[0$          >:?!va2[$:{:@%:{$-{,]v
       >$n; v              <  ^   >~{]02.1+1+ffr+1r<
 :}[r]{  [01>:{*@@+$a*l2=?!^~]+ff+9+1g"3"=?v"3"ff+9+1pf0.
 :}[l01-$>    $:0(?v$@$:@@:@)?v@@1-$}v     >"2"ff+9+1p00.
>.       ^-1l v!?} <  .4a}$@@$<   .4a<
^26{]r0[}:{]~{<

온라인으로 사용해보십시오! 이것을 -v nn 번째 요소 (1 인덱스)를 얻으려면 이것을 호출하십시오.

1$1-:?!;$::n84*o1[0$          >:?!va2[$:{:@%:{$-{,]v
            v              <  ^   >~{]02.1+1+ffr+1r<
 :}[r]{  [01>:{*@@+$a*l2=?!^~]+ff+9+1g"3"=?v"3"ff+9+1pf0.
 :}[l01-$>    $:0(?v$@$:@@:@)?v@@1-$}v     >"2"ff+9+1p00.
>.       ^-1l v!?} <  .4a}$@@$<   .4a<
^26{]r0[}:{]~{<

온라인으로 사용해보십시오! -v n시작하여 1부터 시작하는 n-1 요소 목록을 얻습니다.

온라인 물고기 통역

길고 복잡한 것은 OEIS A004000 입니다.

a (n) = k, k의 숫자를 반대로하여 m을 형성하고 k를 m에 더한 다음 합의 숫자를 오름차순으로 정렬하여 a (n + 1)을 얻습니다.

예 : 668-> 668 + 866 = 1534-> 1345.

n=34

1 2 4 8 16 77 145 668 1345 6677 13444 55778 133345 666677 1333444 5567777 12333445 66666677 133333444 556667777 1233334444 5566667777 12333334444 55666667777 123333334444 556666667777 1233333334444 5566666667777 12333333334444 55666666667777 123333333334444 556666666667777 1233333333334444 5566666666667777

주어진 n질문에 대한 요청에 따라 단일 출력을 생성하기 위해 프로그램을 어떻게 실행 합니까?
Jonathan Allan

실제로 물고기에 "기능"이 없기 때문에, n 번째를 얻기 위해 호출 할 수있는 버전을 추가했습니다 (n-1 이전 요소를 계산해야하기 때문에 본질적으로 동일합니다)
crashoz

더 중요한 것은 단일 출력을 생성하는 동일한 입력 색인에 맞는 균열이 있습니까?
Jonathan Allan

1
1<=n<=34n>34


2

젤리 , 6 바이트 , 안전!

<4+ạ2ȯ

이것은 다음과 같은 경우 인덱스가없는 시퀀스를 정의합니다 .

a(n)={1n<32n=3n2n>3

a(0)a(15)1,1,1,2,2,3,4,5,6,7,8,9,10,11,12,13

온라인으로 사용해보십시오! ( 여기서는 단일 값 버전입니다)

이것은 현재 OEIS에 있지 않습니다 ( A34138 은 짧으면 균열로 작동 하지만 )

의도 된 균열

16n
17th1070045392852801514=a(16)

!ÆsDL


1

자바 스크립트, 26 바이트 ( Cracked )

let f=x=>x>1?f(x-1)*f(x-2)+1:1

for (x of [0,1,2,3,4,5,6,7]) {
  console.log(x + ' -> ' + f(x))
}

OEIS A007660

출력은 0 인덱싱 (1,1,2,3,7,22)을 갖는 처음 6 개 요소입니다.

(OEIS가 제시 한 것에서 다소 변화됨)

간단하게 해결하기 위해 답을 만들기 만하면됩니다.

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



예제 스 니펫의 출력은 0이 아닌 1에서 시작합니까?
Paŭlo Ebermann 2016

@ PaŭloEbermann 고정이
fənɛtɪk






0

> <> , 42 바이트, 크랙

i3%0v
642 .
840
789
159
a 1
v<<
n
l
?
\/
;

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

균열 순서 (0 인덱스) : 101786, 5844, 19902(OEIS가 아님).

참조 용 솔루션 .



일반적으로 강도 는 출력을 하드 코딩해야합니다.
Jo King

@JoKing 귀하의 균열은 내 것과 다른 값을 생성하지 않는 것 같습니다 (또는 어쩌면 어떤 값이 다른지 찾기 위해 충분히 테스트하지 않았을 수도 있음).하지만 아마도 쉽게 수정할 수 있습니다. 하드 코딩을 금지하는 규칙에는 아무 것도없는 것 같지만, 도전의 정신에 맞지 않을 수도 있다는 데 동의합니다. 어쨌든 하드 코딩 (경찰 용)에는 고유 한 위험이 따른다는 것을 증명했습니다.
Aidan F. Pierce

1
나는에 대해 다른 값을 생성하는 내 대답을 업데이 트했습니다4
조 왕

0

펄 6 , 53 바이트

{(1,2,2,{$!=++$;prepend(@,2-$!%2 xx$_).pop}...*)[$_]}

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

0으로 인덱스 된 Kolakoski 시퀀스 ( OEIS A000002 ) 를 반환하는 익명 코드 블록입니다 . 솔루션은 처음 130 개의 요소와 일치해야하므로 일부의 n > 129경우 Kolakoski 시퀀스와 다릅니다.


0

파스칼 (FPC) , 86 바이트 ( 크랙 )

var n:word;begin read(n);write(n div 2+n div 4+n div 8+n div 16+n div 32+n div 64)end.

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

n=120

0   0   1   1   3   3   4   4   7   7   8   8  10  10  11  11  15  15  16  16  18  18  19  19  22  22  23  23  25  25  26  26  31  31  32  32  34  34  35  35  38  38  39  39  41  41  42  42  46  46  47  47  49  49  50  50  53  53  54  54  56  56  57  57  63  63  64  64  66  66  67  67  70  70  71  71  73  73  74  74  78  78  79  79  81  81  82  82  85  85  86  86  88  88  89  89  94  94  95  95  97  97  98  98 101 101 102 102 104 104 105 105 109 109 110 110 112 112 113 113 116


내 원래 솔루션은

var n,i,s:word;begin read(n);i:=2;repeat s:=s+n div i;i:=i*2until i>n;write(s)end.

그러나 r_64 가 더 나아졌습니다 !


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