Ä 변환기에서 'A'


12

현재 필기 문서를 많이 스캔하여 .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

6
모든 테스트 케이스의 활성 성분은 좋은 테스트 케이스로 간주 'A'되거나 'a'아닙니다.
Leaky Nun

1
'w'( w중 하나가 아님 AEIOUaeiou) 로 예제를 추가 할 수 있습니까 ?
jimmy23013

8
조합은 구별했다 알 수없는 상태를 한 후, 허용되었다 한 다음, 허용 . 이것은 최소 4 개의 답변을 무효화했습니다. 우우! 스음! 나는 :( downvote에 내 upvote에 변경 한
디지털 외상

1
@DigitalTrauma 정말 유감입니다.
로마 그래프

4
테스트 케이스 추가 :'q'e'd'
표시 이름

답변:


11

자바 스크립트 (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()


분음 부호 조합이 허용되는 경우 아니요.
Adám

분음 부호 조합은 이제 금지되어 있습니다.
Adám

.normalize()함수의 끝에 추가 하여 이것을 유효하게 만들 수 있다고 생각합니다 .
ETHproductions

@ETHproductions 확실합니까? 분음 부호 조합이 금지 된 경우, 답변 에 전혀 표시되는 것이 금지되지 않습니까?
Shaggy

8

펄 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, 더 흥미 롭다. 그러나 이것은 더 짧기 때문에 도대체 내가 취할 것이다.


1
이 글을 게시하기 전에 "기본적으로 금지 된 허점"목록을주의 깊게 확인하고 코드 페이지를 만들지 않았습니다. 특히 질문에 "모든 I / O 코드 페이지"사용을 요청한 사실이이 답변을 허용하는 것으로 보입니다. 그리고 그 a-z속임수는 단지 속임수 대신에 실제로 답을 흥미롭게 만듭니다. (어쨌든 IMO)
msh210

3
그래서 (= 작품이 재미 단 한번의 속임수의 종류,하지만 난 당신이 그것을 사용하는 최초의 사람이야 생각
그리미

1
당신은을 사용하여 3 바이트를 절약 할 수 \w대신 [a-z]뿐만 아니라, /a대신 /i. "/ a"수정자가 적용되는 경우 \w인코딩 방식에 관계없이 [a-zA-Z0-9_] 문자와 일치합니다.
Grimmy

@ 그림, 고마워! 내가 편집합니다 ....
msh210


4

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

1
분음 부호 조합을 사용하는 것은 논란의 여지가 있습니다.
Leaky Nun

나를 이길. 귀하의 솔루션은 내 것보다 훨씬 짧습니다 ... 잘되었습니다.
Luke

@LeakyNun이 질문에 대해 논쟁의 여지가 있습니까?
Digital Trauma

이 질문에 대해 논란의 여지가 있습니다.
Leaky Nun

@ Adám 38 초 동안 당신을 이길 ;-)
ETHproductions

4

자바 스크립트, 67 바이트

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

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

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


3

젤리 , 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

3

V , 24 바이트

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

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

16 진 덤프 :

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

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



1

/// , 67 바이트

/~/'\///`/\/\/~/'A~Ä`E~Ë`I~Ï`O~Ö`U~Ü`a~ä`e~ë`i~ï`o~ö`u~ü/

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

'A'작은 따옴표 ( Ä) 없이 작은 따옴표 ( ) 로 둘러싸인 점이 아닌 문자를 점 과 같은 문자로 바꾸면 됩니다. 이것의 단일 교체는 다음과 같습니다 (골프 전) /'A'/Ä/.

골프는 두 가지 일반적인 발생을 소요 //하고 '/, 그리고 교체로 사용합니다.


1

스위프트-201 바이트

import Foundation;func g(s:String){var e=s;var r="aeiouAEIOUäëïöüÄËÏÖÜ".characters.map{String($0)};for i in r[0...9]{e=e.replacingOccurrences(of:"'\(i)'",with:r[r.index(of:i)!+10])};print(e)}

용법: g("'A'sthetik") // => Ästhetik


1
characters.map{blah blah}그리고 replacingOccurrences()정말 재미를 죽일 : ((
씨 Xcoder

1

APL (Dyalog) , 53 바이트

(v'''[AEIOUaeiou]''')⎕R{'  ÄËÏÖÜäëïöü'[v2⊃⍵.Match]}

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

PCRE 사용 R의 eplace (로 정규식을 절약 V를 인용 모음에 다음과 같은 기능을 적용)

{ 익명의 기능

' ÄËÏÖÜäëïöü'[… 다음을 사용 ] 하여 문자열을 색인화하십시오 (에 해당하는 두 공백에주의하십시오 '[).

  ⍵.Match 일치하는 문자열

  2⊃ 두 번째 글자를 선택하십시오 (모음)

  v⍳v  에서 색인 찾기

}



1

SOGL , 43 35 (UTF-8) 바이트

L∫:ÆW ':h++;"äëïöü”:U+Wŗ

설명:

L∫                        repeat 10 times, pushing current iteration (0-based)
  :                       duplicate the iteration
   ÆW                     get the index (1-based) in "aeiouAEIOU"
      ':h++               quote it
           ;              put the copy (current iteration) ontop
            "äëïöü”       push "äëïöü"
                   :      duplicate it
                    U     uppercase it
                     +    join together, resulting in "äëïöüÄËÏÖÜ"
                      W   get the index (1-based) in it
                       ŗ  replace [in the input, current char from "aeiouAEIOU" with
                          the corresponding char in "äëïöüÄËÏÖÜ"

3
̈+그는 SOGL의 함수 라고 생각할 수 있습니다.
Adám

분음 부호 조합은 이제 금지되어 있습니다.
Adám

1

05AB1E , 30 29 24 바이트

Emigna 덕분에 -6 바이트

žMDu«S''«''ì"äëïöü"Du«S:

05AB1E äëïöü는 코드 페이지에 문자가 편리 합니다.

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

(이전 코드)

žMDu«Svy''.ø})"äëïöü"Du«¹ŠS:

설명 (오래된) :

žM                             Push aeiou                    ['aeiou']
  D                            Duplicate                     ['aeiou', 'aeiou']
   u                           Uppercase                     ['aeiou', 'AEIOU']
    «                          Concatenate                   ['aeiouAEIOU']
     vy                        For each...
       ''                        Push '
         .ø                      Surround a with b (a -> bab)
           }                   End loop
            )                  Wrap stack to array           [["'a'", "'e'", "'i'", "'o'", "'u'", "'A'", "'E'", "'I'", "'O'", "'U'"]]
             "äëïöü"           String literal.               [["'a'", "'e'", "'i'", "'o'", "'u'", "'A'", "'E'", "'I'", "'O'", "'U'"], 'äëïöü']
                    Du«        Duplicate, uppercase, concat  [["'a'", "'e'", "'i'", "'o'", "'u'", "'A'", "'E'", "'I'", "'O'", "'U'"], 'äëïöüÄËÏÖÜ']
                       ¹       Push first input
                        Š      Push c, a, b                  ["'A'sthetik", ["'a'", "'e'", "'i'", "'o'", "'u'", "'A'", "'E'", "'I'", "'O'", "'U'"], 'äëïöüÄËÏÖÜ']
                          S    Convert to char list          ["'A'sthetik", ["'a'", "'e'", "'i'", "'o'", "'u'", "'A'", "'E'", "'I'", "'O'", "'U'"], ['ä', 'ë', 'ï', 'ö', 'ü', 'Ä', 'Ë', 'Ï', 'Ö', 'Ü']]
                           :   Replace all                   ['Ästhetik']
                               Implicit print

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


으로 교체 할 수 있습니다 Š.
Emigna

당신과 함께 몇 가지 더 바이트를 절약 할 수žMDu«S''«''ì"äëïöü"Du«S:
Emigna

@Emigna 감사합니다.
Okx

당신은 또한 I처음에 필요하지 않습니다 :)
Emigna

1

파이썬 3.6, 98 92 자

import re;a=lambda i,p="'([AEIOUaeiou])'":re.sub(p,lambda x:'ÄËÏÖÜäëïöü'[p.index(x[1])-3],i)

완전한 프로그램이 아니라 기능입니다.

가독성을위한 형식 :

import re

a = lambda i, p="'([AEIOUaeiou])'":\
    re.sub(p, lambda x: 'ÄËÏÖÜäëïöü'[p.index(x[1]) - 3], i)

추가 골프를위한 영리한 팁을 제공하는 @ValueInk에게 감사합니다.


나를 위해 실행되지 않습니다. TypeError와 함께 중지합니다.
완전히 인간적인

@totallyhuman 확실합니까? 나를 위해 일하고있는 것 같습니다. a바꿀 문자열로 함수 를 호출해야합니다 .
numbermaniac


1
Python 문서 match.__getitem__(g)는 Python 3.6에 새로운 것으로 보고 되므로 헤더에 지정해야합니다. 또한 정규 표현식을 '([AEIOUaeiou])'변경 x[0][1]하면 로 바꾸고 대신 x[1]사용 하여 바이트를 저장하십시오 . -3-2
가치 잉크

1
사실, import re;a=lambda i,p="'([AEIOUaeiou])'":re.sub ...더 이상 return진술이 필요하지 않기 때문에 약간의 오버 헤드 가 발생하기 때문에 갈수록 더 짧습니다 !
가치 잉크

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.