미스터리 문자열 프린터 (고무)


26

경찰 실은 여기에서 찾을 수 있습니다 : 미스터리 스트링 프린터 (Cops)

당신의 도전

  • 경찰 스레드에서 제출을 선택하고 해당 스레드의 답변에서 문자열을 인쇄하십시오.
  • 선택한 제출물은 안전하지 않아야합니다 (7 일 이상이어야 함).
  • 프로그램, 기능 또는 REPL 스크립트는 경찰 스레드와 동일한 규칙을 따라야합니다. 간단히 요약하면 다음과 같습니다.

    • 프로그램의 길이는 ≤128 자 여야합니다 (경찰의 제출이 프로그램 길이의 범위가 더 작은 경우 프로그램도 해당 길이 범위에 있어야합니다. 예를 들어, 경찰의 프로그램이 ≤32 바이트 인 경우 프로그램은 ≤32 바이트 여야합니다) ).
    • 프로그램은 실행될 때마다 동일한 출력을 생성해야합니다.
    • 암호화 기능이 없습니다.
    • 프로그램은 입력하지 않아야합니다.
    • 표준 허점이 없습니다.
  • 모든 새로운 제출물은 동일한 언어를 사용해야합니다. 이 규칙이 시행되기 전의 제출물은 그렇지 않더라도 괜찮습니다.

채점

채점은 강도와 ​​비슷하게 작동하지만 약간 다릅니다.

  • 8 바이트 이하의 프로그램을 크래킹하면 1 ​​포인트가 제공됩니다.
  • 16 바이트 이하의 프로그램을 크래킹하면 2 포인트가 제공됩니다. ≤32 바이트는 4 포인트 등을 제공합니다.
  • 길이에 상관없이 모든 추가 제출은 +5 포인트를 얻습니다
  • 각 경찰의 출품작은 한 번만 해킹 할 수 있습니다. 각 출품작에 금을 입힌 첫 번째 사람 만 점수를받습니다.

제출물

각 답변에는 다음이 포함되어야합니다

  • 경찰의 제출에 대한 링크.
  • 프로그램 및 프로그래밍 언어
  • 또한 헤더의 마지막 숫자로 경찰의 프로그램 길이 (2의 거듭 제곱)를 갖습니다.

또한 경찰이 제출 한 답변에 대한 링크와 함께 의견을 제시하십시오.

다음은 리더 보드를 생성하는 스택 스 니펫입니다. 스 니펫에 문제가 있으면 의견을 남겨주세요. 공개 경찰 제출 내용을 모두 보려면 경찰의 도전 과제 중 발췌 문장을 참조하십시오.

이 콘테스트는 종료되었습니다.

전체 수상자 : kennytm

대부분의 제출물 : Sp3000

(제출 금액은 점수를 계산할 때 금이 간 프로그램의 길이가 계산되므로 포인트로 정확하게 변환되지 않습니다).


참고 : 모든 추가 제출물은 5 점을받습니다
Daniel M.

답변:


29

피시스, 데니스, ≤ 8

V./Tp*FN

재미있었습니다. 가장 어려운 부분은 Pyth에서 충분히 짧게하는 방법을 알아내는 것이 었습니다.

분석

1234우리가 아마 번호 목록 상대하고 시작 힌트로는 구분없이 인쇄. 이해하기 쉬운 방식으로 숫자를 나누고 봅시다 :

1 2 3 4 4 6 5 8 8 9 6 12 10 12 7 16 16 18 12 15 16 8 24 20 24 14 27 18 20 9 32 32 36 24 30 32 16 36 21 24 25 10

우리가 올바른 길을 가고 있다는 몇 가지 힌트가 있습니다.

  • 모든 숫자는 10보다 작은 소수입니다
  • 많은 숫자가 목록의 색인에 매우 가깝습니다.

그러나 몇 가지 특징이 있습니다. 인덱스 23의 숫자는 24이며 인덱스의 숫자가 인덱스 자체보다 큰 유일한 경우입니다. 그러나 더 큰 단서는 일부 숫자가 이웃보다 명확하게 작다는 것인데, 특히 지수 15의 7, 지수 22의 8, 지수 30의 9입니다.

