एक ए, या एक एन?


21

अंग्रेजी में, के बीच मज़ेदार और सरल अंतर है : anऔर aआप anएक स्वर ध्वनि से शुरू होने वाले शब्द से पहले का उपयोग करते हैं, और aजब एक व्यंजन ध्वनि के साथ शब्द शुरू होता है।

इस चुनौती में सादगी के लिए, anएक शब्द है कि एक स्वर ( aeiou) के साथ शुरू होता है , और aएक शब्द है कि एक व्यंजन के साथ शुरू होता है से पहले।

इनपुट

एक स्ट्रिंग जिसमें केवल मुद्रण योग्य ASCII वर्ण होते हैं, [?]उन जगहों पर दिखाई देते हैं जहां आपको सम्मिलित करना anया चुनना होगा a[?]हमेशा एक शब्द से पहले दिखाई देगा। आप यह मान सकते हैं कि वाक्य व्याकरणिक रूप से सही होगा और सामान्य की तरह स्वरूपित होगा।

उत्पादन

इनपुट स्ट्रिंग [?]को उपयुक्त शब्द ( anया a) से बदल दिया गया है । आपको पूंजीकरण के बारे में चिंता करने की ज़रूरत नहीं है!

कैपिटल कब करें

एक शब्द को कैपिटल करें यदि यह बिना वर्णों से पहले है (इनपुट में पहला है) या यदि यह .?!एक स्थान से पहले का है ।

उदाहरण

Input: Hello, this is [?] world!
Output: Hello, this is a world!

Input: How about we build [?] big building. It will have [?] orange banana hanging out of [?] window.
Output: How about we build a big building. It will have an orange banana hanging out of a window.

Input: [?] giant en le sky.
Output: A giant en le sky.

Input: [?] yarn ball? [?] big one!
Output: A yarn ball? A big one!

Input: [?] hour ago I met [?] European.
Output: A hour ago I met an European.

Input: Hey sir [Richard], how 'bout [?] cat?
Output: Hey sir [Richard], how 'bout a cat?

यह , इसलिए बाइट्स जीत में सबसे छोटा कोड है!


ठीक है धन्यवाद। क्या हम मान सकते हैं कि किसी भी इनपुट में [?]और शब्द के बीच अतिरिक्त स्थान नहीं होगा ?
DJMcMayhem

8
क्या / a को इनपुट के बीच में कैपिटल करना होता है जब यह एक वाक्य की शुरुआत में आता है? ("यह [?] परीक्षण है। [?] परीक्षण।") यदि ऐसा है, तो विराम चिह्न किस वाक्य के साथ समाप्त हो सकता है? उद्धरण चिह्नों या कोष्ठकों में वाक्यों के बारे में क्या? या संक्षिप्तीकरण जो एक अवधि में समाप्त हो जाते हैं ("एग [?] इनपुट इस तरह")? पूंजीकरण के नियमों में बहुत सारे अजीब विशेष मामले हैं, इसलिए कृपया इस बारे में बहुत स्पष्ट रहें कि हमारे कार्यक्रम क्या करते हैं या उन्हें संभालने की आवश्यकता नहीं है।
DLosc

1
क्या आप कृपया स्पष्ट कर सकते हैं कि कब पूंजी लगाना है? पहला किरदार?
DJMcMayhem

31
आपको [?] hour ago I met [?] European.हर किसी को ऐंठने के लिए टेस्ट केस जोड़ना चाहिए ।
मार्टिन एंडर

1
अब हमारे पास होना चाहिए[?] hour ago I met [?] horse.
बीकर

जवाबों:


6

वी , 41 बाइट्स

ÍãÛ?Ý ¨[aeiou]©/an
ÍÛ?Ý/a
Í^aü[.!?] a/A

इसे ऑनलाइन आज़माएं! , जो आसानी से भी बिना किसी अतिरिक्त बाइट गिनती के साथ सभी परीक्षण मामलों को सत्यापित करने के लिए इस्तेमाल किया जा सकता है।

यह वी के "रेगेक्स संपीड़न" का लाभ उठाता है। यह बहुत सारे अप्राप्य पात्रों का उपयोग करता है, इसलिए यहां एक हेक्सडंप है:

0000000: cde3 db3f dd85 20a8 5b61 6569 6f75 5da9  ...?.. .[aeiou].
0000010: 2f61 6e0a cddb 3fdd 2f61 0acd 5e61 fc5b  /an...?./a..^a.[
0000020: 2e21 3f5d 2093 612f 41                   .!?] .a/A

दुर्भाग्य से, ओ पी ने कहा कि "तुम करते पूंजीकरण के बारे में चिंता करने की ज़रूरत!" (जोर मेरा)।
एल'एंडिया स्ट्रैटन

1
@ El'endiaStarman ओह मैं गलत है। मैं इसे ठीक कर सकता हूं, लेकिन मुझे कोई सुराग नहीं है कि क्या कैपिटल करना है, क्योंकि ओपी ने निर्दिष्ट नहीं किया था।
DJMcMayhem

@ El'endiaStarman अब फिक्स्ड।
डीजेमेकमैम

