다음은 두 가지 제안 솔루션입니다. 많은 바이트가 필요한 질문에 대한 완전한 솔루션 하나 와 484 바이트 만 필요한 N + N 및 N * N 부분 만 해결 하는 두 번째 부분 솔루션입니다. 멋진 트릭 세트! :)
1. 전체 솔루션 (810147050 바이트)
사용 TovTovTov(TOV='hi',SEP=',')
의 TOV
요소는 장소에 중복 문자 면역 (둘 "hihihi"
과 "hhiihhiihhii"
셋이 개 "hi"
그들들, 그리고 모두 TovTovTov
에 대한 관심이 많은 방법이다 TOV
들 사이에 표시 SEP
들).
를 사용 SEP=', '
하면 전체 프로그램이 문자 복제에 영향을받지 않습니다 (멋지지만 문제는 해결되지 않습니다). 그래서 우리는을 사용 SEP=','
합니다.
그래서이 프로그램은 "hihihi,hi"
, 예를 들어,의 int 배열로 컴파일 [3,1]
하는 동안, "hhiihhiihhii,,hhii"
컴파일에 [3,0,1]
와 "hhiihhiihhii,,hhii"
에 [3,0,0,1]
. 이는 명령 자체가 복제 후에 의미를 변경하지 않지만 전체 길이는 문자 복제에 따라 변경됨을 의미합니다. 이 솔루션은 아래의 프로그램의 길이를 조회하고 인쇄 여부를 결정하려면이 옵션을 사용 N+N
, N*N
또는 N^N
.
정수 배열로 제안 된 전체 솔루션은 다음과 같습니다. [6, 12, 9, 18, 9, 142, 11, 38, 8, 9, 260, 11, 73, 8, 22, 75, 7, 10, 14, 3, 1, 22, 24, 18, 15, 8, 10, 16, 3, 1, 22, 24, 18, 15, 8, 10, 45, 16, 7, 22, 3, 1, 22, 24, 18, 15, 8, 22, 3, 1, 22, 24, 18, 15, 8, 25, 3, 1, 22, 24, 18, 15, 8, 48, 3, 1, 22, 24, 18, 15, 8, 277, 3, 1, 22, 24, 18, 15, 8, 3146, 3, 1, 22, 24, 18, 15, 8, 46677, 3, 1, 22, 24, 18, 15, 8, 823564, 3, 1, 22, 24, 18, 15, 8, 16777237, 3, 1, 22, 24, 18, 15, 8, 387420510, 3, 1, 22, 24, 18, 15, 8]
문자열로서 810147050 문자로 구성된 꽤 긴 프로그램입니다.
hihihihihihi,hihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihih...
2. 문제의 N + N 및 N * N 부분 만 해결 (484 바이트)
을 사용 TovTovTov(TOV='1',SEP=', ')
하면 이번에는 SEP
s가 복제에 영향을받지 않으므로 ( ",, "
여전히 하나만 ", "
있음) 다음 제안 된 솔루션에는 문자 복제 후에도 항상 33 개의 명령이 포함됩니다.
1111, 111111111111111111111111111111111111111111111111, 1111111111, 1111111111, 1111111111, 111111, 111111111111, 111111111, 11111111111111, 111, 1, 1111111111111111111111, 111111111111111111111111, 111111111111111111, 111111111111111, 11111111, 111111111111, 1111111111111111, 111111111111111, 1111111111111111111111, 111111111111111111111111111111111111, 11, 1111111111111111111111111111, 111111, 111, 111111, 11111111111, 111111111111111111111111111, 1111, 1, 11111111, 1, 11111111
해당 ints 배열 ( 위의 33 개 명령 각각에서 TOV
s ( 1
s) 수)은 다음과 같습니다.[4,48,10,10,10,6,12,9,14,3,1,22,24,18,15,8,12,16,15,22,36,2,28,6,3,6,11,27,4,1,8,1,8]
문자를 복제하면 33 개의 완전히 다른 명령 목록이 생성됩니다 .
[8,96,20,20,20,12,24,18,28,6,2,44,48,36,30,16,24,32,30,44,72,4,56,12,6,12,22,54,8,2,16,2,16]
원래 ints 배열 ( N + N 을 계산 )은 명령의 의미가 변경된 후에도 프로그램이 의미가 있지만 N * N을 계산 하도록 신중하게 설계되었습니다 . 예를 들어, 첫 번째 (즉 에 문자 복사 후 변경 "문자로 변환하는 아스키 코드로 다음 연산을 처리"로 이해) A는, 완전히 다른 명령 (이하 "에서 첫 번째 튀어 값으로 프로그램 카운터를 변경가 스택 바로 다음에 값이 튀어 나온 경우 ").4
TovTovTov
8