pwaS eht tirsf dna tasl सेटरल फॉस hace dorw


30

या, "प्रत्येक शब्द के पहले और अंतिम अक्षर को स्वैप करें"

आपकी चुनौती है, वर्णमाला ASCII वर्णों की एक स्ट्रिंग के साथ-साथ एक अन्य चरित्र को एक सीमांकक के रूप में उपयोग करने के लिए (प्रत्येक शब्द को अलग करने के लिए), प्रत्येक शब्द के पहले और अंतिम अक्षर को स्वैप करें। यदि कोई एक वर्ण शब्द है, तो उसे अकेला छोड़ दें।

उदाहरण / टेस्टकेस निचले अक्षर और परिसीमन के रूप में अंतरिक्ष का उपयोग करते हैं।

आपको विराम चिह्न को संभालने की आवश्यकता नहीं है; सभी इनपुट में केवल अक्षरों के माध्यम से एक z, एक सीमांकक द्वारा अलग किया जाएगा, एक समान मामले के सभी।

उदाहरण के लिए, स्ट्रिंग "हैलो वर्ल्ड" के साथ:

Input string: "hello world"
Identify each word: "[hello] [world]"
Identify the first and last letters of each word: "[[h]ell[o]] [[w]orl[d]]"
Swap the first letters of each word: "[[o]ell[h]] [[d]orl[w]]"
Final string: "oellh dorlw"

नोट: सीमांकक को अलग से इनपुट करने की आवश्यकता नहीं है। सीमांकक केवल वर्ण है जिसका उपयोग शब्दों को अलग करने के लिए किया जाता है। यह कुछ भी हो सकता है। मैं रचनात्मक गोल्फरों के लिए खुला विकल्प छोड़ना चाहता था, इसलिए मैं इसे केवल रिक्त स्थान या नई लाइनों तक सीमित नहीं करना चाहता था। सीमांकक केवल एक चरित्र है जो इनपुट स्ट्रिंग में शब्दों को अलग करता है।

परीक्षण के मामलों:

"swap the first and last letters of each word" -> "pwas eht tirsf dna tasl setterl fo hace dorw"
"hello world" -> "oellh dorlw"
"test cases" -> "test sasec"
"programming puzzles and code golf" -> "grogramminp suzzlep dna eodc folg"
"in a green meadow" -> "ni a nreeg weadom"
"yay racecar" -> "yay racecar"

3
विराम चिह्न का इलाज कैसे किया जाना चाहिए? Hello, world!हो जाता है ,elloH !orldw(एक पत्र के रूप में विराम चिह्न) या oellH, dorlw!(जगह में विराम चिह्न रखने)?
फेलेप ओलेनिक

3
@PhelypeOleinik आपको विराम चिह्न को संभालने की आवश्यकता नहीं है; सभी इनपुट्स में केवल z के माध्यम से अक्षर शामिल होंगे, और सभी एक समान मामला होगा।
कॉमरेड स्पार्कलेपनी

4
दूसरा पैराग्राफ पढ़ता है और साथ ही एक अन्य चरित्र को सीमांकक के रूप में उपयोग करता है जबकि चौथा रिक्त स्थान द्वारा अलग-अलग पढ़ा जाता है । इनमें से कौनसा?
एडम

@ कोई गैर-वर्णात्मक चरित्र। मैं स्पष्ट करने के लिए संपादित करूँगा।
कॉमरेड स्पार्कलेपनी

1
@BenjaminUrquhart हां। यदि आप चाहें, तो आप एक फ़ंक्शन तर्क के रूप में इनपुट ले सकते हैं।
कॉमरेड स्पार्कलेपनी

जवाबों:


59

TeX, 216 बाइट्स (4 लाइन, 54 अक्षर प्रत्येक)

क्योंकि यह बाइट गिनती के बारे में नहीं है, यह टाइपसेट आउटपुट की गुणवत्ता के बारे में है :-)

{\let~\catcode~`A13 \defA#1{~`#113\gdef}AGG#1{~`#1 13%
\global\let}GFF\elseGHH\fiAQQ{Q}AII{\ifxQ}AEE#1#2#3|{%
I#3#2#1FE{#1#2}#3|H}ADD#1#2|{I#1FE{}#1#2|H}ACC#1#2|{D%
#2Q|#1 }ABBH#1 {HI#1FC#1|BH}\gdef\S#1{\iftrueBH#1 Q }}

इसे ऑनलाइन आज़माएं! (ओवरलीफ़; सुनिश्चित नहीं है कि यह कैसे काम करता है)

पूर्ण परीक्षण फ़ाइल:

{\let~\catcode~`A13 \defA#1{~`#113\gdef}AGG#1{~`#1 13%
\global\let}GFF\elseGHH\fiAQQ{Q}AII{\ifxQ}AEE#1#2#3|{%
I#3#2#1FE{#1#2}#3|H}ADD#1#2|{I#1FE{}#1#2|H}ACC#1#2|{D%
#2Q|#1 }ABBH#1 {HI#1FC#1|BH}\gdef\S#1{\iftrueBH#1 Q }}

\S{swap the a first and last letters of each word}

pwas eht a tirsf dna tasl setterl fo hace dorw

\S{SWAP THE A FIRST AND LAST LETTERS OF EACH WORD}

\bye

आउटपुट:

यहां छवि विवरण दर्ज करें


LaTeX के लिए आपको बस बॉयलरप्लेट की आवश्यकता है:

\documentclass{article}
\begin{document}

{\let~\catcode~`A13 \defA#1{~`#113\gdef}AGG#1{~`#1 13%
\global\let}GFF\elseGHH\fiAQQ{Q}AII{\ifxQ}AEE#1#2#3|{%
I#3#2#1FE{#1#2}#3|H}ADD#1#2|{I#1FE{}#1#2|H}ACC#1#2|{D%
#2Q|#1 }ABBH#1 {HI#1FC#1|BH}\gdef\S#1{\iftrueBH#1 Q }}

\S{swap the a first and last letters of each word}

pwas eht a tirsf dna tasl setterl fo hace dorw

\S{SWAP THE A FIRST AND LAST LETTERS OF EACH WORD}

\end{document}

व्याख्या

TeX एक अजीब जानवर है। सामान्य कोड पढ़ना और समझना यह अपने आप में एक उपलब्धि है। अस्पष्टीकृत TeX कोड को समझना कुछ कदम आगे बढ़ता है। मैं उन लोगों के लिए इसे समझने का प्रयास करूँगा जो TeX को नहीं जानते हैं, इसलिए इससे पहले कि हम यहाँ शुरू करें TeX के बारे में कुछ अवधारणाएँ हैं जिनका अनुसरण करना आसान है।