7

पर्ल, 48 बाइट्स

टन हास्पेल के कारण 1 बाइट बचा

#!perl -p
s;\[\?];A.n x$'=~/^ [aeiou]/i^$"x/[^.?!] \G/;eg

शेबबैंग को एक के रूप में गिना जाता है, इनपुट को स्टड से लिया जाता है।

व्याख्या

#!perl -p               # for each line of input, set $_, auto-print result

s;                      # begin regex substitution, with delimiter ;
\[\?]                   # match [?] literally, and replace with:
;
A.n x$'=~/^ [aeiou]/i   # 'A', concatenate with 'n' if post-match ($')
                        #   matches space followed by a vowel
^$"x/[^.?!] \G/         # if the match is preceded by /[^.?!] /, xor with a space
                        #   this will change An -> an

;eg                     # regex options eval, global

नमूना उपयोग

$ echo Hello, this is [?] world! | perl a-an.pl
Hello, this is a world!

$ echo How about we build [?] big building. It will have [?] orange banana hanging out of [?] window. | perl a-an.pl
How about we build a big building. It will have an orange banana hanging out of a window.

$ echo [?] giant en le sky. [?] yarn ball? | perl a-an.pl
A giant en le sky. A yarn ball?

$ echo [?] hour ago I met [?] European. | perl a-an.pl
A hour ago I met an European.

2
क्या आप यह समझा सकते हैं, कृपया
सूडी

1
/[.?!]/अंतरिक्ष के बाद पूंजीकरण के लिए समर्थन गायब है
टन हास्पेल

1
@TonHospel 10 घंटे पहले, समस्या ने इसका कोई उल्लेख नहीं किया।
प्राइमो

2
ठीक है, मक्खी पर कल्पना को बदलना बहुत अनुचित है। पुनश्च: मैं \Gbackwarsds जाने का उपयोग कर प्यार करता हूँ । पीपीएस, थोड़ा छोटा:s;\[\?];A.n x$'=~/^ [aeiou]/^$"x/[^.?!] \G/;eg
टन हास्पेल

1
@sudee स्पष्टीकरण शामिल करने के लिए अपडेट किया गया।
प्राइमो

7

रूबी, 78 72 बाइट्स

->s{s.gsub(/(^|\. )?\K\[\?\]( [aeiou])?/i){"anAn"[$1?2:0,$2?2:1]+"#$2"}}

Ungolfed

def f(s)
    s.gsub(/(^|\. )?\[\?\]( [aeiou])?/i) do |m|
        capitalize = $1
        vowel = $2
        replacement = if vowel then
            capitalize ? "An" : "an"
        else
            capitalize ? "A" : "a"
        end
        m.sub('[?]', replacement)
    end
end

2
"anAn"[...]वास्तव में चालाक है। 👍🏻 आप इनर को छोड़ कर कुछ बाइट्स बचा सकते हैं sub:s.gsub(/(^|\. )?\K\[\?\] ([aeiou])?/i){"anAn"[$1?2:0,$2?2:1]+" #$2"}
जॉर्डन

6

PHP, 207 बाइट्स

foreach(explode("[?]",$s)as$i=>$b){$r=Aa[$k=0|!strstr(".!?",''==($c=trim($a))?".":$c[strlen($c)-1])].n[!preg_match("#^['\"´`\s]*([aeiou]|$)#i",$d=trim($b))];echo$i?$r.$b:$b;$a=$i?''==$d?a:$b:(''==$d?".":a);}

मुझे समय-समय पर समाधान अधिक पसंद हैं ...
लेकिन मुझे यह स्वीकार करना चाहिए कि यह थोड़ा ओवरकिल है, हालांकि यह बिल्कुल समाप्त नहीं हुआ है।

फ़ाइल को सहेजें, php <filename>STDIN से इनपुट के साथ चलाएँ ।

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

How about we build [?] big building ... with [?] orange banana hanging out of [?] window.
=>  How about we build a big building ... with an orange banana hanging out of a window.

Hello, this is [?] world!               =>  Hello, this is a world!
Should I use [?] '[?]' or [?] '[?]'?    =>  Should I use an 'an' or an 'a'?
[?] elephant in [?] swimsuit.           =>  An elephant in a swimsuit.

How I met your moth[?].                 =>  How I met your motha.
b[?][?][?] short[?]ge!                  =>  banana shortage!

टूट - फूट

foreach(explode("[?]",$s)as$i=>$b)
{
    $r=
        // lookbehind: uppercase if the end of a sentence precedes
        Aa[$k=0|!strstr(".!?",''==($c=trim($a))?".":$c[strlen($c)-1])]
        .
        // lookahead: append "n" if a vowel follows (consider quote characters blank)
        n[!preg_match("#^['\"´`\s]*([aeiou]|$)#i",$d=trim($b))]
    ;
    // output replacement and this part
    echo$i?$r.$b:$b;
    // prepare previous part for next iteration
    $a=$i               // this part was NOT the first:
        ?   ''==$d
            ? a             // if empty -> a word ($r from the previous iteration)
            : $b            // default: $b
        :  (''==$d      // this WAS the first part:
            ? "."           // if empty: end of a sentence (= uppercase next $r)
            : a             // else not
        )
    ;
    // golfed down to `$a=!$i^''==$d?a:($i?$b:".");`
}

