एक Yoda बोलने वाली चुनौती, यह है


44

चुनौती

खैर, मुझे लगता है कि यह बिल्कुल स्पष्ट है, है ना? आपको एक फ़ंक्शन या एक प्रोग्राम बनाना होगा जो एक तर्क के रूप में एक स्ट्रिंग लेता है और भ्रष्टतम Yoda-Speak आउटपुट करता है।

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

इनपुट

इनपुट लाइनफीड के बिना किसी भी स्ट्रिंग हो सकता है । आप एक स्ट्रिंग का अनुवाद कर सकते हैं यदि यह इस तरह से बना है:

विषय + क्रिया + कुछ और।

जहां विषय एक व्यक्तिगत सर्वनाम है (मैं, आप, वह, वह, यह, हम, वे)। आपको यह पहचानने की जरूरत नहीं है कि दूसरा शब्द एक क्रिया है।

यदि पहला शब्द सर्वनाम नहीं है, तो इनपुट मान्य है लेकिन आउटपुट होगा 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
गैर-प्रश्न के दृष्टिकोण से, क्या शिशुओं को भी स्थानांतरित नहीं किया जाना चाहिए? उदाहरण के लिए, You have to win this code challengeहोना चाहिए This code challenge, you have to win
Addison Crump

9
"यह कोड चुनौती जीतने के लिए, आपके पास है।" बहुत अजीब लगता है।
निकेल

3
क्या इनपुट में अल्पविराम हो सकता है? क्या होगा यदि इनपुट एक पत्र, अवधि या में समाप्त नहीं होता है! ? क्या ऐसा नहीं होने की गारंटी है या हमें वही संभालना चाहिए और जब कोई अग्रणी सर्वनाम न हो तो उसी चीज को प्रिंट करें। क्या इनपुट में लाइनफ़ीड्स हो सकते हैं? अपॉस्ट्राफी? कोलन / कोष्ठक / बैकटिक? गैर- ASCII वर्ण? आप कहते हैं "इनपुट कोई भी स्ट्रिंग हो सकता है ", लेकिन आपके परीक्षण के मामले केवल विशिष्ट प्रकार के तारों को कवर करते हैं।
मार्टिन एंडर

4
odd have to ’एक विषम सहायक क्रिया-निर्माण peculiar to English है; इसकी संभावना नहीं है कि योदा इसका इस्तेमाल करे। "यह कोड चुनौती, जीत, आपको चाहिए।" दूसरी ओर, योदा के पास अपने स्वयं के सहायक-क्रिया निर्माण हैं जो वह उपयोग करने के लिए जाता है: "यह कोड चुनौती, जीता, उसने किया।" मैं यह कहते हुए योडा की तस्वीर नहीं लगा सकता कि "यह कोड चुनौती है, वह जीत गया" या "यह कोड चुनौती जीतने के लिए, आपके पास है"।
लिंडाजेन

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हर जगह के साथ बदला जा सकता है, और पहले rexx के [^ ]+साथ प्रतिस्थापित किया जा सकता है .+। चरित्र वर्गों में आप से बचने के लिए की जरूरत नहीं है .तो [.!]ठीक काम करता है। इसके अलावा, चूंकि आप तीसरे चरण में $1और उसके क्रम को स्वैप नहीं करते हैं, इसलिए आप $2उन्हें एक समूह में कैद कर सकते हैं और 5 बाइट्स बचा सकते हैं।
मार्टिन एंडर

([^I]|It)को छोटा किया जा सकता है^\w\w
मार्टिन एंडर

वाह, क्या सुधार का भार है। धन्यवाद।
रेनर पी।

मुझे लगता है कि अगर रेटिना समर्थन I|Itकर सकती है I?तो वह बन सकती है
कॉनर ओ'ब्रायन

7

ईएस 6, 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."

JSFiddle (क्रोम की तरह अप-टू-डेट ब्राउज़र की आवश्यकता है) या नोड.जेएस के माध्यम से इसे चलाएं

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.
इस्माइल मिगुएल

@IsmaelMiguel फिक्स्ड, लेकिन यहां तक ​​कि 3 पात्रों को एक और बग के कारण कम मिला, जो मैंने भी तय किया था
हेलको

इसने सभी मुद्दों को हल कर दिया, सभी परीक्षण ठीक लगते हैं। बहुत बढ़िया! आपने मेरा उत्थान किया।
इस्माइल मिगुएल

3
आपको ^अपने regex की शुरुआत में जोड़ना होगा अन्यथा सर्वनाम से पहले किसी भी पाठ के साथ एक वाक्य अभी भी मान्य होगा।
15:81 बजे user81655

6

जावास्क्रिप्ट (ईएस 6), 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 solution = s => (p = s.match ^(((It?)|You|[HW]e|[ST]hey) \\S+) (.*?)[.!]?$)? P [4] [0] .toUpperCase () + p [4] .slice (1) + , ${p[3]?p[1]:p[1].toLowerCase()}.: "बहुत कठिन है, यह वाक्य है।"
वैली

@ थैंक्स थैंक्स, लेकिन दुर्भाग्य से रेगेक्स Itकैपिटल हो जाएगा और Sheyइसके बजाय मैच भी होगा She
user81655

आह, मेरा परीक्षण अपर्याप्त था! हाँ मैं देख सकता हूँ क्यों ... आह ठीक है।
वैली

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। आप अंतिम पंक्ति पर लौटने के बाद से अंतरिक्ष को हटा सकते हैं। यह python3 संगतता को एक टैब के साथ 2 रिक्त स्थान और 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

GNU sed, 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&/पहले दो लाइनों की तरह एक चेक जोड़ें ।
रेनर पी।

@ रेनर - आप सही कह रहे हैं (मैं शॉर्ट इनपुट के लिए परीक्षण के मामलों की कमी को दोष देता हूं)। मैं जल्द ही इसे फिर से तैयार करने का तरीका देखूंगा।
टोबी स्पाईट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.