pwaS eht tirsf dna tasl setterl fo 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
@ ফিলিপ ওলাইনিক আপনার বিরামচিহ্ন পরিচালনা করার দরকার নেই; সমস্ত ইনপুট কেবলমাত্র z এর মাধ্যমে এবং সমস্ত অভিন্ন ক্ষেত্রে বর্ণগুলি নিয়ে গঠিত।
কমরেড স্পার্কলপনি

4
দ্বিতীয়ত অনুচ্ছেদ লেখা যেমন অন্য একটি অক্ষর একটি বিভেদক হিসাবে ব্যবহার করার জন্য পাশাপাশি যখন চতুর্থ পড়া শূণ্যস্থান দ্বারা পৃথক । এটা কোনটা?
অ্যাডম

@ অ্যাডম যে কোনও অ-বর্ণমালা অক্ষর। আমি স্পষ্ট করতে সম্পাদনা করব।
কমরেড স্পার্কলপনি

1
পুনঃটুইট আপনি চাইলে ফাংশন আর্গুমেন্ট হিসাবে ইনপুট নিতে পারেন।
কমরেড স্পার্কলপনি

উত্তর:


59

টেক্স, 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

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


ল্যাটেক্সের জন্য আপনার কেবল বয়লারপ্লেট দরকার:

\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}

ব্যাখ্যা

টেক্স একটি অদ্ভুত জন্তু। সাধারণ কোড পড়া এবং এটি বোঝা নিজেই একটি কৃতিত্ব। অবরুদ্ধ টেক্সট কোড বোঝা আরও কয়েক ধাপ এগিয়ে যায়। আমি টেকসকেও জানেন না এমন লোকদের জন্য এটি বোধগম্য করার চেষ্টা করব, তাই জিনিসগুলি অনুসরণ করা সহজ করার জন্য টেক্স সম্পর্কে কয়েকটি ধারণা এখানে শুরু করার আগে:

(তাই নয়) নিখুঁত টেক্স এক্স শুরুর জন্য

  • প্রথম, এবং এই তালিকায় সবচেয়ে গুরুত্বপূর্ণ আইটেম: কোড নেই না আয়তক্ষেত্র আকৃতির হতে হবে, যদিও পপ সংস্কৃতি আপনি হতে পারে তাই মনে করি

  • টেক্স একটি ম্যাক্রো সম্প্রসারণের ভাষা। আপনি উদাহরণ হিসাবে, সংজ্ঞায়িত করতে পারেন \def\sayhello#1{Hello, #1!}এবং তারপরে \sayhello{Code Golfists}টেক্সটি প্রিন্ট করার জন্য লিখতে পারেন Hello, Code Golfists!। এটিকে একটি "অনির্দিষ্ট ম্যাক্রো" বলা হয় এবং এটি প্রথম (এবং কেবলমাত্র এই ক্ষেত্রে) প্যারামিটার খাওয়ানোর জন্য আপনি এটি বন্ধনী দ্বারা আবদ্ধ করেছেন। ম্যাক্রো আর্গুমেন্টটি ধরলে টেক্স সেই সব ধনুগুলিগুলি সরিয়ে দেয়। আপনি 9 টি পর্যন্ত পরামিতি ব্যবহার করতে পারেন: \def\say#1#2{#1, #2!}তারপরে \say{Good news}{everyone}

  • Undelimited ম্যাক্রো সহযোগীর হয়, unsurprisingly, সীমায়িত বেশী :) তুমি কি সে আগের সংজ্ঞা একটি বাচ্চা আরো বানাতে পারে semantical : \def\say #1 to #2.{#1, #2!}। এই ক্ষেত্রে পরামিতিগুলি তথাকথিত প্যারামিটার পাঠ্য অনুসরণ করে । এই জাতীয় প্যারামিটার পাঠ্য ম্যাক্রোর যুক্তিটি #1সীমিত করে ( ␣to␣স্থান দ্বারা অন্তর্ভুক্ত করা, এবং এর #2দ্বারা সীমিত করা হয় .) the সেই সংজ্ঞার পরে আপনি লিখতে পারেন \say Good news to everyone., যা প্রসারিত হবে Good news, everyone!। ভাল, তাই না? :) তবে একটি সীমিত যুক্তিটি হ'ল ( টেক্সবুকের উদ্ধৃতি দিয়ে ) "সঠিকভাবে নেস্টেড {...}গ্রুপগুলির সাথে টোকেনগুলির সংক্ষিপ্ততর (সম্ভবত খালি) ক্রম যা এই নির্দিষ্ট তালিকা-পরামিতি টোকেনগুলির ইনপুট অনুসরণ করা হয়"। এর অর্থ হল এর প্রসার\say Let's go to the mall to Martinএকটি অদ্ভুত বাক্য উত্পাদন করা হবে। এই ক্ষেত্রে আপনি "গোপন করুন" প্রথম প্রয়োজন চাই ␣to␣সঙ্গে {...}: \say {Let's go to the mall} to Martin

  • এ পর্যন্ত সব ঠিকই. এখন বিষয়গুলি অদ্ভুত হতে শুরু করে। টেক্স যখন একটি অক্ষর পড়েন (যা একটি "চরিত্র কোড" দ্বারা সংজ্ঞায়িত করা হয়), তখন সেই চরিত্রটিকে "বিভাগ কোড" (ক্যাটকোড, বন্ধুদের জন্য বরাদ্দ করা হয়) যা সেই চরিত্রটির অর্থ কী তা নির্ধারণ করে। অক্ষর এবং বিভাগের কোডের এই সংমিশ্রণটি একটি টোকেন করে তোলে ( উদাহরণস্বরূপ, এখানে আরও কিছু )। আমাদের এখানে আগ্রহের বিষয়গুলি মূলত:

    • ক্যাটকোড 11 , যা টোকেনগুলি সংজ্ঞায়িত করে যা একটি নিয়ন্ত্রণ সিকোয়েন্স তৈরি করতে পারে (ম্যাক্রোর জন্য একটি পশ নাম)। ডিফল্টরূপে সমস্ত অক্ষর [a-zA-Z] 11 টি ক্যাটকোড হয়, সুতরাং আমি লিখতে পারি \hello, এটি একটি একক নিয়ন্ত্রণ অনুক্রম, যখন দুটি অক্ষর অনুসরণ করে \he11oনিয়ন্ত্রণ অনুক্রম \heহয় 1, পরে অক্ষর হয় o, কারণ 1যদি ক্যাটকোড হয় না 11 যদি আমি না \catcode`1=11, যে বিন্দু থেকে \he11oএকটি নিয়ন্ত্রণ ক্রম হবে। একটি গুরুত্বপূর্ণ বিষয় হ'ল টেক্স যখন হাতের অক্ষরটি প্রথম দেখেন তখন ক্যাটকোডগুলি সেট করা হয় এবং এই জাতীয় ক্যাটকোড হিমশীতল ... সর্বদা ! (শর্তাবলী প্রযোজ্য হতে পারে)

    • ক্যাটকোড 12 , যা অন্যান্য চরিত্রগুলির মধ্যে বেশিরভাগ যেমন 0"!@*(?,.-+/and তারা কেবলমাত্র কাগজে স্টাফ লেখার জন্য পরিবেশন করার কারণে তারা সর্বনিম্ন বিশেষ ধরণের ক্যাটকোড। তবে আরে, লেখার জন্য কে টেক্স ব্যবহার করে?!? (আবার, শর্তাবলী প্রযোজ্য হতে পারে)

    • ক্যাটকোড 13 , যা নরক :) সত্যিই। পড়া বন্ধ করুন এবং আপনার জীবন থেকে কিছু করতে যান। আপনি ক্যাটকোড 13 কী তা জানতে চান না। 13 শে শুক্রবার কখনও শুনেছেন? অনুমান করুন এটি কোথা থেকে এর নাম পেয়েছে! আপনার নিজের ঝুঁকিতে চালিয়ে যান! একটি ক্যাটকোড 13 অক্ষর, একে "সক্রিয়" চরিত্রও বলা হয়, এটি কেবল একটি চরিত্র নয়, এটি নিজেই ম্যাক্রো! আপনি এটি প্যারামিটারগুলি সংজ্ঞায়িত করতে এবং আমরা উপরে যেমন দেখেছি তেমন কিছুতে প্রসারিত করতে পারি। \catcode`e=13আপনার মনে হওয়ার পরে আপনি কি করতে পারবেন \def e{I am the letter e!}, তবে। আপনি. না পারেন! eএখন আর কোনও চিঠি নয়, আপনি কি জানেন না, তাই \defনা ! ওহ, আপনি অন্য একটি চিঠি চয়ন? ঠিক আছে! । খুব ভাল, জিমি, চেষ্টা করে দেখুন! আমি আপনাকে সাহস করি যে আপনি এটি করতে এবং আপনার কোডে একটি লিখুন ! এটি একটি ক্যাটকোড 13 আমি শান্ত আছি! চল এগোই.\def\d e f\catcode`R=13 \def R{I am an ARRR!}R

  • ঠিক আছে, এখন দলবদ্ধকরণ। এটি মোটামুটি সোজা। একটি গোষ্ঠীতে যা কিছু অ্যাসাইনমেন্ট ( \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?

  • অবশেষে, তথাকথিত "উদ্দীপনা"। এটি এক প্রকারের নিষিদ্ধ বিষয়, কারণ এমন লোকেরা আছেন যারা দাবি করেন যে টেক্স - লাটেক্স স্ট্যাক এক্সচেঞ্জের "জালিয়াতি স্থান" প্রশ্নের উত্তর দিয়ে সুনাম অর্জন করেছেন , অন্যরা আন্তরিকভাবে দ্বিমত পোষণ করবেন না। কার সাথে একমত? আপনার বেট রাখুন! এদিকে: টেক্স একটি লাইন বিরতি স্থান হিসাবে বোঝে। তাদের মধ্যে একটি লাইন ব্রেক ( খালি লাইন নয় ) দিয়ে কয়েকটি শব্দ লেখার চেষ্টা করুন। %এই লাইনগুলির শেষে একটি যুক্ত করুন add দেখে মনে হচ্ছে আপনি এই লাইনের শেষের জায়গাগুলি "মন্তব্য করছেন"। এটাই :)

কোড সাজানো (সাজানো)

আসুন যে আয়তক্ষেত্রটি অনুসরণ করা সহজ কিছু (তর্কযুক্ত) হিসাবে সহজ করুন:

{
\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
মূলত সমস্ত টেক্স এক্সফেসেশন কোড এই নির্দেশনা দিয়ে শুরু হয়। ডিফল্টরূপে, প্লেইন টেক্স এবং ল্যাটেক্স উভয় ক্ষেত্রেই, ~অক্ষরটি হ'ল একটি সক্রিয় অক্ষর যা আরও ব্যবহারের জন্য ম্যাক্রোতে তৈরি করা যায়। এবং টেক্স কোডকে অদ্ভুত করার জন্য সেরা সরঞ্জামটি হ'ল ক্যাটকোড পরিবর্তন, সুতরাং এটি সাধারণত সেরা পছন্দ। এখন পরিবর্তে \catcode`A=13আমরা লিখতে পারি ~`A13(এটি =alচ্ছিক):

~`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}
সুতরাং আপনি নিশ্চিত হতে পারেন যে আপনি এমন একটি চিহ্নিতকারী পেয়েছেন found লক্ষ্য করুন যে এই সংজ্ঞায় আমি \ifxএবং এর মধ্যবর্তী স্থান সরিয়েছি Q। সাধারণত এটি একটি ত্রুটির দিকে নিয়ে যায় (নোট করুন যে সিনট্যাক্স হাইলাইট এটি মনে করে\ifxQ এটি একটি জিনিস) তবে এখন যেহেতু Qক্যাটকোড 13 তাই এটি একটি নিয়ন্ত্রণ ক্রম গঠন করতে পারে না। তবে সাবধান, এই কোয়ার্ক প্রসারিত করতে না অথবা আপনি একটি অসীম লুপে আটকে গেছে পাবেন কারণ Qবিস্তৃতি Qযা বিস্তৃতি Qযা ...