3
"केले की कमी" के लिए Upvote! LOL
मंकीज़े

@MonkeyZeus: कोशिश[?][?][?]s [?]lert!
टाइटस

मैं कल्पना कर सकते हैं एक दिल टूट गधा काँग अब कमी के बारे में बीमार चिंतित है :(
MonkeyZeus

5

मिन्कोलांग 0.15 , 75 बाइट्स

od4&r$O."]?["30$Z3&00w4X"Aa"I2-"Aa ."40$Z,*2&$rxr$O" aeiou"od0Z1=3&"n"r5X$r

यहाँ कोशिश करो!

व्याख्या

od                                                                    Take character from input and duplicate (0 if input is empty)
  4&                                                                  Pop top of stack; jump 4 spaces if not 0
    r$O.                                                              Reverse stack, output whole stack as characters, and stop.

    "]?["                                                             Push "[?]" on the stack
         30$Z                                                         Pop the top 3 items and count its occurrences in the stack
              3&                                                      Pop top of stack; jump 3 spaces if not 0
                00w                                                   Wormhole to (0,0) in the code box

                3X                                                    Dump the top 3 items of stack
                  "Aa"                                                Push "aA"
                      I2-                                             Push the length of stack minus 2
                         "Aa ."40$Z,                                  Push ". aA" and count its occurrences, negating the result
                                    *                                 Multiply the top two items of the stack
                                     2&$r                             Pop top of stack and swap the top two items if 0
                                         x                            Dump top of stack
                                          r                           Reverse stack
                                           $O                         Output whole stack as characters
                                             " aeiou"                 Push a space and the vowels
                                                     od               Take a character from input and duplicate
                                                       0Z             Pop top of stack and count its occurrences in the stack (either 1 or 2)
                                                         1=           1 if equal to 1, 0 otherwise
                                                           3&         Pop top of stack; jump 3 spaces if not 0
                                                             "n"      Push "n" if top of stack is 0

                                                             r        Reverse stack
                                                              5X      Dump top five items of stack
                                                                $r    Swap top two items of stack

ध्यान दें कि क्योंकि Minkolang toroidal है, जब प्रोग्राम काउंटर दाएं किनारे से हटता है, तो यह बाईं ओर फिर से दिखाई देता है। निश्चित रूप से गोल्फ के लिए, लेकिन क्योंकि मुझे कल्पना के कारण 21 बाइट्स जोड़ने थे, मैं कोशिश नहीं कर सकता।


6
क्या मैं केवल वही हूं जो उस स्पष्टीकरण को पढ़ने के बाद उत्साह से खेलना चाहता है?
मैजिक ऑक्टोपस उर्फ़

3

जावास्क्रिप्ट (ईएस 6), 90 86 87 85

एक बार और संपादित करें क्योंकि पूंजीकरण की कल्पना बदल गई है (अब और समझदार है)

फिर से संपादित करें 1 बाइट सहेजें thx @Huntro

संपादित करेंउद्धरण और इस तरह से प्रबंधित करने के लिए 2 और बाइट्स , जैसा कि इस्माइल मिगेल द्वारा इंगित किया गया है (भले ही मुझे नहीं पता कि यह ऑप द्वारा अनुरोध किया गया है)। ध्यान दें कि पहले मैंने 86 बाइट्स गिने थे लेकिन वे 85 थे

यदि यह अधूरा है (कम से कम) तो टिप्पणी घटना में बताए गए पूंजीकरण नियम का पालन करने की कोशिश करना

x=>x.replace(/([^!?.] )?\[\?](\W*.)/g,(a,b,c)=>(b?b+'a':'A')+(/[aeiou]/i.test(c)?'n'+c:c))

परीक्षा

f=x=>x.replace(/([^!?.] )?\[\?](\W*.)/g,(a,b,c)=>(b?b+'a':'A')+(/[aeiou]/i.test(c)?'n'+c:c))

function go() {
  var i=I.value, o=f(i)
  O.innerHTML = '<i>'+i+'</i>\n<b>'+o+'</b>\n\n'+O.innerHTML 
}

go()
#I { width:80% }
<input value='How about we build [?] big building. It will have [?] orange banana hanging out of [?] window.' id=I><button onclick='go()'>GO</button><pre id=O></pre>


नहीं [?][?]देना चाहिए Ana? और [?][?] a.उत्पादन नहीं करना चाहिए Ana a.?
इस्माइल मिगुएल

@IsmaelMiguel मुझे ठीक से समझ में नहीं आ रहा है कि आपका क्या मतलब है, लेकिन वैसे भी[?] will always appear before a word. You can assume that the sentence will be grammatically correct and formatted like normal.
edc65

मिल गया, लेकिन आपका कोड [?] "[?]".( An "A", उद्धरण अप्रासंगिक हैं) और [?] "A".(यह ठीक काम करता है [?] A.) के लिए अजीब परिणाम दे रहा है ।
इस्माईल मिगुएल

@IsmaelMiguel [?] "[?]"मान्य इनपुट नहीं है। [?] will always appear before a word और "[?]" एक शब्द नहीं है।
edc65

2
दूसरे के भागने की ]जरूरत नहीं है। /(\w )?\[\?](\W*.)/g
हंटरो

