Pyramid Scheme 은 @ ConorO'Brien 가 개발 한 언어 입니다. Pyramid Scheme에서 작성하는 코드는 다음과 같습니다.
^ ^
/ \ /3\
/ \ ---
/ + \
^-------^
/9\ /3\
/123\ ---
-----
이제이 코드에는 두 가지 명백한 특성이 있습니다. 구문 분석하기가 어렵고 작성하기가 어렵습니다. Conor는 첫 번째 문제를 해결했지만 두 번째 문제를 해결하는 것이 귀하의 임무입니다.
위 코드는 PyramidScheme 인터프리터에서 다음과 같이 중첩 된 문자열 배열로 처리됩니다.
[["+", ["9123", "3"]], "3"]
작업은 중첩 된 문자열 배열, 출력 또는 재생성 된 PyramidScheme 코드를 반환하는 프로그램 또는 함수를 작성하는 것입니다. 입력 배열이 항상 유효하다고 가정 할 수 있습니다.
피라미드는 이등변 삼각형입니다. 상단은 ^
대각선 거리와 경사 변, /
및 \
, 상기 아래쪽이다 -
. 두 개의 하단 모서리는 비어 있거나 다른 피라미드의 시작을 포함합니다. 가운데 부분은 줄 바꿈을 무시하고 피라미드 이름으로 채워져 있습니다.
파서가 코드를 사용 가능한 형식으로 변환하는 방법은 다음과 같습니다. 먼저 최상위 피라미드를 스캔합니다. 인수가 없으면 단일 문자열로 표시하고 계속 진행합니다. 그렇지 않으면,는 배열 ["name",[arg1,arg2]]
또는 로 나타냅니다 ["name",[arg1]]
. 인수는 피라미드의 왼쪽 하단 및 오른쪽 하단에있는 피라미드이며, 위에서 설명한 것처럼 문자열이거나 더 많은 배열 일 수 있습니다. 이것은 Lisp와 다소 유사하다는 것을 알 수 있습니다.이 경우 언어 이름 인 끔찍한 말장난을 발견했을 수도 있습니다. 피라미드가 완전히 표현되면 파서는 다음으로 넘어갑니다.
이것은 code-golf , 최단 코드 승리입니다!
테스트 사례 : 이들은 유일한 유효한 출력이 아니며 유효한 출력의 예입니다.
[["+", ["9123", "3"]], "3"]
^ ^
/ \ /3\
/ \ ---
/ + \
^-------^
/9\ /3\
/123\ ---
-----
[["out", [["chr", ["72"]], ["chr", ["101"]]]], ["out", [["chr", ["108"]]]], ["out", [["chr", ["108"]]]], ["out", [["chr", ["111"]]]]]
^ ^ ^ ^
/ \ / \ / \ / \
/out\ /out\ /out\ /out\
^-----^ -----^----- -----^
/ \ / \ / \ / \
/chr\ /chr\ /chr\ /chr\
^----- -----^ -----^ ^-----
/ \ / \ / \ / \
/72 \ /101\ /108\ /111\
----- ----- ----- -----
[ ["+", [ ["asdfghjkl"], ["do", [ "1" ]] ]] ]
^
/ \
/ + \
/ \
^-------^
/a\ /d\
/sdf\ /o \
/ghjkl\ ^-----
-------/1\
---
두 번째 테스트 사례에서 두 번째 및 세 번째 out
피라미드는 모두 ["chr", ["108"]]
매개 변수로 두 개의 최상위 스택이 공유하는 하나의 피라미드 스택으로 축소됩니다. 이것은 코드가 지원할 수있는 유효한 최적화이지만 완전히 선택적입니다. 점수는 출력 길이를 기준으로하지 않습니다.
궁금한 점 9126 3
은 최상위 피라미드의 암시 적 인쇄로 인해 첫 번째 경우가 표시되고 두 번째 경우가 인쇄 Hello
되며 마지막 것은 깔끔한 구조를 가지고 있기 때문에 구문 오류입니다.
당신은 입력이 인쇄 가능한 ASCII 제외한 공백이 포함되어 있다고 가정 할 수있다 ^
, /
, \
,와 -
. 입력은 항상 유효하며 하나 이상의 피라미드를 포함합니다. 배열 또는 입력 문자열의 크기에는 제한이 없지만 언어의 기본 정수 유형이 무한정 정밀도이고 컴퓨터에 임의의 메모리가있는 것처럼 코드를 작성할 수 있습니다. 입력을 단일 문자열 로 사용하는 경우 배열을 구분하기 위해 인쇄 가능한 ASCII 형식으로되어 "
있거나 아닌 한 합리적 (쉼표, 공백 등 []
)을 사용할 수 있습니다. 전체를 둘러싼 대괄호를 포함 할 필요는 없으며 대신 구분 기호로 구분 된 여러 배열을 가져옵니다.
출력물을 골퍼 할 필요가 없습니다. 여분의 공간을 추가하거나 피라미드를 필요 이상으로 크게 만들 수 있습니다. 최상위 피라미드 는 첫 번째 줄에 있어야 합니다. 출력은 줄 바꿈이있는 문자열이거나 문자열 목록이어야합니다.
누구 않는 최적의 피라미드를 골프를 친다 자신의 코드의 버전을 포함는 upvotes / 상금 (그러나 아마 upvotes)의 형태로 일부 담당자를받을 수 있습니다.