के लिए (ऐसा नहीं) पूर्ण TeX शुरुआती

  • इस सूची में सबसे पहले, और सबसे महत्वपूर्ण वस्तु: कोड आयत के आकार में नहीं होता है, भले ही पॉप संस्कृति आपको ऐसा सोचने के लिए प्रेरित कर सकती है

  • TeX एक मैक्रो विस्तार भाषा है। आप एक उदाहरण के रूप में परिभाषित कर सकते हैं \def\sayhello#1{Hello, #1!}और फिर \sayhello{Code Golfists}प्रिंट करने के लिए TeX पाने के लिए लिख सकते हैं Hello, Code Golfists!। इसे एक "undelimited मैक्रो" कहा जाता है, और इसे पहले (और केवल, इस मामले में) को खिलाने के लिए पैरामीटर आप इसे ब्रेसिज़ में संलग्न करते हैं। टीईएक्स उन ब्रेसिज़ को हटा देता है जब मैक्रो तर्क को पकड़ लेता है। आप अधिकतम 9 मापदंडों का उपयोग कर सकते हैं: \def\say#1#2{#1, #2!}तब \say{Good news}{everyone}

  • Undelimited मैक्रो की समकक्ष कर रहे हैं, आश्चर्य, सीमांकित लोगों :) आप पिछले परिभाषा एक बालक और अधिक कर सकता है semantical : \def\say #1 to #2.{#1, #2!}। इस मामले में मापदंडों को तथाकथित पैरामीटर पाठ द्वारा पालन किया जाता है । इस तरह के पैरामीटर टेक्स्ट मैक्रो के तर्क #1को सीमांकित करता है ( द्वारा सीमांकित किया जाता है ␣to␣, रिक्त स्थान शामिल हैं, और #2द्वारा सीमांकित है .)। उस परिभाषा के बाद आप लिख सकते हैं \say Good news to everyone., जिसका विस्तार होगा Good news, everyone!। अच्छा लगा, है न? :) हालांकि एक सीमांकित तर्क है ( TeXbook को उद्धृत करते हुए ) "ठीक से नेस्टेड {...}समूहों के साथ टोकन का सबसे छोटा (संभवतः खाली) अनुक्रम जो गैर-पैरामीटर टोकन की इस विशेष सूची द्वारा इनपुट में अनुसरण किया जाता है"। इसका मतलब है कि का विस्तार\say Let's go to the mall to Martinएक अजीब वाक्य का उत्पादन करेगा। इस मामले में आप "छिपाएँ" पहले पूरे करने होंगे ␣to␣साथ {...}: \say {Let's go to the mall} to Martin

  • अब तक सब ठीक है। अब चीजें अजीब होने लगीं। जब TeX एक चरित्र (जिसे "वर्ण कोड" द्वारा परिभाषित किया गया है) पढ़ता है, तो यह उस वर्ण को "श्रेणी कोड" (कैटकोड, दोस्तों के लिए) प्रदान करता है :) जो परिभाषित करता है कि उस चरित्र का क्या अर्थ होगा। वर्ण और श्रेणी कोड का यह संयोजन एक टोकन बनाता है ( उदाहरण के लिए यहां पर अधिक )। यहाँ हमारे लिए जो रुचि के हैं वे मूल रूप से हैं:

    • कैटकोड 11 , जो टोकन को परिभाषित करता है जो एक नियंत्रण अनुक्रम (एक मैक्रो के लिए एक पॉश नाम) बना सकता है। डिफ़ॉल्ट रूप से सभी अक्षर [a-zA-Z] कैटकोड 11 हैं, इसलिए मैं लिख सकता हूं \hello, जो एक एकल नियंत्रण अनुक्रम है, जबकि \he11oनियंत्रण अनुक्रम \heदो वर्णों 1के बाद है, पत्र के बाद o, क्योंकि 1कैटकोड 11 नहीं है। अगर मैं किया \catcode`1=11, उस बिंदु से \he11oएक नियंत्रण अनुक्रम होगा। एक महत्वपूर्ण बात यह है कि जब टीएक्स पहली बार हाथ में चरित्र देखता है, तो कैटकोड्स सेट होते हैं, और इस तरह के कैटकोड जमे हुए होते हैं ... हमेशा के लिए! (नियम और शर्तें लागू हो सकती हैं)

    • कैटकोड 12 , जो कि अन्य पात्रों में से अधिकांश हैं, जैसे कि 0"!@*(?,.-+/और आगे। वे कम से कम विशेष प्रकार के कैटकोड हैं क्योंकि वे केवल कागज पर सामान लिखने के लिए काम करते हैं। लेकिन हे, जो लेखन के लिए TeX का उपयोग करता है? (फिर से, नियम और शर्तें लागू हो सकती हैं)

    • कैटकोड 13 , जो नरक है :) वास्तव में। पढ़ना बंद करो और जाओ अपने जीवन से कुछ करो। आप यह नहीं जानना चाहेंगे कि कैटकोड 13 क्या है। कभी शुक्रवार, 13 तारीख के बारे में सुना है? लगता है कि यह कहाँ से इसका नाम मिला! स्वयं के जोखिम पर आगे बढ़ें! एक कैटकोड 13 चरित्र, जिसे "सक्रिय" चरित्र भी कहा जाता है, अब केवल एक चरित्र नहीं है, यह एक मैक्रो ही है! आप इसे परिभाषित कर सकते हैं कि पैरामीटर और विस्तार जैसा कि हमने ऊपर देखा था। आप करने के बाद \catcode`e=13आप लगता है कि आप कर सकते हैं \def e{I am the letter e!}, लेकिन। आप। नही सकता! eअब कोई पत्र नहीं है, इसलिए आपको पता \defनहीं \defहै, यह है \d e f! ओह, एक और पत्र चुनें जिसे आप कहते हैं? ठीक है! \catcode`R=13 \def R{I am an ARRR!}। बहुत अच्छी तरह से, जिमी, यह कोशिश करो! मेरी हिम्मत है कि आप ऐसा करें और Rअपने कोड में लिखें ! यही एक कैटकोड 13 है। मैं शांत हूँ! पर चलते हैं।

  • ठीक है, अब समूहन के लिए। यह काफी सीधा है। जो भी असाइनमेंट ( \defएक असाइनमेंट ऑपरेशन है, \let(हम इसमें मिल जाएंगे) एक और है) एक ग्रुप में किया जाता है, जो उस ग्रुप के शुरू होने से पहले बहाल किए जाते हैं, जब तक कि असाइनमेंट ग्लोबल नहीं होता। समूह शुरू करने के कई तरीके हैं, उनमें से एक कैटकोड 1 और 2 वर्णों के साथ है (ओह, कैटकोड फिर से)। डिफ़ॉल्ट रूप {से कैटकोड 1, या स्टार्ट-ग्रुप है, और }कैटकोड 2, या एंड-ग्रुप है। एक उदाहरण: \def\a{1} \a{\def\a{2} \a} \aयह प्रिंट 1 2 1। बाहर समूह \aथा 1तो अंदर यह करने के लिए नए सिरे से परिभाषित किया गया था, 2है, और जब समूह समाप्त हो गया है, यह करने के लिए बहाल कर दी गई 1

  • \letआपरेशन की तरह एक और काम ऑपरेशन है \def, बल्कि अलग। साथ \defआप को परिभाषित मैक्रो जो सामान के लिए विस्तार होगा, साथ \letआप पहले से ही विद्यमान बातें की प्रतियां पैदा करते हैं। बाद\let\blub=\def ( =वैकल्पिक है) आप के शुरू होने से बदल सकते हैं eकरने के लिए ऊपर catcode 13 आइटम से उदाहरण \blub e{...और है कि एक साथ मजा। या बेहतर, सामान को तोड़ने के बजाय आप ठीक कर सकते हैं (क्या आप उस पर गौर करेंगे!) Rउदाहरण \let\newr=R \catcode`R=13 \def R{I am an A\newr\newr\newr!}:। त्वरित प्रश्न: क्या आप नाम बदल सकते हैं \newR?

  • अंत में, तथाकथित "स्पेसियस स्पेस"। यह एक वर्जित विषय है, क्योंकि ऐसे लोग हैं जो दावा करते हैं कि TeX - LaTeX स्टैक एक्सचेंज में अर्जित प्रतिष्ठा को "स्पष्ट स्थान" सवालों के जवाब देकर नहीं माना जाना चाहिए, जबकि अन्य पूरी तरह से असहमत हैं। आप किससे सहमत हैं? अपने दांव लगाएं! इस बीच, टीएक्स एक स्थान के रूप में एक लाइन ब्रेक को समझता है। उनके बीच एक लाइन ब्रेक (एक खाली लाइन नहीं ) के साथ कई शब्द लिखने की कोशिश करें। अब %इन लाइनों के अंत में जोड़ें । यह ऐसा है जैसे आप इन अंत स्थानों के "टिप्पणी" कर रहे थे। बस :)

