Bộ chuyển đổi 'A' sang


12

Tôi hiện đang quét một loạt các tài liệu viết tay và chuyển đổi chúng thành .txtcác tập tin. Vì tôi có một chữ viết tay khủng khiếp, trình chuyển đổi .jpg-> .txtchuyển đổi một số âm sắc của tôi thành chữ "bình thường" được bao bọc bởi'

Bài tập

Viết chương trình hoặc hàm:

  • Được cho một chuỗi
    • bạn có thể chọn bất kỳ bảng mã I / O nào miễn là
      • nó hỗ trợ các nhân vật AEIOUaeiouÄËÏÖÜäëïöü'.
      • các bảng mã đầu vào và đầu ra là như nhau.
    • đầu vào sẽ (bên cạnh khoảng trắng) chỉ chứa các ký tự có thể in từ bảng mã của bạn.
      • Sẽ chỉ có một giải pháp, do đó, những thứ như 'a'e'sẽ không xuất hiện
  • Chuyển đổi tất cả các ký tự trong tập hợp sau đây AEIOUaeiouđểÄËÏÖÜäëïöü
    • Nếu và chỉ khi, chúng được bao quanh bởi ' ký tự:
      • Ví dụ :'a''e' -> äë
    • Nếu chuỗi từ là một chữ cái duy nhất.
      • ví dụ 'AE' không thay đổi gì cả, xuất ra nguyên trạng.
    • Nếu nhân vật từ không phải là một nhân vật trong số AEIOUaeiouđó nhân vật sẽ không thay đổi.

Lưu ý: Từ ký tự / từ chuỗi là một giữa '.

Tủ thử

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
Các thành phần hoạt động trong tất cả các testcase của bạn là 'A'hoặc 'a'... không phải là những gì tôi coi là testcase tốt.
Leaky Nun

1
Bạn có thể thêm một ví dụ với 'w'(như wkhông phải là một trong AEIOUaeiou) không?
jimmy23013

8
Kết hợp dấu phụ có trạng thái không xác định , sau đó được cho phép , sau đó không được phép . Điều này vô hiệu ít nhất 4 câu trả lời. Boo! Tiếng xì xì! Tôi đã thay đổi upvote của mình thành downvote :(
Chấn thương kỹ thuật số

1
@DigitalTrauma Tôi rất xin lỗi vì điều đó.
Roman Gräf

4
Thêm testcase:'q'e'd'
Tên hiển thị

Câu trả lời:


11

JavaScript (ES6), 81 70 68 byte

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

Thử nó

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>


Giải trình

  • s=> Hàm ẩn danh lấy chuỗi đầu vào làm đối số thông qua tham số "s".
  • s.replace(x,y) Trả về chuỗi có "x" được thay thế bằng "y".
  • /'[aeiou]'/gi Biểu thức chính quy không nhạy cảm trường hợp phù hợp với tất cả các lần xuất hiện của một nguyên âm được bao quanh bởi các dấu ngoặc đơn.
  • c=> Truyền từng trận đấu của biểu thức chính quy cho một hàm ẩn danh thông qua tham số "c".
  • "ï ÖÄöä ËÜëüÏ "[n] Trả về ký tự thứ n (0 được lập chỉ mục) trong chuỗi "ï ÖÄöä ËÜëüÏ", tương tự như "ï ÖÄöä ËÜëüÏ ".charAt(n) .
  • c.charCodeAt(1)%15 Lấy phần còn lại của mã ký tự của ký tự thứ hai trong "c" (tức là ký tự nguyên âm) khi chia cho 15.

Thay thế, 40/52 36/48 byte (35/47 ký tự)

Sau đây là câu trả lời của tôi trước khi kết hợp các dấu phụ không được phép (Boo-urns!) - được xem tốt hơn trong Fiddle này

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

Tuy nhiên, ETHproductions cho thấy rằng với việc bổ .normalize()sung thêm 12 byte thì điều này sẽ hợp lệ.

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


Không, nếu kết hợp dấu phụ được cho phép.
Adám

Kết hợp dấu phụ hiện bị cấm.
Adám

Tôi tin rằng bạn có thể làm cho điều này hợp lệ bằng cách thêm .normalize()vào cuối hàm.
Sản phẩm ETH

Bạn có chắc chắn, @ETHproductions? Nếu bỏ dấu cách kết hợp đều bị cấm, họ không bị cấm xuất hiện trong một câu trả lời nào cả ?
Xù xì

8

Perl 5, 25 byte

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

24 byte, cộng thêm 1 cho -pethay vì-e

Điều này sử dụng quy tắc "bạn có thể chọn bất kỳ bảng mã I / O nào miễn là nó hỗ trợ các ký tự AEIOUaeiouÄËÏÖÜäëïöü'". Nó cũng sử dụng /acờ trên regexes, điều này gây ra\w để chỉ chính xác các ký tự trongabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789 dù chúng được mã hóa như thế nào.

Bảng mã I / O được chọn cho kịch bản của tôi là:

 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ôi không thể kiểm tra tập lệnh này trên các trường hợp kiểm tra trong câu hỏi, vì chúng bao gồm một số nhân vật thực sự kỳ lạ, như t.)


