আমার ছেলেকে তার চিঠিগুলি খুঁজতে সহায়তা করুন


17

পটভূমি

একটি গেমের ভিত্তিতে আমার চার বছর বয়সী তার রাব্বি থেকে পেয়েছে।

"লক্ষ্য" হ'ল অক্ষরগুলিকে একটি নির্দিষ্ট ক্রমে "সন্ধান" করা, যেমন aecdb। আপনাকে লেটার কার্ডের একটি স্ট্যাক দেওয়া হয়, যেমন daceb। আপনি প্রদত্ত ক্রমে কেবল স্ট্যাকের মাধ্যমে অনুসন্ধান করতে পারেন, যদিও চক্রাকারে। আপনি যখন একটি প্রয়োজনীয় চিঠিটি পূরণ করেন, আপনি স্ট্যাকের বাইরে নিয়ে যান।

উদ্দেশ্য

একটি আদেশ এবং একটি স্ট্যাক দেওয়া (একে অপরের সদৃশ মুক্ত ক্রম), গেমটি খেলার সময় আপনি দেখতে পেলেন শীর্ষ স্ট্যাক অক্ষরের ক্রম (এটি সমস্ত মুদ্রণযোগ্য ASCII) সন্ধান করুন।

ধাপে ধাপে উদাহরণ

aecdbস্ট্যাকের ভিত্তিতে আমাদের অর্ডারটি খুঁজতে হবে daceb:

স্ট্যাকের উপরে dকি আমরা জন্য (খুজছেন a), আমরা ক্রম থেকে এটি যোগ তাই হয়: dএবং স্ট্যাকের পেতে ঘোরাতে: acebd

স্ট্যাকের শীর্ষ a: হ্যাঁ! তাই আমরা ক্রম যুক্ত করুন: daএবং স্ট্যাকের থেকে সরাতে: cebd

স্ট্যাকের উপরে cকি আমরা জন্য (খুজছেন e), আমরা ক্রম থেকে এটি যোগ তাই হয়: dacএবং স্ট্যাকের পেতে ঘোরাতে: ebdc

স্ট্যাকের শীর্ষ e: হ্যাঁ! তাই আমরা ক্রম যুক্ত করুন: daceএবং স্ট্যাকের থেকে সরাতে: bdc

স্ট্যাকের উপরে bকি আমরা জন্য (খুজছেন c), আমরা ক্রম থেকে এটি যোগ তাই হয়: dacebএবং স্ট্যাকের পেতে ঘোরাতে: dcb

স্ট্যাকের উপরে dকি আমরা জন্য (খুজছেন c), আমরা ক্রম থেকে এটি যোগ তাই হয়: dacebdএবং স্ট্যাকের পেতে ঘোরাতে: cbd

স্ট্যাকের শীর্ষ c: হ্যাঁ! তাই আমরা ক্রম যুক্ত করুন: dacebdcএবং স্ট্যাকের থেকে সরাতে: bd

স্ট্যাকের উপরে bকি আমরা জন্য (খুজছেন d), আমরা ক্রম থেকে এটি যোগ তাই হয়: dacebdcbএবং স্ট্যাকের পেতে ঘোরাতে: db

স্ট্যাকের শীর্ষ d: হ্যাঁ! তাই আমরা ক্রম যুক্ত করুন: dacebdcbdএবং স্ট্যাকের থেকে সরাতে: b

স্ট্যাকের শীর্ষ b: হ্যাঁ! তাই আমরা ক্রম যুক্ত করুন: dacebdcbdbএবং স্ট্যাকের থেকে সরাতে:

এবং আমরা সম্পন্ন। ফলাফল হয় dacebdcbdb

রেফারেন্স বাস্তবায়ন

def letters(target, stack):
    string = ''
    while stack:
        string += stack[0]
        if stack[0] == target[0]:
            stack.pop(0)
            target = target[1:]
        else:
            stack.append(stack.pop(0))
    return string

print letters('aecdb', list('daceb'))

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

পরীক্ষার মামলা

try, yrtyrtyry

1234, 43214321432434

ABCDEFGHIJKLMNOPQRSTUVWXYZ, RUAHYKCLQZXEMPBWGDIOTVJNSFRUAHYKCLQZXEMPBWGDIOTVJNSFRUHYKCLQZXEMPWGDIOTVJNSFRUHYKLQZXEMPWGIOTVJNSFRUHYKLQZXMPWGIOTVJNSRUHYKLQZXMPWIOTVJNSRUYKLQZXMPWOTVNSRUYQZXPWOTVSRUYQZXPWTVSRUYQZXWTVSRUYZXWTVSUYZXWTVUYZXWVYZXWYZXYZ

