একটি স্ট্যাক বাস্তবায়ন


44

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

চ্যালেঞ্জ

আপনার কাজটি হ'ল একটি স্ট্যাক প্রয়োগ করা যা সংখ্যাকে ঠেলা এবং পপিং করতে দেয়, আপনার প্রয়োগটি পরীক্ষা করতে এবং I / O সহজ রাখতে আমরা নিম্নলিখিত সেটআপটি ব্যবহার করব:

  • ইনপুটটি অ-নেতিবাচক পূর্ণসংখ্যার একটি তালিকা হবে

প্রতিটি ধনাত্মক পূর্ণসংখ্যা একটি indicates নির্দেশ করে এবং প্রতি একটি নির্দেশ করে - উপরের উপাদানটি করে।পুশ ( এন ) 0 পপ ()npush(n)0pop()

  • আউটপুট ফলস্বরূপ স্ট্যাক হবে

উদাহরণ

উদাহরণস্বরূপ যদি আমাদের দেওয়া হয় :[12,3,0,101,11,1,0,0,14,0,28]

12[12]3[3,12]0[12]101[101,12]11[11,101,12]1[1,11,101,12]0[11,101,12]0[101,12]14[14,101,12]0[101,12]28[28,101,12]

আউটপুট হবে:[28,101,12]

বিধি

  • ইনপুটটি কোনও ডিফল্ট I / O ফর্ম্যাটে অ-নেতিবাচক পূর্ণসংখ্যার তালিকা হবে
    • আপনি পূর্ণসংখ্যার একটি স্ট্রিমের সমাপ্তি বোঝাতে একটি নেতিবাচক পূর্ণসংখ্যার ব্যবহার করতে পারেন
  • আউটপুট ফলাফল স্ট্যাকের একটি তালিকা / ম্যাট্রিক্স / .. হবে
    • আপনার পছন্দ যেখানে শীর্ষ উপাদানটি হবে (শুরু বা শেষে), আউটপুটটি কেবল সামঞ্জস্যপূর্ণ হতে হবে
    • আউটপুট নমনীয় (যেমন। নতুন রেখাগুলি দ্বারা পৃথক পূর্ণসংখ্যাটি ভাল হবে), একমাত্র বিষয়টি হ'ল আদেশ
    • আপনি স্ট্যাকের নীচের অংশটি বোঝাতে একটি নেতিবাচক পূর্ণসংখ্যার ব্যবহার করতে পারেন
  • আপনি গ্যারান্টিযুক্ত যে স্ট্যাক খালি থাকলে কখনই থাকবে না0

উদাহরণ

[] -> []
[1] -> [1]
[1,0,2] -> [2]
[4,0,1,12] -> [12,1]
[8,3,1,2,3] -> [3,2,1,3,8]
[1,3,7,0,0,0] -> []
[13,0,13,10,1,0,1005,5,0,0,0] -> [13]
[12,3,0,101,11,1,0,0,14,0,28] -> [28,101,12]

12
এটি লক্ষ করা উচিত যে শর্তগুলি বিবেচনা করে, একজনকে আসলে স্ট্যাকটি প্রয়োগ করার প্রয়োজন হয় না।
জেফ জিটলিন

যদি আপনি চান যে কেউ আসলে একটি স্ট্যাক বাস্তবায়ন করতে পারে তবে আপনার কিছু স্যান্ডবক্সে লাগানোর চেষ্টা করতে হবে।
mbomb007

@ mbomb007: হয় অনুমোদিত: "আপনার পছন্দ যেখানে শীর্ষ উপাদানটি হবে (শুরু বা শেষে)"
ბიმო

@ এমবিম্ব 7: you: যদি আপনাকে ইনপুটটি বিপরীত করতে হয় তবে আর কোনও অসুবিধা হবে না, তাই না? তদুপরি, আপনি যদি সেটআপটিকে স্ট্যাক হিসাবে বিবেচনা করেন তবে কে শীর্ষ এবং নীচের অংশটি নির্ধারণ করে এবং কেন একটি সংজ্ঞা কম নির্বিচারে হওয়া উচিত?
5

@ ওএমᗺ কারণ ইনপুটটি বেশ কিছুটা স্ট্যাক / তালিকা / অ্যারের মতো দেখাচ্ছে। এখন, পুরো চ্যালেঞ্জটি মূলত শূন্যের পরে যে কোনও সংখ্যা মুছে ফেলবে।
mbomb007

উত্তর:


19

এমএটিএল , 6 বাইট

"@?@}x

ইনপুট হ'ল সংখ্যার সারি ভেক্টর।

চূড়ান্ত স্ট্যাকটি নীচে সবচেয়ে সাম্প্রতিক উপাদান সহ, উল্টোদিকে দেখানো হয়েছে।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