2

बैच, 136 बाइट्स

@set/ps=
@for %%v in (a e i o u)do @call set s=%%s:[?] %%v=an %%v%%
@set s=%s:[?]=a%
@if %s:~0,1%==a set s=A%s:~1%
@echo %s:. a=. A%

STDIN पर इनपुट की एक लाइन लेता है।


2

PHP, 100 92 बाइट्स

<?=preg_filter(["/\[\?]\K(?= [aeiou])/i","/([.?!] |^)\K\[\?]/","/\[\?]/"],[n,A,a],$argv[1]);

नियमित भावों को आगे बढ़ाना संभव था।

एक अपरिभाषित स्थिर के बारे में एक सूचना देता है लेकिन फिर भी काम करता है।

संपादित करें: 8 बाइट प्राइमो के लिए धन्यवाद को बचाया


[n,A,a]लुक-अराउंड असेसरीज ( \Kऔर (?= )) का उपयोग करके अपने रिप्लेसमेंट ऐरे को नीचे लाना भी संभव होना चाहिए ।
प्रिमो

2

पायथन 3.5.1, 153 147 124 बाइट्स

*s,=input().replace('[?]','*');print(*[('a','A')[i<1or s[i-2]in'.?!']+'n'*(s[i+2]in 'aeiouAEIOU')if c=='*'else c for i,c in enumerate(s)],sep='')

इनपुट:

[?] apple [?] day keeps the doctor away. [?] lie.

आउटपुट:

An apple a day keeps the doctor away. A lie.

123 बाइट्स संस्करण - यह पूंजीकरण नियम को नहीं संभालता है।

s=list(input().replace('[?]','*'));print(*['a'+'n'*(s[i+2]in 'aeiouAEIOU')if c=='*'else c for i,c in enumerate(s)],sep='')

Ideone यह!


1
कोडगुफ़ में आपका स्वागत है। आप इसका इस्तेमाल ;और गोल्फ कर सकते हैं ।
एबीसीडैक्टर

1
m.start() forहोना चाहिए m.start()for, s[i+2] in 'aeiouAEIOU'होना चाहिए s[i+2]in'aeiouAEIOU'। व्हॉट्सएप के कारण एक आसान -3 बाइट शेव।
आउटगॉल्फ

1
('an','a')[s[i+2]in'aeiouAEIOU']उलटा है, आप 'a'+'n'*(s[i+2]in'aeiouAEIOU')इसे ठीक करने और 2 बाइट्स को बचाने के लिए उपयोग कर सकते हैं । यहां आप गोल्फ के लिए बहुत सारे टिप्स पा सकते हैं
रॉड

1
यह समुदाय बहुत प्यारा है, यह देखते हुए कि कितने लोग एक नवागंतुक की मदद करने और गोल्फ युक्तियाँ प्रदान करने के लिए तैयार हैं!
यो '

1
वाह enumerate()क्या मस्त है। साभार @chepner
गुरुपाद ममदापुर

2

जावा, 180 178 बाइट्स

यहां मेरी पहली पोस्ट, मैंने केविन क्रूज़सेन पोस्ट के एक हिस्से का उपयोग किया था, लेकिन एक अलग दृष्टिकोण के साथ, उसने मुझे थोड़ा और कम करने में मदद की, इसलिए उसके लिए धन्यवाद!

String c(String s){String x[]=s.split("\\[\\?]",2),r=x[0];return x.length>1?r+(r.matches("(.+[.!?] )|(^)$")?"A":"a")+("aeiouAEIOU".contains(""+x[1].charAt(1))?"n":"")+c(x[1]):r;}

यहाँ यह अपुष्ट है:

static String c(String s) {
        String x[] = s.split("\\[\\?\\]", 2), r = x[0];
        return x.length > 1 ? r + (r.matches("(.+[.!?] )|(^)$") ? "A" : "a")
                + ("aeiouAEIOU".contains("" + x[1].charAt(1)) ? "n" : "") + c(x[1]) : r;
    }

और नतीजा

एक सरल व्याख्या, मैं हर खोजने के लिए एक पुनरावर्ती दृष्टिकोण का उपयोग करता हूं [?]

मुझे असंवेदनशील मामले के साथ मैचों का उपयोग करने का तरीका नहीं मिला (यह सुनिश्चित नहीं है कि यह संभव है)।

178bytes: मार्टिन एंडर के लिए धन्यवाद!


1
PPCG में आपका स्वागत है! मुझे नहीं लगता कि आपको ]अपने रेगेक्स में भागने की जरूरत है ।
मार्टिन एंडर

आप सही हैं, केवल शुरुआती एक ही पर्याप्त है, धन्यवाद
AxelH

2

05AB1E , 38 36 35 बाइट्स