?, ??

a, a a a

abcd, abcdabcd

উত্তর:


5

তিনটি মোটামুটি ভিন্ন পদ্ধতি সমান বাইট গণনা দিচ্ছে।

পাইথন 2 , 59 বাইট

s,t=input()
for c in s*99:
 if c in t:print c;t=t.lstrip(c)

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

প্রতিটি অক্ষরকে তার নিজস্ব লাইনে মুদ্রণ করে।


পাইথন 2 , 59 বাইট

lambda s,t:[c==t[0]and t.pop(0)or c for c in s*99if c in t]

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

ইনপুট হিসাবে তালিকাগুলি নেয় এবং একটি তালিকা আউটপুট করে।


পাইথন 3 , 59 বাইট

def f(s,t):
 for c in t:p,q=s.split(c);s=q+p;print(end=p+c)

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


1
হুঁ, আমি প্রথম দুটি সংস্করণ সম্পর্কে সন্দেহজনক ... কেন 99বিশেষভাবে?
এরিক আউটগলফার

@ এরিকথ আউটগলগার এটি কমপক্ষে মুদ্রণযোগ্য এএসসিআইআই অক্ষরের সংখ্যা, এবং প্রতিটি ইনপুটটির কমপক্ষে দৈর্ঘ্যও।
xnor

5

এপিএল (ডায়ালগ ক্লাসিক) , 21 বাইট

∊⊢,⊢∘⊂~¨(,\⊣⊂⍨1,2>/⍋)

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

এটি একটি ট্রেন সমতুল্য {∊⍵,(⊂⍵)~¨(,\⍺⊂⍨1,2>/⍺⍋⍵)}

বাম আর্গুমেন্টে ডান আর্গুমেন্টের অনুমতি দেয় gives

1,2>/পরপর জোড়া তুলনা করুন >এবং একটি 1 অগ্রিম

⍺⊂⍨গ্রুপগুলিতে বিভক্ত করতে উপরের বুলিয়ান মাস্কটি ব্যবহার করুন ; মাস্কে থাকা 1 গুলি একটি নতুন গোষ্ঠীর সূচনা চিহ্নিত করে

,\ গ্রুপগুলির সংক্ষিপ্ত বিবরণ

(⊂⍵)~¨ সম্মানের সাথে প্রতিটি পরিপূরক

⍵, শুরুতে যোগ

একক স্ট্রিং হিসাবে সমতল


4

ব্যাচ, 155 বাইট

@set/pt=
@set/ps=
@set r=
:l
@set c=%s:~,1%
@set r=%r%%c%
@if %c%==%t:~,1% set t=%t:~1%&set c=
@set s=%s:~1%%c%
@if not "%t%"=="" goto l
@echo %r%

STDIN এ ইনপুট হিসাবে লক্ষ্য এবং স্ট্যাক নেয়।


4

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

লক্ষ্যটিকে স্ট্রিং হিসাবে এবং স্ট্যাকটিকে অক্ষরের অ্যারে হিসাবে নেয়। একটি স্ট্রিং প্রদান করে।

f=(t,[c,...s])=>t&&c+f(t.slice(c==t[0]||!s.push(c)),s)

পরীক্ষার মামলা

কিভাবে?

প্রতিটি পুনরাবৃত্তিতে, আমরা cস্ট্যাকের শীর্ষে অক্ষরটি বের করি এবং এটি চূড়ান্ত ফলাফলের সাথে যুক্ত করি। তারপরে আমরা একটি পুনরাবৃত্ত কল করি যার প্যারামিটারগুলি ফলাফলের উপর নির্ভর করে c == t[0]যেখানে t[0]পরবর্তী প্রত্যাশিত অক্ষর।

যদি cমেলে t[0]:

  • আমরা cপাস করে লক্ষ্য স্ট্রিং থেকে অপসারণt.slice(1)
  • আমরা অপরিবর্তিত হয়ে cস্ট্যাক থেকে সরিয়ে sফেলি

যদি cমেলে না t[0]:

  • আমরা পাস করে লক্ষ্য স্ট্রিং অপরিবর্তিত যাক t.slice(0)
  • আমরা cস্ট্যাকের শেষে ফিরে ধাক্কা



3

হাস্কেল , 49 46 বাইট

q@(a:b)#(c:d)|a==c=a:b#d|e<-d++[c]=c:q#e
a#_=a

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