"         % For each element in the input (implicit)
  @       %   Push current element
  ?       %   If non-zero (this consumes the current element)
    @     %     Push current element again
  }       %   Else
    x     %     Delete most recent element
          %   End (implicit)
          % End (implicit)
          % Display (implicit)

13

জাভা (জেডিকে 10) , 42 বাইট

যেহেতু "[আউটপুট] নমনীয় [...], কেবলমাত্র জিনিসটি হ'ল আদেশ", এটি ইনপুট অ্যারেটিকে একটি 0নির্ধারিত অ্যারেতে পরিবর্তন করে । উদাহরণ: [1,0,2]ফিরে আসবে [2,0,2]যা = হিসাবে ব্যাখ্যা করা উচিত ।[2,0,2][2]

a->{int s=0;for(int v:a)a[v>0?s++:--s]=v;}

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

পূর্বের সংস্করণসমূহ:

জাভা (জেডিকে 10) , 60 বাইট

l->{for(int i;(i=l.indexOf(0))>0;l.remove(i))l.remove(--i);}

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

ক্রেডিট:

আমি যদি ত্রুটিগুলি সহ প্রোগ্রামটি শেষ করতে পারি: 55 বাইট

(যদিও সবকিছু সঠিকভাবে সংশোধিত হয়েছে)

l->{for(int i;;l.remove(--i))l.remove(i=l.indexOf(0));}

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


4
এটি বরং চিত্তাকর্ষক। আপনি ব্যবহার করে 1 বাইট হারাতে পারেন >0যেহেতু তালিকার শুরুতে কখনই শূন্য হবে না (এটি বোঝায় যে স্ট্যাকের শীর্ষটি ছিল -1)।
ওবালেন্স

@ ওউবালেন্স প্রকৃতপক্ষে, আমি সে সম্পর্কে ভাবিনি! ধন্যবাদ, ধন্যবাদ!
অলিভিয়ার গ্রাগোয়ার

12

সেড, 17 বাইট

:;s/[0-9]\+,0//;t

-3 বাইটস @ ওএমএকে ধন্যবাদ, -1 ধন্যবাদ @ ইজিগিয়ালকে

যেহেতু আপনাকে খালি তালিকাটি কখনই পপ করার গ্যারান্টিযুক্ত নয়, আপনার পুনরাবৃত্ত সীমাবদ্ধ রাষ্ট্রের মেশিনের চেয়ে বেশি কিছু লাগবে না। নিয়মিত প্রকাশগুলি সীমাবদ্ধ রাষ্ট্রীয় মেশিন তৈরির একটি সরঞ্জাম এবং sedপুনরাবৃত্তি করতে পারে। এটি স্বর্গে নির্মিত একটি ম্যাচ।

স্টিডিন থেকে ইনপুট নেয়, যেমন:

echo '[12,3,0,101,11,1,0,0,14,0,28]' | sed ':;s/[0-9]\+,0,//;t'

বিপরীতে স্ট্যাক আউটপুট:

[12,101,28]

আমার স্থানীয় sedঅন্তর্নিহিতভাবে চরিত্রের ক্লাসগুলি যদি পছন্দ হয় তবে দুটি বাইট দ্বারা ছোট হতে পারে \dতবে এটি কোনও কারণে নয়।


1
পিপিসিজিতে আপনাকে স্বাগতম! ভাল, আমার দীর্ঘ ছিল (বিভিন্ন ইনপুট ফর্ম্যাট ব্যবহার করে) .. বিটিডব্লিউ। আপনি খালি লেবেলটি ব্যবহার করতে পারেন যেহেতু আপনি কেবল 1 টি ব্যবহার করেন এবং আপনি প্রক্রিয়াটি পুনরাবৃত্তি করার পরে প্রক্রিয়াটি gঅতিরিক্ত কাজ হয় - আপনাকে 4 বাইট সংরক্ষণ করে: অনলাইনে চেষ্টা করে দেখুন!
3

জি নিরর্থক নয়! এটি সবচেয়ে খারাপ ক্ষেত্রে রানটাইম জটিলতাটিকে পপ সংখ্যার পরিবর্তে ক্রমবর্ধমান পপগুলির গভীরতার উপর নির্ভর করে! কোড গল্ফের ক্ষেত্রে সেই দক্ষতা গুরুত্বপূর্ণ নয় :)
ট্যাক্রয়

1
আপনার শেষ বাক্যটি অপ্রয়োজন সম্পর্কে প্রশ্নটির উত্তর দেয়: পি বিটিডব্লিউ। আপনি কীভাবে বাইট গণনা করেছেন? আমি 18 পেয়েছি, সম্ভবত আপনি শেষ বা কিছুতে একটি নতুন লাইন অন্তর্ভুক্ত করেছেন।
ბიმო

