셰익스피어 프로그래밍 언어에서의 골프 팁


43

셰익스피어 프로그래밍 언어에서 골프를 할 때 어떤 일반적인 팁이 있습니까? 코드 골프 문제에 적용 할 수 있고 적어도 SPL에 특정한 아이디어를 찾고 있습니다 (예 : "댓글 제거"는 답이 아닙니다).

답변 당 하나의 팁을 게시하십시오.


17
나는 당신 SPL 골프로 칠 있을지 확신하지 못한다 . SPL은 너무 장황 하여이 질문에 코드 트롤링 태그가 필요하다고 생각합니다. : P
Alex A.

당신은 SPL을 골프 할 수 없습니다. 적어도
Rodolfo Dias

@RodolfoDias : 허약? PPCG의 셰익스피어 학자 인 것 같습니다.
Alex A.

8
@AlexA. 어떤 좋은 일이되지 않을 수도 있습니다 : 그것은 단지 내가 :-) 시도하고 SPL을 이해하기 위해 충분히 미친거야 의미
로돌포 디아스

@AlexA. Sp는 그것을 할 수 ...
코너 오브라이언

답변:


18

(음 ...이 언어 는 내가 채택한 언어 1 이기 때문에 여기에 무언가를 추가해야 할 것 같습니다.)

짧은 변수 이름 사용

예, 예, 코드 골프에 대한 표준입니다. 한 글자 길이의 변수 이름 만 사용하십시오. 여기서는 뉴스가 없습니다. 아니면 있습니까? 때문에 SPL은 엉뚱한 충분히 그들의 언어의 변수에 대한 이름을 허용하지 않았다 만든 챕스 : 그들이 있어야 문자 길이의 측면에서, 왕 송곳니의 고통, Shakesperian 연극에서 오는을 - 당신은 SPL에서 코딩하는 경우지만, 이미 알고 있습니다. 따라서 제 조언은 캔터베리 대주교 대신 Ajax , Ford , Page 또는 Puck 과 같은 짧은 이름을 가진 문자를 사용하는 것입니다 .

그게 다야, 난 두려워


1 -Java 기술은 신생아의 기술과 같습니다.



13

(이전 작업을 수행 한 후 몇 가지 사항을 기억했습니다)

코드를 신중하게 선택하십시오

이것이 의미하는 바를 설명하고 설명하는 예입니다.

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 로 챌린지를 시작 하기에 충분한 사람은 없습니다 .


10
설명에서 같은 형용사를 여러 번 사용할 수 있습니까? 예를 들어 a big big big big big big cat4 바이트를 더 절약 할 수 있습니까? 나는 그것이 예술성을 망친다는 것을 안다. 그러나 이것은 결국 코드 골프이다. ;)
DLosc

@DLosc, 내가 본 것에서, 당신이 그렇게하는 것을 금지하는 것은 없습니다. 그래서 ... 당신은 나보다 더 나은 골퍼입니다 ^ _ ^
Rodolfo Dias

1
아헴. 로버트 프레이저를 부르지 말아라. codegolf.stackexchange.com/a/69360/43394
wizzwizz4

12

로마 숫자는 유효한 장면 번호입니다.

즉, 다음 대신에

Scene I
Scene II
Scene III
Scene IV
Scene V

넌 할 수있어:

Scene L
Scene I
Scene C
Scene X
Scene V

이다 D유효한 로마 숫자는? IIRC, 그것은 500입니다 (그러나 SPL에서 유효한지 확실하지 않습니다)
Giuseppe

@Giuseppe 나는 왜 당신이 그것을 확인하지 않는지 이해하지 못하지만 공식 SPL 인터프리터는 M, C, D, X, L, I 및 V를 지원합니다.
NieDzejkob

10

불필요한 단어 제거

이것을보십시오 (가독성을 위해 줄 바꿈과 공백 삽입) :

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'
  • 돌아 가자 -> 보자
  • Y보다 X [op]입니까? -> X [op] Y입니까?
  • X와 Y의 당신은 [영업 이익] -> 당신은 [OP] OFX Y입니다
  • [Exeunt] -> (완전히 제거)

전설:

  • XY같은 상수는 cat, I또는you
  • [op]작업처럼 nicer,the sum of
  • * 문장의 마지막 문장 인 경우 문장 부호를 제거 할 수 있음을 의미합니다.

다른 사람을 만나면 목록에 추가합니다.

추가 참조를 위해 프로그램을 시작하는 가장 짧은 헤더는 다음과 같습니다.