2FžNžM‚NèSðì…[?]©ìDu«D®'a'nN׫::}.ª

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

2F            # Loop 2 times:
  žN          #  Push consonants "bcdfghjklmnpqrstvwxyz"
  žM          #  Push vowels "aeiou"
             #  Pair them together into a list
     Nè       #  And use the loop-index to index into this pair
  S           #  Convert this string to a list of characters
   ðì         #  Prepend a space in front of each character
     …[?]     #  Push string "[?]
         ©    #  Store it in variable `®` (without popping)
          ì   #  And prepend it in front of each string in the list as well
  }D          #  Then duplicate the list
    u         #  Uppercase the characters in the copy
     «        #  And merge the two lists together
              #   i.e. for the vowel-iteration we'd have ["[?] a","[?] e","[?] i","[?] o",
              #    "[?] u","[?] A","[?] E","[?] I","[?] O","[?] U"]
   D          #  Duplicate it
    ®         #  Push "[?]" from variable `®`
     'a      '#  Push "a"
       'n    '#  Push "n"
         N×   #  Repeated the 0-based index amount of times (so either "" or "n")
           «  #  And append it to the "a"
    :         #  Replace all "[?]" with "an"/"a" in the duplicated list
     :        #  And then replace all values of the lists in the (implicit) input-string
 }.ª          #  After the loop: sentence-capitalize everything (which fortunately retains
              #  capitalized words in the middle of sentences, like the "European" testcase)
              # (and after the loop the result is output implicitly)

1
इसमें थोड़ा बग है। यह प्रत्येक शब्द को "a" के बाद कैपिटल करता है। उदाहरण के लिए "[?] नारंगी" "एक नारंगी" बन जाता है। काम करने लगता है, अगर आप ]::
डोरियन

@ डोरियन वूप्स .. मैंने उसे }बाद में हटा दिया क्योंकि मुझे लगा कि यह एक बाइट बचाएगा, लेकिन आप वास्तव में सही हैं कि यह [?] vowelमामलों के लिए विफल रहता है .. मुझे बताने के लिए धन्यवाद!
केविन क्रूज़सेन

1

सी #, 204 235 बाइट्स

string n(string b){for(int i=0;i<b.Length;i++){if(b[i]=='['){var r="a";r=i==0||b[i-2]=='.'?"A":r;r=System.Text.RegularExpressions.Regex.IsMatch(b[i+4].ToString(),@"[aeiouAEIOU]")?r+"n":r;b=b.Insert(i+3,r);}}return b.Replace("[?]","");}

पूरा कार्यक्रम:

using System;

class a
{
    static void Main()
    {
        string s = Console.ReadLine();
        a c = new a();
        Console.WriteLine(c.n(s));
    }

    string n(string b)
    {
        for (int i = 0; i < b.Length; i++)
        {
            if (b[i] == '[')
            {
                var r = "a";
                r = i == 0 || b[i - 2] == '.' ? "A" : r;
                r = System.Text.RegularExpressions.Regex.IsMatch(b[i + 4].ToString(), @"[aeiouAEIOU]") ? r + "n" : r;
                b = b.Insert(i + 3, r);
            }
        }
        return b.Replace("[?]", "");
    }
}

मुझे यकीन है कि यह सुधार किया जा सकता है, विशेष रूप से रेगेक्स भाग, लेकिन अभी कुछ भी नहीं सोच सकता।


क्या यह आयात के बिना काम करता है?
बिल्ली

वूप्स, गिनती में रेगेक्स आयात को शामिल करना भूल गए।
योडल

1
गोल्फ कोड को उस रूप में चलाना चाहिए जो किसी भी प्रारूप में है - अगर यह रेगेक्स आयात के बिना नहीं चलता है, तो रेगेक्स आयात को गोल्फ कोड में भी जाना चाहिए
बिल्ली

ठीक है शुक्रिया। अभी भी इस्त्री कैसे जवाब देने के लिए। गिनती और उत्तर में अब System.Text.RegularExpressions शामिल हैं।
योडल

यह अब अच्छा लग रहा है। :) आप यहां कोड गोल्फ मेटा और फेक टैग भी देख सकते हैं ।
बिल्ली

1

जावा 7, 239 214 213 बाइट्स

String c(String s){String x[]=s.split("\\[\\?\\]"),r="";int i=0,l=x.length-1;for(;i<l;r+=x[i]+(x[i].length()<1|x[i].matches(".+[.!?] $")?65:'a')+("aeiouAEIOU".contains(x[++i].charAt(1)+"")?"n":""));return r+x[l];}

अनगढ़ और परीक्षण के मामले:

इसे यहाँ आज़माएँ।

class M{
  static String c(String s){
    String x[] = s.split("\\[\\?\\]"),
           r = "";
    int i = 0,
        l = x.length - 1;
    for (; i < l; r += x[i]
                     + (x[i].length() < 1 | x[i].matches(".+[.!?] $") 
                        ? 65
                        : 'a')
                     + ("aeiouAEIOU".contains(x[++i].charAt(1)+"")
                        ? "n"
                        : ""));
    return r + x[l];
  }