হ্যাঁ, এটি একটি নতুন লাইন ছিল।
ট্যাক্রয়ে

1
যদি ইনপুটটির চূড়ান্ত উপাদানটি 0 হয় তবে এটি আপনার রেজেক্সের সাথে মিলবে না।
উদ্বিগ্ন

12

পাওয়ারশেল , 46 41 40 বাইট

$args|%{$x,$a=&({1,$_+$a},{$a})[!$_]};$a

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

স্প্ল্যাটিংয়ের মাধ্যমে ইনপুট নেয়, যেমন, $z=@(12,3,0,101,11,1,0,0,14,0,28); .\implement-stack.ps1 @zটিআইও-তে পৃথক যুক্তি হিসাবে প্রকাশিত হয়।

$args|%{$x,$a=&({1,$_+$a},{$a})[!$_]};$a    # Full program
$args                                       # Take input via splatting
     |%{                            };      # Loop through each item
              &(              )[!$_]        # Pseudo-ternary, if input is 0 this is 1
        $x,$a=            {$a}              # ... which will pop the first item into $x
           $a=  { ,$_+$a}                   # Else, we append the first item
        $x   =   1                          # ... and drop a dummy value into $x
                                      $a    # Leave $a on pipeline; implicit output

-5 বাইট ধন্যবাদ ম্যাজি।
-1 বাইট সোয়াপিং $_করার জন্য1


একটি স্প্ল্যাটিং 3 টি বাইট সংরক্ষণ করে $agrs? :)
mazzy

-২ বাইট $args|%{$x,$a=&({$_,$_+$a},{$a})[!$_]};$a?
mazzy

1
@ মমজি হ্যাঁ, এবং আমরা কেবল ছড়িয়ে পড়ার কথা বলেছিলাম! আমি ভুলে গেছি ইতিমধ্যে! লল ধন্যবাদ!
অ্যাডমবর্কবার্ক

স্প্ল্যাটিং হবে .\implement-stack.ps1 @zনা (হবে না $z), অন্যথায় আপনি কেবল প্রথম / একমাত্র যুক্তি হিসাবে একটি অ্যারে
পেরিয়ে যাচ্ছেন

পুনঃটুইট আমার পক্ষ থেকে টাইপো।
অ্যাডমবর্কবার্ক

11

সি (জিসিসি) , 62 60 56 55 বাইট

-2 -6 বাইটস l4m2 ধন্যবাদ

-1 বাইট সিলিংক্যাট ধন্যবাদ ।

-1 সমাপ্ত অ্যারেগুলির অনুমোদিত ধারণাটি ব্যবহার করে। f()পুরোপুরি ক্ষত হওয়া পর্যন্ত নিজেকে পুনরাবৃত্তভাবে কল করে এবং তারপরে তালিকায় ব্যাকট্র্যাক করে। rকিছু মুদ্রণের আগে কত নম্বর বাতিল করা উচিত তা ট্র্যাক করে। বর্তমান আইটেম 0 হলে বৃদ্ধি পায়, অন্যথায় হ্রাস পায়। যদি 0 হয় তবে আমাদের ফেলে দেওয়ার দরকার নেই, এবং সংখ্যাটি মুদ্রণ করতে পারি।

r;f(int*l){~*l?f(l+1),*l?r?r--:printf("%d ",*l):r++:0;}

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


f(l)int*l;=> f(int*l)?
l4m2

@ l4m2 আহ, চিয়ার্স! সম্ভবত পূর্বের, আরও পরিবর্তনশীল-বোঝা দিনগুলির একটি অবশিষ্টাংশ।
গ্যাস্ট্রোপনার

r=0বেহুদা মনে হয়
l4m2

@ l4m2 হাই, ভাল ক্যাচ
গ্যাস্ট্রোপনার

10

হাস্কেল, 28 বাইট

foldl(#)[]
(_:s)#0=s
s#n=n:s

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


প্রধান ফাংশনটির নামকরণ কীভাবে? আমি জানি না, কীভাবে এটি চালাব)
Новиков Новиков

@ ЕвгенийНовиков: কোডটি কীভাবে চালানো যায় তার উদাহরণের জন্য "এটি অনলাইনে চেষ্টা করুন" লিঙ্কটি দেখুন।
নিমিম

10

আর , 45 বাইট

o={};for(e in scan())o="if"(e,c(e,o),o[-1]);o

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

  • -4 বাইট @ জিউজ্পে ধন্যবাদ

1
48 বাইট - গালিগালাজ Fআপনাকে 48 বাইটেও পাবেন তবে এটি ক্লিনার ইমো
জিউস্পে

আমি জানি না কীভাবে আমি কীভাবে অন্য বিপরীতটি মিস করেছি: ফেসপাম: ... ধন্যবাদ!
digEmAll


