একটি যোদা-ভাষী চ্যালেঞ্জ, এটি


44

চ্যালেঞ্জ

ঠিক আছে, আমি মনে করি এটি বেশ পরিষ্কার, তাই না? আপনাকে একটি ফাংশন বা একটি প্রোগ্রাম তৈরি করতে হবে যা আর্গুমেন্ট হিসাবে একটি স্ট্রিং নেয় এবং সংযোজনীয় যোদা স্পিকিংয়ের ফলাফল দেয়।

এটি , তাই কমপক্ষে সংখ্যা বাইট জেতে।

ইনপুট

ইনপুট লাইনফিড ছাড়াই কোনও স্ট্রিং হতে পারে । আপনি যদি কোনও স্ট্রিং এরকম রচিত থাকে তবে অনুবাদ করতে পারেন:

বিষয় + ক্রিয়া + আরও কিছু।

যেখানে সাবজেক্টটি একটি ব্যক্তিগত সর্বনাম (আমি, আপনি, তিনি, তিনি, তিনি, তিনি, আমরা, তারা)। দ্বিতীয় শব্দের একটি ক্রিয়াপদ এটি আপনাকে চিনতে হবে না।

যদি প্রথম শব্দটি সর্বনাম না হয় তবে ইনপুটটি বৈধ তবে আউটপুট হবে Too difficult, this sentence is.

You have to win this code challenge -> Translatable
Luke has to win this code challenge -> Untranslatable

একটি চিঠি দিয়ে ইনপুট শেষ হতে পারে, ক। বা একটি!, একটি সঙ্গে না?।

তদতিরিক্ত, স্ট্রিংগুলিতে অ-এসকি, প্যারেন্টেসিস, কমা, কলোন থাকতে পারে ...

আউটপুট

অনুবাদযোগ্য বাক্যটির ক্ষেত্রে আউটপুট একই বাক্য, বাক্যটির শেষে বিষয় এবং ক্রিয়া সহ।

You have to win this code challenge -> To win this code challenge, you have.

সর্বনামের সাথে কমা, পিরিয়ড এবং লোয়ার-কেস বাধ্যতামূলক। (অবশ্যই, যদি সর্বনাম আমি হয় তবে)

যেমন আগে বলা হয়েছে, এটি যদি অপ্রয়োজনীয় হয় তবে আপনাকে স্ট্রিং আউটপুট করতে হবে Too difficult, this sentence is.

উদাহরণ

You have to win this code challenge -> To win this code challenge, you have.
He won this code challenge -> This code challenge, he won.  (I know this is not yoda-speaking, but I don’t want to overcomplicate this challenge)
I ate an ice cream earlier! -> An ice cream earlier, I ate.
I liked the Star Wars original trilogy more than the prequel’s one. -> The Star Wars original trilogy more than the prequel’s one, I liked.
I find your lack of faith disturbing -> Your lack of faith disturbing, I find.
I think we are done with the examples -> We are done with examples, I think.
He is your son, Vader -> Your son, Vader, he is.
I think they’ll add new features -> They’ll add new features, I think.
I made a fantastic code challenge (I hope) -> A fantastic code challenge (I hope), I made.
I love constants like π -> Constants like π, I love.

I’ll be the next President, I swear! -> Too difficult, this sentence is.
This challenge is great! -> Too difficult, this sentence is.
Is this challenge great? -> Too difficult, this sentence is.
Luke is not ready for this task -> Too difficult, this sentence is.
Somebody loves constants like π -> Too difficult, this sentence is.
[Empty string] -> Too difficult, this sentence is.

9
একটি প্রশ্নবিহীন দৃষ্টিকোণ থেকে, infinitives পাশাপাশি সরানো উচিত নয়? উদাহরণস্বরূপ, হওয়া You have to win this code challengeউচিত This code challenge, you have to win
অ্যাডিসন ক্রম্প 12

9
"এই কোড চ্যালেঞ্জটি জিততে আপনার কাছে আছে" " সত্যিই অদ্ভুত শোনায়।
নিকেল

3
ইনপুটটিতে কমা থাকতে পারে? যদি কোনও চিঠি, পিরিয়ড বা ইনপুট শেষ না হয় তবে কী হবে !? এটি কি না হওয়ার গ্যারান্টিযুক্ত বা আমাদের হ্যান্ডেল করা উচিত এবং যখন কোনও শীর্ষস্থানীয় সর্বনাম নেই তখন একই জিনিসটি মুদ্রণ করা উচিত? ইনপুটটিতে লাইনফিড থাকতে পারে? অ্যাপস্ট্রফিগুলি? কোলন / প্রথম বন্ধনী / ব্যাকটিক? নন-এএসসিআইআই অক্ষর? আপনি বলছেন যে "ইনপুটটি কোনও স্ট্রিং হতে পারে ", তবে আপনার পরীক্ষার ক্ষেত্রে কেবল খুব নির্দিষ্ট ধরণের স্ট্রিং থাকে।
মার্টিন এন্ডার