এখন যে প্রিলিমিনারিগুলি করা হয়ে গেছে, আমরা যথাযথ অ্যালগরিদমের কাছে যেতে পারি স্টেটরেল was টেক্সের টোকেনাইজেশনের কারণে অ্যালগরিদমটি পিছনের দিকে লিখতে হয়েছিল। এটি কারণ কারণ আপনি যখন একটি সংজ্ঞা করেন তখন টেক্স বর্তমান সংস্থাগুলি ব্যবহার করে সংজ্ঞাটির অক্ষরগুলিতে টোকনাইজ (ক্যাটকোড বরাদ্দ) দেবে, উদাহরণস্বরূপ, যদি আমি করি:

\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 }
(লক্ষ্য করুন পূর্ববর্তী সংস্করণে একটি ছোট ত্রুটি ছিল, এটি উপরের সংজ্ঞায় চূড়ান্ত স্থানটি ধারণ করে নি this এটি লেখার সময় আমি কেবল এটি লক্ষ্য করেছি on পড়ুন এবং আপনি দেখতে পাবেন যে ম্যাক্রোকে সঠিকভাবে সমাপ্ত করার জন্য আমাদের কেন এটি দরকার। )
প্রথমে আমরা ব্যবহারকারী-স্তরের ম্যাক্রো সংজ্ঞায়িত করি, যাতে সাইটের রেন্ডারিং এটি না খায়, যেমন আমি কোডটির পূর্ববর্তী সংস্করণে করেছি। সত্য, তাই এটি প্রসারিত হয় এবং আমরা বাকি আছে । টেক্সটি অপসারণ করে না (\S ,। এটি একটি বন্ধুত্বপূর্ণ (?) সিনট্যাক্সের জন্য একটি সক্রিয় চরিত্র হওয়া উচিত নয়, তাই gwappins এহেট সেটারল এর ম্যাক্রো \S। ম্যাক্রোটি সর্বদা-সত্য শর্তসাপেক্ষে শুরু হয় \iftrue(এটি শীঘ্রই কেন স্পষ্ট হবে) এর সাথে শুরু হয় এবং তারপরে Bম্যাক্রোকে অনুসরণ করে 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কোনও স্থান এবং স্পেসের মধ্যে যা হয় is ইনপুট স্ট্রিম সম্প্রসারণ করার পূর্বে উপরোক্ত উদাহরণে অব্যাহত Bহয় BHhello world Q␣Bঅনুসরণ করা হবে H, যেমনটি করা উচিত (অন্যথায় টেক্স একটি ত্রুটি উত্থাপন করবে), তারপরে পরবর্তী স্থানটি helloএবং এর মধ্যে world, সুতরাং শব্দটির প্রক্রিয়া হওয়া শব্দটি কোয়ার্ক না হওয়া পর্যন্ত পরবর্তী শব্দটি প্রক্রিয়া করে । এর পরে শেষ স্থান#1 শব্দটিও রয়েছে hello। এবং এখানে আমরা ফাঁকা জায়গায় ইনপুট পাঠ্য বিভক্ত করতে হবে। ইয়ে: এর ডি দ্য সম্প্রসারণ Bইনপুট স্ট্রীম এবং প্রতিস্থাপিত থেকে প্রথম স্থান থেকে অপসারণ সবকিছু আপ HI#1FC#1|BHসঙ্গে #1হচ্ছে hello: HIhelloFChello|BHworld Q␣। লক্ষ্য করুন যে BHইনপুট স্ট্রিমে একটি নতুন পরে আছে, এর পুচ্ছ পুনরাবৃত্তি করতেBএবং পরে শব্দ প্রক্রিয়া। এই শব্দটি প্রয়োজন কারণ যুক্তিতের শেষে সীমিত ম্যাক্রোর একটি প্রয়োজন । পূর্ববর্তী সংস্করণ সহ (সম্পাদনা ইতিহাস দেখুন) কোডটি ব্যবহার করা যদি ভুল ব্যবহার করে (এর মধ্যে স্থানটি নষ্ট হয়ে যাবে)।BQQB \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 }
প্রথম যুক্তি Cundelimited হয়, তাই যদি না করে রেখেছিলেন এটি একটি একক টোকেন হবে দ্বিতীয় যুক্তি দ্বারা সীমায়িত করা হয় |, তাই সম্প্রসারণ পর C(সঙ্গে #1=hএবং #2=ello) ইনপুট স্ট্রিম হল: DelloQ|h BHworld Q␣। লক্ষ্য করুন যে অন্য |সেখানে রাখা হয়, এবং hএর helloপরে করা হয়। অর্ধেক অদলবদল হয়ে গেছে; প্রথম চিঠিটি শেষে রয়েছে। টেক্সে টোকেন তালিকার প্রথম টোকেনটি ধরা সহজ। \def\first#1#2|{#1}আপনি যখন ব্যবহার করবেন তখন একটি সাধারণ ম্যাক্রো প্রথম অক্ষর পায়\first hello| । শেষটি একটি সমস্যা কারণ টেক্স সর্বদা যুক্তি হিসাবে "ক্ষুদ্রতম, সম্ভবত খালি" টোকেন তালিকাটি ধরে রাখে, তাই আমাদের কয়েকটি কাজের আশেপাশের প্রয়োজন। টোকেন তালিকার পরবর্তী আইটেমটি হ'ল 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...HQঅবশেষে সন্ধান না পাওয়া এবং 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␣। ইসস।

ওহ, অপেক্ষা করুন, এগুলি কি? সাধারণ চিঠিগুলি? ওহ, ছেলে! অক্ষর পরিশেষে পাওয়া যায় আর টেক্স নিচে লিখেছে oell, তারপর একটি গুচ্ছ H( \fi) পাওয়া যায় এবং (কিছুই) সম্প্রসারিত সঙ্গে ইনপুট স্ট্রিম রেখে করা হয়: oellh BHworld Q␣। এখন প্রথম শব্দের প্রথম এবং শেষ অক্ষরগুলি অদলবদল হয়েছে এবং টেক্স পরবর্তী কী খুঁজে পাবে তা হল Bপরবর্তী শব্দটির পুরো প্রক্রিয়াটি পুনরাবৃত্তি করা।

}
অবশেষে আমরা গ্রুপটি আবার শুরু করেছি যাতে সমস্ত স্থানীয় অ্যাসাইনমেন্ট পূর্বাবস্থায় ফিরে যায়। স্থানীয় বরাদ্দকরণ বর্ণের catcode পরিবর্তন A, B, C, ... যা ম্যাক্রো তৈরি করা হয়েছে, যাতে তারা তাদের স্বাভাবিক চিঠি অর্থ ফিরে আসতে এবং নিরাপদে টেক্সট ব্যবহার করা যাবে। এবং এটাই. এখন \Sসেখানে সংজ্ঞায়িত ম্যাক্রো উপরের মত লেখার প্রক্রিয়াকরণকে ট্রিগার করবে।

এই কোড সম্পর্কে একটি আকর্ষণীয় বিষয় হ'ল এটি সম্পূর্ণ প্রসারিত। এটি হ'ল, আপনি এটির বিস্ফোরণ ঘটবে ing এমনকি কোনও শব্দের শেষ বর্ণটি \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

(সম্ভবত খুব বেশি) শব্দযুক্ত ব্যাখ্যাটির জন্য দুঃখিত। আমি অ টেক্সিজকেও এটি যথাসম্ভব স্পষ্ট করার চেষ্টা করেছি :)