1
R+pryrএবং Reduceসমাধানটি 44 বাইট
জেসি

@ জাসি: সত্যি কথা বলতে, আমি এটিকে একটি "বেস-আর" সমাধান রাখতে পছন্দ করি ... তবে নিজের উত্তর হিসাবে এটি পোস্ট করতে নির্দ্বিধায়! ;)
10:40


9

জেলি , 6 বাইট

ṣ0Ṗ;¥/

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

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

ṣ0Ṗ;¥/  Main link. Argument: A (array)

ṣ0      Split A at zeroes.
    ¥/  Left-reduce the resulting 2D array by this dyadic chain:
  Ṗ       Pop; discard the last element of the left argument.
   ;      Concatenate the result with the right argument.

যদি টানা তিনটি শূন্য থাকে তবে এটি কি তিনটি পপ অনুকরণ করবে?
ডাব্লুগ্রোলাও

হ্যাঁ. [1,3,7,0,0,0]উদাহরণস্বরূপ, এতে বিভক্ত হয়ে যায় [[1,3,7],[],[],[]]এবং বাম-অ্যারের উপাদানগুলিতে বাম-হ্রাস পপগুলির প্রতিটি ধাপ।
ডেনিস

9

ব্রেন-ফ্লাক , 40 36 বাইট

([]){{}{({}<>)<>}([]){{}<>}{}([])}<>

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

@ নাইট্রডনকে -4 বাইটের জন্য ধন্যবাদ

যেহেতু ব্রেইন-ফ্ল্যাক ইতিমধ্যে স্ট্যাক ব্যবহার করে, তাই এটি ব্রেন-ফ্লাকের জন্য একটি ভাল ধাঁধা।

([]){   while items on stack
    {}      pop stack count
    {       if top element is non-zero
        ({}<>)<> push it on the other stack
    }
    if we're here the stack is either empty or there's a 0 on the stack

    ([])    so, count the stack again
    {{}<>{}<>} if there are items left on the stack, pop the stack count and the last item of the other stack
    {} pop the zero or the stack count
    ([]) count the stack again for next round
}
<>  go to the output stack

2
এই বিশেষ ক্ষেত্রে, {{}<>{}<>}সংক্ষিপ্ত করা যেতে পারে {{}<>}
নাইট্রডন

@ নাইট্রডন আপনাকে ধন্যবাদ আপনি ব্যাখ্যা করতে পারেন, কেন এটি এখনও কাজ করে? এটি লুপের ইনপুট স্ট্যাকটিতে ফিরে যায় না।
ডোরিয়ান

1
আউটপুট স্ট্যাকের শীর্ষটি ননজারো হওয়ার গ্যারান্টিযুক্ত, সুতরাং সংক্ষিপ্ত লুপটি 0 বা 2 বার কার্যকর হয়।
নাইট্রডন

8

(এটি কেবলমাত্র কাজ করে কারণ "পূর্ববর্তী নিদর্শনগুলির সাথে সংক্ষিপ্ততর সিকোয়েন্সগুলির সাথে মিল থাকতে হবে" সুতরাং bএটি ননজারো কিনা তা নিশ্চিত করার দরকার নেই ।)
ব্যবহারকারী 202729

