বিপরীত বাক্য


15

এই চ্যালেঞ্জের লক্ষ্য হ'ল একটি ইনপুট এবং আউটপুট সেই ইনপুটটি পাওয়া কিন্তু বাক্য আদেশের সাথে বিপরীত। উদাহরণ ইনপুট:

Hello friend. What are you doing? I bet it is something I want to do too!

উদাহরণ আউটপুট:

I bet it is something I want to do too! What are you doing? Hello friend.

যেমন আপনি উদাহরণগুলি থেকে বলতে পারেন, আপনার প্রোগ্রামকে প্রশ্ন চিহ্ন, বিস্মৃত বিবরণী এবং সময়সীমার মোকাবেলা করতে হবে। আপনি ধরে নিতে পারেন প্রতিটি বাক্যে একটি বিরামচিহ্ন রয়েছে এবং পরের বাক্যটির আগে একটি জায়গার চেয়ে বেশি। ট্রেলিং স্পেস / নিউলাইনগুলি যতক্ষণ তা পঠনযোগ্য ততক্ষণ ঠিক। সংক্ষিপ্ততম কোড জিতেছে।

শুভকামনা!

সম্পাদনা: আপনি ধরে নিতে পারেন বাক্যটির কোনও উদ্ধৃতি বা প্রথম বন্ধনী নেই, তবে আপনি যদি নিজের কোডটি উভয়টির সাথেই কাজ করতে সক্ষম হন তবে আপনি -5 বাইট পাবেন পেরেনস / কোটগুলির উদাহরণ আউটপুট:

"Hello, " she said. (I didn't know what she was talking about.) --> (I didn't know what she was talking about.) "Hello, " she said.

আমরা কি ধরে নিতে পারি যে কোনও উদ্ধৃতি বা প্রথম বন্ধনী থাকবে না? যদি তা না হয় তবে আমরা কীভাবে তাদের পরিচালনা করব?
ব্রেইনস্টিলে 21

এটি পরিষ্কার করে পোস্টে একটি সম্পাদনা করুন।

দয়া করে দয়া করে কোটস বা পেরেন্সযুক্ত বাক্যটির জন্য প্রত্যাশিত আউটপুটটির উদাহরণ দিতে পারেন?
mbomb007

6
যদি কোনও বাক্যটির উদ্ধৃতি বা প্যারেন্সের মধ্যে বিরামচিহ্ন থাকে, তবে কীভাবে এটি ব্যবহার করব?
isaacg

2
@ স্কিমোনস্টার আপনার অর্থ "অর্থাত্" ইত্যাদি, তাই না? ওহ, এবং দয়া করে আমার পরীক্ষার কেসের উদ্ধৃতিটি সংশোধন করুন:"Hello!" she said. (I hesitated. How should I respond? This is too much!) I responded, "Hi there. How are you? What is your cat's name?" without thinking any more about it.
চার্লস

উত্তর:


9

জুলিয়া, 45 42 বাইট - 5 বোনাস = 37

s->join(reverse(split(s,r"[.?!]\K "))," ")

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

অবহেলিত + ব্যাখ্যা:

function f(s)
    # Get individual sentences by splitting on the spaces that
    # separate them. Spaces are identified by matching punctuation
    # then moving the position beyond that match and matching a
    # space. This is accomplished using \K.

    sentences = split(s, r"[.?!]\K ")

    # Reverse the order of the array of sentences.

    reversed_order = reverse(sentences)

    # Join the array elements into a string, separated by a space.

    join(reversed_order, " ")
end

উদাহরণ:

julia> f("Hello friend. What are you doing? I bet it is something I want to do too!")
"I bet it is something I want to do too! What are you doing? Hello friend."

julia> f("\"Hello, \" she said. (I didn't know what she was talking about.)")
"(I didn't know what she was talking about.) \"Hello, \" she said."

এবং যদি আপনি আউটপুটে পালানো উদ্ধৃতিগুলি দেখতে পছন্দ করেন না:

