सर्वनाम का संचालन


24

चुनौती

एक फ़ंक्शन या एक प्रोग्राम लिखें जो एक या एक से अधिक व्यक्तिपरक व्यक्तिगत सर्वनाम से बना एक स्ट्रिंग लेता है , एक तर्क के रूप में + संकेतों द्वारा अलग किया जाता है। आउटपुट एक सर्वनाम होना चाहिए, यह अगले पैराग्राफ में परिभाषित संबंध का परिणाम है।

बेशक, संपादित करने के लिए स्वतंत्र महसूस करें क्योंकि आप उन व्याकरण संबंधी त्रुटियों को ठीक करना चाहते हैं जो निश्चित रूप से मौजूद हैं;)

यह एक कोड-गोल्फ चुनौती है, इसलिए सबसे छोटा कोड जीतता है।

सम्बन्ध

इस कार्य का लक्ष्य "गणित-बात" में अनुवाद करना है जो हम दैनिक उपयोग करते हैं। हम "आप और मैं" के बारे में कैसे सोचते हैं? ठीक है, "हम", क्या हम नहीं? इसलिए, यदि इनपुट You+Iआउटपुट है तो स्ट्रिंग होना चाहिए We। दो से अधिक सर्वनामों के साथ, यह दिखना चाहिए: You+He+They->You

संबंध इस तालिका के रूप में परिभाषित किया गया है:

      I  You    He   We   You   They
I     I  We     We   We   We    We
You      You    You  We   You   You
He              He   We   You   They
We                   We   We    We
You                       You   You
They                            They

'आप' समस्या

ठीक है, जैसा कि आप देख सकते हैं कि मैं एक देशी अंग्रेजी वक्ता नहीं हूं। मेरी भाषा में (इतालवी) वहाँ बहुवचन के बीच एक अंतर है कि आप ( voi , इतालवी) और विलक्षण आप ( तू )। जब मुझे लगा कि इस चुनौती को मैंने अंग्रेजी में नहीं सोचा है, तो समस्या यह है कि यह पहचानना असंभव है कि क्या मैं बहुवचन या एकवचन रूप का उपयोग कर रहा हूं। सौभाग्य से (या स्पष्ट रूप से?), इनपुट / आउटपुट दोनों रूपों में नहीं बदलता है, इसलिए आप उनमें से किसी एक का उपयोग कर सकते हैं और आप दोनों मामलों को कवर करेंगे!

इनपुट के बारे में

इनपुट हमेशा "सर्वनाम + सर्वनाम + सर्वनाम" के रूप में होगा ... सर्वनामों में पहला अक्षर अपरकेस और शेष लोअरकेस में होगा। प्लसस स्थान से घिरा नहीं होगा, केवल सर्वनाम द्वारा। खाली इनपुट संभव है और परिणाम खाली आउटपुट होना चाहिए।

बोनस

यदि कार्यक्रम दो नए सर्वनामों का प्रबंधन करेगा तो 15% का एक छोटा सा बोनस: वह और यह । वे स्पष्ट रूप से ही हैं। याद रखें कि यह संबंध प्रतिवर्त है, इसलिए वह -> वह और यह -> यह। इसलिए, किसी भी संयोजन में केवल वह, वह या वह शामिल होना चाहिए, उन्हें आउटपुट देना चाहिए।

उदाहरण

You+I          -> We
You+He+They    -> You
I+You+He+They  -> We
They           -> They
They+You       -> You
You+You+I+You  -> We

For Bonus
She            -> She
She+He         -> They
I+It+He        -> We
It+You         -> You

@ टिमवी, यदि आप उन उदाहरणों के बारे में बात कर रहे हैं जो आप सही हैं, तो मैं कुछ जोड़ूंगा। वैसे भी, यह "प्लस" संबंध प्रतिवर्तनीय है, इसलिए वह + वह वह है, मैं + मैं मैं हूं ....
सिमोन चेलो

5
मुझे " I+I=I" मिलता है , क्योंकि Iकिसी दिए गए वक्ता से केवल एक ही हो सकता है । लेकिन " He+He=They" नहीं कर सकता था ? आम तौर पर यदि आप Heइस निर्माण में दो बार कहते हैं , तो आप दो अलग-अलग पुरुष विषयों का उल्लेख कर रहे हैं, एक ही बार नहीं।
डारेल हॉफमैन

