'A' से Ä कन्वर्टर


12

मैं वर्तमान में हस्तलिखित दस्तावेजों का एक गुच्छा स्कैन कर रहा हूं और उन्हें .txtफाइलों में परिवर्तित कर रहा हूं । चूँकि मेरे पास एक भयानक लिखावट है .jpg-> .txtकन्वर्टर मेरे कुछ umlauts को "सामान्य" पत्र द्वारा संलग्न करता है'

कार्य

एक कार्यक्रम या एक समारोह लिखें:

  • का तार दिया जाता है
    • जब तक आप किसी I / O कोडपेज को चुन सकते हैं
      • यह पात्रों का समर्थन करता है AEIOUaeiouÄËÏÖÜäëïöü'
      • इनपुट और आउटपुट कोडपेज समान हैं।
    • इनपुट (रिक्त स्थान के बगल में) केवल आपके कोडपेज से प्रिंट करने योग्य वर्ण होंगे।
      • केवल एक ही समाधान होगा, इस प्रकार जैसी चीजें 'a'e'दिखाई नहीं देंगी
  • निम्नलिखित में सभी वर्णों को परिवर्तित करता AEIOUaeiouहैÄËÏÖÜäëïöü
    • यदि, और केवल अगर, वे 'पात्रों से घिरे हैं :
      • उदाहरण :'a''e' -> äë
    • यदि से स्ट्रिंग एक भी अक्षर है।
      • उदाहरण के लिए, 'AE'बिल्कुल नहीं बदलता है, जैसा कि आउटपुट है।
    • यदि से चरित्र एक चरित्र से बाहर नहीं है AEIOUaeiouकि चरित्र नहीं बदलेगा।

नोट: चरित्र से / स्ट्रिंग से एक के बीच है '

परीक्षण के मामलों

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'... या नहीं जो मैं अच्छा वृषण मानता हूँ।
लीक नून

1
क्या आप इसके साथ एक उदाहरण जोड़ सकते हैं 'w'(जैसा wकि एक नहीं है AEIOUaeiou)?
jimmy23013

8
मिलावटखोरों को अज्ञात दर्जा प्राप्त था , फिर अनुमति दी गई , फिर उन्हें रोक दिया गया । इसने कम से कम 4 उत्तरों को अमान्य कर दिया। बू! फुफकार! मैंने अपने अपवोट को डाउनवोट में बदल दिया है :(
डिजिटल ट्रॉमा

1
@DigitalTrauma मुझे इसके लिए बहुत खेद है।
रोमन ग्रैफ

4
टेस्टकेस जोड़ें:'q'e'd'
प्रदर्शन नाम

जवाबों:


11

जावास्क्रिप्ट (ईएस 6), 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) "Y" द्वारा प्रतिस्थापित "x" के साथ स्ट्रिंग लौटाता है।
  • /'[aeiou]'/gi केस असंवेदनशील नियमित अभिव्यक्ति जो एकल उद्धरणों से घिरे स्वर के सभी घटनाओं से मेल खाती है।
  • c=> पैरामीटर "सी" के माध्यम से एक अनाम फ़ंक्शन के लिए नियमित अभिव्यक्ति के प्रत्येक मैच को पास करता है।
  • "ï ÖÄöä ËÜëüÏ "[n]Nth वर्ण (0 अनुक्रमित) को स्ट्रिंग में "ÖÄ öö nëüÏ" के समान लौटाता है "ï ÖÄöä ËÜëüÏ ".charAt(n)
  • c.charCodeAt(1)%15 15 से विभाजित होने पर "c" (यानी स्वर वर्ण) में दूसरे वर्ण के वर्ण कोड के शेष भाग को प्राप्त करता है।

वैकल्पिक, 40/52 36/48 बाइट्स (35/47 वर्ण)

निम्नलिखित में मेरा जवाब था कि डायटिकिटिक्स को संयोजित करने से पहले (बू-ऑर्न्स!) को रोक दिया गया था - इस फिडेल में बेहतर देखा गया

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

हालांकि, ETHproductions का सुझाव है कि .normalize()अतिरिक्त 12 बाइट्स के लिए इसके अतिरिक्त यह मान्य होगा।

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

OP ने अभी तक जवाब नहीं दिया है codegolf.stackexchange.com/users/59183/dzaima
Adám

नहीं, यदि संयुक्ताक्षरों के संयोजन की अनुमति है।
18

अब डायटिकटिक्स का संयोजन निषिद्ध है।
18

मेरा मानना ​​है कि आप .normalize()फ़ंक्शन के अंत में जोड़कर इसे वैध बना सकते हैं ।
ETHproductions

क्या आपको यकीन है, @ETHproductions? यदि डायक्टिक्स का संयोजन निषिद्ध है, तो क्या वे एक उत्तर में दिखाई देने से बिल्कुल भी निषिद्ध नहीं हैं ?
झबरा

8

पर्ल 5, 25 बाइट्स

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

-peइसके बजाय 24 बाइट्स, प्लस 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।)