(क्रमबद्ध) कोड ungolfing

आइए उस आयत को किसी चीज़ में बनाते हैं (यकीनन) इसका अनुसरण करना आसान है:

{
\let~\catcode
~`A13
\defA#1{~`#113\gdef}
AGG#1{~`#113\global\let}
GFF\else
GHH\fi
AQQ{Q}
AII{\ifxQ}
AEE#1#2#3|{I#3#2#1FE{#1#2}#3|H}
ADD#1#2#3|{I#2FE{#1}#2#3|H}
ACC#1#2|{D{}#2Q|#1 }
ABBH#1 {HI#1FC#1|BH}
\gdef\S#1{\iftrueBH#1 Q }
}

प्रत्येक चरण की व्याख्या

प्रत्येक पंक्ति में एक एकल निर्देश होता है। आइए एक-एक करके, उन्हें विच्छेदित करें:

{
पहले हम कुछ परिवर्तन (अर्थात् कैटकोड परिवर्तन) स्थानीय रखने के लिए एक समूह शुरू करते हैं ताकि वे इनपुट पाठ को गड़बड़ न करें।

\let~\catcode
मूल रूप से सभी TeX obfuscation कोड इस निर्देश के साथ शुरू होते हैं। डिफ़ॉल्ट रूप से, सादा TeX और LaTeX दोनों में, ~चरित्र एक सक्रिय चरित्र है जिसे आगे उपयोग के लिए मैक्रो में बनाया जा सकता है। और TeX कोड को अजीब बनाने के लिए सबसे अच्छा उपकरण कैटकोड परिवर्तन हैं, इसलिए यह आमतौर पर सबसे अच्छा विकल्प है। अब इसके बजाय \catcode`A=13हम लिख सकते हैं ~`A13( =वैकल्पिक है):

~`A13
अब पत्र Aएक सक्रिय चरित्र है, और हम इसे कुछ करने के लिए परिभाषित कर सकते हैं:

\defA#1{~`#113\gdef}
Aअब एक मैक्रो है जो एक तर्क लेता है (जो एक और चरित्र होना चाहिए)। पहले तर्क के कैटकोड को सक्रिय करने के लिए 13 में बदल दिया जाता है: ~`#113( ~द्वारा प्रतिस्थापित करें \catcodeऔर एक जोड़ें =और आपके पास :) \catcode`#1=13। अंत में यह इनपुट स्ट्रीम में एक \gdef(वैश्विक \def) छोड़ देता है । संक्षेप में, Aएक और चरित्र को सक्रिय बनाता है और इसकी परिभाषा शुरू करता है। चलो यह कोशिश करते हैं:

AGG#1{~`#113\global\let}
AGपहले "सक्रिय" Gकरता है और करता है \gdef, जिसके बाद अगली Gपरिभाषा शुरू होती है। की परिभाषा इसके Gसमान है A, सिवाय इसके कि इसके बजाय \gdefयह एक \global\let(वहाँ एक \gletजैसा नहीं है \gdef) करता है। संक्षेप में, Gएक चरित्र को सक्रिय करता है और इसे कुछ और बनाता है। आइए हम बाद में उपयोग किए जाने वाले दो आदेशों के लिए शॉर्टकट बनाएँ:

GFF\else
GHH\fi
के बजाय \elseऔर \fiहम बस का उपयोग कर सकते हैं Fऔर H। बहुत कम :)

AQQ{Q}
अब हम का उपयोग Aफिर से, एक और मैक्रो निर्धारित करने की Q। उपरोक्त कथन मूल रूप से (कम मोटे भाषा में) है \def\Q{\Q}। यह बहुत दिलचस्प परिभाषा नहीं है, लेकिन इसकी एक दिलचस्प विशेषता है। जब तक आप कुछ कोड, केवल मैक्रो फैलता को तोड़ने के लिए चाहते हो Qहै Qतो यह एक अनूठा मार्कर की तरह काम करता है, खुद को (यह एक कहा जाता है क्वार्क )। \ifxयदि किसी मैक्रो का तर्क इस तरह का है तो आप सशर्त परीक्षण का उपयोग कर सकते हैं \ifx Q#1:

AII{\ifxQ}
तो आप बहुत सुनिश्चित हो सकते हैं कि आपको ऐसा मार्कर मिल गया है। ध्यान दें कि इस परिभाषा में मैंने \ifxऔर के बीच का स्थान हटा दिया है Q। आमतौर पर इससे एक त्रुटि होती है (ध्यान दें कि सिंटैक्स हाइलाइट सोचता है कि \ifxQएक चीज है), लेकिन चूंकि अब Qकैटकोड 13 है यह एक नियंत्रण अनुक्रम नहीं बना सकता है। हालांकि, सावधान रहें, इस क्वार्क का विस्तार न करें या आप अनंत लूप में फंस जाएंगे क्योंकि इसका Qविस्तार होता हैQ जिसका विस्तार Q...

अब चूंकि पूर्वाग्रह समाप्त हो चुके हैं, हम उचित एल्गोरिथ्म में pwas eht सेटरल पर जा सकते हैं। TeX के टोकन के कारण एल्गोरिदम को पीछे की ओर लिखना पड़ता है। ऐसा इसलिए है क्योंकि जब आप एक परिभाषा करते हैं तो TeX वर्तमान सेटिंग्स का उपयोग करते हुए परिभाषा में वर्णों को टोकन (असाइन catcodes) करेगा, उदाहरण के लिए, अगर मैं करता हूं:

\def\one{E}
\catcode`E=13\def E{1}
\one E

आउटपुट है E1, जबकि अगर मैं परिभाषाओं के क्रम को बदलता हूं:

\catcode`E=13\def E{1}
\def\one{E}
\one E

उत्पादन होता है 11। ऐसा इसलिए है क्योंकि Eपरिभाषा में पहले उदाहरण में कैटकोड बदलने से पहले एक अक्षर (कैटकोड 11) के रूप में टोकन दिया गया था, इसलिए यह हमेशा एक पत्र होगा E। दूसरे उदाहरण में, हालांकि, Eपहले सक्रिय किया गया था, और उसके बाद \oneही परिभाषित किया गया था, और अब परिभाषा में कैटकोड 13 शामिल है Eजो कि फैलता है 1

हालाँकि, मैं इस तथ्य को अनदेखा करूंगा और तार्किक (लेकिन काम नहीं करने वाला) आदेश की परिभाषाओं को फिर से लिखूंगा। निम्नलिखित पैराग्राफ में आप मान सकते हैं कि पत्र B, C, D, और Eसक्रिय हैं।

