변장 트랜스포머 (Cops 'Thread)


10

강도 실은 여기

경찰 업무는 입력이 주어지면 유한 결정 문자열을 출력하는 함수 또는 프로그램을 작성하는 것입니다. 프로그램에 다른 입력이 주어지면 다른 출력을 반환해야합니다.

규칙 :

  • 제출물 구성
    • 언어 이름
      • 플래그가 사용되면 공개해야합니다.
    • 프로그램의 바이트 수
    • 출력 바이트 수
    • 산출
      • 특히 길면 페이스트 빈 또는 이와 유사한 것을 제공하십시오.
      • 인쇄 할 수없는 것이 포함되어 있으면 16 진 덤프를 제공하십시오.
      • 후행 줄 바꿈과 공백은 출력에 포함되어야합니다
    • 입력이 오는 위치 (STDIN, 명령 행 )
  • 해당되는 경우 프로그램에서 해당 바이트를 사용하지 않으면 EOF를 나타내는 바이트가 입력에 존재하지 않는다고 가정 할 수 있습니다.
  • 프로그램에 금이 간 경우 제목의 강도 스레드에 해당 답변에 대한 링크를 추가하십시오.
  • 프로그램은 일주일이 지날 때까지 안전하지 않으며 표시합니다.
  • 입력 또는 암호화 해시 함수를 사용하여 임의 시딩과 같은 기술을 승인하지 않습니다. 나는 그들을 막을 수는 없지만 이들 중 하나를 이용하는 해결책을 받아들이지 않을 것이다 . 또한 이러한 기술 중 일부는 다른 문자열이 동일한 출력을 생성하는 충돌을 일으킬 수 있습니다.
  • 당신의 목표는 가장 짧은 출력을 얻는 것입니다. 이 질문을 게시 한 지 3 주 이내에 게시 된 가장 짧은 안전 솔루션이 승리합니다!

강도의 임무는 원본과 같거나 작은 크기의 프로그램을 찾고 위의 규칙을 준수하는 것입니다.

강도가 의도 한 것과 다른 솔루션으로 프로그램을 해독하는 경우 강도의 솔루션이 올바르지 않다는 것을 증명하여 프로그램을 '크랙 해제'할 수 있습니다. 동일한 출력을 생성하는 강도 프로그램의 입력을 찾아서이를 수행 할 수 있습니다.

제출 예 :

brainfuck, 10 바이트, 점수 : 10

]<.[<],>[,

이 솔루션은 , [>,] <[. <] 이며 간단히 입력을 반전시킵니다.

행운을 빕니다!


"프로그램에 다른 입력이 제공되면 다른 출력을 반환해야합니다." 이것은 프로그램이 다른 입력에 대해 동일한 것을 출력해서는 안된다는 것을 의미합니까? 또는 이것은 입력에 관계없이 프로그램이 지속적으로 무언가를 출력해서는 안된다는 것을 의미합니까? (EXIST 입력이 자체와 같지 않고, FORALL 입력이 자신과 같지 않으면 다른 출력을 반환합니다.)
tsh

@tsh 입력 자체 만 고유 한 출력을 가져야합니다. 예를 들어, 유효한 제출물은 자체 식별 프로그램 일 수 있으며, 1그 자체로 또는 0다른 방법으로 출력 됩니다.
Jo King

@ JoKing 그래서 예제 Python 3 제출이 유효하지 않습니까? 그것은 분명히 1021111143210532105110321051101121171164041581121141051101164011111410040105414410111010061393941다른 문자열을 출력하기 때문 입니다.
Lynn

@lynn 당신이 맞아요. 나는 그 예를 제거했다
Jo King

답변:


4

7 , 31 자, 30 점, 안전하지만 고장 났습니까?

7 프로그램은 일반적으로 숫자이지만 공백을 포함하여 여러 숫자로 나눌 수 있습니다. 따라서이 제출은 두 개의 숫자 (7 인터프리터에 의해 내재적으로 연결됨)로 구성되며 프로그램은 표준 입력을 통해 두 개의 숫자를 입력으로 사용합니다. (머리글의 "31 자"는 두 숫자의 총 길이에 공백 문자 하나를 더한 것입니다. 숫자를 구성하는 숫자는 프로그램으로 사용될 때는 8 진수로 해석되지만 입력으로 사용될 때는 10 진수로 해석됩니다. 실제 숫자가 아닌 두 가지 경우에 동일한 숫자입니다. 프로그램으로 취급하거나 입력으로 취급 할 때 공백이나 줄 바꿈으로 구분하든 관계없이 관련이 없습니다. 제출을 무효화하지 않습니다.)

예상되는 출력은 다음 숫자입니다 (7 개의 인터프리터가 사용하는 출력 형식이므로 여기에 10 진수로 표시됨).

238363505302130098723162537059

Esolang 위키에서 링크 된 7 개의 인터프리터는 내부적으로 숫자를 단항으로 저장합니다. 즉, 실제로 자신이하는 일을보기 위해 프로그램을 실제로 실행할 수있는 충분한 메모리가 없을 것입니다. 프로그램의 동작을 수동으로 해결하고 소량의 입력으로 테스트하여 예상대로 작동하는지 확인함으로써 프로그램을 검증했습니다. 다른 방법은 더 효율적인 숫자 저장 방법을 사용하는 인터프리터를 작성하는 것입니다.

여기서 균열을 피하는 것은 고통스러운 일이지만, 이제는 프로그램 자체의 숫자 이외의 두 숫자가 238363505302130098723162537059를 출력으로 생성 할 수 없다는 사실에 만족했습니다. ( 1 주일 후 편집 : 질문 해석 방식에 따라 틀렸을 수 있습니다. 아래를 참조하십시오. )

해결책

원래 프로그램은 다음과 같습니다.

711170237403706
111723603700633
xy3xyy2y(3x1)2x=711170237403706y=111723603700633238363505302130098723162537059

다음과 같은 이유로 인해 다른 입력이 원하는 결과를 제공하지 않습니다.

y(3x1)2=238363505302130098723162537059y(3x1)=238363505302130098723162537061111723603700633213351071221111721335107122111173x1(3×711170237403706)1=2133510712211117xy

그러나 질문을 해석하는 방법에 따라 원하는 출력을 생성하는 두 번째 입력이있을 수 있습니다 (따라서이 솔루션을 무효화 함).

113x1x79454501767376699574387512354189)는 7 개의 프로그램에 대한 문자 세트에 없습니다. 따라서 입력이 프로그램과 동일한 문자 세트로 제한되는 경우이 솔루션은 유효합니다. 그러나 프로그램 문자 세트 외부의 문자를 포함하는 입력이 허용되는 경우이 솔루션은 유효하지 않습니다.