4
ইংরেজিতে 'হ্যাভ টু' একটি অদ্ভুত সহায়ক-ক্রিয়াপদ নির্মাণ; এটা সম্ভবত Yoda এটি ব্যবহার করবে। "এই কোড চ্যালেঞ্জ, জয়, আপনার অবশ্যই।" অন্যদিকে, যোদার নিজস্ব সাহায্যকারী-ক্রিয়া নির্মাণ রয়েছে যা তিনি ব্যবহার করতে চান: "এই কোড চ্যালেঞ্জ, জিতেছে, সে করেছে।" আমি যোদা "এই কোড চ্যালেঞ্জটি বলেছি, তিনি" বা "এই কোড চ্যালেঞ্জটি জিততে জিতেছেন, আপনার কাছে আছে" বলে চিত্রিত করতে পারি না।
লিন্ডা জিনে

4
উত্তরগুলি আরও 'মিম্ম্মের দরকার নেই?
স্টিভ আইভেস

উত্তর:


17

রেটিনা, 162 137 145 134 131 129

একাধিক বিরামচিহ্ন এখন সঠিকভাবে পরিচালনা করা হয়। পরীক্ষা ক্ষেত্রে:You will not win this challenge...! -> Not win this challenge..., you will.

অনলাইনে চেষ্টা করে দেখুন!

[.!]$

T`A-Z`a-z`^\w\w
G`^(I|we|you|s?he|it|they) \S+ \S
(\S+ \S+) (.*)
$2, $1.
T`a-z`A-Z`^.
^$
Too difficult, this sentence is.

বর্ণনা:

যদি শেষদিকে বিরামচিহ্ন থাকে তবে এটি মুছুন।

[.!]$

^empty line

সর্বনামটিকে নিম্নের ক্ষেত্রে রূপান্তর করুন, এটি আমি ছাড়া।

T`A-Z`a-z`^\w\w

মেলে না এমন কোনও লাইন ফিল্টার করুন <Pronoun><space><word><space><word>...

G`^(I|we|you|s?he|it|they) \S+ \S

বিভক্ত করুন pronoun + verb, remainder। তারপরে পুনরায় সাজান।

(\S+ \S+) (.*)
$2, $1.

প্রথম চরিত্রকে আপার ক্ষেত্রে রূপান্তর করুন।

T`a-z`A-Z`^.

ফলাফলটি খালি থাকলে এটি উপরের ফিল্টারটি পাস করেনি। একটি ত্রুটি বার্তা মুদ্রণ করুন।

^$
Too difficult, this sentence is.

ট্রান্সলিটেশন মোডে অক্ষর শ্রেণিগুলি বর্গাকার বন্ধনী ব্যবহার করে না।
মার্টিন এন্ডার

1
এছাড়াও, [^ ]সম্ভবত \Sসর্বত্র সর্বত্র প্রতিস্থাপন করা যেতে পারে , এবং প্রথম রেজেক্সে [^ ]+প্রতিস্থাপন করা যেতে পারে .+। চরিত্রের ক্লাসগুলিতে আপনার পালানোর দরকার নেই .তাই [.!]কাজ করে। এছাড়াও, যেহেতু আপনি ক্রম অদলবদল না $1এবং $2তৃতীয় পর্যায়ে, আপনি তাদের একটি একক গ্রুপ মধ্যে ক্যাপচার এবং 5 বাইট সংরক্ষণ করতে পারবেন।
মার্টিন এন্ডার

([^I]|It)সংক্ষিপ্ত করা যেতে পারে^\w\w
মার্টিন এন্ডার

বাহ, কত উন্নতি। ধন্যবাদ।
রেনার পি।

আমি মনে করি I|Itহয়ে যাবে I?, যদি রেটিনা সমর্থন করে
কোনোর ব্রায়েন

7

ES6, 212

এটি সম্ভবত আরও কিছুটা নিচে নেমে যেতে পারে:

i=>(r=/(you|s?he|it?|we|they)( \S+) ([^\.!?]+)/i.exec(i))?(c=(a,b)=>a[`to${['Low','Upp'][b]}erCase`]())(r[3].slice(0,1),1)+r[3].slice(1)+", "+c(r[1],+(/i/i.test(r[1])))+r[2]+".":"Too difficult, this sentence is."