@ ব্যবহারকারী 202729 হ্যাঁ। গাণিতিকের প্যাটার্ন-মিলটি অ-লোভী, তাই এটি a___প্রথমে সবচেয়ে সংক্ষিপ্ততমটিকে মেলাতে চেষ্টা করে । চেষ্টা করে কেউ তা দেখতে পায় ReplaceList[#, {a___, b_, 0, c___} :> {a, c}] &। সম্পর্কিত নোটে, StringReplaceআসলে লোভী, সুতরাং এই StringReplacea___~~b_~~"0"~~c___
জমাটি

8

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

s=[]
for x in input():s=([x]+s)[2*0**x:]
print s

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


কোনও সুযোগ আপনি ব্যাখ্যা করতে পারেন কিভাবে এটি কাজ করে? আমি গত অর্ধ ঘন্টা ধরে এটি চেষ্টা করার চেষ্টা করছি! অবশ্যই 2*0**xসর্বদা হতে চলেছে 0। আমি অবশ্যই কিছু মিস করছি missing
এলপিড্রো

1
@ এলপিড্রো এটি কখনই শূন্য নয় x=0, কোন ক্ষেত্রে এটি 2
xnor

আহ, আমি কি বলতে চাইছি। অনুমান আমি খুব শক্ত খুঁজছিলাম এবং স্পষ্টভাবে মিস করছি! ধন্যবাদ এবং দুর্দান্ত উত্তর।
এলপেড্রো

7

হোয়াইটস্পেস , 89 বাইট

[N
S S N
_Create_Label_LOOP_1][S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   T   _Read_STDIN_as_integer][T   T   T   _Retrieve][S N
S _Duplicate_input][N
T   T   S 
_If_neg_Jump_to_Label_EXIT][S N
S _Duplicate_input][N
T   S T N
_If_0_Jump_to_Label_DROP][N
S N
N
_Jump_to_Label_LOOP_1][N
S S S N
_Create_Label_EXIT][S N
N
_Discard_top][N
S S S S N
_Create_Label_LOOP_2][T N
S T _Print_as_integer][S S S T  S T S N
_Push_10_newline][T N
S S _Print_as_character][N
S T S S N
_Jump_to_Label_LOOP_2][N
S S T   N
_Create_Label_DROP][S N
N
_Discard_top][S N
N
_Discard_top][N
S N
N
_Jump_to_Label_LOOP_1]

বর্ণ S(স্থান), T(ট্যাব) এবং N(নতুন লাইন) কেবল হাইলাইট হিসাবে যুক্ত করা হয়েছে।
[..._some_action]শুধুমাত্র ব্যাখ্যা হিসাবে যুক্ত।

-1ইনপুটগুলি সম্পন্ন করে তা বোঝানোর জন্য ইনপুট-তালিকাটিকে নতুন-লাইন পৃথক করে।

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

সিউডো-কোডে ব্যাখ্যা:

Start LOOP_1:
  Integer i = STDIN as integer
  If(i is negative):
    Call function EXIT
  If(i is 0):
    Call function DROP
  Go to next iteration of LOOP_1

function EXIT:
  Start LOOP_2:
    Pop and print top as integer
    Print newline
    Go to next iteration of LOOP_2

function DROP:
  Drop the top of the stack
  Go to next iteration of LOOP_1


6

জাভাস্ক্রিপ্ট, 40 বাইট

বিপরীত ক্রমে আউটপুট।

a=>a.map(x=>x?o.push(x):o.pop(),o=[])&&o

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

হারমান এলকে ধন্যবাদ 1 বাইট সংরক্ষিত ।


a=>a.map(x=>x?o.push(x):o.pop(),o=[])&&oএক বাইট খাটো
হারমান এল

@ হারমানল: ডিওহ! অবশ্যই এটা! ধন্যবাদ। (un)shiftআমি চিহ্নিত আউটপুট বিপরীত হতে পারে আগে ব্যবহার ছিল ।
শেগি

এটি oদ্বিতীয় যুক্তিতে সংজ্ঞায়িত হওয়ার পরে কলব্যাকে রেফারেন্স হওয়ার কারণে এটি কাজ করে ।
ম্যাথএইচ

6

05 এ বি 1 ই , 9 বাইট

vy>i¨ëy)˜

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

v        # For-each of the items in the input-list:
 y>i     #  If the current item is 0:
  ¨      #   Pop the top item of the list
 ë       #  Else:
  y      #   Push the current item to the stack
   )     #   Wrap the entire stack into a list
         #    i.e. 12 → [12]
         #    i.e. [12] and 3 → [[12], 3]
    ˜    #   Flatten the stack
         #    i.e. [[12], 3] → [12, 3]
         # (and output the list implicitly after the loop)

9 বাইট বিকল্প:

vy_i\ëy])

সমস্ত পরীক্ষার কেস যাচাই করার জন্য এটি অনলাইনে ব্যবহার করে দেখুন ।

ব্যাখ্যা:

v        # For-each of the items in the input-list:
 y_i     #  If the current item is 0:
  \      #   Discard top item of the stack
 ë       #  Else:
  y      #   Push the current item to the stack
]        # Close both the if-else and for-each (short for `}}`)
 )       # Wrap the entire stack into a list (and output implicitly)

পিএস: যদি চ্যালেঞ্জের বর্ণনায় টেস্টের কেসগুলির সাথে মেলে আউটপুটটি উল্টানো উচিত ছিল, তবে আমরা Rদ্বিতীয় সংস্করণে (সুতরাং 10 বাইট ) একটি পেছন যুক্ত করতে পারি , যা তালিকার বিপরীতে। এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন


5

রেটিনা 0.8.2 , 18 বাইট

^
,
+1`,\d+,0

^,

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

^
,

একটি অতিরিক্ত উপসর্গ ,

+1`,\d+,0

সমস্ত পপ ক্রিয়াকলাপ প্রক্রিয়া করুন।

^,

,এটি এখনও সেখানে থাকলে অপসারণ করুন ।

নম্বরগুলি উল্টাতে অতিরিক্ত 8 বাইট লাগবে:

O^$`\d+

যা কেবলমাত্র সমস্ত <number>, 0সাবলিস্টকে কিছুই দ্বারা প্রতিস্থাপন করে।
ব্যবহারকারী 202729




5

ভি , 10 বাইট

ò/ 0⏎b2dw0

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

ব্যাখ্যা

ò           " run the following, until an error occurs
 / 0⏎       " | goto next zero with space in front (errors if none)
     b      " | jump one word back (to the beginning of element to pop)
      2     " | twice (element & zero itself)
       dw   " | | delete word
         0  " | goto beginning of line

মধ্যে সমতুল্য তেজ , 16 বাইট

qq/ 0⏎b2dw0@qq@q

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

ব্যাখ্যা

ম্যাক্রো রেকর্ডিং করা qএবং পুনরাবৃত্তভাবে এটিকে কল করা ব্যতীত অনেকগুলি একই :

qq                " record macro q
  / 0⏎b2dw0       " same as in V
           @q     " recursively call q (aborts on error)
             q    " quit recording
              @q  " execute the macro q

5

জাভা 10, 75 72 বাইট

n->{var s="";for(int i:n)s=(s+","+i).replaceAll(",\\d+,0","");return s;}

আউটপুটস কমা দ্বারা পৃথক করা। স্ট্যাকের শীর্ষটি শেষ। এটি এখানে অনলাইনে চেষ্টা করুন

2 বাইট গল্ফ করার জন্য অলিভিয়ার গ্রাগোয়ারকে ধন্যবাদ ।

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

Ungolfed:

n -> { // lambda taking an integer array as argument and returning a String
    var s = ""; // we'll be using a String to implement and output the stack
    for(int i : n) // loop through the array
        s = (s + "," + i) // append the next number
               .replaceAll(",\\d+,0", ""); // remove any number followed by a zero
    return s; // output the resulting stack
}

স্ট্রিংগুলির সাথে দুর্দান্ত পন্থা। সত্যিকারের Stackউদ্দেশ্য নিয়ে আমার নির্বোধের চেয়ে ভাল । আমার কাছ থেকে +1
কেভিন ক্রুইজসেন

1
n->{var s="";for(int i:n)s=(s+","+i).replaceAll(",\\d+,0$","");return s;}(By৩ বাইট), তবে ,আগে সংখ্যাগুলি রাখে , পরে নয়।
অলিভিয়ার গ্রাগোয়ার

1
n->{var s=""+n;for(int x:n)s=s.replaceFirst("\\d+, 0,? ?","");return s;}(By২ বাইট), অ্যারের পরিবর্তে একটি তালিকা ব্যবহার করে এবং আউটপুটটি মিস করে কারণ এটি "[, 2]" এর মতো জিনিসগুলি ফিরিয়ে দিতে পারে
অলিভিয়ার গ্রাগোয়ার

@ অলিভিয়েরগ্রোওয়ের নিস আমরা $অতিরিক্ত বাইট সংরক্ষণ করার জন্য ড্রপ করতে পারি , যেহেতু 0আমরা যুক্ত প্রত্যেকটি তত্ক্ষণাত অপসারণ করা হয়।
ওবালেন্স

@ অলিভিগারগ্রোওয়ের আপনার দ্বিতীয় পদ্ধতিটিও আকর্ষণীয়, তবে আমি মনে করি যে বেমানান আউটপুট ফর্ম্যাটটি সমাধানটিকে অকার্যকর করতে পারে।
ওবালেন্স


5

পার্ল 5 -p , 17 বাইট

ধন্যবাদ @ সুন্দর এবং @ ডোমহাস্টিংস

s/\d+ 0 ?//&&redo

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


1
-2 বাইট (সামান্য mankier আউটপুট সহ): এটি অনলাইন চেষ্টা করুন!
সূন্দর - মনিকা 22

@ সুন্দরের মন্তব্যে আরও একটি সামান্য সরলকরণ: এটি অনলাইনে চেষ্টা করুন!
ডম হেস্টিংস

0942 ইনপুট এর মতো সংখ্যা থাকলে এটি ব্যর্থ হয় না?
এক্সকালি

1
আপনি নিরাপদে ধরে নিতে পারেন কোনও অগ্রণী জিরো থাকবে না।
ওবালেন্স

5

> <> , 25 বাইট

i:?\~~
(0:/:^?
!?l:!<oan;

এটি অনলাইন চেষ্টা করুন! (ইনপুট ASCII লেখা দিতে হবে। অন্যথায় ব্যবহার এই এক )

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

i:?\~~0 এর জন্য চেক করে ~~পূর্বের এন্ট্রি মুছতে থাকে। অন্যথায় নীচে যান:

(0:/:^? যা -1 এর জন্য পরীক্ষা করে (আর কোনও ইনপুট নেই), তারপরে -1 এবং লুপ মোছার জন্য গুটিয়ে রাখে:

!?l:!<oan; যা প্রতিটি সংখ্যাকে একটি নতুন লাইন দিয়ে আউটপুট করে, তারপরে স্ট্যাক খালি করার পরে শেষ হয়



5

কাস্তে , 6 বাইট

যেহেতু ইতিমধ্যে হাসকের কোনও উত্তর নেই এবং এটি আমার প্রিয় গল্ফিং-ল্যাং:

F`?:tø

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