julia> println(f("\"Hello, \" she said. (I didn't know what she was talking about.)"))
(I didn't know what she was talking about.) "Hello, " she said.

মার্টিন বাটনারকে নিয়মিত প্রকাশের জন্য 3 টি বাইট সংরক্ষণ করা হয়েছে! পূর্বে এই একটি lookbehind ব্যবহৃত: (?<=[.?!])


আমি মনে করি না যে এটি বোনাসের জন্য যোগ্যতা অর্জন করে ...
অপ্টিমাইজার

@ অপ্টিমাইজার: এটি কীভাবে হয় না? এটি পোস্ট হিসাবে প্রদত্ত প্রথম বন্ধনী, উদ্ধৃতি ইত্যাদির সাথে প্রত্যাশার মতো কাজ করে।
অ্যালেক্স এ

প্রশ্নের পরীক্ষার বোনাস বিভাগের উদাহরণ সহ আপনি কি পরীক্ষার জন্য একটি অনলাইন লিঙ্ক সরবরাহ করতে পারেন?
অপ্টিমাইজার

@ অপ্টিমাইজার: জুলিয়া অনলাইনে সাম্প্রতিক সংস্করণটি চালানোর একমাত্র উপায়টির জন্য নিবন্ধকরণ প্রয়োজন এবং পারমিলিক্স সমর্থন করে না। পোস্টে এখানে কেবল ইনপুট এবং আউটপুট অন্তর্ভুক্ত করা কি যথেষ্ট হবে?
অ্যালেক্স এ।

অবশ্যই, আমি অনুমান করি ..
অপটিমাইজার

7

সিজেম, 23 22 বাইট

আমি নিশ্চিত নই যে এটি বোনাসের জন্য যোগ্যতা অর্জন করে কিনা, তবে সমাধানটি এখানে দেওয়া যায়:

Sq{1$".?!"-{])[}|}%]W%

কোড সম্প্রসারণ (কিছুটা পুরানো) :

Sq+                      e# Read the input and prepend with a space
   {            }%       e# For each input character
    _".?!"&              e# Copy and check if its one of ., ? and !
           {][}&         e# If it is one of the above, wrap everything till now in an array
                         e# and start a new array to be wrapped next time we get one of those
                         e# three characters. We now have an array of strings, each having
                         e# a single sentence
                  W%     e# Reverse the ordering of these sentences
                    s(   e# Convert to string and remove the first space

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


আহ, আপনি প্রথম পোস্টটি সম্পাদনা করার পরে ঠিক এই পোস্টটি তৈরি করেছেন। আপনি এখন একটি -5 বোনাস পাবেন (কেবল এটি আরও শক্ত করার জন্য) সুতরাং -5 বোনাস! 18 বাইট, বাহ, নিশ্চিত না যে

5

জে, 35 32

এটি প্রায় বোনাস ইনপুট হ্যান্ডেল করে, যদি আমাকে একক অ্যাডাস্টোফেস থেকে বাঁচতে হয় তবে আমি অনুমান করি এটি গণনা করে না। (এছাড়াও, আমার প্রথম জমা এখানে)

f=.;@|.@(]<;.2~'.?!'e.~])@,~&' '

ব্যবহার:

f 'Hello friend. What are you doing? I bet it is something I want to do too!'

4

পার্ল, 27/25

#!perl -n
print reverse/ |[^.!?]*./g

অথবা কমান্ড লাইন থেকে:

$perl -nE'say reverse/ |[^.!?]*./g'

নিস! আপনার সাথে -5 বোনাস পেতে পারেন perl -nE 'say reverse/ |[^.?!]*.\)?/g'23. আপনার মোট গণনা এনে
ThisSuitIsBlackNot

2

পিএইচপি, 60

echo join(' ',array_reverse(preg_split('/(?<=[?!.])/',$s)));

আপনি কি [?!.]\Kপরিবর্তে regex ব্যবহার করতে পারেন ?
মার্টিন এণ্ডার