জেএসফিডাল (ক্রোমের মতো আপ-টু-ডেট ব্রাউজারের প্রয়োজন) বা এটি নোড.জেএস এর মাধ্যমে চালায়

Ungolfed:

i=>{
    r=/(you|s?he|it?|we|they)( \S+) ([^\.!?]+)/i.exec(i); //Main RegExp
    c=(a,b)=>a[`to${['Low','Upp'][b]}erCase`](); //shortcut for toUpperCase/toLowerCase
    if (r)
        return c(r[3].slice(0,1),1)+r[3].slice(1) + ", " //the "something else", properly formated
             + c(r[1], +(/i/i.test(r[1]))) //The subject lowercased except for "i" or "I"
             + r[2] + "."; //The End
    else //no match, no sentence to translate
        return "Too difficult, this sentence is.";
}

ভাঙা পরীক্ষা: I think they’ll add new features-> They, I think.গুগল ক্রোমে 47.0.2526.106 মি। এছাড়াও, এটি পছন্দ করে না I love constants like π। এটি যোগ করতে, এর পরিবর্তে I made a fantastic code challenge (I hope)ফিরে আসেA fantastic code challenge , I made.A fantastic code challenge (I hope), I made.
ইসমাইল মিগুয়েল

@ ইসমাইল মিগুয়েল স্থির হয়েছে, কিন্তু আমি আরও ঠিক করেছি এমন একটি বাগের কারণে 3 টি অক্ষরও কম পেয়েছে
হেল্কো

এটি সমস্ত সমস্যার সমাধান করেছে, সমস্ত পরীক্ষা ঠিক আছে বলে মনে হচ্ছে। সাবাশ! আপনি আমার upvote পেয়েছেন।
ইসমাইল মিগুয়েল

3
আপনাকে ^আপনার রেজেক্সের শুরুতে যুক্ত করতে হবে অন্যথায় সর্বনামের আগে কোনও পাঠ্য সহ একটি বাক্যটি বৈধ হিসাবে পার্স করা হবে।
ব্যবহারকারী 81655

6

জাভাস্ক্রিপ্ট (ES6), 164 বাইট

s=>([,p,,i,r]=s.match`^(((I)|You|He|She|It|We|They) \\S+) (.*?)[.!]?$`)?r[0].toUpperCase()+r.slice(1)+`, ${i?p:p.toLowerCase()}.`:"Too difficult, this sentence is."

ব্যাখ্যা

স্ট্রিংয়ের প্রথম অক্ষরের মূলধনটি কতটা বাইট জাভাস্ক্রিপ্টে লাগে তা প্রায় বেদনাদায়ক ...

s=>

  // Match and get specific parts of the input string
  ([,p,,i,r]=s.match`^(((I)|You|He|She|It|We|They) \\S+) (.*?)[.!]?$`)?

    r[0].toUpperCase()+r.slice(1)     // capitalise first letter
      +`, ${i?p:p.toLowerCase()}.`    // lower-case the pronoun (unless it is I)
  :"Too difficult, this sentence is."

পরীক্ষা

পরীক্ষা আরও ক্রস ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ করতে ডেস্ট্রাকচারিং অ্যাসাইনমেন্ট ব্যবহার করে না।


162 অক্ষর: var সমাধান = s => (p = s.match ^(((It?)|You|[HW]e|[ST]hey) \\S+) (.*?)[.!]?$)? পি [4] [0] .to আপার কেস () + পি [4]। স্লাইস (1) + , ${p[3]?p[1]:p[1].toLowerCase()}.: "খুব কঠিন, এই বাক্যটি।"
wally

@ ওলি ধন্যবাদ, কিন্তু দুর্ভাগ্যক্রমে যে রেজেক্সটি মূলধনকে আরও বেশি করে তুলবে Itএবং Sheyপরিবর্তে এটিও মিলবে She
ব্যবহারকারী81655

আহ, আমার পরীক্ষা অপর্যাপ্ত ছিল! হ্যাঁ আমি দেখতে পাচ্ছি কেন ... আহ ভাল।
wally

3

পাইথন, 261 বাইট

import re
def a(b):
 if b[-1:]in".!":
  b=b[:-1]
 if re.match('(I|YOU|S?HE|IT|WE|THEY) \w+ \S+',b.upper()):
  b=(b+',').split()
  if b[0]!="I":
   b[0]=b[0].lower()
  b=" ".join(b[2:]+b[:2])
  return b[0].upper()+b[1:]
 return "Too difficult, this sentence is."

দেখা যাচ্ছে পাইথন এর মতো জিনিসগুলিতে কিছু মনে করবেন না b[-1]in".!"পরবর্তী আমি ম্যাচের বস্তুর সাথে আরও খেলব, যদি কেউ আমাকে এতে মারধর করে না :)


