একটি এ, বা একটি আন?


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?

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোড!


ঠিক আছে ধন্যবাদ. আমরা কি ধরে নিতে পারি যে কোনও [?]শব্দ এবং শব্দের মধ্যে অতিরিক্ত স্পেস থাকবে না ?
ডিজেএমসিএমহেম

8
কোনও বাক্য শুরুর সময় কী ইনপুটটির মাঝখানে মূলধন করতে হবে? ("এটি [?] পরীক্ষা। [?] পরীক্ষা।") যদি তাই হয় তবে কোন বাক্যটি কোন বাক্য দিয়ে শেষ হতে পারে? উদ্ধৃতি চিহ্ন বা প্রথম বন্ধনী বাক্য সম্পর্কে কী? বা সংক্ষিপ্তসারগুলি যা একটি পিরিয়ডে শেষ হয় ("উদাহরণস্বরূপ?? মূলধনের বিধিগুলিতে প্রচুর অদ্ভুত বিশেষ কেস থাকে, তাই দয়া করে আমাদের প্রোগ্রামগুলি কী করে বা পরিচালনা করার দরকার নেই সে সম্পর্কে খুব স্পষ্ট থাকুন।
DLosc

1
আপনি কখন অনুগ্রহ করে স্পষ্ট করতে পারেন? প্রথম চরিত্র?
ডিজেএমসিএমহেম

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
পছন্দ করেছেন আমি এটিকে ঠিক করতে পারি, তবে ওপি নির্দিষ্ট করে না বলে আমার কী কী মূলধন করা যায় তার কোনও ধারণা নেই।
ডিজেএমসিএমহেম

@ এল'অ্যান্ডিয়াস্টারম্যান এখনই স্থির।
ডিজেএমসিএমহেম

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
আপনি কি এই ব্যাখ্যা করতে পারেন, দয়া করে?
sudee

1
/[.?!]/স্থান অনুসরণ করার পরে মূলধনের জন্য সমর্থন অনুপস্থিত
টন হসপেল

1
@ টনহসপেল 10 ঘন্টা আগে, সমস্যাটির কোনও উল্লেখ করা হয়নি।
primo

2
ঠিক আছে, উড়ে যাওয়ার জন্য অনুমানটি পরিবর্তন করা এতটা অন্যায়। পিএস: আমি \Gব্যাকওয়ার্ডস ব্যবহার করতে পছন্দ করি। পিপিএস, কিছুটা খাটো:s;\[\?];A.n x$'=~/^ [aeiou]/^$"x/[^.?!] \G/;eg
টন হসপেল

1
@ সুদী ব্যাখ্যা অন্তর্ভুক্ত করতে আপডেট হয়েছে।
primo

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"[...]সত্যিই চালাক। The আপনি অভ্যন্তর এড়িয়ে কিছু বাইট সংরক্ষণ করতে পারেন sub:s.gsub(/(^|\. )?\K\[\?\] ([aeiou])?/i){"anAn"[$1?2:0,$2?2:1]+" #$2"}
জর্ডান

6

পিএইচপি, 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>এসটিডিএন থেকে ইনপুট দিয়ে চালান।

পরীক্ষার কেস

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
"কলা ঘাটতি"! 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

নোট করুন যেহেতু মিনকোলাং টরোডিয়াল, যখন প্রোগ্রামের কাউন্টারটি ডান প্রান্ত থেকে সরে যায়, এটি বাম দিকে আবার উপস্থিত হয়। অবশ্যই গল্ফযোগ্য, তবে অনুমানের কারণে আমাকে 21 বাইট যুক্ত করতে হয়েছিল, আমি চেষ্টা করতে পারি না।


6
আমি কি সেই ব্যক্তি যারা সেই ব্যাখ্যাটি পড়ার পরে উত্তেজনা খেলতে যেতে চান?
ম্যাজিক অক্টোপাস উরান

3

জাভাস্ক্রিপ্ট (ES6), 90 86 87 85

মূলধনের জন্য জল্পনা পরিবর্তন হওয়ার সাথে সাথে আরও একবার সম্পাদনা করুন (এখন আরও বুদ্ধিমান)

আবার 1 বাইট সম্পাদনা করুন THX @ হুন্ট্রো সংরক্ষণ করুন

ইসমাইলমিগুয়েলের নির্দেশিত (যেমনটি অপের মাধ্যমে অনুরোধ করা হয়েছে কিনা তা আমার জানা না থাকলেও) উদ্ধৃতি এবং এ জাতীয় পছন্দগুলি পরিচালনা করতে আরও 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.?
ইসমাইল মিগুয়েল

@ ইসমাইল মিগুয়েল আমি ঠিক কী বলতে চাই তা বুঝতে পারি না তবে যাইহোক[?] 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.
ইসমাইল মিগুয়েল

@ ইসমাইলমিগুয়েল [?] "[?]"বৈধ ইনপুট নয়। [?] 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

পিএইচপি, 100 92 বাইট

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

নিয়মিত প্রকাশগুলি আরও গল্ফ করা সম্ভব হয়েছিল।

অপরিবর্তিত ধ্রুবক সম্পর্কে একটি বিজ্ঞপ্তি দেয় তবে এখনও কাজ করে।

সম্পাদনা করুন: প্রাইমোর জন্য 8 টি বাইট সংরক্ষণ করা হয়েছে


আপনার প্রতিস্থাপনের অ্যারেটি [n,A,a]লু-পার্শ্ব যুক্তি ( \Kএবং (?= )) ব্যবহার করে নীচে নামাও সম্ভব হওয়া উচিত ।
primo

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='')