এছাড়াও আপনি স্ট্রিংটিতে অতিরিক্ত স্থান যুক্ত করবেন না যদি না আপনি ভাগ করে দেওয়ার প্যাটার্নে স্থানটি অন্তর্ভুক্ত করেন?
মার্টিন এন্ডার

@ মার্টিনবাটনার, না, আমি আবার ডেটাতে যোগদানের সময় সঠিক চিহ্নটি পুনরুদ্ধার করতে পারব না, সুতরাং আমাদের এমন কিছু দরকার যা চরিত্রটি গ্রাস করবে না।
রোমানহংশ

2

বাশ + কোর্টিলস, 40 বাইট

sed 's/\([?.!]\) */\1\n/g'|tac|tr \\n \ 

এটি এসটিডিএন থেকে পড়ে তাই ইনপুট আমাকে কোনও ফাইল থেকে পুনঃনির্দেশ করতে পারে বা কেবল পাইপযুক্ত করে রাখতে পারে, যেমন:

$ printf 'Hello friend. What are you doing? I bet it is something I want to do too!' | sed 's/\([?.!]\) */\1\n/g'|tac|tr \\n \ 
I bet it is something I want to do too! What are you doing? Hello friend. 
$ 

এটি কি এই অর্থে প্রথম বন্ধনীগুলির জন্য কাজ করে যা (foo bar.)একক হিসাবে স্বরে যায়?
মার্টিন এন্ডার

@ মার্টিনবাটনার দেখে মনে হচ্ছে প্রশ্নটি সম্পাদিত হয়েছে, তাই আমি আর বোনাসটি দাবি করতে পারি না :(
ডিজিটাল ট্রমা

2

পিপ , 25 বাইট

a.:sRV(a^@2+$ALa@*^".?!")

ইনপুট স্ট্রিংয়ে কোনও স্থান সংযুক্ত করার পরে , এবং ., এর সমস্ত সূচক আমরা খুঁজে পাই?! , 2 যোগ করুন, এবং ব্যবহার ^@বাক্য মধ্যে স্ট্রিং (একটি trailing স্পেস দিয়ে প্রতিটি) বিরতি অপারেটর এ বিভক্ত-। তালিকাটি বিপরীত করুন এবং এটি প্রোগ্রামের শেষে স্বয়ংক্রিয়ভাবে মুদ্রিত হবে। ভাল খবর!

ইনপুট সহ প্রধান গণনার স্তরগুলি উদাহরণ উদাহরণ A! B? C. D!:

              ^".?!"     ["." "?" "!"]
           a@*           [[7] [4] [1 10]]
        $AL              [7 4 1 10]
      2+                 [9 6 3 12]
   a^@                   ["A! " "B? " "C. " "D! "]
RV(                 )    ["D! " "C. " "B? " "A! "]

                         D! C. B? A! 

না আপনি করেন না :)
অপ্টিমাইজার

2

রেটিনা , 61 34 33 30 বাইট

এটি 24 বাইট কমানোর জন্য নটকিকে ক্রেডিট।