আমি মনে করি আপনি b=b[:-1]অংশে একটি স্থান সরাতে পারেন ।
কনর ও'ব্রায়ান

@ CᴏɴᴏʀO'Bʀɪᴇɴ ধন্যবাদ!
রবার্ট গ্রান্ট

3
আপনি b=b[:-1]লাইনটির শেষে দিয়ে যেতে পারেন if। শেষ লাইনে ফিরে আসার পরে আপনি স্থানটি সরিয়ে ফেলতে পারেন। এটি একটি ট্যাব দিয়ে 2 টি স্পেস এবং একটি ট্যাব এবং একটি স্পেসের সাহায্যে 3 স্পেস প্রতিস্থাপন করে পাইথন 3 সামঞ্জস্যতা ভঙ্গ করবে
আন্ডারগ্রাউন্ডোমোরিয়েল

2

পাইথন, 218 217 204 বাইট

এটি আরও চালিত হতে পারে কিনা তা নিশ্চিত নয়।

def f(s):t=s.split();u=' '.join(t[2:]).rstrip('!.');return['Too difficult, this sentence is.','%s, %s %s.'%(u[0].upper()+u[1:],['I',t[0].lower()][t[0]!='I'],t[1])][t[0]in'I We You He She It They'.split()]

Ungolfed:

def f(s):
    t = s.split()
    u = ' '.join(t[2:]).rstrip('!.')
    return [
        'Too difficult, this sentence is.',
        '%s, %s %s.' % (u[0].upper() + u[1:],
                        ['I', t[0].lower()][t[0] != 'I'],
                        t[1])
    ][t[0] in 'I We You He She It They'.split()]

আপনি পরিবর্তন করতে পারেন s.split(' ')করতে s.split()এবং 'I|We|You|He|She|It|They'.split('|')করতে 'I We You He She It They'.split(), প্রতিস্থাপন if...elseঅন্যত্র ব্যবহৃত একই বুলিয়ান তালিকা, পরিবর্তনের সঙ্গে t[0]inথেকে t[0]in, এর বিনিময়ে প্রায় spawce অপসারণ
নীল

1

জিএনইউ সেড, 129 বাইট

আমি -rপতাকাটির জন্য +1 বাইট অন্তর্ভুক্ত করছি ।

#!/bin/sed -rf

/^I /b
s/^(You|[HW]e|She|It|They) /\L&/
t
s/.*/Too difficult, this sentence is./p
d
:
s/[.!]$//
s/^([^ ]+ [^ ]+) (.*)/\u\2, \1./

ব্যাখ্যা

আমরা যদি একটি শীর্ষস্থানীয় সাথে মেলে তবে আমরা Iলেবেলে ঝাঁপ দাও:

/^I /b

যদি আমরা অন্যান্য সর্বনামগুলির মধ্যে একটির সাথে মেলে, তবে আমরা এটি ডাউনচেস করে রাখি, তারপরে লেবেলে ঝাঁপ দাও:

s/^(You|[HW]e|She|It|They) /\L&/
t

অন্যথায় আমরা ব্যর্থতা বার্তা মুদ্রণ এবং পরবর্তী ইনপুট লাইনে যান:

s/.*/Too difficult, this sentence is./p
d

আমরা যদি লেবেলে ঝাঁপিয়ে পড়ি তবে আমরা কোনও চূড়ান্ত বিরামচিহ্ন সরিয়ে ফেলি:

:
s/[.!]$//

এবং বাক্যটির বাকী প্রথম দুটি শব্দ অদলবদল করুন, নতুন প্রথম শব্দটি মূলধন করে এবং প্রয়োজনীয় বিরামচিহ্ন যুক্ত করার সাথে সাথে:

s/^([^ ]+ [^ ]+) (.*)/\u\2, \1./

আপনার প্রোগ্রামটি অন্তত তিনটি শব্দ নিয়ে গঠিত কিনা তা পরীক্ষা করে না। You areপ্রথম এবং দ্বিতীয় লাইন পাসের মতো বাক্য কিন্তু শেষের সাথে মেলে না, সুতরাং আউটপুটটি you areত্রুটির বার্তার পরিবর্তে হয়। ...|They) \S+ \S/\L&/প্রথম দুটি লাইনে চেক যুক্ত করুন ।
রেনার পি।

@ রাইনার - আপনি ঠিক বলেছেন (সংক্ষিপ্ত ইনপুটগুলির জন্য পরীক্ষার মামলার অভাবকে আমি দায়ী করি)। আমি কীভাবে শীঘ্রই এটি পুনরায় কাজ করবেন তা দেখব।
টবি স্পিড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.