অধৈর্য জন্য সংক্ষিপ্তসার

ম্যাক্রো \Sএকটি সক্রিয় চরিত্রের সাহায্যে ইনপুটটিকে পূর্বে অন্তর্ভুক্ত করে Bযা কোনও চূড়ান্ত স্থান দ্বারা ডিলিমেটেড টোকেনগুলির তালিকা ধরে এবং এগুলিতে প্রেরণ করে CCসেই তালিকায় প্রথম টোকেন নেয় এবং এটি টোকেন তালিকার শেষের দিকে নিয়ে যায় এবং Dযা অবশিষ্ট রয়েছে তা দিয়ে প্রসারিত হয়। D"কী অবশিষ্ট রয়েছে" খালি আছে কিনা তা পরীক্ষা করে দেখুন, এক্ষেত্রে একক-বর্ণের শব্দ পাওয়া গেছে, তবে কিছুই করবেন না; অন্যথায় প্রসারিত হয় EEশব্দটির শেষ অক্ষরটি না পাওয়া পর্যন্ত টোকেন তালিকার মধ্য দিয়ে লুপ করে, যখন এটি পাওয়া যায় যে শেষ অক্ষরটি পরে থাকে, তারপরে শব্দের মাঝখানে থাকে, তারপরে টোকেন স্ট্রিমের শেষে প্রথম অক্ষরটি অনুসরণ করা হয় C


