배경
많은 난해한 프로그래밍 언어에는 리터럴에 숫자가 내장되어 있지 않으므로 런타임에 계산해야합니다. 이러한 많은 경우에 숫자 표현은 매우 흥미로울 수 있습니다. 우리는 이미 Underload의 숫자를 나타내는 데 어려움 을 겪었습니다. 이 과제는 모듈 식 SNUSP 에서 숫자를 나타내는 것 입니다. (이 도전을 완료하기 위해 SNUSP를 배울 필요는 없습니다. 필요한 모든 정보는 사양에 있습니다. 그러나 배경은 흥미로울 수 있습니다.)
작업
이 과제의 목적을 위해, 모듈 형 SNUSP 번호는 문자로 밖으로 형성되는 문자열 @, +그리고 =마지막 문자는 것을 제외하고는 #끝에서 두 번째 문자가 있어야합니다, 그리고 +나 =(그것은있을 수 없습니다 @). 예를 들어, 유효 숫자는 포함 @+#, ==#및 @@+@=#; 유효 숫자의 예는 +=, @@#하고 +?+#.
모듈 식 SNUSP 번호의 값은 다음과 같이 재귀 적으로 계산됩니다.
#값이 0입니다 (기본 사례).- 숫자가
=x임의의 문자열 형식 인x경우 해당 값은 값과 같습니다x. - 숫자의 형식
+x이 임의의 문자열x인 경우 값은x에 1을 더한 값과 같습니다 . - 숫자가
@cx단일 문자c및 문자열에 대해 형식을 갖는 경우x해당 값은 값에x+를 더한 값과 같습니다cx.
이 문제를 해결하려면 음수가 아닌 정수를 입력으로 사용하고 입력과 같은 값을 갖는 가능한 가장 짧은 모듈 식 SNUSP 번호 인 문자열을 출력하는 프로그램을 작성해야합니다.
설명
- 동일한 값을 가진 하나 이상의 문자열이있을 수 있으며, 특히 일부 정수의 경우 해당 값을 가진 가장 짧은 모듈 식 SNUSP 번호에 대한 연결이 있습니다. 이 경우 넥타이와 관련된 숫자를 출력 할 수 있습니다.
- 숫자를 찾는 데 사용하는 알고리즘에는 제한이 없습니다. 예를 들어, 무차별 강제 문자열과 평가는 합법적 인 방법이지만 검색 공간을 줄이기 위해보다 영리한 작업을 수행하고 있습니다.
- PPCG에서 평소와 같이 제출물은 전체 프로그램 또는 기능 일 수 있습니다 (언어 중 더 간결한 것을 선택하십시오).
- 이것은 입력 및 출력 형식을 처리하는 데 문제가되지 않으므로 합리적인 방법을 사용하여 음이 아닌 정수를 입력하고 문자열을 출력 할 수 있습니다. 거기에 메타에서 전체 가이드는 하지만, 가장 일반적으로 사용되는 합법적 인 방법은 함수 인수 / 반환 명령 행 인수, 표준 입력 / 표준 출력을 포함한다.
테스트 사례
처음 몇 숫자의 가장 짧은 표현은 다음과 같습니다.
- 0 :
# - 1 :
+# - 2 :
++# - 3 :
+++#또는@++# - 4 :
++++#또는+@++#또는@=++# - 5 :
@+++#또는@@++# - 6 :
+@+++#또는+@@++#또는@=+++#또는@=@++#또는@@=++# - 7 :
@++++#또는@+@++# - 8 :
@@+++#또는@@@++# - 9 :
+@@+++#나+@@@++#나@+++++#나@++@++#나@+@=++#나@@=+++#나@@=@++# - 10 :
@=@+++#나@=@@++#또는@@@=++#( 이 확인하는 매우 중요한 테스트 케이스입니다 가능한 모든 답변을 포함로=) - 11 :
@+@+++#또는@+@@++#또는@@++++#또는@@+@++# - 12 :
+@+@+++#나+@+@@++#나+@@++++#나+@@+@++#나@=+@+++#나@=+@@++#나@=@=+++#나@=@=@++#나@=@@=++#나@@=++++#나@@=+@++#나@@=@=++# - 13 :
@@@+++#또는@@@@++# - 14 :
+@@@+++#나+@@@@++#나@=@++++#나@=@+@++#나@@+++++#나@@++@++#나@@+@=++# - 15 :
@+@++++#나@+@+@++#나@@=@+++#나@@=@@++#나@@@=+++#나@@@=@++#
큰 테스트 케이스로서, 입력에서 출력 (40)이 있어야한다 @@@=@@+++#, @@@=@@@++#, @@@@=@+++#, 또는 @@@@=@@++#.
승리 조건
A와 코드 골프 도전, 승자는 바이트 단위로 측정 짧은 항목이다.
=최적으로 만 발생@=합니까?