আইডিয়ন!


1
কোডগল্ফ স্বাগতম। আপনি এটি ব্যবহার ;এবং গল্ফ করতে পারে।
ABcDexter

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()ভাল। ধন্যবাদ @ চেপনার
গুরুপদ মামাদপুর

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

এবং ফলাফল

একটি সহজ ব্যাখ্যা, আমি প্রতিটি খুঁজে পেতে একটি পুনরাবৃত্তি পদ্ধতির ব্যবহার করি [?]

সংবেদনশীল ক্ষেত্রে ম্যাচগুলি ব্যবহার করার কোনও উপায় আমি খুঁজে পেলাম না (এটি সম্ভব কিনা তা নিশ্চিত নয়)।

178 বাইটস: মার্টিন ইন্ডারকে ধন্যবাদ!


1
পিপিসিজিতে আপনাকে স্বাগতম! আমি মনে করি না যে ]আপনার রেজিজেসে আপনাকে পালাতে হবে ।
মার্টিন ইন্ডার

আপনি ঠিক বলেছেন, কেবল উদ্বোধনী
একটিকেই অনুগ্রহ করা হয়েছে

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
এটিতে একটি ছোট বাগ রয়েছে। এটি প্রতিটি শব্দকে "an" এর পরে মূলধন করে। উদাহরণস্বরূপ "[?] কমলা" "একটি কমলা" হয়ে যায়। কাজ দেখে মনে হচ্ছে, যদি আপনি এর ]পরে কোনও যোগ করেন::
ডোরিয়ান

@ ডরিয়ান উওফস .. আমি }পরে এটি অপসারণ করেছি কারণ আমি ভেবেছিলাম এটি একটি বাইট সংরক্ষণ করবে, তবে আপনি সত্যই বলেছেন যে এটি [?] 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
গল্ফযুক্ত কোডটি যে কোনও ফর্ম্যাটে যেমন চলতে হবে - যদি তা রেজেক্স আমদানি ব্যতীত না চলে, তবে রেজেক্স আমদানিটিও গল্ফ কোডে চলে যেতে হবে
বিড়াল

ঠিক আছে, ধন্যবাদ. এখনও ঠিক কীভাবে উত্তর দিতে হবে তা আয়রন করছেন। গণনা এবং উত্তরের মধ্যে এখন সিস্টেম.টেক্সট।আজমানিক এক্সপ্রেসশন রয়েছে।
ইয়োডল

এটি এখন দুর্দান্ত দেখাচ্ছে। :) আপনি কোড গল্ফ মেটা এবং সেখানে প্রায়শই জিজ্ঞাসা করা ট্যাগ দেখতে পারেন।
বিড়াল

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 বাইট বেশি পরে শেষ করব :( সম্ভবত আপনার উন্নতি করা দরকার .. তবে যেহেতু আমি আপনার রেজেক্স ব্যবহার করি, তাই আমি এটি পোস্ট করতে পছন্দ করি না
এক্সেল এইচ

@ অ্যাক্সেলএইচ আপনি এখানে আদর্শ এবং লিঙ্কে পোস্ট করতে পারেন? একসাথে আমরা গল্ফ কিছু স্পট হতে পারে। ;)
কেভিন ক্রুইজসেন

