로 바르스 프라우 켓
Rövarspråket 은 Astrid Lindgren의 Kalle Blomkvist에 관한 책에서 스웨덴 어린이들이 한 단어 게임입니다.
기본 규칙은 다음과 같습니다 (Wikipedia).
- 모든 자음 (발음이 아닌 철자 문제)이 두 배가되고 그 사이에 o가 삽입됩니다.
- 모음은 그대로 남아 있습니다.
몇 가지 예 :
- “hello”-> “hohelollolo”
- “Min svävare är full med ål”-> “MoMinon sosvovävovarore 및 fofulollol momedod ålol”
스웨덴어 자음은 영어와 동일하므로 스웨덴어 및 영어 항목 모두에서 작동합니다.
이 경우 문자 “y”는 대부분의 경우 자음으로 간주됩니다.
당신의 작업 :
함수 또는 stdin을 통해 입력 된 스웨덴어 문자열을 Rövarspråket로 변환하는 프로그램을 작성하십시오. 바이트 단위의 최단 답변이 승리합니다!
답변
망막 , 14 + 5 = 19 바이트
Retina는 기본적으로 가능한 한 적은 오버 헤드로 .NET 정규식 언어입니다. 이 프로그램의 코드는 두 개의 파일로 구성됩니다.
i`[b-z-[eiou]]
$0o$0
STDIN의 입력을 읽고 출력을 STDOUT에 인쇄합니다.
당신이 파일을 호출하는 경우 pattern.rgx
와 replacement.rpl
, 프로그램 단지 등을 실행할 수 있습니다
echo "hello" | ./Retina pattern.rgx replacement.rpl
설명
이것은 매우 간단하지만 어쨌든 (주로 Retina의 작동 방식에 대한) 설명을 추가하겠습니다. Retina가 2 개의 파일로 호출 된 경우 첫 번째 파일은 정규식이고 두 번째 파일은 패턴 인 “대체 모드”에서 자동으로 작동하는 것으로 간주됩니다.
RegexOptions
정규식과 `
구성 문자열 을 앞에 추가하여 Retina를 구성 할 수 있습니다 ( 및 기타 옵션 포함) . 이 경우 i
에는 대소 문자를 구분하지 않는 정규 정규식 수정 자 만 제공합니다 .
정규 표현식 자체는 .NET의 문자 클래스 빼기를 사용하여 ASCII 범위의 자음과 일치시킵니다. 그런 다음 교체 o
는 중간에 사이에 있는 일치 항목을 두 번 다시 씁니다 .
답변
유닉스 KSH 사용 27 28 32 27 바이트 (또는 sed 명령으로 만 계산한다면 21)
다른 사람들의 제안에 감사합니다 🙂 감사합니다.
.. 나는 이것에 도착했다 :
sed 's/[^AEIOUÅÄÖ ]/&o&/ig'
(공백 및 스웨덴어 문자에 허용됨)
echo "hello" | sed 's/[BCDFGHJ-NP-TV-Z]/&o&/ig'
hohelollolo
echo "HELLO" | sed 's/[BCDFGHJ-NP-TV-Z]/&o&/ig'
HoHELoLLoLO
echo "QuIcKlY Now" | sed 's/[BCDFGHJ-NP-TV-Z]/&o&/ig'
QoQuIcocKoKlolYoY NoNowow
답변
CJam, 32 30 바이트
q{_eu'[,66>"EIOU"-#)g{'o1$}*}/
STDIN에서 읽고 STDOUT으로 인쇄하는 전체 프로그램입니다. 임의의 유니 코드 입력에 작동하며 다음 42자를 자음으로 처리합니다.
BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz
설명
q "Slurp STDIN.";
{ }/ "For each character...";
_eu "Duplicate and convert to upper case.";
'[,66> "Get a string from B to Z using range and slice.";
"EIOU"- "Remove the remaining four vowels.";
# "Find the position of the character in this string or
-1 if the character can't be found.";
)g "Increment, take signum, which gives 1 for consonants,
and 0 otherwise.";
{ }* "Repeat this block that many times, i.e. do nothing for
non-consonants.";
'o "Push an 'o'.";
1$ "Copy the current character.";
답변
자바 스크립트, 59 57 55 44 바이트
s=>s.replace(/(?![eiou])[b-z]/gi,"$&o$&")
기능도 수용 가능하다는 점을 상기시켜 준 Masterzagh와 캡처하지 않은 역 참조에 관한 정규식 팁에 감사드립니다!
입 / 출력이있는 더 긴 버전 :
alert(prompt().replace(/(?![eiou])[b-z]/gi,"$&o$&"));
문자열을 입력하라는 프롬프트 상자를 표시 한 다음 Rövarspråket 출력을 포함하는 대화 상자를 표시합니다. 코드는 정규식을 사용하여 자음을 두 배로 늘리고을 삽입 o
합니다.
답변
Mathematica, 84 73 72 바이트
StringReplace[#,a:RegularExpression@"(?i)[BCDFGHJ-NP-TV-Z]":>a<>"o"<>a]&
설명:
RegularExpression@"(?i)[BCDFGHJ-NP-TV-Z]"
대소 문자를 구분하지 않고 모든 자음을 일치시키는 정규식입니다.a:*..*:>a<>"o"<>a
자음을에 바인딩하고 지연된 규칙을 그a
자체로 둘러싸 는 지연된 규칙을 만듭니다 .- 마지막으로
StringReplace[#,*..*]&
인수의 모든 일치하는 문자에 해당 규칙을 적용하는 순수한 함수를 만듭니다.
답변
줄리아, 46 44 바이트
t->replace(t,r"(?![eiou])[b-z]"i,s->s*"o"*s)
이는 단일 문자열 입력을 가져와 Rövarspråket에 해당하는 익명 함수를 작성합니다. 호출하려면 이름을 지정하십시오 (예 🙂 f=t->...
.
에 쉼표 뒤에 공백이 아닌 다른 곳에서는 실제로 골프를 치고 있지 않습니다 replace()
.
여기서는 replace()
함수에서 입력 문자열, 하위 문자열을 식별하기위한 정규식 및 대체의 3 가지 인수를 사용합니다 . Julia는로 정규 표현식 패턴을 나타냅니다 r"..."
. i
끝에 추가 하면 대소 문자를 구분하지 않습니다. 이 특정 정규식은 자음과 일치합니다. 함수가 교체에 사용되는 경우 출력은 일치하는 각 하위 문자열에 적용된 함수입니다. 우리가 여기서 사용하는 함수는 Julia에서 문자열 연결을 수행 하므로 문자열을 가져 와서 s
반환합니다 . 따라서 최종 결과는 각 자음이 “o”로 두 배가 된 입력 문자열입니다.sos
*
예 :
julia> f("Min svävare är full med ål")
"MoMinon sosvovävovarore äror fofulollol momedod ålol"
julia> f("hello")
"hohelollolo"
julia> f("Rövarspråket")
"RoRövovarorsospoproråkoketot"
결과를 반환하지 않고 인쇄해야하는 경우 9 바이트 더 길어집니다. OP로부터 확인을 기다리는 중입니다.
편집 : Martin Büttner 덕분에 2 바이트가 절약되었습니다!
답변
하스켈, 81 바이트
x n|elem n"bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"=[n,'o',n]|1<2=[n]
f=(>>=x)
사용법 : f "Hello there!"
-> "HoHelollolo tothoherore!"
.
값 비싼 자음 목록을 영리하게 만들 수는 없습니다 import
. 문자를 소문자로 바꾸어도 단순히 대문자와 소문자 자음을 모두 나열하는 것보다 더 많은 바이트가 필요합니다.