설명

의도 한 솔루션의 작동 방식은 다음과 같습니다.

711170237403706 111723603700633
7 7 7 스택 요소 분리기
 111 0403 403706 111723603700633 초기 스택 요소
 111 항 3 번, 단항
     "숫자 입력"을위한 023 I / O DSL
         403706 111723603700633 메인 프로그램
(암시 적 : 원본을 유지하면서 기본 프로그램 요소 의 사본 을 실행하십시오. )
         40 {프로그램} 위의 {023} 스왑
           3 {023}을 사용하여 I / O를 수행하십시오. 팝 {프로그램}
     0 I / O : 숫자
      23 {111}을 여러 번 복사하여 숫자를 입력하십시오.
            706 숫자에 "6"을 붙입니다 (감소)
                11 두 개의 빈 스택 요소를 밀어 넣습니다.
                  17236 스택 요소 "23"푸시 (이스케이프되지 않음)
                       0 빈 요소를 소비하는 {23} 탈출
                        3 {23}을 사용하여 I / O를 수행하십시오. 팝 {아래 요소}
                    23 스택 입력 상단을 여러 번 복사
                         7006 "66"추가 (즉, 빼기 2)
                             3 출력 {수}
                              3 프로그램을 종료합니다 (낮은 스택으로 인해)
170666123453123451234512345



3

배나무 , 46 바이트의 ASCII, 점수 0, 금이 간

입력은 표준 입력에서 가져옵니다. 예상 출력 (표준 출력)은 빈 문자열입니다 (예 : 프로그램 자체가 인수로 제공 될 때 출력이 인쇄되지 않아야 함).

다시 말해, 여기서 과제는 표준 입력에서 자체 출력을 제공 할 때 표준 출력에 아무것도 출력하지 않고 표준 입력에서 자체가 아닌 다른 것을 제공 할 때 표준 출력에 무언가를 출력하는 A Pear Tree 프로그램을 작성하는 것입니다. 46 바이트 이상 (비 ASCII 및 인쇄 불가능 문자를 자주 사용하는 A Pear Tree에도 불구하고 프로그램을 인쇄 가능 ASCII로 유지 하면서이 작업을 수행했습니다.) 이것은 실제로 특정 출력 형식으로 자체 식별 프로그램 을 작성하는 작업입니다. (즉, 자기 식별이 성공하면 널 문자열); 그러나 배나무에는이 특정 언어로 수행했을 때보 다보기가 다소 어려워지는 두 가지 이상의 왜곡이 있습니다 (그래서 경찰 제출을 위해 선택했습니다).