,.Ajax,.Puck,.Act I:.Scene I:.[Enter Ajax and Puck]

온라인으로 사용해보십시오!

필요에 따라 페이지와 포드를 추가 문자로 추가하십시오.


1
더 많은 캐릭터가 필요하다면 여기
NieDzejkob

: | 줄무늬
ASCII 전용

6

짧은 단어를 사용하십시오

그래서 여기 있습니다 :

  • 식과 유사한 식을 제외하고 또는 a대신 사용할 수 있으므로 an또는 대신에를 사용하십시오 .thethe sum ofa
  • 사용 am, be또는 is대신을 are하거나 art.
  • 또는 I대신에 사용하십시오 .memyself
  • 사용 you대신에 thee, thou, thyself또는 yourself.
  • big형용사에 사용 합니다.
  • cat양수에 사용하십시오 .
  • pig음수에 사용하십시오 .
  • zero0으로 사용하십시오 .
  • 사용 worse을위한 A < B(대신 smaller또는 punier).
  • 사용 nicer을위한 A > B(대신 better, bigger, fresher, friendlier또는 jollier).
  • 캐릭터 이름 :
    • 4 글자 : Ajax, Ford, Page, Puck
    • 5 글자 : Egeus, Helen, Julia, Lucio, Mopsa, Paris, Pinch, Priam, Regan, Robin, Romeo, Timon, Titus, Venus, Viola
    • 6 글자 : Adonis, Aegeon, Alonso, Angelo, Arthur, Banquo, Bianca, Brutus, Cicero, Dorcas, Duncan, Emilia, Fenton, Hamlet, Hecate, Hector, Helena, Hermia, Imogen, Juliet, Lennox, Oberon, Olivia, Orsino , Portia, Thaisa, Thurio, Tybalt
    • 7 글자 : Adriana, Aemilia, Agrippa, Antonio, Capulet, Cassius, Claudio, Dionyza, Escalus, Goneril, Horatio, Leonato, Luciana, Macbeth, Macduff, Malcolm, Mariana, Miranda, Octavia, Ophelia, Orlando, Othello, Pantino, Proteus Publius, 얕은, Shylock, 날씬한, Solinus, Theseus, Titania, Troilus, Ulysses
    • 8 글자 : Achilles, Beatrice, Benedick, Benvolio, Claudius, Cordelia, Cressida, Dogberry, Don John, Falstaff, Gertrude, Hermonie, Isabella, Lysander, Mercutio, Montague, Pericles, Polonius, Pompeius, Prospero, Rosalind, Stephano
    • 9 글자 : 아가멤논, 안티오쿠스, 오토 리 쿠스, 발타자르, 브라 반 티오, 카산드라, 클레오 파트라, 고넬료, 데메트리오스, 데스데모나, 도날 바인, 돈 페드로, 페르디난드, 프란체스카, 히 폴리 타, 킹 존, 킹 리어, 리코 리다, 세바스찬, 유령, 발렌타인, 빈센트
    • 10 글자 : Andromache, Cymberline, Fortinbras, Friar John, King Henry
    • 11 글자 : Mark Antony
    • 12 글자 : Caius 박사, Richard Richard, Lady Capulet, Macbeth Lady, Macduff Lady, Prince Henry, Elinor Queen
    • 13 글자 : Gaunt의 John, Julius Caesar, Lady Montague, 여주인 포드, 여주인 페이지
    • 14 글자 : Friar Laurence, The Apothecary
    • 15 글자 : Christopher Sly, Octavius ​​Caesar
    • 17 글자 : Lancaster의 John, 여주인 Overdone, 밀라노 공작
    • 18 글자 : 베니스 공작
    • 24 글자 : 웨스트 민스터의 대 수도원
    • 28 글자 : 캔터베리 대주교
    • 정말로 더 많은 것이 필요하다면, 각 캐릭터의 스택 사용을 반드시 고려해야합니다.

여러 단어로 된 문자는 이름 뒤에 공백을 생략 할 수 있으므로 ( user202729의 팁에서 ) 한 단어 만있는 문자를 사용하는 것이 좋습니다
Jo King

5

말하는 캐릭터가 무대에서 벗어난 경우에도 "씬 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.

5

중복 공간 제거