  public static void main(String[] a){
    System.out.println(c("Hello, this is [?] world!"));
    System.out.println(c("How about we build [?] big building. It will have [?] orange banana hanging out of [?] window."));
    System.out.println(c("[?] giant en le sky."));
    System.out.println(c("[?] yarn ball? [?] big one!"));
    System.out.println(c("[?] hour ago I met [?] European. "));
    System.out.println(c("Hey sir [Richard], how 'bout [?] cat?"));
    System.out.println(c("[?] dog is barking. [?] cat is scared!"));
  }
}

आउटपुट:

Hello, this is a world!
How about we build a big building. It will have an orange banana hanging out of a window.
A giant en le sky.
A yarn ball? A big one!
A hour ago I met an European. 
Hey sir [Richard], how 'bout a cat?
A dog is barking. A cat is scared!

मैंने एक पुनरावर्ती समाधान का उपयोग करने की कोशिश की, मैं 2 बाइट्स के साथ समाप्त होता हूं फिर आप :( आपको सुधार करने की आवश्यकता हो सकती है .. लेकिन जब से मैं आपके regex का उपयोग करता हूं, मुझे यह पोस्ट करना पसंद नहीं है।
AxelH

@ AxelH आप शायद इसे ideone पर पोस्ट कर सकते हैं और यहां लिंक दे सकते हैं? साथ में हम कुछ गोल्फ के लिए हाजिर कर सकते हैं। ;)
केविन क्रूज़सेन

यहाँ यह ideone.com/z7hlVi है , मैंने isEmptyregex का उपयोग करने से बेहतर अनुमोदन पाया ^$। मेरा मानना ​​है कि मैं 202 के साथ समाप्त होता हूं;)
एक्सलह

@AxelH आह अच्छा। हम्म, मैं 202 के बजाय 195 बाइट्स गिनता हूं? Btw, आप इसे 180 से गोल्फ कर सकते हैं, यदि टर्नरी के साथ प्रत्यक्ष रिटर्न कर सकते हैं, तो-और: String c(String s){String x[]=s.split("\\[\\?\\]",2),r=x[0];return x.length>1?r+(r.matches("(.+[.!?] )|(^)$")?"A":"a")+("aeiouAEIOU".contains(""+x[1].charAt(1))?"n":"")+c(x[1]):r;}निश्चित रूप से मेरे लूप-उत्तर की तुलना में कम है। :)
केविन क्रूज़सेन

हाँ, मैं अंत में एक ब्लॉक में अगर ब्लॉक डाल करने के लिए प्रबंधन, यह बदलने के लिए भूल गया। धन्यवाद;
एक्सलएच

1

रैकेट 451 बाइट्स (रेगेक्स के बिना)

यह स्पष्ट रूप से एक लंबा जवाब है, लेकिन यह एक और पूंजीकरण के साथ भी बदलता है:

(define(lc sl item)(ormap(lambda(x)(equal? item x))sl))
(define(lr l i)(list-ref l i))(define(f str)(define sl(string-split str))
(for((i(length sl))#:when(equal?(lr sl i)"[?]"))(define o(if(lc(string->list"aeiouAEIOU")
(string-ref(lr sl(add1 i))0))#t #f))(define p(if(or(= i 0)(lc(string->list".!?")
(let((pr(lr sl(sub1 i))))(string-ref pr(sub1(string-length pr))))))#t #f))
(set! sl(list-set sl i(if o(if p"An""an")(if p"A""a")))))(string-join sl))

परिक्षण:

(f "[?] giant en le [?] sky.")
(f "[?] yarn ball?")
(f "[?] hour ago I met [?] European. ")
(f "How about we build [?] big building. It will have [?] orange banana hanging out of [?] window.")
(f "Hello, this is [?] world!")

आउटपुट:

"A giant en le a sky."
"A yarn ball?"
"A hour ago I met an European."
"How about we build a big building. It will have an orange banana hanging out of a window."
"Hello, this is a world!"

विस्तृत संस्करण:

(define(contains sl item)
  (ormap(lambda(x)(equal? item x))sl))

(define(lr l i)
  (list-ref l i))