내 솔루션

내 솔루션은 균열과 약간 다릅니다.

eval(k=q(print$\=$_="eval(k=q($k))"ne$_;MZpa))

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

사용하는 대신 exit, 내가 대신 설정 $_(암시 적 출력)과 $\일치가 있다면 널 (null) 문자열 (암시 적 출력을 포함하여 출력 후 줄 바꿈을 ()와에 1일치하는 존재하지 않는 경우). (A)은 print여전히 입력 (따라서, 우리는 우리가 프로그램에서 구별되는 입력 빈 문자열을 제공하는 경우 명시 적으로 뭔가를 인쇄해야) 중 적어도 하나 바이트가 있다면 암시 출력에만 사용할 수 있기 때문에 필요합니다.

모든 A Pear Tree 프로그램에는 어딘가에 체크섬이 있어야합니다 ( MZpa이 솔루션에 포함되어 있음). 체크섬을 완전히 ASCII 문자로 구성하기 위해 내 솔루션과 균열 선택 변수 이름 (및 코드의 다른 사소한 세부 사항이 다름).



3

Perl 5 -p0777, 10 바이트, 10 점, 안전

W)9r46<(k

마지막 문자는 "shift out", 문자 코드 14 (10 진수) / 0E (16 진수)입니다. 다른 모든 것은 인쇄 가능한 ASCII입니다.

Perl의 암시 적 I / O 인수를 사용하기 때문에 -p0777입력은 표준 입력에서 나오고 출력은 표준 출력으로갑니다.

해결책

이 프로그램은 다음을 수행합니다.

입력을 10 자 이상으로 입력 한 다음 문자열이있는 XOR svgOUT_TOP

이는 원하는 출력을 생성하는 유일한 입력 인 프로그램 자체는 다음과 같습니다.

$ _ ^ = abc | $ ^

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

설명

Perl에는 많은 특수 목적 변수가 있습니다. 예를 들어, -p0777내재적 I / O $_에 사용하는 경우 프로그램 시작시 입력되고 프로그램 종료시 출력됩니다.

이러한 변수의 대부분은 매우 간단한 기본값을 갖습니다. 그러나 $^현재 선택된 페이지 상단 형식 의 기본값 인 훨씬 긴 문자열 STDOUT_TOP입니다. 따라서 XORing $^을 통해 난독 화하려는 값 (이 경우 프로그램)을 통해 매우 간결한 난독 화 방법으로 사용할 수 있습니다 .

마지막에 정보를 숨기려면 _TOP을 추가하여 프로그램 자체를 10 자로 채 웁니다. abc|즉, 모든 문자 STDOUT_TOP가 무언가로 XOR됩니다. abc|시작시 선택은 출력을 대부분 인쇄 가능하게 유지하는 쉬운 방법이었습니다 (ASCII에서는 소문자 XOR 대문자가 소문자이기 때문에 대부분 대문자로 이루어진 문자열로 XOR하고 있음을 확인하기가 더 어려워졌습니다).


3

파이썬 3, 50 바이트 크랙

stdin / -out의 입출력. 출력은 각각의 입력마다 다릅니다. 소스 코드가 제공 될 때 고유 한 출력 :

218216195196222130136136132192197195196130241204136209197216206130201131244155157154215136138204197216138201138195196138195196218223222130131247131131

(이것은 150 자리입니다)

행운을 빕니다!


으악! 나는 지금이 도전이 오래 걸렸다는 것을 안다 ... 타임 라인 / 피드에 그것이 나타나는 것이 이상하다. 누군가가 이것에 응답하는지 궁금합니다.
agtoever



2

Cubix , 18 바이트, 점수 18, 안전

이 도전이 더 많은 주목을받지 않았다는 것은 부끄러운 일이지만, 그것이 때때로 진행되는 방식입니다. 나는 이것을 안전하지 않은 채로 두려고했지만 해결책을 잊기 전에 솔루션을 게시하기로 결정했습니다.

이것은 깨지기 매우 쉬워야합니다.

입력 에서stdin

산출

$`*2aJPJ#74(o);89

편집 : 나는 이것이 짧은 형식의 소스를 기대한다고 언급해야하며 ... 이제 게시 할 때 부러진 결과에서 누락 된 바이트 (인쇄 불가능)가 있음을 알았습니다. 지금 복사해야합니다. 16 진수 값은24 60 2a 13 32 61 4a 50 4a 23 37 34 28 6f 29 3b 38 39

개념은 첫 번째 문자를 인쇄 한 다음 문자에서 역 인덱스를 제거하는 것입니다 (예 : [chars]-[0, len ([chars]) .. 2]

코드는

$r;#AoW\U-@</u.?;;

다음 큐브에 매핑되는

    $ r
    ; #
A o W \ U - @ <
/ u . ? ; ; . .
    . .
    . .

여기 사용해보십시오


2

젤리 , 14 바이트, 점수 : 21, 안전

프로그램 및 출력 크기는 모두 Jelly 코드 페이지를 사용하여 계산됩니다.

입력

첫 번째 명령 줄 인수.

산출

-§ḋẇ"*YdĖDƘ>Ẉed€Ç+æạɦ

해결책

ØJiⱮÄÆNPḃØ⁵ịØJ

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


젤리 코드 페이지에서 / 젤리로 변환하는 것은 어렵 기 때문에 검증 프로그램 (프로그램을 가져와 UTF8에서 젤리로 변환, 자체 피드, 젤리에서 UTF8로 변환 및 예상과 같은지 확인)을 갖는 것이 유용합니다. 출력)
user202729

@ user202729 이 젤리 프로그램v⁼ , 수득 할 1입력의 입력 젤리 코드로 평가 된 입력은 입력과 동일하고 어느 수득 할 경우 0(입력 잘못된 젤리 코드 인 경우)하지 않을 경우 또는 에러.
Jonathan Allan

1

JavaScript Firefox, <10 바이트, 점수 : 52, 함수 인수 입력에서, 금이

ZnVuY3Rpb24gYnRvYSgpIHsKICAgIFtuYXRpdmUgY29kZV0KfQ==


btoa

btoa(btoa) 다음 문자열을 인코딩합니다.

function btoa() {
    [native code]
}

이것은 다음을 제공합니다.

"ZnVuY3Rpb24gYnRvYSgpIHsKICAgIFtuYXRpdmUgY29kZV0KfQ=="

방금 복사


우선, 명백한 일을 한 후에 이것은 실제 코드가 아닌가? 둘째, 입력 출처를 지정하지 않습니다. 나는 균열을 게시 할 것이지만 솔직히이 제출이 유효한지 확실하지 않습니다.
Quintec


이 게시물에 균열 포스트를 포함시킬 필요는 없다고 생각합니다. 사람들은 링크를 클릭하여 균열을 볼 수 있습니다.
user202729

1

GCC 61-> 61 바이트

70 4F 92 73 08 D4 03 E7 65 DC D6 89 B5 AD BA 90 
97 26 31 10 F6 FA 0A 30 8F 24 69 0A A7 8B 59 9E 
A2 42 D5 67 B8 12 3A 1E 9D 25 80 F9 6B 25 32 C2 
EE 46 3F 8D 7E 0C 73 0F F0 93 C6 68 50

전체 프로그램, 표준 입력에서 표준 출력으로 출력


그래서 마지막에 공백이 50있습니까?
tsh

@ tsh 그것은 16 진수 덤프입니다
l4m2

1

Perl 6, 43 바이트, 점수 : 15, stdin

49671296789805

2
이전 답변이 프로그램의 고유 출력에 대한 규칙을 입력으로 따르지 않았기 때문에 확인하면이 제출이 수행되는지 확인할 수 있습니까?
조 왕

예, 그렇게 생각합니다.
donaldh


1

J , 26 바이트, 점수 : 52, 안전

이 프로그램은 REPL이 아니라를 받아들이고 stdin명시 적으로 인쇄 하는 전체 스크립트입니다 stdout.

입력

표준 입력.

산출

6fc42353c98217ef5a2908a3c63d090aa9a55b2558b61294e06a

아니요, 암호화 방법이 아닙니다.


해결책

echo]hfd]257x#.3&u:stdin''
                   stdin'' Take the whole input
               3&u:        Convert to codepoints
         257x#.     Convert base 257 to integer
     hfd]           "Hex from Decimal"
echo]               Print to stdout

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


1

Keg , 6 바이트, 점수 : 6

입력

에서 stdin사용?

산출

5\x1c"\x1c"9

그것들은 인쇄 할 수없는 바이트에 대한 이스케이프 시퀀스임을 명심하십시오. 이스케이프를 리터럴 문자로 바꾸십시오. 여기서 사용 가능한 원본

이것으로 행운을 빕니다! 다음 주에 만나요!


0

 Perl 6, 31 바이트, 점수 : 39, stdin-Cracked

여기에 금이

().1111111111112222235abcegijkmnorstvy

조잡한 해결책. 살아남을 수 있습니다.


나는 당신의 솔루션을 해독 했다고 확신하고 귀하의 프로그램이 다른 입력이 다른 출력을 생성해야한다는 규칙을 따르지 않는다고 생각합니다.
nwellnhof
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.