कोड गोल्फ: फॉरवर्ड sdrawkcaB sdrawkcaB फॉर्वर्ड फॉरवर्ड sdrawkcaB


14

कार्य

  • उपयोगकर्ता एक वाक्य इनपुट करता है - केवल शब्द। पूर्णांक और विराम चिह्न सहित अक्षरों या रिक्त स्थान के अलावा किसी भी इनपुट को एक अपवाद फेंकना चाहिए: "वाक्य केवल अक्षरों का उपयोग करना चाहिए"।
  • आउटपुट में एक पैटर्न होता है, जहां कुछ शब्द उलटे होते हैं और अन्य शब्द सामान्य होते हैं।
  • पैटर्न एक सामान्य शब्द के रूप में शुरू होता है, अगले दो शब्द उलट होते हैं, फिर अगले दो शब्द सामान्य होते हैं और पैटर्न जारी रहता है।
  • जहाँ शब्द सामान्य होना चाहिए और जहाँ शब्द उलटे हों, उसका एक उदाहरण नीचे दिया गया है:

सामान्य - उल्टा - उल्टा - सामान्य - सामान्य - उल्टा - उलटा - सामान्य ...

इनपुट उदाहरण

वह समुद्र के किनारे समुद्र के गोले बेचती है

आउटपुट उदाहरण

वह एह्स किनारे पर एईएस के गोले बरसाती है

अतिरिक्त नियम

  • यदि बड़े अक्षरों का उपयोग किया जाता है, तो उन्हें उस पत्र पर बने रहना चाहिए जिसे वे मूल रूप से पोस्ट किए गए थे।
  • शुरू में इनपुट पर पोस्ट किए गए किसी भी कई रिक्त स्थान को एक स्थान पर घटाया जाना चाहिए। उदाहरण के लिए Programming Puzzles and Code Golfबन जाता हैProgramming selzzuP dna Code Golf

सबसे छोटा कोड जीत !!

हैप्पी कोडिंग ...


8
कई प्रोग्रामिंग भाषाओं में अपवाद नहीं हैं।
डोरकनब

15
@ निमि को इस तरह के तुच्छ कारण के लिए भाषाओं के एक छोटे उपसमूह के लिए चुनौती को पूरी तरह से अनावश्यक लगता है।
दरवाज़े

10
अन्यथा यह अच्छी चुनौती नियम से बर्बाद हो जाती है। Any input other than letters or spaces, including integers and punctuation, should throw an exception: "Sentence must only use letters".इसका मतलब है कि शब्दों को उलटने की चुनौती के लिए पूरी तरह से असंबंधित एक माध्यमिक कार्य को लागू करना, उन भाषाओं को काट देना, जिनके पास अपवाद नहीं हैं, और एक लंबी स्ट्रिंग को हार्डकोड या संपीड़ित करने की आवश्यकता होती है जिसमें बहुत अधिक समय लगता है बाइट की गिनती।
xnor

2
@ बेलफ़िल्ड यस, मैं आपकी बाइंड देखता हूँ। मुझे लगता है कि अब आप कुछ नहीं कर सकते। भविष्य में, पोस्ट करने से पहले फीडबैक प्राप्त करने के लिए सैंडबॉक्स में पोस्ट करने का प्रयास करें ।
xnor

3
@ एक अच्छी चुनौती एक अच्छे उत्तर की तुलना में अधिक कठिन होती है। मैंने वैसे भी इसका आनंद लिया, और अगला विले बेहतर होगा।
edc65

जवाबों:


15

टीस्क्रिप्ट , 55 बाइट्स 58 60 69 76 78 80 87 89