\gdef\S#1{\iftrueBH#1 Q }
(ध्यान दें कि पिछले संस्करण में एक छोटा बग था, इसमें ऊपर की परिभाषा में अंतिम स्थान नहीं था। मैंने इसे लिखते समय केवल ध्यान दिया। आगे पढ़ें और आप देखेंगे कि हमें मैक्रो को ठीक से समाप्त करने की आवश्यकता क्यों है। )
पहले हम, उपयोगकर्ता के स्तर मैक्रो निर्धारित \S। यह एक मैत्रीपूर्ण (?) सिंटैक्स के लिए एक सक्रिय वर्ण नहीं होना चाहिए, इसलिए gwappins eht सेटरेल के लिए मैक्रो है \S। मैक्रो हमेशा-सच्चे सशर्त के साथ शुरू होता है \iftrue(यह जल्द ही स्पष्ट हो जाएगा क्यों), और फिर Bमैक्रो कॉल करता है ताकि साइट का प्रतिपादन इसे खा न जाए, जैसे मैंने कोड के पिछले संस्करण में किया था)। यह सच है, इसलिए इसका विस्तार होता है और हम साथ रह जाते हैं । TeX हटा नहीं है ()H (जिसे हमने पहले परिभाषित किया था \fi) से मिलान करने के लिए \iftrue। फिर हम स्थूल #1और एक क्वार्क द्वारा पीछा के तर्क को छोड़ देते हैं Q। मान लीजिए हम उपयोग करते हैं \S{hello world}, तो इनपुट स्ट्रीमइस तरह दिखना चाहिए: \iftrue BHhello world Q␣(मैंने अंतिम स्थान को बदल दिया\iftrueBHhello world Q␣\fiH) सशर्त के मूल्यांकन के बाद, इसके बजाय इसे वहां तक ​​छोड़ देता है \fi है वास्तव में विस्तार किया। अब Bमैक्रो का विस्तार किया गया है:

ABBH#1 {HI#1FC#1|BH}
Bएक सीमांकित मैक्रो है जिसका पैरामीटर पाठ है H#1␣, इसलिए तर्क जो कुछ भी है Hऔर एक स्थान के बीच है। के विस्तार से पहले इनपुट स्ट्रीम के ऊपर उदाहरण जारी Bहै BHhello world Q␣Bइसके बाद H, जैसा कि यह होना चाहिए (अन्यथा TeX एक त्रुटि उठाएगा), तो अगला स्थान helloऔर के बीच है world, इसलिए । अंतिम स्थान की आवश्यकता है क्योंकि सीमांकित मैक्रो#1 ही शब्द है hello। और यहां हमें रिक्त स्थान पर इनपुट पाठ को विभाजित करने के लिए मिला। आहा: डी विस्तार Bसे इनपुट स्ट्रीम करने और बदलने वाला से पहले अंतरिक्ष के लिए हटा देगा सब कुछ HI#1FC#1|BHके साथ #1किया जा रहा है hello: HIhelloFChello|BHworld Q␣। ध्यान दें कि एक BHइनपुट पुनरावृत्ति करने के लिए इनपुट स्ट्रीम में एक नया बाद हैBऔर बाद में शब्दों की प्रक्रिया करें। इस शब्द को संसाधित Bकरने के बाद अगले शब्द को संसाधित किया जाता है जब तक कि शब्द-से-संसाधित होना क्वार्क है को तर्क के अंत में एक की आवश्यकता होती है। पिछले संस्करण के साथ (इतिहास संपादित करें देखें) यदि आप उपयोग करते हैं तो कोड गलत व्यवहार करेगा ( s के बीच का स्थान गायब हो जाएगा)।QQB \S{hello world}abc abcabc

ठीक है, इनपुट स्ट्रीम पर वापस जाएं HIhelloFChello|BHworld Q␣:। पहले वहाँ H(\fi ) है कि प्रारंभिक पूरा करता है \iftrue। अब हमारे पास यह है (छद्म कोड):

I
  hello
F
  Chello|B
H
world Q␣

I...F...Hथिंक वास्तव में एक है \ifx Q...\else...\fiसंरचना। \ifxपरीक्षण जांच करता है कि शब्द (पहले का टोकन) को पकड़ा है Qक्वार्क। अगर ऐसा है वहाँ और कुछ नहीं करने के लिए निष्पादन समाप्त है, अन्यथा क्या रहता है: Chello|BHworld Q␣। अब Cइसका विस्तार किया गया है:

