> <>에서의 골프 팁 (물고기) <> 제출물이 떠 다니는 것을 보았으므로 팁

최근에 더 많은 > <> 제출물이 떠 다니는 것을 보았으므로 팁 페이지를 갖는 것이 좋습니다.

밀접한 관련이없는 한 게시물 당 하나의 팁을 사용하십시오.

공식 파이썬 인터프리터

온라인 통역사 (일부 버그가 있지만 대부분의 경우에 적합)



답변

0 검사

?!대신에 사용0=? 일반적으로 바이트가 절약됩니다.

그러나 ?약간의 구조 조정이 가능할 경우 표준 이 더 나을 수 있습니다.

?!vA
  B

?vB
 A


답변

EOF 확인

EOF에 도달하면> <>는 스택에 -1을 푸시하며 다음 두 가지 방법 중 하나로 확인할 수 있습니다.

:0(?
:1+?

EOF를 확인하기 위해이 두 가지는 부정이므로 프로그램 구조에 따라 더 유익합니다.


답변

줄 바꾸기를 우회하여 점프

새 줄을 시작하면 다음 줄에 많은 선행 공백이 낭비되는 경우가 있습니다. 이러한 상황에서는 점프가 유용 할 수 있습니다.

예를 들어

[lots of code here]>[loop body]v
                   ^ ......... <

다음과 같이 한 줄에 맞도록 만들 수 있습니다.

[lots of code here][loop body][jump]

실제 예를 들어, Hello World 프로그램은 다음과 같습니다.

"!dlroW ,olleH"l?!;oe0.


답변

계수를 사용하여 입력 단순화

팁이 너무 간단 할 수 있으므로 팁을 바꾸거나 삭제하면됩니다.

“a”와 “b”의 두 문자를 각각 입력하고 각각 1과 2를 반환한다고 가정 해 봅시다. 가장 적합한 것이기 때문에 조건부로 사용하는 것이 좋을 것입니다.이 특정 예에서는 좀 더 요약 된 형식을 사용하겠습니다.

i:"a")+1+n

이것은 입력이 “a”보다 큰지 확인하고 1을 더합니다. “a”는 0과 “b”1을 반환하기 때문에 1과 2를 줄 것입니다. 입력, 우리는 더 나아갈 수 있습니다.

i:3%n

“a”숫자로 동등한 mod 3에서 97은 1이되고 “b”인 98은 2가됩니다. 두 개의 서로 다른 숫자의 경우 두 가지 모두에 대해 고유 한 결과를 제공하는 mod가 보장됩니다. 둘 이상의 경우 독특한 결과를 제공하는 mod가 있지만 간단한 방법으로 가장 작은 것을 찾을 수있는 수학적 능력이 없습니다 (예 : {100,101,102,103} 세트를 가진 경우 mod 104는 그 안에 각 가치가 있지만 매우 유용한 방식은 아닙니다). 그러나 대부분의 경우 입력이 두 개의 알파벳 문자로 제한되면 작동하는 모드를 찾을 수 있습니다.

두 개의 숫자 a와 b에 대해 고유 한 결과를 산출하는 가장 작은 계수를 찾으려면 다음과 같이하십시오. a와 b ( |a - b|) 의 차이의 절대 값을 취하여 나누지 않는 가장 작은 숫자 n을 찾으십시오. 예를 들어 97 및 98의 경우 |98 - 97| = 12가 가장 작은 모드입니다 (그러나 테스트 프로그램의 경우 97의 경우 1, 98의 경우 98이되므로 모드 3이 더 좋습니다).


답변

조건부로 점프 사용

어떤 경우에는 다른 입력을받을 때 다른 작업을 수행해야하는 프로그램을> <>에 작성하는 경우가 있습니다. 일반적으로 조건부 ( ?) 및 방향 전환기를 사용하여이를 구문 분석합니다. 어떤 경우에는 (특히 처리 할 입력 유형이 적을 때) 잘 작동하지만 때로는 다음과 같은 결과가 나타납니다. (이 코드는 다른 트릭을 사용하여 줄일 수 있다는 사실을 무시하십시오. 이는 단지 설명을위한 것입니다)

i:"a"=?v:"b"=?v"c"=?v>
  .00n1< .00n2<.00n3<

이것은 괜찮지 만 공백은 있지만 개인적으로는 결코 보지 못합니다. 많은 반복이 있습니다 ( =?v.00n). 대신 점프와 다른 줄을 조건부로 사용할 수 있습니다. 예를 들면 다음과 같습니다.

i:"a")$"b")+1+0$.>
v1
v2
v3
<.00n

이것은 10 바이트를 줄입니다. 무슨 일이 일어나고 있는지 :

i: 입력을 한 번 복제하여 두 번 평가할 수 있습니다

"a")$"b")+이것은 일종의 팁 일 수 있지만 여기서 내가하고있는 일은 입력이 문자 “a”보다 큰지 확인한 다음 문자 “b”보다 큰지 확인하고 결과를 추가하는 것입니다. “a”는 0, “b”, 1, “c”는 2가됩니다.

1+0$.이곳은 마법이 일어나는 곳입니다. 이전 단순화의 결과를 취하고 1 ( “a”에 1, “b”에 2, “c”에 3)을 더한 다음 0을 누르고 값을 바꿉니다. 점프에 도달하면 해당 문자에 지정된 값 (예 : “a”의 행 1)에 해당하는 행으로 이동합니다. NB 라인 0이 프로그램의 상단입니다.


답변

두 가지 방법으로 실행할 수있는 코드 작성

트램폴린 (! )은 코드를 앞뒤로 (또는 위아래로) 실행하려는 경우 매우 편리합니다. 이러한 시나리오는 다소 가능성이 적지 만 회문 또는 이와 유사한 과제에 대해서는이 팁이 유용 할 수 있습니다.

예를 들면 다음과 같습니다. 코드를 한 번 실행 한 다음 0에 도달 할 때까지 스택 삭제 값을 반복 한 다음 내려갑니다. 포인터는> . 이것을 달성하기 위해 점프를 사용할 수 있습니다.

?!v80.>ao (개행을 먼저 인쇄하고 싶다고 가정 해 봅시다)

그러나 우리가 한 번만 실행하려는 코드 (을 지나는 코드 >)가 16자를 초과하면 줄을 더 이상 3 자로 사용할 수 없습니다. 그러나 이것은 앞뒤로 실행하는 것이 사소한 예입니다 …

?!v!?<>ao>

앞으로, 우리는 줄 바꿈을 인쇄 한 다음 ?!v0이 아닌 값을 버리는 히트를 친 다음 트램폴린 때문에 다음을 건너 뛰고 ?뒤로 이동합니다. 같은 일이 일어나고 우리가 0을 칠 때까지 루프가 계속됩니다.

이것은 이상한 예이지만, (아마도 많지 않은) 응용 프로그램이 있습니다.


답변