셰익스피어 프로그래밍 언어에서 골프를 할 때 어떤 일반적인 팁이 있습니까? 코드 골프 문제에 적용 할 수 있고 적어도 SPL에 특정한 아이디어를 찾고 있습니다 (예 : "댓글 제거"는 답이 아닙니다).
답변 당 하나의 팁을 게시하십시오.
셰익스피어 프로그래밍 언어에서 골프를 할 때 어떤 일반적인 팁이 있습니까? 코드 골프 문제에 적용 할 수 있고 적어도 SPL에 특정한 아이디어를 찾고 있습니다 (예 : "댓글 제거"는 답이 아닙니다).
답변 당 하나의 팁을 게시하십시오.
답변:
(음 ...이 언어 는 내가 채택한 언어 1 이기 때문에 여기에 무언가를 추가해야 할 것 같습니다.)
예, 예, 코드 골프에 대한 표준입니다. 한 글자 길이의 변수 이름 만 사용하십시오. 여기서는 뉴스가 없습니다. 아니면 있습니까? 때문에 SPL은 엉뚱한 충분히 그들의 언어의 변수에 대한 이름을 허용하지 않았다 만든 챕스 : 그들이 있어야 문자 길이의 측면에서, 왕 송곳니의 고통, Shakesperian 연극에서 오는을 - 당신은 SPL에서 코딩하는 경우지만, 이미 알고 있습니다. 따라서 제 조언은 캔터베리 대주교 대신 Ajax , Ford , Page 또는 Puck 과 같은 짧은 이름을 가진 문자를 사용하는 것입니다 .
그게 다야, 난 두려워
(이전 작업을 수행 한 후 몇 가지 사항을 기억했습니다)
이것이 의미하는 바를 설명하고 설명하는 예입니다.
Ajax:
You are as warm as a big red rich fair cute bold cat!
과
Ajax:
Thou art as blossoming as an embroidered trustworthy bottomless peaceful charming handsome chihuahua!
SPL과의 긴 전투 를 읽었을 때 두 줄이 2 * 2 * 2 * 2 * 2 * 2 *와 동일하다는 것을 알고 있기 때문에 문자 가 값 64를 가정하도록 말하는 것과 동일한 결과를 생성합니다. 1); 그러나 첫 번째 바이트는 59 바이트이고 두 번째 바이트는 107입니다.
그럼에도 불구 하고 SPL 로 코드 골프 챌린지를 시작 하기에 충분한 사람은 없습니다 .
a big big big big big big cat
4 바이트를 더 절약 할 수 있습니까? 나는 그것이 예술성을 망친다는 것을 안다. 그러나 이것은 결국 코드 골프이다. ;)
즉, 다음 대신에
Scene I
Scene II
Scene III
Scene IV
Scene V
넌 할 수있어:
Scene L
Scene I
Scene C
Scene X
Scene V
D
유효한 로마 숫자는? IIRC, 그것은 500입니다 (그러나 SPL에서 유효한지 확실하지 않습니다)
이것을보십시오 (가독성을 위해 줄 바꿈과 공백 삽입) :
Puck:You is a big big cat!
Open your heart!
Ajax:Be you worse than I?
If so, let us return to Scene V!
If not, you is a cat.
You is the sum of I and the sum of a cat and you
Speak thy mind!
[Exeunt]
꽤 골프처럼 보입니까? 이해하기 어려운 형태는 다음과 같습니다.
Puck:You big big cat!
Open heart!
Ajax:Be you worse I?
If so, let us Scene V!
If not, you cat.
You is the sum of I the sum of a cat you
Speak mind!
참고로 다음은 코드에서 쉽게 제거 할 수있는 단어 목록입니다.
big cat
, 그렇지 않으면 여전히 'is'전설:
X
와 Y
같은 상수는 cat
, I
또는you
[op]
작업처럼 nicer
,the sum of
다른 사람을 만나면 목록에 추가합니다.
추가 참조를 위해 프로그램을 시작하는 가장 짧은 헤더는 다음과 같습니다.
,.Ajax,.Puck,.Act I:.Scene I:.[Enter Ajax and Puck]
필요에 따라 페이지와 포드를 추가 문자로 추가하십시오.
그래서 여기 있습니다 :
a
대신 사용할 수 있으므로 an
또는 대신에를 사용하십시오 .the
the sum of
a
am
, be
또는 is
대신을 are
하거나 art
.I
대신에 사용하십시오 .me
myself
you
대신에 thee
, thou
, thyself
또는 yourself
.big
형용사에 사용 합니다.cat
양수에 사용하십시오 .pig
음수에 사용하십시오 .zero
0으로 사용하십시오 .worse
을위한 A < B
(대신 smaller
또는 punier
).nicer
을위한 A > B
(대신 better
, bigger
, fresher
, friendlier
또는 jollier
).말하는 캐릭터가 무대에서 벗어난 경우에도 "씬 X로 돌아 가자"를 사용할 수 있습니다. 따라서 대신 :
Puck:Am I as fat as the sum of a big big big big big big cat and a cat?
Ajax:If not,let us return to scene III.
[Exit Puck]
[Enter Page]
Ajax:You is a big big big big big big cat.
넌 할 수있어:
Puck:Am I as fat as the sum of a big big big big big big cat and a cat?
[Exit Puck]
[Enter Page]
Ajax:If not,let us return to scene III.You is a big big big big big big cat.
사소한 것 (끝에 줄 바꿈에 인접한 두 개의 인접한 공백)을 제외하고 (일부 예외는 제외하고) 다음 토큰 이후의 공백을 제거 할 수 있습니다.
the sum of
let us
the ghost
(이것 처럼 )if so
및 if not
합니다 (제거 ,
이 후, 어떤 공간을 추가 할 필요가 없습니다 예 :. if solet usact I
)listen to
(그래서 이렇게 listen tothy
작동 합니다 )참고 : Perl 인터프리터 에서는 작동하지 않습니다 . Flex의 구문 분석 동작으로 인해 의도하지 않은 효과 일 수 있습니다. "언어 표준은" 그것에 대해 명확하지 않다.
return to
장면이 앞서 있어도 사용할 수 있으며 그 반대도 마찬가지입니다. 사실, 통역사는 당신이 그것을 완전히 생략하더라도 신경 쓰지 않습니다. 이것은이 세 가지 진술이 100 % 동등하다는 것을 의미합니다.
Let us proceed to Scene X.
Let us return to Scene X.
Let us Scene X.
일반적으로 항상 [Enter Ajax and Puck]
첫 번째 항목 이 있기 때문에 첫 번째 장면을 재사용 할 수 없습니다 . 그러나 [Exeunt]
첫 번째 장면을 재사용 할 수 있도록 이 머리말을 붙일 수 있습니다. [Exeunt]
는 새 장면을 선언하는 것보다 1 바이트 짧으며 Act로 점프하는 것이 장면으로 점프하는 것보다 2 바이트 더 적습니다.
예 : 간단한 고양이 프로그램
,.Ajax,.Page,.Act I:.Scene I:.[Enter Page and Ajax]Scene V:.Ajax:Open mind!Speak thy!Let usScene V!
에:
,.Ajax,.Page,.Act I:.Scene I:.[Exeunt][Enter Page and Ajax]Ajax:Open mind!Speak thy!Let usAct I!
예를 들어
Ajax:You is a fat fat fat fat fat fat fat fat fat fat cat!
Puck:You is the sum of thyself and a fat fat fat fat fat fat fat fat fat fat cat
Ajax:You is the sum of the difference of me and thyself and a fat fat fat fat fat fat fat fat fat fat cat!
당신은 상단에 다른 사람을 선언 할 수 있습니다
Ford,a fat fat fat fat fat fat fat fat fat fat cat.
코드를 다음으로 변경하십시오.
Ajax:You is Ford.
Puck:You is the sum of thyself and Ford.
Ajax:You is the sum of the difference of me and thyself and Ford.
.
또는 !
.이 전에 사용할 수도 있습니다 [
. (감사합니다 jimmy23013)
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:You cat[Exeunt]
예 :
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:You cat
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Open mind[Exeunt]
작동하지 않습니다 :
,.Ajax,.Page,.Act I:.Scene I:[Enter Ajax]
(바로 뒤에 Scene {number}:
) (그러나 이것이 작동 하지만 이유를 모르겠습니다),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Listen to your heart
(및 더 짧은 변형),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Let us return to scene I
(및 더 짧은 변형),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Recall
(단지 빈 후 Recall
, Recall x
또는 Recall@
저작물 등),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Speak thy
(없이 mind
)Speak thy
또는 다음 과 같은 단어를 이미 제거한 일부 상황에서는 작동하지 않습니다.Let us Scene I