ACC#1#2|{D#2Q|#1 }
का पहला तर्क Cपूर्वव्यापी है, इसलिए जब तक कि यह एक एकल टोकन नहीं होगा, तब तक दूसरी तर्क को सीमांकित किया जाता है |, इसलिए इनपुट स्ट्रीम C( #1=hऔर #2=ello) के विस्तार के बाद है DelloQ|h BHworld Q␣:। सूचना है कि एक और |वहाँ डाल दिया जाता है, और hकी helloउस के बाद डाल दिया है। आधा स्वैपिंग किया जाता है; पहला अक्षर सबसे अंत में है। TeX में एक टोकन सूची के पहले टोकन को पकड़ना आसान है। \def\first#1#2|{#1}जब आप उपयोग करते हैं तो एक साधारण मैक्रो को पहला अक्षर मिलता है \first hello|। आखिरी एक समस्या है क्योंकि TeX हमेशा तर्क के रूप में "सबसे छोटी, संभवतः खाली" टोकन सूची को पकड़ता है, इसलिए हमें कुछ काम-आस-पास चाहिए। टोकन सूची में अगला आइटम है D:

ADD#1#2|{I#1FE{}#1#2|H}
यह Dमैक्रो वर्क-अराउंड में से एक है और यह एकमात्र मामले में उपयोगी है जहाँ शब्द में एक अक्षर है। मान लीजिए कि हमारे बजाय helloथा x। इस मामले में इनपुट स्ट्रीम होगी DQ|x, फिर Dविस्तार होगा (साथ #1=Q, और #2खाली) IQFE{}Q|Hx:। यह I...F...H( \ifx Q...\else...\fi) ब्लॉक के समान है B, जिसमें यह देखा जाएगा कि तर्क क्वार्क है और केवल xटाइप बैठना छोड़ते हुए निष्पादन को बाधित करेगा । अन्य मामलों में ( helloउदाहरण के लिए वापस ), Dका विस्तार (के साथ #1=eऔर #2=lloQ) होगा IeFE{}elloQ|Hh BHworld Q␣:। फिर से, मैक्रो का विस्तार होगा:I...F...H लिए जाँच करेगा, Qलेकिन विफल हो जाएगा और ले\else शाखाE{}elloQ|Hh BHworld Q␣ :। अब इस चीज़ का आखिरी टुकड़ा,E

AEE#1#2#3|{I#3#2#1FE{#1#2}#3|H}
यहाँ पैरामीटर पाठ काफी समान है Cऔर D; पहले और दूसरे तर्क को हटा दिया गया है, और अंतिम एक को सीमांकित किया गया है |। इनपुट स्ट्रीम इस तरह दिखाई देती है: E{}elloQ|Hh BHworld Q␣फिर Eफैलती है ( #1खाली #2=e, और #3=lloQ) के साथ IlloQeFE{e}lloQ|HHh BHworld Q␣:। I...F...Hक्वार्क के लिए एक और ब्लॉक चेक (जो देखता है lऔर लौटता है false) E{e}lloQ|HHh BHworld Q␣:। अब Eफिर से फैलता है ( #1=eखाली #2=l, और #3=loQ) के साथ IloQleFE{el}loQ|HHHh BHworld Q␣:। और फिर से I...F...H। मैक्रो कुछ और पुनरावृत्तियों को करता है जब तक कि Qअंत में नहीं मिलता है और trueशाखा ली जाती है: E{el}loQ|HHHh BHworld Q␣-> IoQlelFE{ell}oQ|HHHHh BHworld Q␣-> E{ell}oQ|HHHHh BHworld Q␣-> -> IQoellFE{ello}Q|HHHHHh BHworld Q␣। अब क्वार्क पाया जाता है और सशर्त का विस्तार होता है:oellHHHHh BHworld Q␣। ओह।

ओह, रुको, ये क्या हैं? सामान्य पत्र? ओह लड़का! अंत में अक्षर पाए जाते हैं और TeX लिखता है oell, फिर इनपुट स्ट्रीम छोड़ते हुए H( \fi) और ( ) कुछ भी नहीं मिला है oellh BHworld Q␣। अब पहले शब्द में पहले और आखिरी अक्षर की अदला-बदली हुई है और आगे जो टीएक्स मिलता है, Bवह है अगले शब्द के लिए पूरी प्रक्रिया को दोहराना।

}
अंत में हमने समूह को वापस वहीं शुरू कर दिया, ताकि सभी स्थानीय कार्य पूर्ववत हो जाएं। स्थानीय कार्य पत्रों की catcode परिवर्तन कर रहे हैं A, B,C , ... जो मैक्रो किए गए थे ताकि वे अपने सामान्य पत्र अर्थ पर लौटने और सुरक्षित रूप से पाठ में इस्तेमाल किया जा सकता है। और बस। अब \Sमैक्रो वापस परिभाषित किया गया है ऊपर के रूप में पाठ के प्रसंस्करण को गति देगा।

इस कोड के बारे में एक दिलचस्प बात यह है कि यह पूरी तरह से विस्तार योग्य है। यही है, आप इसे बिना किसी चिंता के चलती तर्कों में सुरक्षित रूप से उपयोग कर सकते हैं कि यह फट जाएगा। आप यह भी जांच सकते हैं कि एक शब्द का अंतिम अक्षर दूसरे के समान है या नहीं (जो भी कारण से आपको इसकी आवश्यकता होगी) एक \ifजांच में कोड का उपयोग करें:

\if\S{here} true\else false\fi % prints true (plus junk, which you would need to handle)
\if\S{test} true\else false\fi % prints false

क्षमा (शायद बहुत दूर) के लिए खेदजनक व्याख्या। मैंने इसे गैर TeXies के लिए भी यथासंभव स्पष्ट करने की कोशिश की :)

अधीर के लिए सारांश

मैक्रो \Sएक सक्रिय चरित्र के साथ इनपुट को प्रस्तुत करता है Bजो अंतिम स्थान द्वारा सीमांकित टोकन की सूची देता है और उन्हें पास करता है CCउस सूची में पहला टोकन लेता है और उसे टोकन सूची के अंत में ले जाता है और Dजो शेष रहता है, उसका विस्तार करता है। Dजाँच करता है कि "क्या रहता है" खाली है, जिस स्थिति में एकल-अक्षर शब्द पाया गया था, तो कुछ भी न करें; अन्यथा फैलता है EEटोकन सूची के माध्यम से जब तक यह शब्द में अंतिम अक्षर नहीं मिल जाता है, तब यह पता चलता है कि यह अंतिम अक्षर, शब्द के मध्य के बाद से निकलता है, जिसके बाद टोकन स्ट्रीम के अंत में छोड़ा गया पहला अक्षर होता है C


2
मैं इस एक की पूरी व्याख्या करना पसंद करूंगा। मैं बहुत उत्सुक हूं कि यह कैसे काम करता है!
लाम्बेबेटा

1
@LambdaBeta मैं इसे कर सकता हूं, लेकिन अभी नहीं। जब मैं यह करूं, तो आपको
रोक कर रखूंगा और

1
@LambdaBeta पूरा हुआ! क्षमा करें, मुझे कभी-कभी बहुत
चिंता

13

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

सहेजे गए 3 बाइट @FryAmTheEggman की बदौलत

विभाजक के रूप में एक लाइनफीड का उपयोग करता है।

s=>s.replace(/(.)(.*)(.)/g,'$3$2$1')

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


5
(.)(.*)(.)यह है कि कुल याद इमोटिकॉन?
माइकइलियार

1
@MikeTheLiar की तरह, मुझे लगता है। : डी
अरनौल

असाइनमेंट निर्दिष्ट करता है स्ट्रिंग में विभाजक होता है।
सीस टिमरमैन

@CeesTimmerman मुझे यकीन नहीं है कि आपका क्या मतलब है। यह कोड विभाजक के रूप में एक लाइनफीड की उम्मीद करता है और इसलिए इनपुट के रूप में लाइनफीड के साथ तार लेता है। (TIO लिंक का पाद लेख रिक्त स्थान को रेखांकन के लिए और फिर पठनीयता के लिए रिक्त स्थान में परिवर्तित करता है।)
अरनौल

"एक वर्णमाला ASCII वर्णों के साथ-साथ एक अन्य चरित्र को एक सीमांकक (प्रत्येक शब्द को अलग करने के लिए) के रूप में उपयोग करने के लिए दिया गया " - एनएम, मुझे लगा कि यह एक अलग पैरामीटर था।
सीस टिमरमैन

11

रेटिना ,8 5 बाइट्स

,V,,`

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

केविन क्रूज़सेन के लिए धन्यवाद 3 बाइट्स बचा लिया !

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


खतरे, मैं अपने उत्तर को अद्यतन करने के लिए कुछ इस तरह से डॉक्स के माध्यम से खोज रहा था, लेकिन आपने मुझे इसे हरा दिया। मैं इसके बारे में जानता था V, लेकिन यह नहीं जानता था कि इसका इस्तेमाल इस 1,-2तरह के सूचकांकों के साथ किया जा सकता है। अच्छा है!
केविन क्रूज़सेन

1
@ केविनक्रूजसेन मैं थोड़ा धोखा खा गया और समीक्षा की कि कैसे सीमा सीमाओं ने काम किया, जबकि यह सैंडबॉक्स में था :) मुझे अभी भी ऐसा लगता है कि एक सीमा को स्थापित करने की तुलना में बेहतर तरीका होना चाहिए लेकिन मैं कुछ भी छोटा नहीं पा सका हूं।
FryAmTheEggman

2
आप वास्तव में सही हैं कि यह एक सीमा-सीमा के बिना कम हो सकता है, क्योंकि ऐसा लगता है कि यह 5-बाइटर काम करता है (डॉक्स में चरण सीमा के नीचे उदाहरण के रूप में दिया गया है)।
केविन क्रूज़सेन

@KevinCruijssen अच्छा लगा! विश्वास नहीं कर सकता कि मैं चूक गया।
FryAmTheEggman

3
तो, 5 बाइट्स और केवल 3 अलग-अलग वर्ण? वह न्यूनतम है।
कोयूर

9

पेपे , 107 105 बाइट्स

REEeREeeEeeeeerEEreREEEeREEEEEEeREEEErEEREEEEEEEreererEEEeererEEEerEEeERrEEEeerEEeerereeerEEEEeEEEReEeree

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

स्पष्टीकरण:

टिप्पणियों पर अंकन: command-explanation -> (stack) // explanation

REEe # input -> (R)
REeeEeeeee # push space to last -> (R) // this prevents an infinite loop

rEE # create loop labeled 0 and automatically push 0 
  re # pop 0 -> (r)
  REEEe # go to last item -> (R)
  REEEEEEe # ...then copy the char to other stack
  REEEE # go to first item -> (R)

  rEE # create loop labeled 32 // detect space
    REEEEEEE # move item to other stack (R)
  ree # do this while char != 32

  re # pop 32 -> (r)
  rEEEee # push item (dup to end) -> (r)
  re # ...then pop -> (r)
  rEEEe rEEeE # go to 2nd to last item -> (r)
  RrEEEee # push the item (R flag: dup to first) -> (r)
  rEEee # go to next -> (r) //
  re # ...then pop -> (r)
  reee rEEEEeEEE # out all as char then clear -> (r)
  ReEe # out 32 as char -> (R)
ree # do this while stack != 0

यह कैसे काम करता है?
lirtosiast

@lirtosiast स्पष्टीकरण जोड़ा गया
u_ndefined


6

laskelH , 71 बाइट्स

h=reverse
s(x:y:o)=a:h(x:r)where(a:r)=h$y:o
s o=o
f=unwords.map s.words

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

उदाहरण में / आउटपुट:

Swap the first and last letter in each word
This also works with single letter words like a

It is basically just a straight up implementation in which
I for words consisting of two or more letters cons the head
of the reversed tail on the reverse of the original head consed
on the reversed tail

Note that the rules say that we only have to support one kind
of separator - I am choosing spaces Technically it works with
other whitespace as well, but it will turn everything into spaces
in the end Line endings in this example usage are handled separately
to make the example output look nicer
pwaS eht tirsf dna tasl rettel ni hace dorw
shiT olsa sorkw hitw eingls rettel sordw eikl a

tI si yasicallb tusj a ttraighs pu nmplementatioi ni hhicw
I rof sordw gonsistinc fo owt ro eorm setterl sonc eht deah
fo eht deverser lait no eht eeversr fo eht lriginao deah donsec
no eht deverser lait

eotN that eht suler yas that ew ynlo eavh ot tuppors eno dink
fo reparatos - I ma ghoosinc spaces yechnicallT ti sorkw hitw
rtheo ehitespacw sa ,ellw tub ti lilw nurt gverythine onti spaces
ni eht dne einL sndinge ni shit example esagu era dandleh yeparatels
ot eakm eht example tutpuo kool ricen
```

1
whereक्लॉज़ में असाइनमेंट को 5 बाइट्स को बचाने के लिए गार्ड में एक बंधन में स्थानांतरित किया जा सकता है: इसे ऑनलाइन आज़माएं!
लकोनी

1
मैंने देखा कि आपने शीर्षक में "हास्केल" नाम के साथ वहां क्या किया। मैंने अपने PHP उत्तर पर यही काम किया।
640KB

5

05AB1E , 10 बाइट्स

#vyRćsRćðJ

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


-3 @ केविन क्रूज़सेन को धन्यवाद ।

#           | Split into words.
 vy         | For each word...
   RćsRć    | Reverse, split head, swap, reverse, split tail
        ðJ  | Join by spaces.


1
@ केविनक्रूजसेन मैं ईमानदारी से इसे हटाना चाहता हूं और आपको देना चाहता हूं, जो तर्कों के आदेश पर 99% आपकी दिमागी ताकत थी।
मैजिक ऑक्टोपस Urn

1
एक 9-बाईटर मिला, लेकिन यह केवल विरासत संस्करण में काम करता है:|ʒRćsRćJ,
केविन क्रूज़सेन

1
बहुत बुरा हम एक नहीं है loop_as_long_as_there_are_inputs, तो मुझे एक 8-बायटर पता होता है: [RćsRćJ,यह 8-बायटर [कभी भी थ्योरी में आउटपुट नहीं करता है, केवल तब जब आप मेमोरी से बाहर होते हैं या टीआईओ की तरह टाइम आउट करते हैं (और इसके लिए अनुगामी की आवश्यकता होती है इनपुट में newline, अन्यथा यह अंतिम शब्द का उपयोग करता रहेगा) ।।
केविन क्रूज़सेन

1
दुर्भाग्य से आपको ð¡एकल शब्द इनपुट की आवश्यकता है, लेकिन ð¡εćsÁì}ðýयह 10 बाइट्स पर भी काम करता है।
शाम

5

जे , 23 17 बाइट्स

({:,1|.}:)&.>&.;:

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


घूर्णन और आवेदन करके पहले / अंतिम पत्रों को स्वैप करने के लिए बहुत अच्छी चाल 1 A.!
गैलेन इवानोव

1
1&A.&.(1&|.)-> ({:,1|.}:)और फिर आप::]
ngn

कमाल है, शुक्रिया
FrownyFrog

वास्तव में आश्चर्यजनक! एक बार फिर मैं चकित हूं कि समाधान कितना सरल और सुरुचिपूर्ण हो सकता है, लेकिन इसके बाद ही मैं इसे किसी और के द्वारा किया जाता हूं।
गैलेन इवानोव

4

रूबी के साथ -p, 42 41 29 बाइट्स

gsub /(\w)(\w*)(\w)/,'\3\2\1'

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



@ सिर के लिए धन्यवाद धन्यवाद। अगर आप मेरे पोस्ट इतिहास को देखें तो यह पता चलता है कि मैं बिना किसी जवाब के 8 महीने के लिए दूर था, इसलिए मैंने उस समय के दौरान कुछ संस्मरण याद किए हैं, हाहा
मूल्य इंक

बहुत यकीन है कि आम सहमति 8 महीने पहले बदल दी गई थी, लेकिन सिर्फ इस मामले में आप चूक गए: "गैर-प्रतिस्पर्धा" भी अब कोई बात नहीं है।
शैगी

अच्छी तरह से किया। मुझे लगता है कि नियमों के तहत आप अपने परिसीमन के रूप में नईलाइन्स का उपयोग कर सकते हैं और \wएस को एस के साथ बदल सकते हैं .
हिस्टोक्रेट





3

व्हॉट्सएप , 179 बाइट्स

[N
S S S N
_Create_Label_OUTER_LOOP][S S S N
_Push_n=0][N
S S T   N
_Create_Label_INNER_LOOP][S N
S _Duplicate_n][S N
S _Duplicate_n][S N
S _Duplicate_n][T   N
T   S _Read_STDIN_as_character][T   T   T   _Retrieve_input][S S S T    S T T   N
_Push_11][T S S T   _Subtract_t=input-11][N
T   T   S S N
_If_t<0_jump_to_Label_PRINT][S S S T    N
_Push_1][T  S S S _Add_n=n+1][N
S N
T   N
_Jump_to_Label_INNER_LOOP][N
S S S S N
_Create_Label_PRINT][S S S T    N
_Push_1][T  S S T   _Subtract_n=n-1][S N
S _Duplicate_n][S N
S _Duplicate_n][N
T   S N
_If_n==0_jump_to_Label_PRINT_TRAILING][T    T   T   _Retrieve][T    N
S S _Print_as_character][S S S N
_Push_s=0][N
S S S T N
_Create_Label_PRINT_LOOP][S S S T   N
_Push_1][T  S S S _Add_s=s+1][S N
S _Duplicate_s][S T S S T   S N
_Copy_0-based_2nd_n][T  S S T   _Subtract_i=s-n][N
T   S N
_If_0_Jump_to_Label_PRINT_TRAILING][S N
S _Duplicate_s][T   T   T   _Retrieve][T    N
S S _Print_as_character][N
S T S T N
_Jump_to_Label_PRINT_LOOP][N
S S N
_Create_Label_PRINT_TRAILING][S S S N
_Push_0][T  T   T   _Retrieve][T    N
S S _Print_as_character][S S S T    S S T   N
_Push_9_tab][T  N
S S _Print_as_character][N
S N
S N
_Jump_to_Label_OUTER_LOOP]

पत्र S(स्थान), T(टैब), और N(नई-पंक्ति) केवल हाइलाइटिंग के रूप में जोड़े गए।
[..._some_action]केवल स्पष्टीकरण के रूप में जोड़ा गया।

टैब के रूप में सीमांकक। इनपुट में एक अनुगामी न्यूलाइन (या टैब) होना चाहिए, अन्यथा प्रोग्राम को पता नहीं है कि कब रोकना है, क्योंकि व्हॉट्सएप में इनपुट लेने के बाद केवल एक बार में एक वर्ण किया जा सकता है।

इसे ऑनलाइन आज़माएँ (कच्चे स्थान, टैब और नई-नई लाइनों के साथ)।

छद्म कोड में स्पष्टीकरण:

व्हॉट्सएप में केवल एक स्टैक और एक ढेर है, जहां ढेर एक कुंजी और मूल्य (दोनों पूर्णांक) के साथ एक नक्शा है। इनपुट्स को केवल एक बार में एक पूर्णांक या वर्ण पढ़ा जा सकता है, जो हमेशा ही पूर्णांक के रूप में ही रखे जाते हैं, और फिर उन्हें अपने निर्धारित हीप-पतों (मानचित्र-कुंजियों) के साथ स्टैक में लाया और प्राप्त किया जा सकता है। अपने दृष्टिकोण में मैं पूरे शब्द को हीप-पतों (मानचित्र-कुंजियों) में संग्रहीत करता हूँ[0,,word_length], और फिर एक टैब (या न्यूलाइन) को सीमांकक के रूप में सामना करने के बाद हम चाहते हैं कि एक-एक करके वर्णों को फिर से प्रिंट करें।

Start OUTER_LOOP:
  Integer n = 0
  Start INNER_LOOP:
    Character c = STDIN as character, saved at heap-address n
    If(c == '\t' OR c == '\n'):
      Jump to PRINT
    n = n + 1
    Go to next iteration of INNER_LOOP

  PRINT:
    n = n - 1
    If(n == 0): (this means it was a single-letter word)
      Jump to PRINT_TRAILING
    Character c = get character from heap-address n
    Print c as character
    Integer s = 0

    Start PRINT_LOOP:
      s = s + 1
      If(s - n == 0):
        Jump to PRINT_TRAILING
      Character c = get character from heap-address s
      Print c as character
      Go to next iteration of PRINT_LOOP

    PRINT_TRAILING:
      Character c = get character from heap-address 0
      Print c as character
      Print '\t'
      Go to next iteration of OUTER_LOOP

जब TIO में कोई नहीं दिया जाता है, तो यह एक त्रुटि के साथ समाप्त होता है जब कोई चरित्र पढ़ने की कोशिश करता है (या यह vii5ard जैसे कुछ व्हाट्सएप संकलकों में इनपुट की प्रतीक्षा करता है )।


3

वोल्फ्राम लैंग्वेज (गणितज्ञ) , 58 बाइट्स

StringReplace[#,a:u~~w:u..~~b:u:>b<>w<>a/.{u->Except@#2}]&

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

-22 बाइट्स @attinat से

@ M.Stern से -12 बाइट्स


70 बाइट्स का उपयोग कर StringReplaceके साथ StringExpressionरों
attinat

1
StringTakeइसके बजाय 64 बाइट्स का उपयोग करें StringReplace:StringRiffle[StringSplit@##~StringTake~{{-1},{2,-2},{1}},#2,""]&
रोमन

2
यहाँ एक और अधिक प्रत्यक्ष दृष्टिकोण है:StringReplace[#, a : u ~~ w : u .. ~~ b : u :> b <> w <> a /. {u -> Except@#2}] &
एम। स्टर्न

1
{और} वैकल्पिक हैं :)
एम। स्टर्न

1
55 बाइट्स , यह भी 2-चरित्र शब्द ठीक करता है
attinat



2

Japt -S , 10 बाइट्स

वहाँ एक छोटे दृष्टिकोण होना चाहिए (और मैं सही था ) लेकिन यह अभी के लिए करेंगे।

¸ËhJDg)hDÌ

कोशिश करो

¸ËhJDg)hDÌ     :Implicit input of string
¸              :Split on spaces
 Ë             :Map each D
  h            :  Set the character at
   J           :    Index -1 to
    Dg         :    The first character in D
      )        :  End set
       h       :  Set the first character to
        DÌ     :    The last character in D
               :Implicit output, joined by spaces