Cảm ơn Grimy đã tiết kiệm cho tôi ba byte. Trước đó, tôi đã s/'([a-z])'/chr 1+ord$1/giesử dụng (mã hóa và) một thực tế thú vị [a-z]được đặt trong Perl để khớp chính xác cho abcdefghijklmnopqrstuvwxyzdù mã hóa. Câu trả lời trước đây của tôi là IMO, thú vị hơn, nhưng câu trả lời này ngắn hơn, vì vậy, cái quái gì, tôi sẽ lấy nó.


1
Tôi đã kiểm tra cẩn thận danh sách "các lỗ hổng bị cấm theo mặc định" trước khi đăng bài này và việc phát minh ra một bảng mã không nằm trong số đó. Điều đó, đặc biệt là thực tế là câu hỏi được mời sử dụng "bất kỳ bảng mã I / O" nào, dường như cho phép câu trả lời này. Và sau đó, a-zmẹo làm cho câu trả lời thực sự thú vị thay vì chỉ là một trò gian lận. (IMO, dù sao đi nữa.)
msh210

3
Đây là loại mẹo chỉ gây cười một lần, nhưng tôi tin rằng bạn là người đầu tiên sử dụng nó, vì vậy nó hoạt động (=
Grimmy

1
Bạn có thể lưu 3 byte bằng cách sử dụng \wthay vì [a-z], cũng như /athay vì /i. Nếu công cụ sửa đổi "/ a" có hiệu lực, \wkhớp với các ký tự [a-zA-Z0-9_], bất kể chúng được mã hóa như thế nào.
Grimmy

@Grimy, cảm ơn! Tôi sẽ chỉnh sửa ....
msh210


4

Japt , 29 byte

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

Hãy thử trực tuyến!

Giải trình

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
Sử dụng kết hợp dấu phụ là gây tranh cãi.
Leaky Nun

Đánh tôi với nó Giải pháp của bạn ngắn hơn nhiều so với tôi mặc dù ... Tốt lắm.
Lu-ca

@LeakyNun Tranh cãi cho câu hỏi này hay nói chung?
Chấn thương kỹ thuật số

Gây tranh cãi cho câu hỏi này bởi vì bạn nêu nó trong các ý kiến ​​nhưng nó không bao giờ được giải quyết.
Leaky Nun

@ Adám Đánh bại bạn sau 38 giây ;-)
Sản phẩm ETH

4

Javascript, 67 byte

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

Hãy thử trực tuyến!

Thay thế tất cả các ký tự giữa các dấu ngoặc kép bằng ký tự được đánh dấu tương ứng hoặc khớp chính nó nếu nó không nằm trong nhóm các ký tự cần thay đổi.


3

Thạch , 36 byte

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

Hãy thử trực tuyến!

Điều này có vẻ khá phức tạp đối với Jelly!

Làm sao?

Lưu ý: Vì các ký tự không nằm trên trang mã, nhưng nằm trong phạm vi của một byte trong Unicode, tôi nghĩ rằng chúng phải được tạo từ các lệnh, vì vậy tôi có.

