최근에 더 많은 > <> 제출물이 떠 다니는 것을 보았으므로 팁 페이지를 갖는 것이 좋습니다.
밀접한 관련이없는 한 게시물 당 하나의 팁을 사용하십시오.
온라인 통역사 (일부 버그가 있지만 대부분의 경우에 적합)
o
개행 \n
은 ASCII 10 이므로 수행 할 수 있습니다 ao
.
CR
대신 노력 LF
하고 있었으며 d
대신 추진 했습니다 a
.
최근에 더 많은 > <> 제출물이 떠 다니는 것을 보았으므로 팁 페이지를 갖는 것이 좋습니다.
밀접한 관련이없는 한 게시물 당 하나의 팁을 사용하십시오.
온라인 통역사 (일부 버그가 있지만 대부분의 경우에 적합)
o
개행 \n
은 ASCII 10 이므로 수행 할 수 있습니다 ao
.
CR
대신 노력 LF
하고 있었으며 d
대신 추진 했습니다 a
.
답변:
팁이 너무 간단 할 수 있으므로 팁을 바꾸거나 삭제하면됩니다.
"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| = 1
2가 가장 작은 모드입니다 (그러나 테스트 프로그램의 경우 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>
앞으로, 우리는 줄 바꿈을 인쇄 한 다음 ?!v
0이 아닌 값을 버리는 히트를 친 다음 트램폴린 때문에 다음을 건너 뛰고 ?
뒤로 이동합니다. 같은 일이 일어나고 우리가 0을 칠 때까지 루프가 계속됩니다.
이것은 이상한 예이지만, (아마도 많지 않은) 응용 프로그램이 있습니다.