사소한 것 (끝에 줄 바꿈에 인접한 두 개의 인접한 공백)을 제외하고 (일부 예외는 제외하고) 다음 토큰 이후의 공백을 제거 할 수 있습니다.

  • the sum of
  • let us
  • the ghost(이것 처럼 )
  • if soif not합니다 (제거 ,이 후, 어떤 공간을 추가 할 필요가 없습니다 예 :. if solet usact I)
  • listen to(그래서 이렇게 listen tothy작동 합니다 )
  • 기본적으로 모든 다중 단어 토큰 .

참고 : Perl 인터프리터 에서는 작동하지 않습니다 . Flex의 구문 분석 동작으로 인해 의도하지 않은 효과 일 수 있습니다. "언어 표준은" 그것에 대해 명확하지 않다.


내 답변 중 일부를 되돌리고 편집 할 시간입니다 ... 아주 좋은 발견!
Jo King

토크 나이저의 버그입니까, 아니면 언어에서 동작이 정의되어 있습니까?
Cœur

2
@ Cœur 업데이트를 참조하십시오.
user202729

5

조건부로 사람들을 전환 할 필요는 없습니다.

예를 들어

Ajax:Is you better than the sum of a fat fat fat fat cat and a fat cat?
Puck:If so,let us return to Scene I.

보다 길다

Ajax:Is you better than the sum of a fat fat fat fat cat and a fat cat?If so,let us return to Scene I.

1
WHOOps. 고정.
Oliver Ni

4

빼기 대신 상수 추가

You is the difference between I and a big cat.

보다 길다

You is the sum of I and a big pig.

4

점프는 더 짧을 수 있습니다

return to장면이 앞서 있어도 사용할 수 있으며 그 반대도 마찬가지입니다. 사실, 통역사는 당신이 그것을 완전히 생략하더라도 신경 쓰지 않습니다. 이것은이 세 가지 진술이 100 % 동등하다는 것을 의미합니다.

Let us proceed to Scene X.
Let us return to Scene X.
Let us Scene X.

Jo King ( codegolf.stackexchange.com/a/164394/76162 )은 "Let us Scene X"로 충분하다는 것을 발견했습니다.
Ed Wynn

@EdWynn은 알기에 좋습니다. 나는 이것을 포함시키기 위해 답을 다시 썼다.
NieDzejkob


4

하나의 장면 만 사용

일반적으로 항상 [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!

온라인으로 사용해보십시오!


3

더 짧은 단어를 사용하십시오

예 :

Thy그리고 thyself보다 짧은 your하고 yourself.

Is보다 짧습니다 are.

그리고 더...


3

스마트 조건부 사용

예를 들어, 사용하지 마십시오

Ajax:Are you as good as or better than me?If so,let us return to Scene I.

그러나 오히려

Ajax:Are you worse than me?If not,let us return to Scene I.

3

If (so|not) 즉시 비교를 따를 필요는 없습니다.

Am I as big as you?You big big big big big cat.If so, you is the sum of you and a big big cat.

4
실제로 비교 결과는 플래그로 저장되며 장면 전환이나 여러 단계에서 반복적으로 사용할 수 있습니다 If so. 이것은 반복되는 비교를 피하는 데 도움이 될 수 있습니다!
Jo King

2

상수를 사용하여 많은 수 저장

예를 들어

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.

8
공식 통역사는 그러한 상수 선언을 지원하지 않습니다.
NieDzejkob

2

Gotos와 함께 사용할 수있는 유일한 명령은 아닙니다 If (so|not)

Am I as big as you?If so,you is the sum of you and a big big cat.If not,you is the sum of you and twice I.

2

모든 줄 바꿈이 무시됩니다

,.Ajax,.Puck,.Page,.Act:.Scene:.[Enter Ajax and Puck]Ajax:You Puck.[Exeunt]

2

사용 <또는 >대신==

모든 상황에 적용 할 수는 없지만 약간 더 짧습니다.

퍽 == 아약스

Puck:Is I as bad as you?

퍽 <아약스 또는 퍽> 아약스

Puck:Is I worse you?
Puck:Is I nicer you?

둘 다 4 바이트 더 짧습니다!


2

당신은 종료하지 않아도 .또는 !.

온라인으로 사용해보십시오!

이 전에 사용할 수도 있습니다 [. (감사합니다 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
Jo King

2

'두 번'과 분배 속성 사용

대신에:

You is the sum of a big big big big cat a big big big cat.

사용하다:

You is twice twice twice the sum of a big cat a cat.

공백을 twice사용하여 big8 바이트를 사용 하고 twice6 바이트 이므로 2 바이트를 절약 합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.