मुझे तीन बाइट बचाने के लिए ग्रिमी का धन्यवाद । इससे पहले, मेरे पास था s/'([a-z])'/chr 1+ord$1/gie, जो कि (एन्कोडिंग और) के उपयोग से रोचक तथ्य था जो कि [a-z]पर्ल में विशेष रूप से कैस किया गया था , जो कि वास्तव abcdefghijklmnopqrstuvwxyzमें एन्कोडिंग से कोई फर्क नहीं पड़ता था। मेरा पहले का जवाब है, IMO, और अधिक दिलचस्प है, लेकिन यह एक छोटा है, इसलिए, क्या बिल्ली, मैं इसे ले जाऊंगा।


1
मैंने इसे पोस्ट करने से पहले "कमियां जो डिफ़ॉल्ट रूप से निषिद्ध हैं" सूची की सावधानीपूर्वक जांच की, और एक कोडपेज का आविष्कार करना उनके बीच नहीं था। प्लस, विशेष रूप से तथ्य यह है कि प्रश्न "किसी भी I / O कोडपेज" के उपयोग को आमंत्रित करता है, इस उत्तर की अनुमति देता है। और फिर a-zचाल केवल एक धोखा के बजाय जवाब को वास्तव में दिलचस्प बनाती है। (IMO, वैसे भी।)
msh210

3
यह एक प्रकार की चाल है जो केवल एक बार मजाकिया होती है, लेकिन मेरा मानना ​​है कि आप इसका उपयोग करने वाले पहले व्यक्ति हैं, इसलिए यह काम करता है (=
ग्रिमी

1
आप के \wबजाय का उपयोग करके 3 बाइट्स बचा सकता है [a-z], साथ ही के /aबजाय /i। यदि "/ a" संशोधक प्रभाव में है, \wतो वर्णों से मेल खाता है [a-zA-Z0-9_], भले ही वे एन्कोडेड हों।
ग्रैमी

@ मेरी, धन्यवाद! मैं संपादित करता हूँ ....
msh210


4

जाप , 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
डायक्ट्रीक्स के संयोजन का उपयोग विवादास्पद है।
लीक नून

मुझे इससे हराएं। आपका समाधान हालांकि मेरी तुलना में बहुत छोटा है ... अच्छा किया।
ल्यूक

@LeakyNun इस प्रश्न के लिए विवादास्पद या सामान्य रूप से?
डिजिटल ट्रॉमा

इस सवाल के लिए विवादास्पद है क्योंकि आपने इसे टिप्पणियों में उठाया था लेकिन इसे कभी संबोधित नहीं किया गया था।
लीक नून

@ Adám ने आपको 38 सेकंड तक हराया ;-)
ETHproductions

4

जावास्क्रिप्ट, 67 बाइट्स

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

इसे ऑनलाइन आज़माएं!

उद्धरणों के बीच सभी वर्णों को या तो संबंधित umlauted वर्ण के साथ बदलें, या स्वयं मिलान करें यदि यह उन वर्णों के समूह में नहीं है जिन्हें बदलने की आवश्यकता है।


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

वी , 24 बाइट्स

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

इसे ऑनलाइन आज़माएं!

Hexdump:

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

यह मेरे विम जवाब का सिर्फ एक सीधा अनुवाद है ताकि मैं सभी गोल्फ भाषाओं को हरा सकूं। : पी



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()वास्तव में मज़ा को मार डालो: (
मिस्टर एक्सकोडर

1

APL (Dyalog) , 53 बाइट्स

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

इसे ऑनलाइन आज़माएं!

निम्नलिखित स्वरों को उद्धृत करने के लिए PCRE R eplace (RegEx को v के रूप में सहेज कर ) का उपयोग करता है :

{ अनाम फ़ंक्शन

' ÄËÏÖÜäëïöü'[... ] स्ट्रिंग को अनुक्रमित करें (नोट दो स्थानों को इसी के '[साथ):

  ⍵.Match मिलान स्ट्रिंग

  2⊃ दूसरा अक्षर उठाओ (स्वर)

  v⍳v  में सूचकांक खोजें

}



1

एसओजीएल , 43 35 (यूटीएफ -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
हे, कोई सोच सकता है कि ̈+एसओजीएल में एक समारोह है।
Adám

अब डायटिकटिक्स का संयोजन निषिद्ध है।
एडम

1

05AB1E , 30 29 24 बाइट्स

-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

इसे ऑनलाइन आज़माएं!


आप के साथ बदल सकता है Š
एमिग्ना

आप कुछ और बाइट्स बचा सकते हैंžMDu«S''«''ì"äëïöü"Du«S:
Emigna

@Emigna फिर से धन्यवाद।
ओकेक्स

आप भी 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उस स्ट्रिंग के साथ फ़ंक्शन को कॉल करना होगा जिसे आप बदलना चाहते हैं।
नंबरमान


1
पायथन डॉक्स रिपोर्ट जो कि match.__getitem__(g)पायथन 3.6 के लिए नई है, इसलिए संभवतः इसे आपके हेडर में निर्दिष्ट किया जाना चाहिए। इसके अलावा, आप करने के लिए अपने regex बदलते हैं '([AEIOUaeiou])'बदलकर एक बाइट बचाने आप x[0][1]के लिए x[1]और का उपयोग -3करने के बजाय -2
वैल्यू इंक

1
वास्तव में, यह तब और भी कम हो जाता है import re;a=lambda i,p="'([AEIOUaeiou])'":re.sub ...क्योंकि जब तक आपको किसी returnबयान की आवश्यकता नहीं होती, तब तक आप बहुत अधिक ओवरहेड काट देते हैं!
वैल्यू इंक

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.