2
আমি এটির একটি সম্পূর্ণ ব্যাখ্যা পছন্দ করব। এটি কীভাবে কাজ করে আমি খুব কৌতূহলী!
লাম্বদাবেটা

1
@ ল্যাম্বদাবেটা আমি এটি করতে পারি, তবে এখনই না। ধরে রাখুন এবং আমি যখন এটি করব তখন আপনাকে পিং করবো :)
ফেলিপ ওলিনিক

1
@ লাম্বদাবেতা হয়ে গেল! দুঃখিত, আমি মাঝে মাঝে খুব
শব্দযুক্ত

13

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

@ ফ্রাইআমডেইজিগম্যানকে 3 বাইট সংরক্ষণ করা হয়েছে

বিভাজক হিসাবে একটি লাইনফিড ব্যবহার করে।

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

এটি অনলাইন চেষ্টা করুন!


5
(.)(.*)(.)এটি কি টোটাল রিকল ইমোটিকন?
মাইক দ্য লিয়ার

1
@ মাইক দ্য লাইয়ার ধরনের, আমার ধারণা। : ডি
আরনাউল্ড

অ্যাসাইনমেন্টটিতে স্ট্রিংটি বিভাজকটি নির্দিষ্ট করে।
সিস টিমারম্যান

পছন্দ করুন এই কোডটি বিভাজক হিসাবে একটি লাইনফিড প্রত্যাশা করে এবং তাই ইনপুট হিসাবে লাইনফিডগুলির সাথে স্ট্রিং নেয়। (টিআইও লিঙ্কের পাদলেখ স্পেসগুলি লাইনফিডে রূপান্তর করে এবং তারপরে পাঠযোগ্যতার জন্য স্পেসে ফিরে আসে))
আর্নল্ড

