카테고리 보관물: 코딩

코딩

문자열을 해당 Rövarspråket로 변환 남아 있습니다. 몇 가지 예 : “hello”->

로 바르스 프라우 켓

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.rgxreplacement.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. 문자를 소문자로 바꾸어도 단순히 대문자와 소문자 자음을 모두 나열하는 것보다 더 많은 바이트가 필요합니다.