^
#
+`(#.*[.!?]) (.+)
$2 $1
#
<empty>

যেখানে <empty>একটি খালি লাইন দাঁড়িয়ে। এটি ধরে নিয়েছে যে ইনপুটটির #অংশ নয়, তবে যদি এটি বৈধ না হয় তবে আমি এটিকে অন্য কোনও চরিত্রের জন্য "(যা কেবলমাত্র বোনাসটির জন্য আমাকে পরিচালনা করতে হবে) বা অপ্রিনিতযোগ্য কিছু সরিয়ে নিতে পারতাম। আপনি যদি একক ফাইলটিতে কোডটি চালাতে পারেন তবে আপনি এটি ব্যবহার করতে পারেন-s পতাকা জাতীয় , বা আপনি প্রতিটি লাইন একটি পৃথক ফাইলে রেখে দিতে পারেন এবং সেগুলি সমস্ত রেটিনাতে পাস করতে পারেন।

একক রেজেক্স প্রতিস্থাপনের সাথে এটির বিপরীত করা সম্ভব তবে সত্যই জটিল c এমনকি নেট নেট ব্যালেন্সিং গোষ্ঠীগুলির সাথেও আমার প্রায় 90 বাইটের কিছু দরকার ছিল, তাই পরিবর্তে আমি এটি একাধিক পদক্ষেপে করার চেষ্টা করেছি।

রেটিনাতে, প্রতিটি জোড়া লাইন একটি প্রতিস্থাপনের স্তর, যেখানে প্রথম লাইনটি প্যাটার্ন হয় এবং দ্বিতীয় লাইনটি প্রতিস্থাপন হয়।

^
#

এই পর্যায়ে কেবল আরও প্রক্রিয়াজাতকরণের জন্য স্ট্রিং প্রস্তুত করা হয়। এটি #একটি চিহ্নিতকারী হিসাবে প্রিপেন্ড করে । এই চিহ্নিতকারীটি ইঙ্গিত দেয় যে এর সামনে থাকা সমস্ত কিছু ইতিমধ্যে সঠিক জায়গায় রেখে দেওয়া হয়েছে এবং এরপরেও সমস্ত কিছু প্রক্রিয়া করা দরকার।

+`(#.*[.!?]) (.+)
$2 $1

এই পর্যায়ে বারবার সর্বশেষ বাক্যটি সামনে রেখে #(যা প্রক্রিয়ায় স্ট্রিংয়ের মধ্য দিয়ে এগিয়ে যায়) বাক্যগুলি অদলবদল করে । +`যতক্ষণ না আউটপুট পরিবর্তন স্টপ এই পর্যায়ে পুনরাবৃত্তি অক্ষিপট নির্দেশ দেয়। উদাহরণস্বরূপ, ইনপুটটি কীভাবে foo. bar! blah?প্রক্রিয়া করা হবে তা এখানে :

#foo. bar! blah?
blah? #foo. bar!
blah? bar! #foo.

এবং শেষ পর্যন্ত আমরা কেবল চিহ্নিতকারীটিকে সরিয়ে ফেলি:

#
<empty>

কেন শুধু .+=> $0 #এবং পুনরাবৃত্তি (.*?[.!?] )(.*#)=> $2$1?
নটকি 15'15

@ নটকি ওহ, এটি অনেক সুন্দর, আপনাকে ধন্যবাদ :)
মার্টিন ইন্ডার

1

জাভা, 113

s->{String t[]=s.split("(?<=[\\.?!]) "),u="";for(int i=t.length;i-->0;)u+=t[i]+" ";return u.replaceAll(".$","");}

1

জাভাস্ক্রিপ্ট (ES6) 47 45

যেমনটি বলা হয়েছে, এটি একটি সাধারণ রেজেেক্স অনুশীলন। জাভাস্ক্রিপ্টে:

// ES6 - FireFox only
F=t=>t.match(/\S[^.!?]+./g).reverse().join(' ')

// ES5 - so much longer
function G(t){return t.match(/\S[^.!?]+./g).reverse().join(' ')}

// TEST

alert(G("Hello friend. What are you doing? I bet it is something I want to do too!"))
 


আমি জাভাস্ক্রিপ্ট করতে যাচ্ছিলাম, তবে আপনি আমাকে এতে মারধর করেছেন।
বব দ্য আশ্চর্যজনক

এটি শেষ বাক্যটি (মূলত প্রথমটি) বাদে সবার আগে অতিরিক্ত স্থান তৈরি করে। এটি ঠিক আছে কিনা তা নিশ্চিত নন, কারণ কার্যটি খুব ভালভাবে সংজ্ঞায়িত করা হয়নি।
নটকি 15'15

@ নটকি হ্যাঁ, আমি রাজি আছি স্থির
edc65