ব্যাখ্যা

F`?:tø  --
F    ø  -- foldl (reduce) with [] as the initial accumulator
 `      -- | flip arguments of
  ?:    -- | | if truthy: apply cons (prepend) to it
    t   -- | | else: return tail
        -- | : returns a function, either prepending the element or dropping 1 element

বিকল্প সমাধান, 6 বাইট

উল্টানোর পরিবর্তে, আমরা কেবল তালিকাটি উল্টাতে এবং তারপরে ডান-ভাঁজ ব্যবহার করতে পারি: Ḟ?:tø↔


5

ব্রেনফাক , 214 150 বাইট

>>,[>++++++[-<-------->]+<[>+++++[-<++++++++>]]>[-<<<[[-]<],[-]>>>>-<<]>>+[<<+<,----------[++++++++++>-]>[->>-<]>[->+<]>]<<<,]<<[[<]++++++++++<]>>[.>]

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

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

যে ব্যাখ্যাটি সত্যই ব্যাখ্যা নয় তবে এটি কেবলমাত্র সেই সংস্করণ যা আমি মন্তব্য এবং স্টাফ নিয়ে কাজ করছিলাম যা কারও পক্ষে কার্যকর হতে পারে বা নাও হতে পারে

Stack format:
0 (0 \d*)*


>>,[
    Setup digit == '0' conditional
    >++++++
    [-<-------->]
    +
    <[
        Read digit != '0'
        Restore the char code
        cond1 is already 1 at this stage
        >+++++
        [-<++++++++>]
    ]>[
        Read digit == '0'
        -
        Pop previous value
        <<<[
            [-]<
        ]
        Skip next input (assumed to be newline)
        ,[-]
        Skip following loop by unsetting loop flag
        >>>>-
        <<
    ]

    Move to next stack frame
    >
    Set loop flag
    >+[
        Set bit used for conditional
        <<+
        Read next character
        <,
        Compare with '\n'
        ----------[
            Not '\n': restore the char code
            ++++++++++

            >-
        ]>[
            -
            == '\n': Leave as 0
            Unset loop flag
            >>-
            <
        ]

        Copy loop flag along
        >
        [- > + <]

        Move to loop flag of next stack frame
        >
    ]

    <<<
,]


Fill in with newlines
<<[
    Skip to the cell before this value
    [<]
    Put a newline in there
    ++++++++++
    Move to next value
    <
]

Now the tape has the exact values we need to output
>>[.>]

5

ব্র্যাচল্যাগ , 21 বাইট

~c₃Ckt[İ,0]≠∧C⟨hct⟩↰|

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

-1 বাইট, এবং আরও গুরুত্বপূর্ণ বিষয় এটি করার মতো অনেক কম আড়ম্বরপূর্ণ উপায় বলে মনে হয়।

~c₃                     % Partition the input into 3 subarrays
   C                    % Call that array-of-arrays C
    kt[İ,0]             % Its second element should be of the form [Integer, 0]
           ≠            % And its elements shouldn't be equal (i.e. 
                        %   the Integer shouldn't be 0)
            ∧C⟨hct⟩     % Then, remove that [İ, 0] element from C
                   ↰    % And call this predicate recursively
                    |   % When the above fails (when it can't find a partition with 
                        %  [İ, 0] in it), then just output the input

বিকল্প 21 বাইটার: ∋0∧ℕ₁;0;P↺c;Qc?∧P,Q↰| অনলাইনে চেষ্টা করে দেখুন!


পুরানো কোড:

22 বাইট

∋0&b,1;?z{=|¬∋0&}ˢtᵐ↰|

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

∋0           If input contains a 0, 
&b           Remove input's first element, getting list of "next" elements
,1           Append 1 to that to handle last element
;?z          Zip that with input
{      }ˢ    Select only zipped pairs where
 =|          both elements are equal (to keep 0s followed by 0s)
   ¬∋0&      or the pair doesn't contain a 0
             this removes both the (pairs containing the) value
              that is followed by a 0, and the 0 itself
tᵐ           Recover back the (filtered) input array elements from the zip
↰            Call this predicate recursively 
|            If input contains no 0s, input is the output 

5

সতর্কতা: প্রচুর লাইন ডুবে গেছে। তোমাকে সতর্ক করা হল.


সিজেম , 17 বাইট

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

q~{X0={;}X?}fX]S*

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

ব্যাখ্যা

