Ä 변환기에서 ‘A’ 나타나지 않습니다. 다음

현재 필기 문서를 많이 스캔하여 .txt파일 로 변환하고 있습니다. 끔찍한 필기가 있기 때문에 .jpg-> .txt변환기는 내 움라우트 중 일부를 “일반” 문자 로 변환 합니다.'

직무

다음과 같은 프로그램이나 기능을 작성하십시오.

  • 문자열이 주어진다
    • I / O 코드 페이지를 선택할 수있는 한
      • 문자를 지원합니다 AEIOUaeiouÄËÏÖÜäëïöü'.
      • 입력 및 출력 코드 페이지는 동일합니다.
    • 입력은 (공백 옆에) 코드 페이지의 인쇄 가능한 문자 만 포함합니다.
      • 하나의 솔루션 만있을 것이므로 다음과 같은 'a'e'것은 나타나지 않습니다.
  • 다음 세트의 모든 문자 AEIOUaeiouÄËÏÖÜäëïöü
    • '문자 로 둘러싸인 경우에만 :
      • :'a''e' -> äë
    • 는 IF 에서 문자열은 하나의 문자입니다.
      • 예를 들어 'AE', 그대로 변경되지 않고 그대로 출력됩니다.
    • 는 IF 에서 문자가 문자에서 아닌 AEIOUaeiou해당 문자 변경되지 않습니다.

참고 : from 문자 / from 문자열 은 사이에있는 것 '입니다.

테스트 케이스

Input
Output
<empty line>

'A'sthetik
Ästhetik

Meinung ist wichtig!
Meinung ist wichtig!

Ich sagte: "Er sagte: 'Ich habe Hunger'"
Ich sagte: "Er sagte: 'Ich habe Hunger'"

Ich sagte: "Er sagte: ''A'sthetik'"
Ich sagte: "Er sagte: 'Ästhetik'"

Hämisch rieb er sich die H'a'nde
Hämisch rieb er sich die Hände

H'a''a'slich isn't a German word
Hääslich isn't a German word

since it's really called h'a'sslich
since it's really called hässlich


답변

자바 스크립트 (ES6), 81 70 68 바이트

s=>s.replace(/'[aeiou]'/gi,c=>"ï   ÖÄöä ËÜëüÏ "[c.charCodeAt(1)%15])

시도 해봐

f=
s=>s.replace(/'[aeiou]'/gi,c=>"ï   ÖÄöä ËÜëüÏ "[c.charCodeAt(1)%15])
i.addEventListener("input",_=>o.innerText=f(i.value))
console.log(f("'A'sthetik")) // Ästhetik
console.log(f("Meinung ist wichtig!")) // Meinung ist wichtig!
console.log(f(`Ich sagte: "Er sagte: 'Ich habe Hunger'"`)) // Ich sagte: "Er sagte: 'Ich habe Hunger'"
console.log(f(`Ich sagte: "Er sagte: ''A'sthetik'"`)) // Ich sagte: "Er sagte: 'Ästhetik'"
console.log(f("Hämisch rieb er sich die H'a'nde")) // Hämisch rieb er sich die Hände
console.log(f("H'a''a'slich isn't a German word")) // Hääslich isn't a German word
console.log(f("since it's really called h'a'sslich")) // since it's really called hässlich
<input id=i><pre id=o>

설명

  • s=> 매개 변수 “s”를 통해 입력 문자열을 인수로 사용하는 익명 함수.
  • s.replace(x,y) “x”를 “y”로 바꾸고 문자열을 반환합니다.
  • /'[aeiou]'/gi 작은 따옴표로 묶인 모든 모음과 일치하는 대소 문자를 구분하지 않는 정규식.
  • c=> 매개 변수 “c”를 통해 정규식의 각 일치 항목을 익명 함수에 전달합니다.
  • "ï ÖÄöä ËÜëüÏ "[n]문자열 “ï ÖÄöä ËÜëüÏ”의 n 번째 문자 (0 색인)를와 유사하게 반환합니다 "ï ÖÄöä ËÜëüÏ ".charAt(n).
  • c.charCodeAt(1)%15 “c”에서 두 번째 문자의 나머지 문자 코드 (예 : 모음 문자)를 15로 나눈 값을 가져옵니다.

대체, 40/52 36/48 바이트 (35/47 자)

다음은 분음 부호를 결합하기 전에 내 대답이 허용되지 않았습니다 (Boo-urns!)- 이 바이올린 에서 더 잘 보입니다.

s=>s.replace(/'([aeiou])'/gi,"$1̈")

그러나 ETHproductions.normalize()추가 12 바이트를 추가하면 이것이 유효 할 것이라고 제안합니다.

s=>s.replace(/'([aeiou])'/gi,"$1̈").normalize()

답변

펄 5, 25 바이트

s/'(\w)'/chr 1+ord$1/age

