레티 나 골프에 대한 일반적인 팁은 무엇입니까 ? 레티 나에 특정한 코드 골프 문제에 적용 할 수있는 아이디어를 찾고 있습니다 (예 : "댓글 제거"는 답이 아닙니다). 답변 당 하나의 팁을 게시하십시오.
참고로 온라인 컴파일러는 여기에 있습니다 .
@ Sp3000은 Regex Golf에 대한 팁 도 있다고 지적했다 . 여기에 대한 답변은 일반적인 정규식 골프 팁이 아니라 Retina 기능에 중점을 두어야합니다.
레티 나 골프에 대한 일반적인 팁은 무엇입니까 ? 레티 나에 특정한 코드 골프 문제에 적용 할 수있는 아이디어를 찾고 있습니다 (예 : "댓글 제거"는 답이 아닙니다). 답변 당 하나의 팁을 게시하십시오.
참고로 온라인 컴파일러는 여기에 있습니다 .
@ Sp3000은 Regex Golf에 대한 팁 도 있다고 지적했다 . 여기에 대한 답변은 일반적인 정규식 골프 팁이 아니라 Retina 기능에 중점을 두어야합니다.
답변:
사소한 계산에서는 종종 여러 루프를 사용하여 데이터를 처리합니다.
+`stage1
+`stage2
+`stage3
따라서 이것은 stage1
출력이 수렴 stage2
될 때까지 , 그 다음에 출력이 수렴 할 때까지 그리고 출력이 수렴 할 때까지 실행됩니다 stage3
.
그러나 항상 단계를 자세히 조사 할 가치가 있습니다. 때때로 인터리브 방식으로 루프를 stage1, stage2, stage3, stage1, stage2, stage3, ...
대신 실행하는 것이 가능합니다 (이 단계는 실제로 수행하는 작업에 따라 달라 지지만 때로는 완전히 직교 변경을하거나 파이프 라인으로 잘 작동합니다). 이 경우 단일 루프로 래핑하여 바이트를 절약 할 수 있습니다.
{`stage1
stage2
}`stage3
경우 stage1
첫 번째 단계 또는 stage3
(이 수 이미 두 단계의 루프 바이트 저장 의미)를 사용하면 다음도뿐만 아니라 그 괄호에 생략 할 수있는 프로그램의 마지막 단계입니다.
이 기술의 최근 사용은 이 답변에서 볼 수 있습니다 .
n
대부분의 "일반"언어와 마찬가지로 TMTOWTDI (두 가지 방법이 있습니다). 여기에는 입력에 줄 바꿈이 포함되어 있지 않으며 "분할"은 입력을 줄로 나누는 것을 의미합니다. 그러나 문자열의 길이가 청크 길이의 배수가 아닌 경우 불완전한 후행 청크를 유지 하시겠습니까? 아니면 버리고 싶습니까?
일반적으로 레티 나에서 분리하는 방법에는 세 가지가 있습니다. 여기서는 세 가지 접근 방식을 모두 제시합니다. 관련 접근 방식에 적응하려고 할 때 더 큰 차이를 만들 수 있기 때문입니다. 교체를 사용하고 각 일치 항목에 줄 바꿈을 추가 할 수 있습니다.
.{n}
$&¶
즉, (만약 조금 작거나 8 바이트의 n = 2
또는 n = 3
당신이 사용할 수 있기 때문에 ..
또는 ...
각각). 문자열 길이 가 청크 길이의 배수 인 경우 추가 줄 바꿈을 추가합니다 .
분할 단계를 사용하고 분할에서 캡처가 유지된다는 사실을 활용할 수도 있습니다.
S_`(.{n})
이 _
옵션을 사용하면 전체 문자열을 일치시킬 때 빈 줄이 제거됩니다. 이것은 9 바이트이지만 후행 줄 바꿈을 추가하지 않습니다. 대한 n = 3
그것의 8 바이트를위한 n = 2
그것의 7 바이트. 빈 줄이 중요하지 않은 경우 전체적으로 1 바이트를 절약 할 수 있습니다 (예 : 비어 있지 않은 줄만 처리하고 나중에 줄 바꿈을 제거하기 때문에) :을 제거 할 수 있습니다 _
.
세 번째 옵션은 일치를 사용하는 것입니다. !
옵션을 사용하면 모든 일치 항목을 인쇄 할 수 있습니다. 그러나 후행 청크를 포함하려면 가변 일치 길이를 허용해야합니다.
M!`.{1,n}
이것은 또한 9 바이트이며 후행 줄 바꿈도 포함하지 않습니다. 이 n = 3
작업을 수행 하면 8 바이트가 됩니다 ..?.?
. 그러나 이제는 필요 하기 때문에 6 바이트로 줄어 듭니다 . 또한 프로그램의 마지막 단계 인 경우에는 1 바이트를 절약 할 수 있습니다.n = 2
..?
M
후행 청크를 아무 것도 (존재하는 경우) 교체하고 스플릿으로 교체해야하기 때문에 교체로 시도하면 실제로 시간이 오래 걸립니다. 그래서 우리는 그것들을 안전하게 무시할 수 있습니다. 흥미롭게도, 매치 접근법의 경우 반대입니다. 짧아집니다.
M!`.{n}
즉, 7 바이트, 또는 덜있어 n = 2
, n = 3
. 다시 말하지만, M
이것이 코드의 마지막 단계 인 경우 생략 할 수 있습니다 .
여기서 줄 바꿈을 원하면 |$
정규식 에 추가 하여 얻을 수 있습니다 .
그 기억 M
있다 &
(정규식 정상적으로 할 수 없습니다) 중복 일치를 반환 옵션을 선택합니다. 이를 통해 주어진 길이의 문자열의 모든 겹치는 청크 (하위 문자열)를 얻을 수 있습니다.
M!&`.{n}
123456
하게 123\n456
하고 1234567890
이된다 12345\n67890
?
?=
.