이것이 7-8-9 패턴을 형성한다는 것을 알면, 마지막 숫자는 인덱스 42에서 10이라는 것을 알 수 있습니다. abelian 그룹에 대한 @Dennis의 최근 질문을 감안할 때 OEIS에 대한 빠른 검사 15, 22, 30, 42파티션 의 하위 시퀀스임을 나타냅니다. 숫자 . Pyth에는 파티션을위한 내장 문자가있어 8 개의 문자 중 2 개를 제공합니다../

그러나 마지막 숫자는 10이며, 10은 Pyth에서 사전 초기화 된 변수이므로 의심됩니다 T. ./T숫자 10의 42 개 파티션에 대한 전체 목록을 제공합니다.

이제 구분 기호없이 인쇄가 완료되었으므로를 사용하면 힌트가 p됩니다. 아마도 우리는 각 파티션을 반복하고 그것에 대해 무언가를 한 다음 p? 이를 통해 다음과 같은 템플릿이 제공됩니다.

V./Tp??N

where V반복문을 반복하는 for 루프는 각 요소를 변수에 저장합니다 N.

마지막 두 번째 파티션을 간략하게 살펴보면 (5, 5)제품을 가져 가고 싶다는 것이 분명해집니다. 곱셈으로 목록을 줄이는 순진한 방법은

u*GHd1

d문제의 목록은 어디에 있습니까 ? 그러나 이것은 너무 길다.

불행히도, 이것은 내가 무차별 대담을 꺼내야했던 곳입니다. 나는 오랫동안 Pyth를 유지하지 않았으므로 많은 새로운 기능을 알지 못했습니다. 남은 문자는 두 개 밖에 없었으며, 그 결과는 완전히 가능해 보였다.

그런 다음 무차별 대변인이 돌아 왔습니다.

V./Tp*FN

*F접는 곳 *(곱하기)입니다. 검색에서 찾지 못한 것도 당연합니다. "fold"보다는 "reduce"라는 키워드를 찾고있었습니다!


3
7 jk*M./T
Jakube

@Jakube 오, 와우, 만약 그 범위가 <= 7있었다면 내가 파멸되었을 것이다. 내가 언어를 체크 아웃 한 이래로 꽤 오래되었습니다.
Sp3000

10

수학, 알 파파, ≤ 32

GroupOrder[MonsterGroupM[]]

나는 이것을 말하기를 싫어하지만, 그 자리에서 그 숫자를 인식했습니다.


3
더 짧은 :31!10!27079205916672
kennytm

2
젠장, 나는 그 숫자가 친숙해 보인다는 것을 알았다 .
Dennis

9

> <>, VTCAKAVSMoACE, ≤ 64

'9?':?!;1-$:'@'+o'3'*'='%$30.

아이러니하게도 범위 제한이 훨씬 낮을뿐만 아니라 휴대가 가능하며 온라인 통역사 와도 호환 됩니다.

분석

대상 문자열부터 시작하겠습니다 :