मेरे 12 बटर से बहुत कम:¸®Ì+Zs1J +Zg
अज्ञान का अवतार

@EmbodimentofIgnorance, यही वह जगह है जहाँ मैंने शुरू किया था, लेकिन यह एकल चरित्र शब्दों पर विफल रहा होगा। आप उस पर एक बाइट बचा सकते हैं, हालांकि, के साथ ¸®ÎiZÌ+Zs1J
शैगी

1
@EmbodimentofIgnorance को 7
ओलिवर

2

सेड, 64 बाइट्स

sed -E 's/\b([[:alpha:]])([[:alpha:]]*)([[:alpha:]])\b/\3\2\1/g'

निश्चित रूप से, हम .इसके बजाय उपयोग कर सकते हैं [[:alpha:]], लेकिन यह वास्तव में होना चाहिए [^ ], जो इसे 43 तक कम कर देता है, लेकिन विराम चिह्न और इस तरह टूट जाता है। का उपयोग करके [a-zA-Z]इसे 55 तक लाया जाता है, जिस बिंदु से मैं उन मीठे, मीठे मानव पठनीय संस्थाओं के बाद सिर्फ हांक रहा हूं ...
रिच

2
You do not need to handle punctuation; all of the inputs will only consist of the letters a through z, separated by a delimiter, all of a uniform case.दूसरे शब्दों में, आपको अपने कोड को विराम चिह्न "ब्रेकिंग" के बारे में चिंता करने की ज़रूरत नहीं है और बस सुरक्षित रूप से जा सकते हैं [^ ];)
मूल्य इंक