মোটামুটি সহজ। বাম যুক্তি হ'ল "লক্ষ্য" এবং ডান হ'ল স্ট্যাক। যদি গোলের শিরোনামটি স্ট্যাকের শীর্ষের সাথে মেলে তবে আমরা এটিকে অগ্রিম সরবরাহ করি এবং বাকি গোল এবং স্ট্যাকের সাথে পুনরাবৃত্তি করি (শীর্ষে আইটেমটি পুনরায় যুক্ত না করে)। অন্যথায় আমরা শীর্ষ আইটেমটি পুনরায় রেখেছি এবং স্ট্যাকের শেষে শীর্ষ আইটেমটি পড়ে একই লক্ষ্য নিয়ে পুনরাবৃত্তি করি। লক্ষ্যটি খালি হলে প্যাটার্নের মিলটি দ্বিতীয় লাইনটি চয়ন করে এবং খালি তালিকাটি ফিরে আসে।

সম্পাদনা করুন: -৩ বাইটস @ গল্ফ ওল্ফ এবং @ লাইকোনিকে ধন্যবাদ!





1
@ গল্ফওয়ल्फ আপনার দ্বিতীয় সমাধান (এবং লাইকোনির) কাজ করে না। এটি (ytty) এর পরিবর্তে "ytrty" উত্পাদন করে কারণ অপারেটর অগ্রাধিকারের কারণে (:) এবং (#)
user1472751


1

জাভা 8, 88 বাইট

a->b->{for(int c:a)for(char t=0;c!=t;System.out.print(t)){t=b.poll();if(c!=t)b.add(t);}}

হিসাবে ইনপুট char[]এবং java.util.LinkedList<Character>( java.util.Queueবাস্তবায়ন)

ব্যাখ্যা:

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

a->b->{                        // Method with two parameters and no return-type
  for(int c:a)                 //  Loop over the characters of the char-array
    for(char t=0;c!=t;         //   Inner loop until we've found the character in the queue
        System.out.print(t)){  //     After every iteration: print the char `t`
      t=b.poll();              //    Remove the top of the queue, and save it in `t`
      if(c!=t)                 //    If this is not the character we're looking for:
        b.add(t);}}            //     Add it at the end of the queue again

1

> <> , 38 32 বাইট

সম্পাদনা করুন: টিল পেলিকানের এখানে আরও ভাল ><>পদ্ধতির রয়েছে যা ইনপুট পদ্ধতিগুলিকে অদলবদল করে

0[i:0(1$.
\~~l]1+{$[&
/?=&:&:o:{

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

এর মাধ্যমে অক্ষরের ক্রম নেয় -sপতাকার এবং ইনপুট দিয়ে স্ট্যাক নেয়।

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

0[.... Creates a new empty stack
...... This puts the order of the letters safely away
......

..i:0(1$. Takes input until EOF (-1). This means input is in reverse
..~...    And then teleports to the ~ on this line
......

......      Gets the first character from the beginning of the order
\.~l]1+{$[& And stores it in the register before going to the next line
/.....

......     Output the bottom of the stack
......     Checks if the bottom of the stack is equal to the current character
/?=&:&:o:{ If so, go to the second line, else cycle the stack and repeat

0.....      Pop the extra 0 we collected
\~~l]1+{$[& Pop the value that was equal and get the next character from the order
/.....      And go down to the last line. This will end with an error (which could be avoid with a mere 4 extra bytes


1

> <> , 21 16 বাইট

i$\~~
=?\$:{::o@

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

ফাঁকা জায়গাগুলি ব্যবহার করতে এবং অতিরিক্ত কোড পুনঃনির্মাণ সরিয়ে ফ্লো পরিবর্তন করা হয়েছে। (-5 বাইট) - জোকিংকে ধন্যবাদ

> <> , 21 বাইট

i:{:@=?v:o$!
o~i00. >

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

অন্যান্য> << উত্তর এখানে পাওয়া যাবে।

ব্যাখ্যা

স্ট্যাকটি -s পতাকা ব্যবহার করে অক্ষরের প্রাথমিক সেট দিয়ে শুরু হয়। ইনপুট হল ব্যবহারকারী প্রদত্ত অক্ষর অর্ডার। এই ব্যাখ্যা কোড প্রবাহ অনুসরণ করবে।

i$\        : Take input, swap the top 2 stack items then move to line 2;
             [1,2,3] -> [1,2,4,3]
  \$:      : Swap the top 2 stack items then duplicate the top item;
             [1,2,4,3] -> [1,2,3,4,4]
     {::o  : Move the stack items 1 left then duplicate the stack top twice and print one;
             [1,2,3,4,4] -> [2,3,4,4,1,1]
=?\      @ : Swap the top three stack items left 1 then do an equal comparison, if equality move to line 1 else continue;
             [2,3,4,4,1,1] -> [2,3,4,1,1,4] -> [2,3,4,1]
  \~~      : Remove the top 2 stack items;
             [2,3,4,1] -> [2,3]

ওহ হ্যাঁ, সেভাবে এটিকে ইনপুট করা আরও বেশি বোঝায় লোল
জো কিং

কিভাবে 17 বাইট ?
জো কিং

1
@ জোকিং - এই অপ্রয়োজনীয় রাউটিংটি দূরে সরিয়ে দেওয়ার জন্য খুব সুন্দর পরিবর্তন, আমি অতিরিক্ত বাইট নেওয়ার প্রতিরোধ করতে পারিনি যদিও: পি
টিল পেলিকান

0

পার্ল, 62 বাইট

sub{$_=$_[1];for$x(@{$_[0]}){/\Q$x\E/;$z.="$`$&";$_="$'$`"}$z}

অক্ষরের তালিকা হিসাবে এর প্রথম যুক্তি, ক্রমটিকে এবং তার দ্বিতীয়টি, স্ট্যাকটিকে স্ট্রিং হিসাবে নেয়।

Ungolfed:

sub {
    $_ = $_[1];
    for $x (@{$_[0]}) {
        /\Q$_\E/;
        $z.="$`$&";
        $_ = "$'$`"
    }
    $z
}

আপনি কি কখনও ভাবছেন যে এই সমস্ত অস্পষ্ট রেজেক্স ভেরিয়েবলগুলি কীসের জন্য ছিল? স্পষ্টতই, তারা এই সঠিক চ্যালেঞ্জের জন্য ডিজাইন করা হয়েছিল। আমরা বর্তমানের চরিত্রের সাথে মেলে $x(যা দুর্ভাগ্যক্রমে এটি একটি রেজেক্স বিশেষ চরিত্রের ক্ষেত্রে পালাতে হবে)। এটি স্ট্রিংটিকে "ম্যাচের আগে" $`, "ম্যাচ" $&এবং "ম্যাচের পরে" বিভক্ত করে $'। চক্রীয় অনুসন্ধানে আমরা ম্যাচের আগে প্রতিটি চরিত্র পরিষ্কারভাবে দেখেছি এবং তাদের আবার স্ট্যাকের মধ্যে রেখেছি। আমরা বর্তমানের চরিত্রটিও দেখেছি কিন্তু এটি পিছনে ফেলিনি। সুতরাং আমরা "দেখা" তালিকায় "ম্যাচের আগে" যুক্ত করব এবং "ম্যাচের আগে" ম্যাচের আগে "ম্যাচের আগে $z" পরে স্ট্যাকটি তৈরি করব।


0

SNOBOL4 (CSNOBOL4) , 98 বাইট

	S =INPUT
	L =INPUT
R	S LEN(1) . X REM . S	:F(END)
	OUTPUT =X
	L POS(0) X =	:S(R)
	S =S X	:(R)
END

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

প্রতিটি অক্ষর একটি নতুন লাইনে মুদ্রণ করে। একই লাইনে মুদ্রণের জন্য সমস্ত কিছু পেতে এই সংস্করণটি ব্যবহার করুন । স্ট্যাক হিসাবে ইনপুট নেয়, তারপরে লক্ষ্যবস্তু, একটি নতুন লাইনের দ্বারা পৃথক।

	S =INPUT			;*read stack
	L =INPUT			;*read letters
R	S LEN(1) . X REM . S	:F(END)	;*set X to the first letter of S and S to the remainder. If S is empty, goto END.
	OUTPUT =X			;*output X
	L POS(0) X =	:S(R)		;*if the first character of L matches X, remove it and goto R
	S =S X	:(R)			;*else put X at the end of S and goto R
END

0

পার্ল, 44 বাইট

+4জন্য অন্তর্ভুক্ত-lF

লক্ষ্য হিসাবে স্ট্যাকিন হিসাবে ইনপুট দিন তারপর স্ট্যাক (এটি উদাহরণ থেকে বিপরীত ক্রম):

(echo daceb; echo aecdb) | perl -lF -E '$a=<>;say,$a=~s/^\Q$_//||push@F,$_ for@F'

আপনি যদি পেছনের নতুন লাইনে আপত্তি না 40করেন তবে:

(echo daceb; echo aecdb) | perl -plE '$_=<>=~s%.%s/(.*)\Q$&//s;$_.=$1;$&%reg'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.