Pyth는 아마도 가장 성공적인 범용 골프 언어 일 것입니다. 2014 년부터 2016 년까지는 새로운 언어의 결과로 다소 감소 했지만 , Pyth의 간결한 구문, 지속적인 업데이트, 과부하 및 (기존에는) 많은 내장이 대부분의 질문에서 선호되었습니다.
Pyth 코드는 종종 읽기가 어렵습니다. 디버그 모드 (번역 된 Python)의 출력조차도 종종 긴 줄로 구성되며 때로는 괄호가 10 개 깊이로 중첩되어 있습니다. 그러나 올바른 형식의 Pyth는 매우 읽기 쉽습니다.
다음은 @isaacg가 Play the Word Chain 에서 작성한 Pyth 코드 입니다.
.MlZfqhMtTeMPT+Lzs.pMyQ
이처럼 훨씬 더 읽기 쉽습니다.
.M Filter by gives-maximal-value of
l Z lambda Z:length(Z) over
f filter by (lambda T:
q equal
hM t T head-map tail T
eM P T end-map Pop T)
+L Append z to each element in
z
s .pM y Q flattened permutations of each subset of Q
이 문제를 해결하기 위해 Pyth 문자 분류의 복잡성 측면을 없애고 형식 지정에 중점을 둡니다. Pyth 코드 대신 입력은의 문자로 구성됩니다 0123456789M
. 디지트는 n
인수에 대응하는 기능을 나타내며 n
, 및 M
연산자를 나타낸다. 예를 들어 위 코드는로 표시됩니다 210221M101M102M011M10
. 최소화하는 단계는 다음과 같습니다.
문자열을 토큰으로 분리하십시오.
토큰이 일치 [0-9]M*
합니다. 0M
입력에서 발생하지 않습니다.
후행 0을 추가하십시오.
인수가 충분하지 않은 경우 Pyth는 Q
프로그램의 인수를 채우는 데 필요한만큼 암시 적 변수 (람다 변수 또는 s)를 코드에 추가합니다. 이들은 0
s 로 표시되어야합니다 .
토큰을 줄로 묶습니다.
토큰의 arity는 숫자의 가치입니다.
arity-0 토큰 (즉, 0)은 라인을 종료합니다.
arity-1 토큰의 경우 다음 토큰은 공백으로 구분 된 동일한 행에 있어야합니다.
arity> = 2 토큰의 경우, 인수는 코드에 표시되는 순서대로 개별 행에 표시되며 각 인수는 자체 하위 인수 등이 뒤 따릅니다. 토큰에 대한 인수는 해당 토큰의 끝과 한 칸의 공백으로 들여 쓰기됩니다.
입력
비어 있지 않은 문자열 (또는 표준 I / O 방법에서 허용하는 문자 배열, 길이 1 문자열 배열 등) 0123456789M
은 하위 문자열을 포함하지 않는 로 구성 됩니다 0M
.
산출
위 규칙에 따라 형식이 지정된 문자열입니다.
테스트 사례
210221M101M102M011M10
2
1 0
2
2
1M 1 0
1M 1 0
2M
0
1 1M 1 0
123M4M
1 2
3M
4M
0
0
0
0
0
0
0
2MM
2MM
0
0
11011100
1 1 0
1 1 1 0
0
9000000
9
0
0
0
0
0
0
0
0
0
210221M101M102M011M10
것[2,1,0,2,2,1,'M',1,0,1,'M',1,0,2,'M',0,1,1,'M',1,0]
M
s가 정수와 다른 데이터 유형이 될 수 있다면 IMO는 약간의 도전을 바꿉니다 .
M
? 사이에 다른 데이터 유형을 사용하지 않는 것이 좋습니다 .