현재 필기 문서를 많이 스캔하여 .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 답변을 직접 번역 한 것이므로 모든 골프 언어를 이길 수 있습니다. :피