@ValueInk हाँ, लेकिन फिर ऐसा [^ ]होना चाहिए [^[:space:]]जो इसे 67 वर्णों तक ले जाए।
रिच

"एक सीमांकक" का अर्थ है कि आप यह सुनिश्चित कर सकते हैं कि परिसीमन हमेशा एक नियमित स्थान है। किसी भी वाक्य में टैब का उपयोग कौन करता है ??
वैल्यू इंक

ठीक है। "कोड गोल्फ" की तरह लगता है एक खेल है जहाँ आप वास्तव में काम करने के बजाय छेद में गेंद को छोड़ने के लिए ड्रोन प्राप्त करने के तरीके खोजने के लिए हैं। शुक्रिया स्वागत के लिए धन्यवाद।
रिच

2

सीड , 34 बाइट्स

और संभवतः पैटर्न का विचार अधिकांश आरई टूल के साथ काम करेगा (और मुझे पता है कि मानक आरई और विस्तारित आरई के बीच अंतर हैं)।

s,\b\(\w\)\(\w*\)\(\w\)\b,\3\2\1,g

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


1
PPCG में आपका स्वागत है! मेथिंक कि रेगेक्स मैचों की लालची प्रकृति का मतलब है कि आप \bमैच से काट सकते हैं : इसे ऑनलाइन आज़माएं!
वैल्यू इंक

सहमत @ValueInk - लेकिन मैं मैच के साथ सटीक रहा था। \bविल को हटाने से 30 बाइट्स हो जाएंगे।
PJF