1

পাইথন 2, 62

বোনাসের জন্য উন্নতি করতে যাচ্ছি না, কারণ এটি সম্ভবত বাইট ব্যয়ের মূল্য নয়।

import re
print' '.join(re.split('(?<=[?!.]).',input())[::-1])

এটি বোনাসের জন্য যোগ্য নয়। প্রশ্নের বোনাস উদাহরণটি দেখুন
অপ্টিমাইজার

@ অপ্টিমাইজার প্রশ্ন ইতিহাস দেখুন। বোনাস যুক্ত করতে আমি যখন আমার প্রশ্ন আপডেট করেছি তখন আমার আউটপুটটির উদাহরণের সাথে মেলে। বন্ধনী কোনও সময়ের বাইরে থাকতে পারে এমন ইঙ্গিত দেয় এমন কিছুই ছিল না।
mbomb007

আমি মনে করি অভিপ্রায়টি এই ছিল কেবল প্রথম থেকেই। একটি শক্ত উদাহরণ পরে এসেছিল যদিও। এর অর্থ এই নয় যে আপনি এখনও বোনাস পেয়েছেন :) (আমি আমারও সরিয়ে দিয়েছি)
অপ্টিমাইজার

1

মতলব (93 বাইট)

y=[32 input('','s')];y=sortrows([cumsum(ismember(y,'?!.'),'reverse');y]',1)';disp(y(4:2:end))
  • এটি ধরে নিয়েছে ইনপুটটিতে নেতৃস্থানীয় বা পিছনে স্থান নেই
  • স্ট্যান্ডার্ড ইনপুট এবং আউটপুট ব্যবহার করে
  • মতলব 2014 বি পরীক্ষিত

1

রুবি 41

অন্য রুবি উত্তরের পর্যাপ্ত ডাব্লুটিএফ নেই।

#!ruby -apF(?<=[.!?])\s
$_=$F.reverse*" "

এটি কমপক্ষে রুবি ২ তে কাজ করে If aএবং যদি Fসুইচটি 1.8.7-এ কাজ করে তবে আমার ধারণা আপনি $_=তিনটি অক্ষর সংরক্ষণ করতে পারেন ।

স্টিডিনের প্রতিটি লাইন বিপরীত করে এবং স্ট্যান্ডআউটতে মুদ্রণ করুন:

$ ruby foo.rb <<< "Hello. Hi. How are you? Good, you? fine, thanks."
fine, thanks. Good, you? How are you? Hi. Hello.

আপনি দয়া করে উত্তর ব্যাখ্যা করতে পারেন।
এমএমএইচএম

1

রুবি, 48 (পুটস ছাড়াই) 42 বাইট

reverse_sentence.rb

puts $*[0].scan(/\S[^.!?]+./).reverse.join(" ")

ব্যবহার:

ruby reverse_sentence.rb 'Hello friend. What are you doing? I bet it is something I want to do too!'

আউটপুট:

I bet it is something I want to do too! What are you doing? Hello friend.

স্বাগত চেয়ে সমালোচনা।


2
সমালোচনা: আপনি "বাক্য" ভুল বানান করেছেন।
অ্যালেক্স এ।

6 টি অক্ষর সংরক্ষণ করুন: .join(" ")=>*" "
ডানিরো

@AlexA। সর্বকালের সেরা প্রতিক্রিয়া!
ডিকিবয়

@ ডানিরো ধন্যবাদ, জেনে ভালো
লাগলো

1

k, 31

{1_,/|(0,1+&x in"?!.")_x:" ",x}

k){1_,/|(0,1+&x in"?!.")_x:" ",x} "Hello friend. What are you doing? I bet it is something I want to do too!"
"I bet it is something I want to do too! What are you doing? Hello friend."

0

সি # - লিনকপ্যাড - 93 - 5 = 88 বাইট

void Main(){string.Join(" ",Regex.Split(Console.ReadLine(),"(?<=[.?!]) ").Reverse()).Dump();}