अंग्रेजी की कई बोलियों में voi के समकक्ष हैं । मेरा, यह y'all है , और औपचारिक रजिस्टर में उपयोग किया जाता है। एक और आम है आप , हालांकि मुझे नहीं लगता कि किसी को औपचारिक भाषण में उपयोग किया जाता है। परंपरागत रूप से, आपके पास तु भी है , जो कई लोगों के लिए जाना जाता है क्योंकि यह कुछ बाइबिल अनुवादों में आम है। आप इनमें से किसी एक में जोड़ने के लिए या में टॉस चाहिए तू रूप में अच्छी तरह करने के लिए वास्तव में हलचल पैदा करके।
user0721090601

जवाबों:


9

रेटिना, 62 61 56 53 52 बाइट्स

(.+)\+(?=\1)

.*(W|.I|I.).*
We
.*Y.*
You
.{4,}
They

आगे गोल्फ और स्पष्टीकरण बाद में आता है।

4 प्रतिस्थापन चरण निम्न कार्य करते हैं:

  • कुछ भी कई बार खुद ही होता है
  • अगर कोई है तो I या I + कोई भी परिणाम हम है
  • किसी और चीज के लिए जिसका परिणाम आप हैं
  • अगर हमारे पास अभी भी कई पुर्जे हैं या एकमात्र वे हैं तो वे केवल वे ही हैं और उन्हें छोड़ा जा सकता है

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

3 बाइट्स ने मार्टिन ब्यूटनर को धन्यवाद दिया।


अंतिम चरण को छोड़कर, आप .इसके बजाय का उपयोग कर सकते हैं \+, क्योंकि यह एकमात्र पात्र है जिसे एक बड़े अक्षर के सामने या उसके बाद अनुमति दी जाती है I
मार्टिन एंडर

6

जावास्क्रिप्ट (ईएस 6), 130 बाइट्स

s=>(a=",I,You,He,We,They".split`,`,m="012345014444042242042345044444042545",r=0,s.split`+`.map(p=>r=m[+m[a.indexOf(p)]+r*6]),a[r])

व्याख्या

s=>(

  // a = array of each pronoun (including an empty string at index 0)
  a=",I,You,He,We,They".split`,`,

  // m = 6 x 6 map of pronoun indices for each combination of pronouns
  m="012345014444042242042345044444042545",

  r=0,                        // r = index of result pronoun
  s.split`+`.map(p=>          // for each pronoun in the input string
    r=m[+m[a.indexOf(p)]+r*6] // combine each pronoun with the previous one
  ),
  a[r]                        // return the resulting pronoun
)

परीक्षा


वाह, मुझे यह तरीका पसंद है! मुझे लगता है कि मैंने बहुत खराब बोनस बनाया, इसे यहां तक ​​पहुंचाने के लिए आपको सरणी में 7 बाइट्स जोड़ना होगा (", शी, इट") और मैट्रिक्स में 28, 165 -15% = 140 तक पहुंच ...
सिमोन चेलो

2

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

79 बाइट्स वास्तव में, लेकिन एक 15% बोनस है।

$a{$_}=""for split/[+\s]/,<>;@_=%a;say@_<3?@_:I~~@_||We~~@_?We:You~~@_?You:They

2

पायथन 159 153 बाइट्स

संपादित करें : धन्यवाद @ Pietu1998

यह जावास्क्रिप्ट ES6 उत्तर का सीधा अनुवाद है:

a=",I,You,He,We,They".split(',')
m="012345014444042242042345044444042545"
r=0
for p in raw_input().split('+'):r=int(m[int(m[a.index(p)])+r*6])
print a[r]

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


sएक चर होने की जरूरत नहीं है, और आप लाइनों forऔर r=लाइनों के बीच अतिरिक्त लाइन और स्थान को हटा सकते हैं। इसके अलावा, आप जांचना चाहते हैं कि क्या यह एक फ़ंक्शन के रूप में छोटा हो सकता है।
१५:०५ बजे पुरकाकूदरी

1

रूबी, 150 136 131 119 111 बाइट्स

ARGV.each{|a|puts %w[We You I He They][a.bytes.inject(0){|m,c|m|({87=>15,73=>7,89=>11,84=>9,72=>8}[c]||0)}%5]}

बोनस सुविधा: एक ही कमांड लाइन पर कई भावों को संभालती है।

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