현재 필기 문서를 많이 스캔하여 .txt파일 로 변환하고 있습니다. 끔찍한 필기가 있기 때문에 .jpg-> .txt변환기는 내 움라우트 중 일부를 “일반” 문자 로 변환 합니다.' 
직무
다음과 같은 프로그램이나 기능을 작성하십시오.
- 문자열이 주어진다
- I / O 코드 페이지를 선택할 수있는 한
- 문자를 지원합니다 AEIOUaeiouÄËÏÖÜäëïöü'.- 분음 부호를 결합 하는 것은 금지됩니다
 
- 입력 및 출력 코드 페이지는 동일합니다.
 
- 문자를 지원합니다 
- 입력은 (공백 옆에) 코드 페이지의 인쇄 가능한 문자 만 포함합니다.
- 하나의 솔루션 만있을 것이므로 다음과 같은 'a'e'것은 나타나지 않습니다.
 
- 하나의 솔루션 만있을 것이므로 다음과 같은 
 
- I / O 코드 페이지를 선택할 수있는 한
- 다음 세트의 모든 문자 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, 더 흥미 롭다. 그러나 이것은 더 짧기 때문에 도대체 내가 취할 것이다.
답변
답변
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 답변을 직접 번역 한 것이므로 모든 골프 언어를 이길 수 있습니다. :피