œṣ⁹Ṫ¤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 byte

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

Hãy thử trực tuyến!

Hexdump:

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

Đây chỉ là bản dịch trực tiếp câu trả lời vim của tôi để tôi có thể đánh bại tất cả các ngôn ngữ chơi gôn. : P



1

/// , 67 byte

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

Hãy thử trực tuyến!

Điều này hoạt động bằng cách thay thế các chữ cái không chấm được bao quanh bởi dấu ngoặc đơn ( 'A') bằng cùng một chữ cái như dấu chấm, không có dấu ngoặc đơn ( Ä). Một thay thế duy nhất này trông như thế này (trước khi chơi golf) : /'A'/Ä/.

Sân mất hai xảy ra phổ biến, //'/, và sử dụng chúng để thay thế.


1

Swift - 201 byte

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)}

Sử dụng: g("'A'sthetik") // => Ästhetik


1
characters.map{blah blah}replacingOccurrences()thực sự giết chết niềm vui: ((
Ông Xcoder

1

APL (Dyalog) , 53 byte

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

Hãy thử trực tuyến!

Sử dụng PCRE R eplace (lưu RegEx là v ) để áp dụng chức năng sau cho các nguyên âm được trích dẫn:

{ chức năng ẩn danh

' ÄËÏÖÜäëïöü'[... ] chỉ số chuỗi (lưu ý hai không gian tương ứng với '[) với:

  ⍵.Match chuỗi phù hợp

  2⊃ chọn chữ cái thứ hai (nguyên âm)

  v⍳ tìm chỉ số trong v

}


1

AWK , 99 byte

{split("AEIOUaeiou",p,"")
for(i=1;i<=split("ÄËÏÖÜäëïöü",r,"");i++)gsub("'"p[i]"'",r[i])}1

Hãy thử trực tuyến!

Tôi đã cố gắng đưa ra một số regex thông minh trong vòng một gensubnhưng không thành công :(


1

SOGL , 43 35 (UTF-8) byte

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

Giải trình:

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
Heh, người ta có thể nghĩ rằng đó ̈+là một chức năng trong SOGL.
Adám

Kết hợp dấu phụ hiện bị cấm.
Adám

1

05AB1E , 30 29 24 byte

-6 byte nhờ Emigna

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

05AB1E thuận tiện có các ký tự äëïöütrong trang mã của nó.

Hãy thử trực tuyến!

(mã cũ)

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

Giải thích (lỗi thời):

ž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

Hãy thử trực tuyến!


Bạn có thể thay thế bằng Š.
Emigna

Bạn có thể lưu thêm một vài byte vớižMDu«S''«''ì"äëïöü"Du«S:
Emigna

@Emigna Cảm ơn một lần nữa.
Okx

Bạn cũng không cần Ingay từ đầu :)
Emigna

1

Python 3.6, 98 92 ký tự

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

Đây là một chức năng, không phải là một chương trình hoàn chỉnh.

Được định dạng để dễ đọc:

import re

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

Cảm ơn @ValueInk vì những lời khuyên thông minh để chơi gôn.


Không chạy cho tôi. Dừng với TypeError.
hoàn toàn là

@totallyhuman bạn có chắc không? Nó dường như đang làm việc cho tôi. Bạn cần gọi ahàm với chuỗi bạn muốn thay thế.
numbermaniac


1
Tài liệu Python báo cáo match.__getitem__(g)là mới đối với Python 3.6, vì vậy nó có thể được chỉ định trong tiêu đề của bạn. Ngoài ra, nếu bạn thay đổi regex của bạn để '([AEIOUaeiou])'giúp bạn tiết kiệm một byte bằng cách thay đổi x[0][1]để x[1]và sử dụng -3thay vì -2.
Mực giá trị

1
Trên thực tế, nó thậm chí còn ngắn hơn import re;a=lambda i,p="'([AEIOUaeiou])'":re.sub ...vì bạn đã cắt giảm khá nhiều chi phí do không cần phải returntuyên bố nữa!
Mực giá trị

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.