새로운 유형의 정규식 골프 챌린지를 시도하고 싶습니다. 정규식 대체 작업으로 사소한 계산 작업을 해결하도록 요청합니다. 이 작업을 더 쉽고 덜 수월하게하기 위해 여러 번의 대체 작업을 차례대로 적용 할 수 있습니다.
도전
우리는 간단하게 시작할 것입니다 : 두 개의 양의 정수를 포함하는 문자열이 10으로 구분 된 10 진수로 주어진 경우 ,
그 합을 포함하는 문자열을 10 진수로 생성합니다. 아주 간단하게
47,987
로 바뀌어야한다
1034
당신의 대답은 임의의 양의 정수에 효과적입니다.
체재
모든 대답은 일련 의 대체 단계 여야하며 각 단계는 정규식과 대체 문자열로 구성됩니다. 선택적으로 시퀀스의 각 단계에 대해 문자열 변경이 중지 될 때까지 대체를 반복하도록 선택할 수 있습니다. 다음은 제출 예제입니다 ( 위의 문제를 해결 하지 못함 ).
Regex Modifiers Replacement Repeat?
\b(\d) g |$1 No
|\d <none> 1| Yes
\D g <empty> No
input 123,456
이 주어지면 이 제출은 다음과 같이 입력을 처리합니다.
|123,|456
이제 두 번째 대체는 문자열 변경이 중지 될 때까지 루프에 적용됩니다.
1|23,|456
11|3,|456
111|,|456
111|,1|56
111|,11|6
111|,111|
마지막으로 세 번째 대체는 한 번 적용됩니다.
111111
루프의 종료 기준은 정규식이 일치하는지 여부가 아니라 문자열이 변경되는지 여부입니다. 즉, 일치하는 항목을 찾았지만 대체 항목은 일치하는 경우 종료 될 수도 있습니다.
채점
기본 점수는 제출시 대체 단계 수입니다. 반복되는 모든 교체는 10 단계로 계산됩니다 . 따라서 위의 예는 점수를 매 깁니다 1 + 10 + 1 = 12
.
동점 인 경우 (2 차 점수는 아님) 보조 점수는 모든 단계의 크기의 합입니다. 각 단계 (정규식 부가 없이 분리), 수식 및 치환 문자열. 위의 예에서 이것은입니다 (6 + 1 + 3) + (3 + 0 + 2) + (2 + 1 + 0) = 18
.
기타 규칙
모든 정규식 풍미를 사용할 수 있지만 (표시해야 함) 모든 단계는 동일한 풍미를 사용해야합니다. 또한 교체 콜백 또는 Perl 코드를 평가하는 Perl의 수정 자 와 같은 풍미의 호스트 언어 기능을 사용 해서는 안됩니다e
. 모든 조작은 정규식 대체를 통해 독점적으로 발생해야합니다.
각 단일 교체가 모든 발생을 대체하는지 또는 단일 교체 만 대체하는지에 따라 사용자의 선호도와 수정 자에 따라 달라집니다. 예를 들어 ECMAScript 풍미를 선택하면 g
수정자를 사용하지 않는 한 기본적으로 한 단계 만 한 번만 발생합니다 . 반면에 .NET 맛을 사용하는 경우 각 단계는 항상 모든 발생을 대체합니다.
단일 및 전역 대체에 대한 대체 방법이 다른 언어 (예 : Ruby 's sub
vs. gsub
)의 경우 단일 대체가 기본값이며 전역 대체를 g
수정 자 처럼 취급 합니다.
테스팅
선택한 맛이 .NET 또는 ECMAScript 인 경우 Retina 를 사용하여 제출물을 테스트 할 수 있습니다 (알고 있습니다 . 모노에서도 작동합니다). 다른 맛의 경우 대체를 순서대로 적용하는 호스트 언어로 작은 프로그램을 작성해야 할 것입니다. 그렇다면이 테스트 프로그램을 답에 포함 시키십시오.