সি # কনসোল অ্যাপ 189 - 5 = 184 বাইট

using System;using System.Linq;using System.Text.RegularExpressions;class P{static void Main(){Console.WriteLine(string.Join(" ",Regex.Split(Console.ReadLine(), "(?<=[.?!]) ").Reverse()));}}

রেজেক্স নির্লজ্জভাবে অ্যালেক্স এ থেকে পিটুনি দিয়েছিল :) :)


namespace Systemসেই অ্যাপ্লিকেশনটি সেই using Linq;usingText.RegularExpressionsসঞ্চয় 2x এর মধ্যে রেখে আপনি 7 বাইট সংরক্ষণ করতে পারেন system
ld

আমি মনে করি না যে এটি বোনাসের জন্য যোগ্যতা অর্জন করে। প্রশ্নের বোনাস উদাহরণটি দেখুন
অপটিমাইজার

0

ক্লোজার - 44 71 টি অক্ষর

(defn rs[s](reverse(re-seq #"\S.+?[.!?]"s)))

উন্নত এবং সরলীকৃত আরআর, অপ্রয়োজনীয় শ্বেতস্পেসকে মুছে ফেলা হয়েছে।

আউটপুট মূল স্ট্রিংয়ের বাক্যগুলির ক্রম, বাক্যগুলির ক্রম বিপরীত সহ:

ইনপুট: "হ্যালো বন্ধু। আপনি কী করছেন? আমি বাজি ধরছি এটি আমিও কিছু করতে চাই!" আউটপুট: ("আমি বাজি ধরছি এটি আমিও করতে চাই এমন কিছু!" "আপনি কী করছেন?" "হ্যালো বন্ধু।")


0

রুবি, 47

$><<gets.strip.split(/(?<=[.?!]) /).reverse*' '

কিছু অক্ষর সংরক্ষণ করার জন্য মার্টিন বাটনারকে ক্রেডিট ।


1
আপনার সাথে stdin থেকে ইনপুট পড়তে পারেন gets, একটি বাইট সংরক্ষণ সঙ্গে এটি প্রিন্ট করতে $><<করতে বাইট (ক স্থান জন্য কোন প্রয়োজন) এবং সহ STRING যোগদানের সংরক্ষণ *''সংরক্ষণ দুই বাইট।
মার্টিন ইন্ডার

@ মার্টিনবাটনার এই পরামর্শের জন্য ধন্যবাদ, যদিও আমি এসটিডিএন থেকে ইনপুটটি পড়তে যাব না। কেবলমাত্র কারণ সেখানে একটি পিছনে নতুন লাইন থাকবে।
Mhmd

আসলে, আমি মনে করি আপনার কোডটি বর্তমানে একটি শীর্ষস্থানীয় স্থানের ফলাফল করবে।
মার্টিন এেন্ডার

মিমি, আপনি ঠিক বলেছেন। আমার কি করা উচিত তা আমি দেখব।
Mhmd

0

সিজাম, 21 বাইট

1q{1?_"!.?"-}%1a/W%S*

এটি !s, .s এবং ?s এর পরে স্পেস 1 নম্বর ( অক্ষর নয়) তে পরিণত করে কাজ করে কোড 1 এবং 1 বা নয়, তাই ইনপুটটিতে এখনও এটি থাকতে পারে), 1 এর দিকে বিভক্ত হয়ে ফলাফল খণ্ডগুলির ক্রমকে বিপরীত করে এবং যোগদান করে স্থান দ্বারা।

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

কিভাবে এটা কাজ করে

1                     e# B := 1
 q                    e# Q := input()
  {         }%        e# for each C in Q (map):
   1?                 e#   C := B ? C : 1
     _"!.?"-          e#   B := string(C).strip("!.?")
              1a/     e# Q := Q.split([1])
                 W%   e# Q := reverse(Q)
                   S* e# Q := Q.join(" ")
                      e# print(Q)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.