q                                    Reads input string
 ~                                   Instantly convert to array since the string is in the CJam format
  {        }fX                       For loop
   X0=                               If X (the array element currently being checked) is equal to 0
      {;}                            Pop the top element from the stack
         X                           Else push X onto the top of the stack
          ?                          If-Else flag
              ]                      Collate all stack elements into an array
               S*                    Put a space between each array element

বিকল্প কোড # 1, 27 বাইট
(ধরে নেওয়া হয় স্ট্যাক উপাদানসমূহ প্রশ্নের মধ্যে প্রদর্শিত ফর্ম্যাটে আউটপুট হতে হবে এবং ইনপুট অ্যারেটি আমাদের ইচ্ছামতো যে কোনও ফর্ম হতে পারে)

q~{X0={;}X?}fX]',S+*'[\+']+

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

ব্যাখ্যা

q                                    Reads input string
 ~                                   Instantly convert to array since the string is in the CJam format
  {        }fX                       For loop
   X0=                               If X (the array element currently being checked) is equal to 0
      {;}                            Pop the top element from the stack
         X                           Else push X onto the top of the stack
          ?                          If-Else flag
              ]                      Collate stack items into an array
               ',S+                  Add together a comma and a space to create a delimiter
                   *                 Apply the delimiter to the stack
                    '[\+             Append left bracket to the left of the stack text
                        ']+          Append right bracket to the right of the stack text

বিকল্প কোড # 2, 24 বাইট
(ধরে নিই স্ট্যাক উপাদানগুলি আউটপুটটিতে জড়িত হতে পারে এবং ইনপুট অ্যারেটি প্রশ্নের মধ্যে প্রদর্শিত সঠিক বিন্যাসে থাকতে হবে)

q',/~]S*~{X0={;}X?}fX]S*

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

ব্যাখ্যা

q                        Read input string
 ',/                     Separate by commas (since commas are an invalid array delimiter in CJam)
    ~                    Turn string into an array of substrings that make up the array
     ]S*                 Add spaces in between input numbers to prevent collation in the array
        ~                Turn the string into a valid array representative of the original
         {        }fX    For loop
          X0=            If X (the array element currently being checked) is equal to 0
             {;}         Pop the top element from the stack
                X        Else push X onto the top of the stack
                 ?       If-Else flag
                     ]   Collate all stack elements into an array
                      S* Add a space between each element

এর জন্য নিরাপদ কোড, 34 বাইট
(ধরে নিলে স্ট্যাক উপাদানগুলি প্রশ্নের মধ্যে প্রদর্শিত ফর্ম্যাটে আউটপুট হতে হবে এবং ইনপুট অ্যারেটি প্রশ্নের মধ্যে প্রদর্শিত সঠিক বিন্যাসে থাকতে হবে)

q',/~]S*~{X0={;}X?}fX]',S+*'[\+']+

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

ব্যাখ্যা

q                                      Read input string
 ',/                                   Separate by commas (since commas are an invalid array delimiter in CJam)
    ~                                  Turn string into an array of substrings that make up the array
     ]S*                               Add spaces in between input numbers to prevent collation in the array
        ~                              Turn the string into a valid array representative of the original
         {        }fX                  For loop
          X0=                          If X (the array element currently being checked) is equal to 0
             {;}                       Pop the top element from the stack
                X                      Else push X onto the top of the stack
                 ?                     If-Else flag
                     ]                 Collate stack items into an array
                      ',S+             Add together a comma and a space to create a delimiter
                          *            Apply the delimiter to the stack
                           '[\+        Append left bracket to the left of the stack text
                               ']+     Append right bracket to the right of the stack text

ধন্যবাদ @Jo রাজা যে ইশারা collated আউটপুট বেশী ভালো জিনিস থেকে অবৈধ জন্য [12]এবং [1,2]আলাদা করে চেনা যাবে।

কোলাটেড আউটপুটগুলির জন্য এবং 9 বাইট কেটে দেওয়ার জন্য খুব উপযুক্ত বিকল্প সরবরাহ করার জন্য @ জো কিংকেও ধন্যবাদ !


1
যেহেতু আপনি মধ্যে পার্থক্য না বলতে পারেন প্রথম এক বৈধ নয় [12]এবং [1,2]। তবে, 27 বাইট সংস্করণটি ঠিক আছে বলে মনে হচ্ছে, যদিও আপনি 18 বাইটের
জো কিং

ওহ অবশ্যই আমি অনেক ধন্যবাদ
হেলেন

তবে স্পেস ব্যবহারের চেয়ে কমাসের চেয়ে স্পেস দিয়ে আলাদা আলাদা সংখ্যা নির্ধারণ করা সম্ভবত আরও আরামদায়ক হতে পারে ]S*(3) যেখানে কমা ব্যবহার হয় ]',*(4)
হেলেন

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