Cheapo Enigma 기계 (Cops) 모든 입력은 고유 한

도둑의 게시물, Cheapo Enigma 기계 (고무)

경찰의 제출은 단일 바이트 데이터를 받아들이고 단일 바이트 데이터를 반환하는 프로그램 / 함수로 구성됩니다. 가능한 모든 입력은 고유 한 출력을 생성해야합니다. (즉, 함수는 형용사 적이어야합니다)

강도는 가능한 짧은 코드를 사용하여 역함수를 만들려고 시도합니다. 따라서 목표는 함수를 반전시키기 어렵게 만드는 것입니다.

해싱 또는 암호화만을 목적으로하는 내장 기능을 사용할 수 없습니다.

바이트 수는 64 바이트를 초과 할 수 없습니다. 0 바이트 솔루션은 이길 수 없습니다.

입출력 형식

8 비트 (0 또는 1) 또는 1-256, 0-255 또는 -128 ~ 127 범위의 10 진 정수입니다. 표준 I / O 또는 파일 I / O를 사용할 수 있습니다. 함수는 값을 출력으로 반환 할 수도 있습니다. 입력 및 출력은 동일한 범위 (2 진, 1-256, 0-255 또는 -128-127)에 속해야합니다. 강도는 또한이 범위를 입력 및 출력에 사용해야합니다.

채점

당신에 대한 최고의 강도 시도에 대한 바이트 수의 비율. 최저 점수가 이깁니다.

강도가 당신을 물리 치려고 시도한 경우에만 (경찰로서) 이길 자격이 있습니다. (이 강도는 당신이 될 수 있습니다)

C ++, 0-255 범위, 31 바이트 사용

int x;
cin>>x;
cout<<(x+1)%256;

C ++, 32 바이트의 가능한 강도 제출

int f(int x)
{return x?x-1:255;}

동일한 언어 또는 유사한 알고리즘을 사용하는 것은 필수가 아닙니다

이것은 경찰과 강도 모두에게 31/32 = 0.97의 점수를줍니다.



답변

자바 스크립트, 11 8 바이트, 점수 : 5분의 8

x=>x^x/2

그레이 코드의 간단한 구현. 일반적으로 디코딩에는 전체 루프가 필요합니다. 누가 가장 작거나 루프없이 나올지 봅시다!


답변

C, 64 바이트, 점수 64/71 = 0.901

T[256];f(x){srand(x&&f(x-1));for(;T[x=rand()%256]++;);return x;}

[0 255] 범위에서 입력을받습니다.

온라인으로 사용해보십시오! — TIO (GCC 사용)에서 다음을 생성합니다.

103,198,105,115,081,255,074,236,041,205,186,171,242,251,227,070,
124,194,084,248,027,232,231,141,118,090,046,099,051,159,201,154,
102,050,013,183,049,088,163,037,093,005,023,233,094,212,178,155,
180,017,014,130,116,065,033,061,220,135,112,062,161,225,252,001,
126,151,234,107,150,143,056,092,042,176,059,175,060,024,219,002,
026,254,067,250,170,058,209,230,148,117,216,190,097,137,249,187,
168,153,015,149,177,235,241,179,239,247,000,229,202,011,203,208,
072,071,100,189,031,035,030,028,123,197,020,075,121,036,158,009,
172,016,080,021,111,034,025,125,245,127,164,019,181,078,152,224,
077,052,188,095,119,108,134,043,085,162,004,211,054,226,240,228,
079,073,253,169,008,138,010,213,068,091,243,142,076,215,045,066,
006,196,132,173,222,048,246,032,133,007,244,185,195,217,160,120,
218,106,083,144,087,238,207,096,210,053,101,063,098,128,165,089,
140,012,192,131,047,039,022,147,184,109,182,193,199,237,018,069,
057,157,174,104,122,166,055,110,003,040,139,086,145,114,129,113,
206,167,191,214,146,221,136,038,156,082,200,029,044,204,223,064

C는 특정 rand구현을 요구하지 않기 때문에 다른 시스템에서는 다른 (아직 유효한) 출력을 생성 할 수 있습니다 . 제출물은 구체적으로 TIO에서 실행되는 버전입니다 (링크 된대로).


나는 f(x){return rand(srand(x*229))/229%256;}그것이 훨씬 더 우아하다고 생각하기 때문에 TIO에서 작동하는 내 원본 ( ) 과 같은 버전을 얻을 수 없다는 것에 상당히 실망했습니다 . OS X에서 실행되는 Clang에서만 작동하기 때문에 경쟁에는 불공평합니다. 이것은 여전히 ​​반전하기가 어색하기 때문에 충분합니다.


답변

젤리 , 2/5

^H

전체 테이블을 보려면 온라인 으로 시도 하십시오.


답변

자바 스크립트, 44 바이트 22/3

x=>a.sort()[x]
for(a=[],i=0;i<256;)a[i]=i++;

사전 식 정렬 (자바 스크립트 기본값)을 사용하여 0에서 255까지의 모든 숫자를 재정렬

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


답변

C (gcc) , 32 27/30 바이트

5 바이트 골프를위한 christoph 에게 감사 합니다.

f(x){x=x?f(x*5+1&255)+1:0;}

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


답변

자바 스크립트, 11/8 바이트

x=>x**5%257

도메인 / 범위는 1-256입니다.


답변

자바 스크립트, 13 바이트 13/12

x=>(x<<9)%257

입력과 출력은 모두 1-> 256 범위에 있습니다.

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