xO`a-z `?xl(#~-i&2?l:lv(),/ +/):Ld`SÀZn­ Û § «e Ò5s`

यह बेहद कम है, मैं इससे बहुत खुश हूं।

अंतिम ~ 20 अक्षर जिबरिश की तरह लग सकते हैं लेकिन यह "वाक्य केवल अक्षरों का उपयोग करना चाहिए" एन्कोडेड है। सभी पात्रों में 256 से नीचे के कोड हैं, इसलिए प्रत्येक एक बाइट है

व्याख्या

xO`a-z `?  // If input contains only a-z and space...

   xl(#       // Loop through input 
      ~-i&2?  // If (index - 1 "unary and"ed with 2) isn't 0...
          :l,     // Leave alone
          lv()    // Otherwise, reverse string
       / +/ // Loops on spaces
   )

:Ld`SÀZn­ Û § «e Ò5s` // Otherwise... decompress and print  the error string

परीक्षण पोस्ट करने के लिए धन्यवाद - बहुत अच्छा। हर एक एक ही नाव में होता है जब वह त्रुटि की बात आती है - कोई भी गोल्फिंग लाइन नहीं है
बेलफील्ड

अजीब बात है, अब यह फ़ायरफ़ॉक्स में काम करता है। लेकिन मैंने पहले भी फ़ायरफ़ॉक्स का इस्तेमाल किया था।
जक्यूब

अब तक का सबसे अच्छा जवाब!
Belfield

क्या? तुम अजगर को हरा !? एक JS- आधारित भाषा के साथ?!? यह ऐसे कैसे संभव है?!?!
3:25 बजे ETHproductions

2
@ETHproductions आप हमेशा जीत सकते हैं जब तक डेनिस प्रतिस्पर्धा नहीं कर रहा है: पी
डाउनगेट

4

हास्केल, 141 बाइट्स

r=reverse
f x|all(`elem`(' ':['a'..'z']++['A'..'Z']))x=unwords$zipWith($)(cycle[id,r,r,id])$words x|1<2=error"Sentence must only use letters"

लगभग 2/3 कोड त्रुटि जाँच के लिए है। प्रथम वास्तविक विश्व चुनौती लगता है।

वह काम किया जाता है unwords$zipWith($)(cycle[id,reverse,reverse,id])$words xजिसके द्वारा इनपुट को शब्दों की सूची में विभाजित किया जाता है , इसे कार्यों की साइकलिंग सूची के साथ जोड़ दिया [id,reverse,reverse,id,id,reverse...]जाता है और परिणाम को एक स्ट्रिंग में वापस जोड़ देता है।

2 बाइट्स के लिए @ क्रिसियन इरवान को धन्यवाद।


"वाक्य केवल उपयोगकर्ता अक्षर होना चाहिए" को "वाक्य केवल अक्षरों का उपयोग करना चाहिए" में बदला जा सकता है - त्रुटि पर मेरा बुरा!
घंटाघर

@ बेलफ़िल्ड: फिक्स्ड
nimi

क्यों नहीं r=reverse?
अक्कांग

@ChristianIrwan: धन्यवाद! (एक शुरुआती संस्करण में मेरे पास एक नाम के बिना एक पॉइंटफ्री फ़ंक्शन था, इसलिए लापता होने के कारण दो बार reverseऔर r=reverseएक ही लंबाई का उपयोग किया गया था f=। गैर-पॉइंटफ़्री पर जाते समय फिर से जांच न करें)।
nimi

3

जावास्क्रिप्ट (ईएस 6) 122

f=s=>/[^a-z ]/i.test(s)?"Sentence must only use letters":s.split(/ +/).map((w,i)=>~-i&2?w:[...w].reverse().join``).join` `

alert(f(prompt('?','She sells Sea shells on the Sea shore')))


जब इनपुट में कोई नई रेखा होती है, तो यह एक त्रुटि को उत्पन्न करता है, उदाहरण से मुझे नहीं लगता कि ऐसा होने वाला है
डाउनगैट

1
@ V @ यह मुश्किल है, उदाहरण कई स्थानों के बारे में है, लेकिन फिर एक से अधिक स्थान नहीं हैं - सिर्फ 1 नई पंक्ति। मुझे लगता है कि यह एसओ संपादक द्वारा मंगाई गई थी। यदि हमें नई सूची और अन्य सामान्य स्थान का प्रबंधन करना है, तो बाइट की गिनती 2 से बढ़ जाती है
edc65

2

रेटिना , 103 बाइट्स

\s+

(?<=^\S+ (\S+ )?((\S+ ){4})*)
;
+`(;\S*)(\S)
$2$1
;

i`.*[^a-z ].*
Sentence must only use letters

दूसरी लाइन पर एक सिंगल स्पेस होना चाहिए, जिसे एसई निगलता हुआ दिख रहा है। -sध्वज के साथ एक फ़ाइल से कोड चलाएँ ।

रेटिना में अपवादों की कोई अवधारणा नहीं है, इसलिए Sentence must only use lettersयदि इनपुट में गैर-अक्षर गैर-व्हाट्सएप वर्ण हैं तो आउटपुट को केवल बदल दिया जाता है ।



2

अजगर, 163 160 157 145

k=raw_input()
k=["Sentence tsum ylno use letters",k][k.replace(' ','').isalpha()]
for i,x in enumerate(k.split()):print x[::-1if(i+1)/2%2else 1],

हटाए गए 15 पात्र, धन्यवाद मेगो !!


हां, डर निमि में एक बिंदु है ...
बेलफ़िल्ड

गोली मारो, मुझे वह याद आया। मैं इसे संशोधित कर दूंगा।
मॉस

यदि परिणाम नहीं मिला है, और "जोड़ना!" = "कोई नहीं" वास्तव में मेरे मूल विधि की तुलना में एक बाइट है। मैंने हालांकि पिछली दो लाइनों को मर्ज करके 3 बाइट्स बचाए। धन्यवाद!
मूस

1

बैश + कोरुटिल्स, 108

[ ${@//[a-zA-Z]/} ]&&echo Sentence must only use letters||for t;{
((++i/2%2))&&rev<<<$t||echo $t
}|tr \\n \ 

इस कार्यक्रम का अंतिम चरित्र एक स्थान है।

इनपुट कमांड लाइन से लिया गया है:

$ ./norrevvevnor.sh Programming Puzzles and Code$'\n' Golf
Programming selzzuP dna Code Golf $ 
$ ./norrevvevnor.sh Programming Puzzles and Code$'\n' Golf1
Sentence must only use letters
$ 

1

अजगर, ,२

=zflTc?:z"[^A-Za-z ]"0"Sentence tsum ylno use letters"zdjd.e?%/hk2 2_bbz

अन्य पायथ उत्तर को हरा नहीं करता है, लेकिन मैंने पहले ही इसे लिखने में समय लगाया। यह मूल रूप से मेरे पायथन उत्तर का अनुवाद है ।

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


1

जूलिया, 109 बाइट्स

s->(i=0;join([isalpha(w)?(i+=1)%4>1?reverse(w):w:error("Sentence must only use letters")for w=split(s)]," "))

i=0और (i+=1)%4>1यह तय करने के लिए उपयोग किया जाता है कि प्रत्येक शब्द reverseडी हो जाता है या नहीं। यह निर्धारित करने के लिए isalphaविभाजित होने के बाद शब्दों पर लागू होता है split(s)कि अक्षर नहीं हैं या नहीं हैं (रिक्त स्थान पहले ही इस बिंदु से हटा दिए गए हैं)। joinहेरफेर के बाद स्ट्रिंग को पुनर्स्थापित करता है, जब तक कि errorफेंक नहीं दिया जाता है।


1

जूलिया, 150 134 बाइट्स

s->ismatch(r"[^a-z ]"i,s)?error("Sentence must only use letters"):(i=3;join([(i+=1;isodd((i+1)i÷2)?reverse(w):w)for w=split(s)]," "))

Ungolfed:

function f(s::AbstractString)
    if ismatch(r"[^a-z ]"i, s)
        error("Sentence must only use letters")
    else
        i = 3
        a = [(i += 3; isodd((i + 1)i ÷ 2) ? reverse(w) : w) for w = split(s)]
        return join(a, " ")
    end
end

ग्लेन हे के लिए 16 बाइट्स धन्यवाद!


कुछ और करने से पहले, मैं सुझाव दे सकता हूं कि प्रारंभिक सशर्त के तर्क को उलट दें और rइसका परिणाम बताएं ? यही है, r=ismatch(...)||error(...)- कुछ वर्णों को बंद कर देगा, और उपयोग करने वाले सशर्त को उल्टा कर देगा r। फिर से टिप्पणी करेंगे, मुझे संदेह है, कुछ और बचत
ग्लेन ओ

मामूली सुधार - मुझे ||नकार से निपटना पड़ा , तब एहसास हुआ कि नकार आवश्यक नहीं है। इसे उल्टा कर दो &&। और इससे भी बेहतर, ?:इसे बेहतर करने के बजाय उपयोग करें । s->(r=ismatch(r"[^a-z ]"i,s))?error("Sentence must only use letters"):join([(iseven(i)&&(r=!r);r?reverse(w):w)for(i,w)=enumerate(split(s))]," ")144 बाइट्स के लिए। और मुझे लगता है कि मैं अंदर बेहतर कर सकता हूं join...
ग्लेन ओ

यहाँ 134 बाइट्स के साथ आपके समाधान का एक सुव्यवस्थित संस्करण है:s->ismatch(r"[^a-z ]"i,s)?error("Sentence must only use letters"):(i=3;join([(i+=1;isodd((i+1)i÷2)?reverse(w):w)for w=split(s)]," "))
Glen O

@GlenO बहुत बढ़िया सुझाव, धन्यवाद!
एलेक्स ए।

0

पायथ, 55 बाइट्स

?--rz0Gd"Sentence must only use letters"jd.e_W%%k4 3bcz

%%k4 3Pietu1998 से थोड़ा उधार लिया । एक अतिरिक्त बाइट को बचाया।

इसे ऑनलाइन आज़माएँ: प्रदर्शन या टेस्ट सूट

व्याख्या

?--rz0Gd"..."jd.e_W%%k4 3bcz   implicit: z = input string
   rz0                         convert z to lower-case
  -   G                        remove all letters
 -     d                       remove all spaces
?                              if there is some chars left than
        "..."                    print the string "Sentence must only ..."
                               else:
                          cz     split z by spaces or multiple spaces
               .e                map each pair (k index, b string) of ^ to: 
                 _       b          b or reversed of b, depending on
                  W%%k4 3           (k mod 4) mod 3
             jd                  join the result by spaces


0

जावा, 215 बाइट्स

रेगेक्स मजेदार है

s->{if(s.split("[^a-zA-Z ]").length>1)throw new Error("Sentence must only contains letters");else{int i=1;for(String a:s.split(" "))System.out.print((i++%2<1?new StringBuffer(a).reverse():a)+(a.isEmpty()?"":" "));}}

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


वर्तमान में आपका आउटपुट सही नहीं है। अब आप आउटपुट करते हैं She slles aeS shells no the aeS shore, लेकिन यह She slles aeS shells on eht aeS shoreइसके बजाय होना चाहिए (पहले सामान्य; फिर 2 के जोड़े में बारी-बारी से बारी-बारी से या नहीं)। दो मुद्दे इसकी वजह बनते हैं। iयदि आइटम खाली है, तो आप इसे बढ़ाते हैं और इसके बजाय i++%2<1होना चाहिए i++%4>1यहाँ एक निश्चित 211 बाइट्स संस्करण है।
केविन क्रूज़सेन

@ केविनक्रूजसेन यही है जो मुझे ध्यान से पढ़ने के लिए नहीं मिलता है
बेंजामिन अर्कहार्ट

0

जेली , 39 बाइट्स

³Ḳ¹ƇUJ2&TƲ¦K
“*[,ṛDṾȧƤ°Ġṛ©¦»
ØẠ” ṭ³eƇ⁼£

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

एग्री द आउटगॉल्फ को धन्यवाद। उन्होंने मुझे कुछ अतिरिक्त बाइट्स और कई घंटों की हताशा से बचाया।

यहाँ एक 46 बाइट समाधान है

यह वास्तव में एक अजगर सिंटैक्स त्रुटि फेंकता है जब इनपुट में अमान्य वर्ण होते हैं।

³Ḳ¹ƇUJ2&TƲ¦K
“çỤḷṁŀDṀẠṠGmḟĖƲƑ⁽Ḳḟ»ŒV
ØẠ” ṭ³eƇ⁼£

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


0

जाप v2.0a0 -S, 41 बाइट्स

¸¬è\L ?`SÀZn­ Û § «e Ò5s`:UeS²S ¸ËzEc2

कोशिश करो

¸¬è\L ?`...`:UeS²S ¸ËzEc2     :Implicit input of string U
¸                             :Split on spaces
 ¬                            :Join
  è                           :Count occurrences of
   \L                         :RegEx /[^A-Z]/gi
      ?`...`:                 :If truthy return the compressed string "Sentence must only use letters", else
             Ue               :Recursively replace in U
               S²S            :  Two spaces with one
                   ¸          :Split on spaces
                    Ë         :Map each element at 0-based index E
                     z        :  Rotate clockwise by 90 degrees multiplied by
                      Ec2     :    E rounded up to the nearest multiple of 2
                              :Implicit output, joined with spaces

0

05AB1E , 36 बाइट्स

ðKDáÊi“¸–ƒ—€É€Å™ê“.ªFë#áεN4%>2÷iR]ðý

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

निम्न त्रुटि तब होती है जब इनपुट में केवल शामिल नहीं होता है [A-Za-z ]:

(RuntimeError) सेंटेंस को केवल पूर्णांक के लिए अक्षरों का उपयोग करना चाहिए परिवर्तित नहीं कर सका।

स्पष्टीकरण:

ðK                   # Remove all spaces from the (implicit) input-string
  Dá                 # Create a copy, and remove everything except for letters from this copy
    Êi               # If the copy with letters removed and the original are NOT equal:
      “¸–ƒ—€É€Å™ê“   #  Push dictionary string "sentence must only use letters"
                   #  With sentence capitalization
      F              #  And try to loop that many times, causing the error above
     ë               # Else:
      #              #  Split the (implicit) input-string on spaces
       á             #  Only keep letters (which will remove empty items caused by multiple
                     #  adjacent spaces in the input, which is shorter than `õK`)
        ε            #  Map each word to:
         N4%>2÷      #   Calculate ((index modulo-4) + 1) integer-divided by 2
                     #   (results in 0,1,1,2,0,1,1,2,0,1 for indices 0,1,2,3,4,5,6,7,8,9)
               i     #   If this is exactly 1:
                R    #    Reverse the current word
     ]               # Close the if-statement, map, and if-else statement
      ðý             # Join the modified word-list by spaces
                     # (and then output it implicitly as result)

मेरा यह 05AB1E टिप देखें (अनुभाग कैसे शब्दकोश उपयोग कैसे करें? ) को समझने के लिए क्यों “¸–ƒ—€É€Å™ê“है "sentence must only use letters"


0

PHP , 147 बाइट्स

foreach(explode(' ',$argn)as$a){if(!ctype_alpha($a))throw new Exception('Sentence must only use letters');$o.=(++$i%4>1?strrev($a):$a).' ';}echo$o;

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

या यदि die()"अपवाद" के रूप में स्वीकार्य है:

PHP , 131 बाइट्स

foreach(explode(' ',$argn)as$a){if(!ctype_alpha($a))die('Sentence must only use letters');$o.=(++$i%4>1?strrev($a):$a).' ';}echo$o;

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

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