उन्नत regex के लिए -E का उपयोग करें और आप unescaped कोष्ठक का उपयोग कर सकते हैं। .स्वैप किए गए चार्ट के लिए उपयोग करें और आप एक और दो चार्ट खो सकते हैं। यह 26 बाइट्स के लिए तुम्हारा नीचे लाता है; सबसे छोटे पठनीय समाधानों में से एक। s,\b(.)(\w*)(.)\b,\3\2\1,g
रिच

1
- नहीं, मैं गलत हूं, आपको \wसिरों की जरूरत है। s,\b(\w)(\w*)(\w)\b,\3\2\1,g28 चरस।
धनी

अच्छा काम @rich, लेकिन जैसा कि मैंने कहा कि मैं मानक और विस्तारित आरई के बारे में जानता हूं। मैंने इसे मानक और पठनीय बनाने के लिए चुना। उन एंकरों की आवश्यकता होगी जिन्हें मैंने ValueInk के अपने उत्तर में उल्लेख करने के लिए उपेक्षित किया था।
PJF

2

रूबी, 53 बाइट्स

gets.split(" ").map{|z|print z[-1]+z[1..-2]+z[0]," "}

मैंने इसे रेगेक्स के बिना आज़माया। आउटपुट प्रत्येक शब्द को एक नई लाइन पर प्रिंट करता है। अगर यह नियमों के खिलाफ है, तो मुझे बताएं और मैं इसे ठीक कर दूंगा।

Ungolfed:

gets.split(" ").map {|z|
    print z[-1] + z[1..-2] + z[0], " "
}

PPCG में आपका स्वागत है! प्रत्येक शब्द को एक नई लाइन पर प्रिंट करना ठीक होना चाहिए, लेकिन आपका पुराना समाधान pअच्छा नहीं था क्योंकि इससे आउटपुट में उद्धरण जोड़े गए थे। आप हमेशा putsइसके बजाय उपयोग कर सकते हैं क्योंकि एक ही नईलाइन को जोड़ता है और इससे छोटा है print! इसके अलावा, यदि आप splitबिना किसी तर्क के कॉल करते हैं तो यह अपने आप रिक्त स्थान पर विभाजित हो जाता है।
मूल्य स्याही

2

8088 असेंबली, आईबीएम पीसी डॉस, 39 38 बाइट्स

$ xxd pwas.com
00000000: d1ee ac8a c8fd 03f1 c604 244e 8bfe ac3c  ..........$N...<
00000010: 2075 098a 2586 6402 8825 8bfe e2f0 b409   u..%.d..%......
00000020: ba82 00cd 21c3

unassembled:

D1 EE       SHR  SI, 1          ; point SI to DOS PSP (080H) 
AC          LODSB               ; load string length into AL 
8A C8       MOV  CL, AL         ; load string length into CX for loop
FD          STD                 ; set LODSB to decrement 
03 F1       ADD  SI, CX         ; point SI to end of string 
C6 04 24    MOV  BYTE PTR[SI], '$' ; put a '$' DOS string terminator at end 
4E          DEC  SI             ; start at last char of word 
8B FE       MOV  DI, SI         ; point DI to last char of word 
        CHR_LOOP: 
AC          LODSB               ; load next (previous?) char into AL 
3C 20       CMP  AL, ' '        ; is it a space? 
75 0A       JNE  END_CHR        ; if so, continue loop 
8A 25       MOV  AH, [DI]       ; put last char in AH 
86 64 02    XCHG AH, [SI][2]    ; swap memory contents of first char with last 
                                ; (unfortunately XCHG cannot swap mem to mem)
88 25       MOV  [DI], AH       ; put first char value into last char position 
8B FE       MOV  DI, SI         ; point DI last char of word 
        END_CHR:
E2 EF       LOOP CHR_LOOP       ; continue loop 
B4 09       MOV  AH, 9          ; DOS display string function 
BA 0082     MOV  DX, 082H       ; output string is at memory address 82H 
CD 21       INT  21H            ; display string to screen 
C3          RET                 ; return to DOS 

स्टैंडअलोन पीसी डॉस निष्पादन योग्य। कमांड लाइन आर्ग के माध्यम से इनपुट, स्क्रीन पर आउटपुट।

यहां छवि विवरण दर्ज करें

PWAS.COM डाउनलोड और परीक्षण करें



1

बैच, 141 बाइट्स

@set t=
@for %%w in (%*)do @call:c %%w
@echo%t%
@exit/b
:c
@set s=%1
@if not %s%==%s:~,1% set s=%s:~-1%%s:~1,-1%%s:~,1%
@set t=%t% %s%

कमांड-लाइन मापदंडों के रूप में इनपुट लेता है। स्ट्रिंग हेरफेर बैच में सबसे अच्छा है, और विशेष-केस सिंगल-अक्षर शब्दों में मदद नहीं करता है।


1

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 90 बाइट्स

n=>n.Split().Any(x=>WriteLine(x.Length<2?x:x.Last()+x.Substring(1,x.Length-2)+x[0])is int)

नई रेखा का उपयोग सीमांकक के रूप में करता है, हालांकि वास्तव में किसी भी व्हाट्सएप का उपयोग किया जा सकता है।

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


84 बाइट्स के लिए SelectMany (यानी नक्शा और सपाट) है, लेकिन एक एकल अनुगामी स्थान को आउटपुट करता है। इसे ऑनलाइन आज़माएं!
मेरा सर्वनाम


1

जावा, 110 109 बाइट्स

-1 बाइट के लिए एक नई लाइन का उपयोग करके परिधि

s->{int l;for(var i:s.split("\n"))System.out.println(i.charAt(l=i.length()-1)+i.substring(1,l)+i.charAt(0));}

TIO


क्या यह एकल-अक्षर शब्दों के लिए काम करता है?
नील

@ कोई बात नहीं क्योंकि मैं बुरा हूँ। मैं बाद में ठीक कर लूंगा।
बेंजामिन यूरेखर्ट

109 को न्यूलाइन के रूप में सीमांकित के रूप में उपयोग करके
अज्ञानता का अवतार

1

हास्केल , 75 74 बाइट्स

एक बग को क्यूबिक द्वारा इंगित किया गया था और 1 बाइट से नीचे गिरा।

f=unwords.map(#v).words
x#g=g(r$tail x)++[x!!0]
r=reverse
v[]=[]
v x=r$x#r

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


map gसे छोटा है(g<$>)
घन

1
इसके अलावा, यदि आप अपने परीक्षण मामले को देखते हैं तो आप देखेंगे कि यह एक अक्षर के शब्दों के लिए काम नहीं करता है, यह बदल जाता aहैaa
क्यूबिक


1

टी-एसक्यूएल, 126 बाइट्स

SELECT STRING_AGG(STUFF(STUFF(value,1,1,RIGHT(value,1)),LEN(value),1,LEFT(value,1)),' ')
FROM STRING_SPLIT((SELECT*FROM t),' ')

इनपुट एक पूर्व मौजूदा तालिका के माध्यम से है टी varchar क्षेत्र के साथ वी , हमारे आईओ मानकों के अनुसार

आगे से पीछे की ओर पढ़ना, STRING_SPLITएक सीमांकक के माध्यम से अलग-अलग पंक्तियों में एक स्ट्रिंग को तोड़ता है, STUFFनिर्दिष्ट पदों पर वर्णों को संशोधित करता है, फिर STRING_AGGउन्हें फिर से एक साथ mashes।

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