24 바이트 + -pe대신 1-e

이것은 “문자를 지원하는 한 I / O 코드 페이지를 선택할 수 있습니다”라는 규칙을 사용합니다 AEIOUaeiouÄËÏÖÜäëïöü'. 또한 /a정규식 에서 플래그를 사용 하므로 인코딩 방식에 관계없이 \w정확하게 문자를 참조합니다 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789.

내 스크립트에 선택된 I / O 코드 페이지는 다음과 같습니다.

 1  a
 2  ä
 3  e
 4  ë
 5  i
 6  ï
 7  o
 8  ö
 9  u
10  ü
11  A
12  Ä
13  E
14  Ë
15  I
16  Ï
17  O
18  Ö
19  U
20  Ü
21  '

(문제와 같은 테스트 사례 에서이 스크립트를 테스트 할 수는 없습니다 t.


3 바이트를 절약 해 준 Grimy 에게 감사드립니다 . 이전 s/'([a-z])'/chr 1+ord$1/gie에는 인코딩과 상관없이 [a-z]Perl에서 특수한 흥미로운 사실을 (인코딩 및) 사용했습니다 abcdefghijklmnopqrstuvwxyz. 내 초기 답변은 IMO, 더 흥미 롭다. 그러나 이것은 더 짧기 때문에 도대체 내가 취할 것이다.


답변

Vim, 33 바이트

:s/\c'\([aeiou]\)'/<C-v><C-k>\1:/g
ii<esc>D@"

온라인으로 사용해보십시오! 이전 버전과 호환되는 V 인터프리터에서.


답변

apt , 29 바이트

r"'%v'"@"ï   ÖÄöä ËÜëüÏ "gXc1

온라인으로 사용해보십시오!

설명

r"'%v'"@"ï   ÖÄöä ËÜëüÏ "gXc1

r"'%v'"@                       // Replace each match X of /'<vowel>'/ in the input with
        "ï   ÖÄöä ËÜëüÏ "g     //   the character in this string at index
                          Xc1  //     X.charCodeAt(1).
                               //   Values larger than the length of the string wrap around,
                               //   so this is effectively equal to " ... "[n%15].
                               // Implicit: output result of last expression

답변

자바 스크립트, 67 바이트

s=>s.replace(/'.'/g,c=>"äëïöüÄËÏÖÜ"['aeiouAEIOU'.indexOf(c[1])]||c)

온라인으로 사용해보십시오!

따옴표 사이의 모든 문자를 해당 움라우트 문자로 바꾸거나 변경해야하는 문자 그룹이 아닌 경우 일치하는 문자로 바꾸십시오.


답변

젤리 , 36 바이트

œṣ⁹Ṫ¤j
“.ạẏụ’D196;+\Ọż⁾''jЀØc¤;@Wç/

온라인으로 사용해보십시오!

젤리에게는 꽤 복잡한 것 같습니다!

어떻게?

참고 : 문자는 코드 페이지에 없지만 유니 코드의 바이트 범위 내에 있으므로 서수로 만들어야한다고 생각합니다.

œṣ⁹Ṫ¤j - Link 1, Replace: char list S [...], list R [char T, char list F]
œṣ     - split S at sublists equal to:
    ¤  -   nilad followed by link(s) as a nilad:
  ⁹    -     link's right argument, R
   Ṫ   -     tail - yield char list F and modify R to become [T]
     j - join with R (now [T])
       - all in all split S at Rs and join back up with [T]s.

“.ạẏụ’D196;+\Ọż⁾''jЀØc¤;@Wç/ - Main link: char list S
       196;                   - 196 concatenate with:
“.ạẏụ’                        -   base 250 literal 747687476
      D                       -   to decimal list [7,4,7,6,8,7,4,7,6]
           +\                 - cumulative reduce with addition: [196,203,207,214,220,228,235,239,246,252]
             Ọ                - cast to characters: ÄËÏÖÜäëïöü
                       ¤      - nilad followed by link(s) as a nilad:
               ⁾''            -   literal ["'", "'"]
                     Øc       -   vowel yield: AEIOUaeiou
                  jЀ         -   join mapped:  ["'A'", "'E'", ...]
              ż               - zip together
                          W   - wrap S in a list
                        ;@    - concatenate (swap @rguments)
                           ç/ - reduce with last link (1) as a dyad
                              - implicit print

답변

V , 24 바이트

Óã'¨[aeiou]©'/±:
éiD@"

온라인으로 사용해보십시오!

16 진 덤프 :

00000000: d3e3 27a8 5b61 6569 6f75 5da9 272f 160b  ..'.[aeiou].'/..
00000010: b13a 0ae9 6944 4022                      .:..iD@"

이것은 내 vim 답변을 직접 번역 한 것이므로 모든 골프 언어를 이길 수 있습니다. :피