(define(f str)
  (define sl(string-split str))
  (for((i(length sl))#:when(equal?(lr sl i)"[?]"))
    (define an   ; a or an
      (if(contains(string->list "aeiouAEIOU")
                  (string-ref(lr sl(add1 i))0))
         #t #f ))
    (define cap   ; capital or not
      (if(or(= i 0)(contains(string->list ".!?")
                            (let ((prev (lr sl(sub1 i)))) (string-ref prev
                                       (sub1(string-length prev))))))
         #t #f))
    (set! sl(list-set sl i (if an (if cap "An" "an" )
                                 (if cap "A" "a")))))
  (string-join sl))


यह एक उत्कृष्ट भाषा है, हालांकि इसका मतलब गोल्फिंग नहीं है।
14


1

रेटिना , 66 60 बाइट्स

i`\[\?\]( ([aeiou]?)[a-z&&[^aeiou])
a$.2*n$1
(^|[.?!] )a
$1A

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

स्पष्टीकरण:

[?]एक स्वर या व्यंजन के बाद केस-असंवेदनशील खोज करें , जहां वैकल्पिक स्वर कैप्चर समूह 2 में सहेजा गया है, और कैप्चर ग्रुप 1 में पूरा मैच:

i`\[\?\]( ([aeiou]?)[a-z&&[^aeiou])

इसे aदूसरे समूह की राशि की लंबाई के साथ प्रतिस्थापित करें , n(इसलिए या तो 0 या 1 n), इसके बाद कैप्चर ग्रुप 1 के अक्षर (एस) के साथ करें:

a$.2*n$1

फिर aया तो स्ट्रिंग की शुरुआत में मैच करें , या .?!प्लस के बाद एक स्थान:

(^|[.?!] )a

और कैप्चर ग्रुप 1 के अन्य वर्णों को हटाए बिना A को अपरकेस:

$1A

1

जावा (JDK) , 154 बाइट्स

s->{String v="(?= [aeiou])",q="(?i)\\[\\?]",b="(?<=^|[?.!] )";return s.replaceAll(b+q+v,"An").replaceAll(q+v,"an").replaceAll(b+q,"A").replaceAll(q,"a");}

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

स्पष्टीकरण:

s->{
    String v="(?= [aeiou])",          // matches being followed by a vowel
    q="(?i)\\[\\?]",                  // matches being a [?]
    b="(?<=^|[?.!] )";                // matches being preceded by a sentence beginning
    return s.replaceAll(b+q+v,"An")   // if beginning [?] vowel, you need "An"
        .replaceAll(q+v,"an")         // if           [?] vowel, you need "an"
        .replaceAll(b+q,"A")          // if beginning [?]      , you need "A"
        .replaceAll(q,"a");}          // if           [?]      , you need "a"


0

ग्रोवी, 73 162 बाइट्स

def a(s){s.replaceAll(/(?i)(?:(.)?( )?)\[\?\] (.)/){r->"${r[1]?:''}${r[2]?:''}${'.?!'.contains(r[1]?:'.')?'A':'a'}${'aAeEiIoOuU'.contains(r[3])?'n':''} ${r[3]}"}}

संपादित करें: लानत है, पूंजीकरण पूरी तरह से यहाँ सब कुछ जटिल है


क्या यह एक वाक्य की शुरुआत में बड़ा होता है?
टाइटस

नहीं। मैं अब देखता हूं, कि इस बीच चुनौती विवरण बदल दिया गया है ...
नूरगान

"मुझे दे दो [?] घंटे के साथ [?] खुला तहखाने का दरवाजा।" अपना कोड तोड़ता है: groovyconsole.appspot.com/edit/515991505626726464
मैजिक ऑक्टोपस Urn

चुनौती का वर्णन अभी भी पूरी तरह से असंगत है। पहले यह कहता है "आपको पूंजीकरण के बारे में चिंता करने की ज़रूरत है!" और इसके तुरंत बाद पूंजीकरण के नियम हैं
नूरगान

यह सुसंगत है। आपको पूंजीकरण के बारे में चिंता करना होगा (अर्थात, आपको इसे प्रबंधित करने की आवश्यकता है)। फिर यह बताता है कि कैसे
edc65

0

सी # 209 बाइट्स

string A(string b){var s=b.Split(new[]{"[?]"},0);return s.Skip(1).Aggregate(s[0],(x,y)=>x+(x==""||(x.Last()==' '&&".?!".Contains(x.Trim().Last()))?"A":"a")+("AEIOUaeiou".Contains(y.Trim().First())?"n":"")+y);}

प्रारूपित

string A(string b)
{
    var s = b.Split(new[] { "[?]" }, 0);
    return s.Skip(1).Aggregate(s[0], (x, y) => x + (x == "" || (x.Last() == ' ' && ".?!".Contains(x.Trim().Last())) ? "A" : "a") + ("AEIOUaeiou".Contains(y.Trim().First()) ? "n" : "") + y);
}

0

पर्ल 6 , 78 बाइट्स

{S:i:g/(^|<[.?!]>' ')?'[?] '(<[aeiou]>?)/{$0 xx?$0}{<a A>[?$0]}{'n'x?~$1} $1/}

स्पष्टीकरण:

{
  S
    :ignorecase
    :global
  /
    ( # $0
    | ^             # beginning of line
    | <[.?!]> ' '   # or one of [.?!] followed by a space
    ) ?             # optionally ( $0 will be Nil if it doesn't match )

    '[?] '          # the thing to replace ( with trailing space )

    ( # $1
      <[aeiou]> ?   # optional vowel ( $1 will be '' if it doesn't match )
    )

  /{
    $0 xx ?$0      # list repeat $0 if $0
                   # ( so that it doesn't produce an error )
  }{
    < a A >[ ?$0 ] # 'A' if $0 exists, otherwise 'a'
  }{
    'n' x ?~$1     # 'n' if $1 isn't empty
                   # 「~」 turns the Match into a Str
                   # 「?」 turns that Str into a Bool
                   # 「x」 string repeat the left side by the amount of the right

  # a space and the vowel we may have borrowed
  } $1/
}

परीक्षा:

#! /usr/bin/env perl6
use v6.c;
use Test;

my &code = {S:i:g/(^|<[.?!]>' ')?'[?] '(<[aeiou]>?)/{<a A>[?$0]~('n'x?~$1)} $1/}

my @tests = (
  'Hello, this is [?] world!'
  => 'Hello, this is a world!',

  'How about we build [?] big building. It will have [?] orange banana hanging out of [?] window.'
  => 'How about we build a big building. It will have an orange banana hanging out of a window.',

  '[?] giant en le sky.'
  => 'A giant en le sky.',

  '[?] yarn ball?'
  => 'A yarn ball?',

  '[?] hour ago I met [?] European.'
  => 'A hour ago I met an European.',

  "Hey sir [Richard], how 'bout [?] cat?"
  => "Hey sir [Richard], how 'bout a cat?",
);

plan +@tests;

for @tests -> $_ ( :key($input), :value($expected) ) {
  is code($input), $expected, $input.perl;
}
1..6
ok 1 - "Hello, this is a world!"
ok 2 - "How about we build a big building. It will have an orange banana hanging out of a window."
ok 3 - "A giant en le sky."
ok 4 - "A yarn ball?"
ok 5 - "A hour ago I met an European."
ok 6 - "Hey sir [Richard], how 'bout a cat?"

क्या आप } $1अंत में (इसे बनाते हुए }$1) से कोई स्थान निकाल सकते हैं ?
साइओस

@Cyoce ऐसा करने का एक तरीका है, लेकिन यह कहीं और जटिलता जोड़ता है। {S:i:g/(^|<[.?!]>' ')?'[?]'(' '<[aeiou]>?)/{<a A>[?$0]~('n'x?~$1.substr(1))}$1/}
ब्रैड गिल्बर्ट bggg

ठीक है, मुझे यकीन नहीं था कि पर्ल कितना पार्सल करेगा
18

0

लूआ, 131 बाइट्स।

function(s)return s:gsub("%[%?%](%s*.)",function(a)return"a"..(a:find("[AEIOUaeiou]")and"n"or"")..a end):gsub("^.",string.upper)end

यद्यपि लुआ गोल्फ के लिए एक भयानक भाषा है, मुझे लगता है कि मैंने बहुत अच्छा किया है।


0

पिप , ६२ ५५ 54 50 बाइट्स

स्ट्रिंग को कमांड-लाइन तर्क के रूप में लेता है।

aR-`([^.?!] )?\[\?]( [^aeiou])?`{[b"aA"@!b'nX!cc]}

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

स्पष्टीकरण:

a                                                   Cmdline argument
 R                                                  Replace...
  -`                           `                    The following regex (case-insensitive):
    ([^.?!] )?                                      Group 1: not end-of-sentence (nil if it doesn't match)
              \[\?]                                 [?]
                   ( [^aeiou])?                     Group 2: not vowel (nil if there is a vowel)
                                {                }  ... with this callback function (b = grp1, c = grp2):
                                 [              ]   List (concatenated when cast to string) of:
                                  b                 Group 1
                                   "aA"@!b          "a" if group 1 matched, else "A"
                                          'nX!c     "n" if group 2 didn't match, else ""
                                               c    Group 2

0

रैकेट (रेगेक्स के साथ) 228 बाइट्स

(define(r a b c)(regexp-replace* a b c))
(define(f s)
(set! s(r #rx"[a-zA-Z ]\\[\\?\\] (?=[aeiouAEIOU])"s" an "))
(set! s(r #rx"[a-zA-Z ]\\[\\?\\]"s" a"))
(set! s(r #rx"\\[\\?\\] (?=[aeiouAEIOU])"s"An "))
(r #rx"\\[\\?\\]"s"A"))

परिक्षण:

(f "[?] giant en le [?] sky.")
(f "[?] yarn ball?")
(f "[?] apple?")
(f "[?] hour ago I met [?] European. ")
(f "How about we build [?] big building. It will have [?] orange banana hanging out of [?] window.")
(f "Hello, this is [?] world!")

आउटपुट:

"A giant en le a sky."
"A yarn ball?"
"An apple?"
"A hour ago I met an European. "
"How about we build a big building. It will have an orange banana hanging out of a window."
"Hello, this is a world!"

0

पायथन 3 , 104 103 बाइट्स

-1 बाइट्स, अनसैप्ड ]

lambda s:r('(^|[.?!] )a',r'\1A',r('a( [aeiouAEIOU])',r'an\1',r('\[\?]','a',s)));from re import sub as r

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

के [?]साथ होने वाली सभी घटनाओं को प्रतिस्थापित करने से शुरू होता है a,
फिर aएक स्वर के साथ सभी की जगह लेता है an
फिर aइनपुट या एक वाक्य के शुरू में सभी को बदल देता है A

मान लेता है कि [?]कभी किसी दूसरे शब्द को नहीं छूना चाहिए, और उस निचले मामले aको कभी भी एक वाक्य शुरू नहीं करना चाहिए।


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