yh[cPWNkz^EKLBiQMuSvI`n\Yw|JVXDUbZmfoRC_xrq{TlpHjGt]OadFAsgeyh[

> <> 문자를 스택으로 '또는 "문자열 모드로 스택에 푸시 하지만 63 문자는 인쇄하고 64 바이트 만 사용하면 대문자 (표준 루프 어라운드 트릭의 경우> <>의 유효하지 않은 명령)가 존재하여 직접 인쇄합니다. 불가능한. 따라서 코드 포인트로 무언가를해야합니다.

코드 포인트로 변환하면 다음과 같이 나타납니다 (파이썬을 사용하고 있습니다).

>>> L = [ord(c) for c in "yh[cPWNkz^EKLBiQMuSvI`n\Yw|JVXDUbZmfoRC_xrq{TlpHjGt]OadFAsgeyh["]
>>> L
[121, 104, 91, 99, 80, 87, 78, 107, 122, 94, 69, 75, 76, 66, 105, 81, 77, 117, 83, 118, 73, 96, 110, 92, 89, 119, 124, 74, 86, 88, 68, 85, 98, 90, 109, 102, 111, 82, 67, 95, 120, 114, 113, 123, 84, 108, 112, 72, 106, 71, 116, 93, 79, 97, 100, 70, 65, 115, 103, 101, 121, 104, 91]

마지막 세 숫자는 처음 세 숫자와 동일합니다. 이것은 가능한 모듈로 루프가 진행되고 있음을 암시합니다.

얼마나 많은 다른 요소가 있는지 살펴 보겠습니다.

>>> len(set(L))
60

에 63 개의 요소가 L있으며 처음 3 개는 마지막 3 개와 일치합니다. 즉,이 충돌 외에도 다른 모든 요소는 고유합니다. 이제 이것은 모듈로 소수를 거듭 제곱하는 것과 같은 것을 암시합니다. 실제로, 60 + 1 = 61프라임은 좋은 징조입니다.

가장 작은 요소를 찾아 봅시다

>>> min(L)
65

최소 요소가 1이되도록 모든 요소를 ​​축소하는 데 사용하십시오.

>>> M = [x-64 for x in L]
>>> M
[57, 40, 27, 35, 16, 23, 14, 43, 58, 30, 5, 11, 12, 2, 41, 17, 13, 53, 19, 54, 9, 32, 46, 28, 25, 55, 60, 10, 22, 24, 4, 21, 34, 26, 45, 38, 47, 18, 3, 31, 56, 50, 49, 59, 20, 44, 48, 8, 42, 7, 52, 29, 15, 33, 36, 6, 1, 51, 39, 37, 57, 40, 27]

이후 요소 1가 어떻게되는지 확인하십시오 51. 어떤 종류의 거듭 제곱 / 곱셈이 진행되고 있다면 이것은 우리의 승수에게 좋은 추측입니다.

한번 봅시다 :

>>> (57*51)%61
40
>>> (40*51)%61
27
>>> all((x*51)%61 == y for x,y in zip(M, M[1:]))
True

빙고! 이제 다음 코드를 제공하여 역 추적 할 수 있습니다.

x = 57
for _ in range(63):
    print(chr(x + 64), end="")
    x = (x*51)%61

그런 다음> <>로 번역되었습니다.


1
흥미롭게도 이것은 내가 한 일에 여러 가지 유사하지 않습니다-나는 37과 112를 사용했지만 (101을 사용하지만 코드에서 실수했습니다. 읽을 수있는 ASCII 범위로 들어가십시오. +1 잘 했어요.
Addison Crump

아주 좋은, 내가 그렇게 할 수 있기를 바랍니다;)
J Atkin

7

피스, 말 티센, ≤4

C.ZG

무차별 대입 시간이 너무 오래 걸려서 수동으로 더 빠르게했습니다.

분석

C(문자열을 기본 256 int로 변환)은 Pyth에서 많은 수를 생성하는 가장 쉬운 방법이므로 아마도 첫 번째 문자 일 것입니다. 기본 256에서 변환하면 다음을 얻습니다.

xÚKLJNIMKÏÈÌÊÎÉÍË/(,*.)-+¯¨¬ 

흠 ...별로 조명되지 않습니다.

이제 긴 문자열이 입력 될 수있는 것처럼 보이는 G알파벳 문자열 입니다. 내가 찾은 문서를 살펴보면 :"abc...z"C

.Z    Compresses or decompresses a string.

여기서 압축을 다루는 경우 모든 종류의 확장 ASCII 문자를 얻는 것은 놀라운 일이 아닙니다. C.ZG그런 다음 노력 을 기울 였습니다.


6

푸리에, 베타 붕괴, ≤ 32

2~x1~y20(xoy~z*x~yz~xq^~q)

또는 CJam에서 :

X0I{_2$+}*]2\f#

분석

처음에는 2의 많은 힘을 볼 수 있습니다.

2
1
2
2
4
8
32
256
8192
2097152
...

이 숫자의 로그베이스 2를 취하면 다음과 같은 결과를 얻습니다.

1 0 1 1 2 3 5 8 13 21 ...

에서 시작하는 피보나치 시리즈 1, 0입니다.


6

달팽이, 천식, ≤2 바이트

z

이것은 실제로 2 바이트입니다. 문자 z뒤에 개행 문자가 옵니다 \n.

어떻게 작동하는지 또는 수행중인 작업을 알지 못하지만 ~+and와 가능한 모든 입력을 테스트 한 후 출력으로 ~,생성 된 유일한 2 바이트 프로그램 8이었습니다.

그리고이 결과를 얻으려면 오랜 시간이 걸렸습니다 . 그것이 "달팽이"라고 불리는 것도 당연합니다 :-D


자체 참고 사항 : 다음에 알 수없는 소프트웨어를 퍼지 테스트 할 때는 VM 내부에서 수행하십시오.


5

녹, Liam Noronha, ≤128 바이트

fn main(){print!("AACAAEGAAACIIMOAAACAAEGQQQSYYDFAAACAAEGAAACIIMOHHHJHHLNXXXAGGKMAAACAAEGAAACIIMOAAACAAEGQQQSYYDFOOO");}

간단히 문자열 그대로 인쇄하는 것은 120 바이트입니다.


1
와우 내가 늦었 어. 미안 해요 노력없이 텍스트를 상당히 길게 만들 수있었습니다. 실제 소스를 게시하겠습니다.
Liam



5

CoffeeScript, 사용자 2428118, ≤64

alert 0+(btoa k.substr -2 for k of document.body.style).join ''

(경찰에서 설명한 Chrome 46.0.2490.71에서만 작동합니다.)


출력은 모든 "="로 인해 짧은 base64로 인코딩 된 문자열을 연결 한 것입니다. 그것들을 디코딩 한 후 다음과 같은 2 자 문자열 목록을 찾습니다.

['nt', 'ms', 'lf', 'ne', 'll', 'on', 'ay', 'on', …

말이되지 않는 것 같습니다. 그러나 nXand와 같은 이상한 항목이 있습니다 tY. 이것을 걸러 내면

>>> # Python
>>>
>>> [i for i in tt if not re.match('[a-z]{2}$', i)]
['nX', 'nY', 'tX', 'tY', 'wX', 'wY', 'r', 'nX', 'nY', 'tX', 'tY', 'nX', 'nY', 'nX', 'nY', 'nZ', 'x', 'y']

이 X와 Y는 원래 소스 코드가 위치 속성을 사용하는 것을 나타내는 것 같습니다 offsetX/Y. 특히 흥미로운 nZ항목입니다. 내 가정을 확인하기 위해 "Z"로 끝나는 모든 속성을 검색했습니다.

// CoffeeScript
checked = []
f = (o) ->
    if !(o in checked) 
        for k of o
            if /Z$/.test(k)
                console.log(o, k)
            if o[k] instanceof Object
                f o[k]
f window

그것은 톤을 보여줍니다 CSSStyleDeclaration, "webkitTransformOriginZ". 이것으로부터 우리는리스트가 style객체 의 모든 키의 마지막 두 문자로 구성되어 있다는 것을 강력하게 나타냅니다 . 위의 테스트는 실제로 정확합니다.


축하합니다! 원래 소스 코드
user2428118

5

루아 <= 4, Egor Skriptunoff

채팅에서이 답변에 대해 많은 사용자들이 동요하고 있었기 때문에 그들의 불행에서 벗어나야합니다. 나는 Lua를 모르고 그것을 테스트 할 수 없었지만 이것이 작동하지 않으면 매우 놀랐습니다.

4^~9

비트 연산자는 버전 5.3에서만 추가되었으므로 아무도 알 수 없습니다. ideone.com에는 버전 5.2 만 있습니다.


facepalm 정수만 사용하기 때문에 비트 연산자를 간과했습니다.
LegionMammal978

5

파이썬 2, histocrat, ≤16

[[[51002**3/6]]] 

가장 큰 힌트는 파이썬 3에서는 작동하지 않을 것이라는 약속입니다. 파이썬 3에서는 무엇이 바뀌 었 습니까? 가장 큰 용의자는 부서 연산자가float Python 3에서 를 입니다.

따라서 솔루션은 ⌊α 형식이라고 가정합니다. 지수가 거대한 수를 생성하는 유일한 짧은 방법 β / n⌋ = c = 22111101102001 .

{α, β, n}이 실제로 해를 형성하면, (cn) 1 / β ≈ α는 정수에 매우 가까워 야합니다. 따라서 다음을 사용하여 각 n에 대해 {α, β}를 무차별 적용하려고합니다.

(* Mathematica *)
n=2; Sort[Table[{N[Abs[k - Round@k] /. k -> (22111101102001*n)^(1/b), 12], b}, {b, 2, 50}]]

(* Output: {{0.00262542213622, 7}, ...}

   The first number is the "quality" of the solution, lower is better.
   the second number is β.
   Thus α ≈ (nc)^(1/β) = 89
   But (89^7)/2 = 22115667447764, which is still far away from the answer.

*)

실제 결과는 n = 6 일 때 빠르게 나타납니다.


잘 했어! 그것은 의도 된 해결책이며 누군가 누군가가 그것을 해결할 것으로 예상 한 방법에 관한 것입니다 (단, 플랫폼에 따라 어떻게 의존하는지는 미리 알지 못했지만).
histocrat

4

MATLAB, StewieGriffin, ≤ 16

[36;87]*' |'*5

인쇄물:

ans =
        5760       22320
       13920       53940

좋은! 당신이 그것을 좋아해서 기쁘다 :-) 내가 한 방식 : 5*'$W'.'*' |'.
Stewie Griffin 5

예를 들어 .735 대신에 do 를 곱 +5하거나 3x3행렬로 만들면 훨씬 더 어려워지는 것을 고려하고 있었지만 이것이 더 재미 있다고 생각했습니다. 나머지 3 바이트로 많은 작업을 수행 할 수있었습니다.
Stewie Griffin 5

@StewieGriffin 결코 .'전에 오지 않았지만 완전히 이해가됩니다-대괄호에 의지하지 않고 줄을 바꾸는 방법이 궁금합니다.
Tom Carpenter



4

파이썬, spacemanjosh, ≤ 64

n=0;d=1;L=[]
exec("L+=[10/(100-n)**.5];n+=d;d+=2;"*10)
print(L)

영광스러운 역 상징 계산기. 잘 골프는 아니지만, 맞습니다.

편집 : 나는 골프.

print([10/(100-n*n)**.5for n in range(10)])

4

JavaScript ES6, Cᴏɴᴏʀ O'Bʀɪᴇɴ, ≤128 바이트

var x=122,s='0037122342526683102122';for(var i=23;i<=505;i+=2)s+=(x+=i);s;

128 바이트 근처가 필요 없기 때문에 이것이 옳은지 의심 스럽지만 반복 시퀀스를 찾는 것은 재미있는 도전이었습니다.


와우. 나는 완전히 다른 방법을 사용했습니다. 아직도 계산 되나요? : 3
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ 보통 않습니다. 원본에 대해 궁금한 점이 있지만 처음 22 바이트를 생성하는 것은 루프 초기화에서 펑키 한 것 같아요
SLuck49

시간이되면 게시하겠습니다. 내가 생각하는 기능의 *의 자사의 바닥 - S / (5-S)
코너 오브라이언

4

목, ppperry, <= 64

0::=11
1::=22
2::=33
3::=44
4::=55
a::=bbb
b::=000
::=
aaaaaaa

본질적으로 2016을 주요 요소로 분해합니다. 62 자, 그래서 내 생각 엔 이것은 당신이 가고있는 것과 비슷합니다.


0 :: = 2222를 수행하여 일부 바이트를 저장할 수 있습니다.
lirtosiast

공정한 점은 조금 덜 우아해 보입니다.
histocrat


4

> <>, Sp3000, <= 8

'l(?; o>

명령 포인터가 둘러싸고 다음 단계가 발생합니다.

  • 'l(?; o>'ASCII 값을 l(?; o>스택으로 푸시
  • l 스택의 스택 크기를 푸시합니다
  • (상단 두 개의 스택 요소를 비교 : size of stackord('>')
  • ?; 스택 크기가 더 큰 경우 프로그램을 중지합니다
  • o 스택의 맨 위 요소를 문자로 출력하십시오 (이것은 항상 o )
  • > IP 방향을 설정합니다.
  • 우리는 첫 단계로 돌아갑니다

출력 oooooooooooo 입니다.

[space]스택에서 >밀거나 튀는 것으로 변경 하고 , 대신 유효한 다른 문자를 사용하여 다른 출력을 얻을 수 있습니다.


좋은! 참고로, 나는 다음과 같이했다 :'l=?;o*
Sp3000



4

Pyth <= 4, 데니스

ljyG

그것은 알파벳의 모든 부분 집합의 개행에 합류하는 길이입니다.

시운전 :

$ pyth -cd 'ljyG'
==================== 4 chars =====================
ljyG
==================================================
imp_print(Plen(join(subsets(G))))
==================================================
939524095

나는 수 있었다 파악 2^27 * 7 - 1이 기반으로하는 강력한 힌트이다 yG인, 2^26긴 요소. 그런 다음 문자열로 변환해야하고 길이가 인쇄되어야한다고 생각했습니다. 그러나 내가 이것을 생각할 수있는 유일한 방법은``, repr. 그런 다음 j완벽하게 맞는을 생각했습니다 .


4

C, tucuxi, ≤64

main(i){for(i=0;i<11000;++i)if(!(i&2*i))printf("1%d",!(i&1));}

출력은 모두 0과 1이지만 C는 이진을 직접 인쇄 할 수 없으므로 부울 결과 일 가능성이 큽니다.

0보다 1이 더 많으므로 0 ( 3, 9, 13, 19, …) 의 위치를 ​​기록하여 OEIS로 밝혀졌습니다. A075318로 졌습니다. 입니다. 이 순서는 숫자의 위치를 ​​결정하는 간단한 공식이 없지만 유용하지는 않습니다.

그러나 홀수가 모두 있으므로 (x-1)/2 = {1, 4, 6, 9, 12, …}더 유용한 정보가 있을 수 있습니다. 그리고 이것은 A003622입니다 입니다.

A003622는 " A003849 에서 1의 위치"로 정의 될 수 있으며 , 여기서 정확히 크랙해야합니다. 그리고 A003849는 " A003714 mod 2" 로 정의됩니다 . 여기서 A003714는 단순히 모든 정수입니다.x & (2*x) == 0 . 따라서 우리는 해결책을 얻었습니다.

OEIS 약.


정말 인상적입니다-이 사이트의 사용자들에게 놀라지 않을 것입니다
tucuxi

4

Dyalog APL, Dennis, ≤4

*⍨⍟8

ln (8) ^ ln (8)을 계산합니다. StackExchange가 답변 변환을 중단합니까? 나는 주석으로 바뀌지 않도록 여기에 많은 것들을 입력 할 것입니다.


나는 8*⍟⍟8알았지 만 몰랐습니다 . 좋은 일 :)
Sp3000


3

Pyth, xnor, ≤ 4

C`CG

CG( "abc...z"기초 256에서 알파벳 문자열 변환 )은 실제로 큰 숫자를 생성하는 전형적인 Pyth 방식입니다. 그 후 그것은 단지 문자열 화되고베이스에서 다시 변환됩니다.


3

파이썬 3, 메고, ≤128

(이전 버전에서는 테스트되지 않은 Python 3.5.0 사용. 105 98 바이트)

import sys
a=sys.stdout
sys.stdout=None
from this import*
a.write(s.translate(s.maketrans(d))[4:])

아주 좋아요! 나는 94 년에 그것을했다, 내 경찰 게시물 코드를 참조하십시오.
Mego


3

MATLAB / 옥타브, Wauzl, ≤16

"234"'*"567"

Tom Carpenter의 답변 과 동일한 아이디어를 사용하여

(작동하지 않으면 다음을 시도하십시오.)

[50;51;52]*'567'

@NaN 업데이트를 참조하십시오. 둘 다 ≤16 바이트이며 IDE에서 작동합니다.
kennytm

좋은. 내가 한 (1*'234')'*'567'첫 번째 대답은 matlab에 작동하지 않기 때문에, 마음에.
Wauzl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.