"বর্ণানুক্রমিক ASCII অক্ষরের একটি স্ট্রিং দেওয়া হয়েছে পাশাপাশি একটি ডিলিমিটার হিসাবে ব্যবহার করার জন্য অন্য একটি চরিত্র (প্রতিটি শব্দ পৃথক করার জন্য) " - এনএম, আমি ভেবেছিলাম এটি একটি পৃথক প্যারামিটার।
সিস টিমারম্যান

11

রেটিনা ,8 5 বাইট

,V,,`

এটি অনলাইন চেষ্টা করুন!

কেভিন ক্রুইজসেনকে 3 বাইট সংরক্ষিত !

বিভাজক হিসাবে একটি নতুন লাইন ব্যবহার করে। আমরা রেটিনার বিপরীত পর্যায় এবং কিছু সীমা ব্যবহার করি। প্রথম সীমাটি হ'ল বিপরীতটি প্রয়োগ করতে কোনটি মিলছে, তাই আমরা তাদের সাথে সমস্ত কিছু বাছাই করি ,। তারপরে আমরা প্রতিটি ম্যাচের প্রথম এবং শেষের অক্ষরটি অদলবদল করতে চাই, সুতরাং আমরা প্রতিটি অক্ষরকে রেঞ্জের মধ্যে নিয়ে যাই ,,যা ধাপের আকারের শূন্যের সাথে শুরু থেকে শেষ পর্যন্ত একটি পরিসরে অনুবাদ করে।


ডাঙ্গিত, আমি আমার উত্তরটি আপডেট করার জন্য ডক্সের মাধ্যমে সন্ধান করছিলাম, তবে আপনি আমাকে এতে মারধর করেছেন। আমি জানতাম V, তবে জানতাম না যে এটির 1,-2মতো সূচকগুলির সাথে এটি ব্যবহার করা যেতে পারে । সুন্দর!
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন আমি সামান্য প্রতারণা করেছি এবং স্যান্ডবক্সে থাকাকালীন সীমাবদ্ধতা কীভাবে কাজ করেছে তা পর্যালোচনা করেছি :) আমার এখনও মনে হচ্ছে একটি পরিসর উল্টানোর চেয়ে আরও ভাল উপায় হওয়া উচিত তবে আমি আরও ছোট কিছু খুঁজে পাচ্ছি না।
FryAmTheEggman

2
আপনি নিশ্চিতই সরল যে এটা একটা সীমা-পরিসীমা ছাড়া খাটো হতে পারে, কারণ এটি বলে মনে হয় করছি এই 5-byter কাজ (দস্তাবেজে ধাপ সীমা নীচে উদাহরণ হিসাবে দেওয়া)।
কেভিন ক্রুইজসেন

পুনঃটুইট বিশ্বাস করতে পারছি না আমি সেটা মিস করেছি।
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

@ লিরিটোসিয়াস্ট ব্যাখ্যা যুক্ত হয়েছে
u_nd परिभाषित


6

ল্যাস্কেলএইচ , 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
ধারাটিতে অ্যাসাইনমেন্টটি where5 বাইট সংরক্ষণ করার জন্য গার্ড ইন গার্ডে স্থানান্তরিত হতে পারে: এটি অনলাইনে চেষ্টা করুন!
লাইকোনি

1
আমি শিরোনামে "হাস্কেল" নামটি দিয়ে আপনি সেখানে কী করেছেন তা দেখতে পাচ্ছি। আমি আমার পিএইচপি উত্তরে একই জিনিস করেছি।
640KB

5

05 এ বি 1 ই , 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%।
ম্যাজিক অক্টোপাস উরন

1
একটি 9-বাইটার পাওয়া গেছে, তবে এটি কেবলমাত্র উত্তরাধিকার সংস্করণে কাজ করে:|ʒRćsRćJ,
কেভিন ক্রুইজসেন

1
খুব খারাপ আমাদের একটি নেই loop_as_long_as_there_are_inputs, তবে আমি একটি 8-বাইটারকে জানতে পারতাম: [RćsRćJ,এই 8-বাইটারটি [তত্ত্বের ক্ষেত্রে কখনই আউটপুট ব্যবহার করে না, কেবলমাত্র যখন আপনি স্মৃতি থেকে বেরিয়ে আসেন বা টিআইওর মতো সময় শেষ করেন না (এবং এটির পিছনে যাওয়ার প্রয়োজন হয়) ইনপুটটিতে নতুন লাইন, অন্যথায় এটি শেষ শব্দটি ব্যবহার করে রাখবে) ..
কেভিন ক্রুইজসেন

1
দুর্ভাগ্যক্রমে আপনার প্রয়োজন ð¡যেমন একক শব্দ ইনপুট সম্ভব, তবে ð¡εćsÁì}ðýএটি 10 ​​বাইটেও কাজ করে works
এমিগানা

5

ঘোরানো এবং প্রয়োগ করে প্রথম / শেষ বর্ণগুলি অদলবদল করার খুব সুন্দর কৌশল 1 A.!
গ্যালেন ইভানভ

1
1&A.&.(1&|.)-> ({:,1|.}:)এবং তারপরে আপনি::]
ngn

আশ্চর্যজনক, আপনাকে ধন্যবাদ
ফ্রেউনিফ্রাগ

সত্যিই আশ্চর্যজনক! সমাধানটি আরও সহজ এবং মার্জিত হতে পারে আমি আবারও আশ্চর্য হয়েছি, তবে অন্য কারও দ্বারা এটি করা দেখলাম কেবলমাত্র।
গ্যালেন ইভানভ

4

রুবি সঙ্গে -p, 42 41 29 বাইট

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

এটি অনলাইন চেষ্টা করুন!



@ শেগি মাথা উঁচু করার জন্য ধন্যবাদ। আপনি যদি আমার পোস্টের ইতিহাসের দিকে তাকান তবে এটি দেখায় যে আমি কোনও উত্তর ছাড়াই 8 মাসের জন্য দূরে ছিলাম, সুতরাং আমি সম্ভবত সেই সময়ে কয়েকটি স্মৃতি মিস করেছি, হাহা
মান কালি

খুব নিশ্চিত যে 8 মাসেরও বেশি আগে এই sensক্যমত্যটি পরিবর্তিত হয়েছিল তবে আপনি যদি এটিকে মিস করেন তবে: "অ-প্রতিদ্বন্দ্বিতা "ও এখন আর জিনিস নয়।
শেগি

সুন্দরভাবে সম্পন্ন. আমি মনে করি নিয়মের অধীনে আপনি নিউলাইনগুলিকে আপনার ডিলিমিটার হিসাবে ব্যবহার করতে পারেন এবং \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

টিআইও-তে কোনও কিছুই দেওয়া না হয়ে প্রোগ্রামটি কোনও অক্ষরটি পড়ার চেষ্টা করার পরে প্রোগ্রামটি একটি ত্রুটির সাথে সমাপ্ত হয় (বা এটি vii5ard এর মতো কিছু হোয়াইটস্পেস সংকলকগুলিতে কোনও ইনপুটটির জন্য অপেক্ষা করে ।


3

ওল্ফ্রাম ভাষা (গণিত) , 58 বাইট

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

এটি অনলাইন চেষ্টা করুন!

-২২ বাইট @ চাটিনাত থেকে

@ এমস্টারন থেকে -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
{এবং option alচ্ছিক :)
option alচ্ছিক

1
55 বাইট , 2-বর্ণের শব্দও স্থির করে
এটিন্যাট



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
অজ্ঞতার প্রতিমূর্তি

@ এম্বোডিমেন্টফ অজ্ঞতা, আমি এখানেই শুরু করেছি, তবে এটি একক অক্ষরের শব্দের ক্ষেত্রে ব্যর্থ হত। আপনি এটি বাইট বাঁচাতে পারেন, যদিও সঙ্গে ¸®ÎiZÌ+Zs1J
শেগি

1
অ্যাম্বোডিমেন্টোফিজেন্স একটি 7 বাইটার খুঁজে পেয়েছে
অলিভার

2

সেড, 64 বাইট

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

অবশ্যই, আমরা এর .পরিবর্তে ব্যবহার করতে পারি, [[:alpha:]]তবে এটি আসলেই হতে হবে [^ ], এটি এটিকে হ্রাস করে ৪৩ এ নামিয়ে আনে, তবে বিরামচিহ্ন এবং এই জাতীয় বিরতি। ব্যবহার [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.অন্য কথায়, আপনার কোডগুলিকে বিরামচিহ্ন "ভাঙ্গা" সম্পর্কে চিন্তা করার দরকার নেই এবং কেবল নিরাপদে যেতে পারেন [^ ];)
মান কালি

@ ভ্যালিউইঙ্ক হ্যাঁ, তবে তারপরে এটি [^ ]হওয়া উচিত [^[:space:]]যা এটি 67 67 টি অক্ষরে নিয়ে আসে।
ধনী

"একটি ডিলিমিটার" মানে আপনি নিশ্চিত করতে পারেন যে ডিলিমিটার সর্বদা একটি নিয়মিত স্থান। যে কোনওভাবেই একটি বাক্যে ট্যাব ব্যবহার করেন ??
মান কালি

ঠিক আছে. "কোড গল্ফ" মনে হচ্ছে এমন একটি খেলা যেখানে আপনি আসলে কাজটি না করে বলটিকে গর্তে ফেলে দেওয়ার জন্য কোনও ড্রোন পাওয়ার উপায় খুঁজে বার করতে চেয়েছিলেন। ছদ্মবেশী স্বাগত জন্য ধন্যবাদ।
ধনী

2

sed , 34 বাইট

এবং সম্ভবতঃ প্যাটার্ন ধারণাটি বেশিরভাগ আরই সরঞ্জামগুলির সাথে কাজ করবে (এবং আমি জানি যে স্ট্যান্ডার্ড আরই এবং বর্ধিত আরআর মধ্যে পার্থক্য রয়েছে)।

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

এটি অনলাইন চেষ্টা করুন!


1
পিপিসিজিতে আপনাকে স্বাগতম! মেনামগুলি যে রেজেক্স ম্যাচের লোভী প্রকৃতির অর্থ আপনি \bম্যাচটি কেটে ফেলতে পারেন : এটি অনলাইনে চেষ্টা করুন!
মান কালি

@ ভ্যালিউইঙ্ককে সম্মত করেছেন - তবে আমি ম্যাচটি নিয়ে সঠিক ছিলাম। সরানো হচ্ছে \b30 বাইট হতে হবে।
পিজেএফ

অ্যাডভান্সড রেগেক্সের জন্য -E ব্যবহার করুন এবং আপনি আনস্কেপড বন্ধনী ব্যবহার করতে পারেন। .অদলবদল করা চরগুলির জন্য ব্যবহার করুন এবং আপনি আরও দুটি অক্ষর হারাতে পারেন। এটি আপনার 26 বাইটে নেমে আসে; ক্ষুদ্রতম পাঠযোগ্য সমাধানগুলির মধ্যে একটি।s,\b(.)(\w*)(.)\b,\3\2\1,g
ধনী

1
- না, আমি ভুল, তোমার \wশেষ প্রান্তে দরকার। s,\b(\w)(\w*)(\w)\b,\3\2\1,g28 অক্ষর।
ধনী

দুর্দান্ত কাজ @ সমৃদ্ধ, তবে আমি যেমন বলেছি আমি স্ট্যান্ডার্ড এবং বর্ধিত আরআরই সম্পর্কে জানি। আমি কেবল এটি স্ট্যান্ডার্ড এবং পঠনযোগ্য করতে বেছে নিয়েছি। নোঙ্গরগুলির প্রয়োজন হবে যা আমি ভ্যালুআইঙ্কের জবাবে উল্লেখ করতে অবহেলা করেছি।
পিজেএফ

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], " "
}

পিপিসিজিতে আপনাকে স্বাগতম! একটি নতুন লাইনে প্রতিটি শব্দ মুদ্রণ করা ভাল হওয়া উচিত, তবে আপনার পুরানো সমাধানটি 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 বাইটের জন্য সিলেকম্যানি (এটি, মানচিত্র এবং সমতল), তবে একক পিছনের স্থান আউটপুট দেয়। এটি অনলাইন চেষ্টা করুন!
আমার সর্বনাম


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আবার তাদের আবার একসাথে ছড়িয়ে দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.