এখানে আইডিয়োনেজ / এজেইএলএলভি , আমি রেজেগ্সisEmpty ব্যবহার করার চেয়ে ভাল পদ্ধতির সন্ধান পেয়েছি ^$। আমি বিশ্বাস করি যে আমি 202% এর সাথে শেষ করেছি)
এক্সেল এইচ

পছন্দ করুন হুম, আমি 202 এর পরিবর্তে 195 বাইট গণনা করব? বিটিডব্লিউ, আপনি যদি কোনও টার্নারি দিয়ে সরাসরি রিটার্ন দিয়ে 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))


এটি একটি দুর্দান্ত ভাষা, যদিও গল্ফের জন্য নয়।
rnso


1

রেটিনা , 66 60 বাইট

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

এটি অনলাইনে চেষ্টা করুন।

ব্যাখ্যা:

[?]স্বর বা ব্যঞ্জনবর্ণের পরে কেস-সংবেদনশীল অনুসন্ধান করুন , যেখানে ক্যাপচার গ্রুপ 2-তে alচ্ছিক স্বর সংরক্ষণ করা হবে এবং ক্যাপচার গ্রুপ 1-এ সম্পূর্ণ ম্যাচ:

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

এটি দিয়ে একটি প্রতিস্থাপন করুন a দ্বিতীয় গ্রুপের পরিমাণের দৈর্ঘ্য n(সুতরাং 0 বা 1 n) এর পরে এবং ক্যাপচার গ্রুপ 1 এর অক্ষর (গুলি) এর পরে এটি :

a$.2*n$1

তারপরে ম্যাচ করুন একটি a স্ট্রিংয়ের শুরুতে, বা দুটি .?!স্থানের পরে কোনও :

(^|[.?!] )a

এবং ক্যাপচার গ্রুপ 1 এর অন্যান্য অক্ষরগুলি বাদ না দিয়ে একটি বড়হাঁস:

$1A

1

জাভা (জেডিকে) , 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]}"}}

সম্পাদনা: জঘন্য, মূলধন এখানে সবকিছু সম্পূর্ণ জটিল complicated


এটি কি একটি বাক্য শুরুতে মূলধন করে?
তিতাস

নাঃ। আমি এখন দেখছি, এর মধ্যে চ্যালেঞ্জের বর্ণনাটি পরিবর্তিত হয়েছে ...
নরগানোস

"আমাকে [?] ঘরের সাথে খোলা ভুগর্ভস্থ দরজা দিয়ে দিন?" আপনার কোডটি ভঙ্গ করে
যাদু অক্টোপাস

চ্যালেঞ্জের বিবরণ এখনও সম্পূর্ণ বেমানান। প্রথমে এটি বলে "আপনাকে মূলধনের বিষয়ে চিন্তা করতে হবে না!" এবং সরাসরি তার পরে মূলধনের জন্য নিয়ম রয়েছে
নর্দানগুলি

এটি ধারাবাহিক। আপনাকে মূলধন সম্পর্কে চিন্তিত হতে হবে (এটি আপনাকে পরিচালনা করতে হবে)। তারপরে এটি ব্যাখ্যা করে কীভাবে
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)?
সাইয়েস

@ কিয়েস এটি করার একটি উপায় আছে তবে এটি অন্য কোথাও আরও জটিলতা যুক্ত করে। {S:i:g/(^|<[.?!]>' ')?'[?]'(' '<[aeiou]>?)/{<a A>[?$0]~('n'x?~$1.substr(1))}$1/}
ব্র্যাড গিলবার্ট 17

ঠিক আছে, আমি নিশ্চিত ছিলাম না যে পার্ল কীভাবে তা পার্স করবে
সাইয়েস

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

পিপ , 62 55 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 বাইট

-১ বাইট, আনসকেপড ]

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

এটি অনলাইন চেষ্টা করুন!

সব occurences প্রতিস্থাপন শুরু করা [?]সঙ্গে a,
তাহলে সব প্রতিস্থাপন aএকটি স্বরবর্ণ দ্বারা অনুসরণ, সঙ্গে an
তারপরে aইনপুট শুরু করার সাথে বা একটি বাক্যটি সমস্ত দিয়ে প্রতিস্থাপন করেA

ধরে নিই যে [?]কখনই অন্য শব্দের ছোঁয়া লাগবে না এবং ছোট হাতের অক্ষরটি aকখনও বাক্য শুরু করা উচিত নয়।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.