ব্যাঙের মতো এড়িয়ে যান!


12

অ-নেতিবাচক পূর্ণসংখ্যার একটি অ্যারে দেওয়া, আপনার কাজটি কেবলমাত্র এর কয়েকটি উপাদানকে নীচে বর্ণিত রাখাই।

  • অ্যারে হয় বলুন [1, 3, 2, 4, 11, 5, 2, 0, 13, 10, 1]

  • প্রথমে অ্যারের প্রথম উপাদানটি পান n,। প্রথম nউপাদানগুলি রাখুন এবং পরবর্তীটি বাতিল করুন (ত্যাগ করুন n+1)। নতুন অ্যারে হয় [1, 2, 4, 11, 5, 2, 0, 13, 10, 1]

  • তারপরে, আপনি সরানো উপাদানটির পরে উপাদানটি ধরুন এবং ঠিক একই জিনিসটি করুন। প্রক্রিয়াটির পুনরাবৃত্তি, আমরা পেয়েছি[1, 2, 11, 5, 2, 0, 13, 10, 1]

  • আপনি অ্যারের সীমানার বাইরে না আসা পর্যন্ত আপনি প্রক্রিয়াটি পুনরাবৃত্তি করুন / অ্যারেতে কোনও উপাদান নেই। আমরা থামি কারণ 11অ্যারের দৈর্ঘ্যের চেয়ে বেশি।

  • এখন আপনার ফলাফল আউটপুট করা উচিত।

ইনপুট / আউটপুট যে কোনও স্ট্যান্ডার্ড আকারে নেওয়া / সরবরাহ করা যেতে পারে। অ্যারে কখনই খালি হবে না এবং এতে কেবল নেতিবাচক ইন্টিজার থাকবে। সমস্ত স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

এটি তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়!


পরীক্ষার কেস

ইনপুট -> আউটপুট

[1, 2, 3, 4, 5] -> [1, 3, 4]

[6, 1, 0, 5, 6] -> [6, 1, 0, 5, 6]

[1, 3, 2, 4, 11, 5, 2, 0, 13, 10, 1] -> [1, 2, 11, 5, 2, 0, 13, 10, 1]

[2, 2, 2, 2, 2, 2] -> [2, 2]

[1, 2, 3, 1, 2, 3, 1, 2, 3] -> [1, 2]

[3, 1, 2, 4, 0] -> [] *

* শেষ পরীক্ষার মামলায় জড়িত 0, তাই আমি প্রক্রিয়াটি আরও পরিষ্কার করে পোস্ট করার সিদ্ধান্ত নিয়েছি:

[3, 1, 2, 4, 0] --> [3, 1, 2, 0] --> [1, 2, 0] --> [1, 0] --> [0] --> [] )

( এরিক দি আউটগলফার দ্বারা এই চ্যালেঞ্জ দ্বারা অনুপ্রাণিত )


আমি সমস্ত পরীক্ষার কেস সম্পূর্ণ হাতে লিখেছি, আপনি যদি ভুল মনে করেন তবে দয়া করে আমাকে অবহিত করুন!

1
2পরিবর্তে প্রথম পদক্ষেপে সরানো হয় কেন 3?
লিকি নুন

@ লিকিউন আমার ভুল সংশোধন। আমি যদি অন্য কোনও ভুল করি তবে আমাকে পিং করুন

প্রস্তাবিত পরীক্ষা মামলা:[1, 2, 3, 1, 2, 3, 1, 2, 3]
ডান্ডা

1
সুতরাং স্পষ্ট করার জন্য, আপনি যখন নিজের নতুন " n" এ যান, আপনি সবসময় অ্যারের শুরু থেকে nউপাদানগুলি রাখার জন্য শুরু করেন ? নয় (যেমন আমি প্রথম নজরে ভেবেছিলাম) এমন nউপাদানগুলি রাখুন যেখানে প্রথম উপাদানটি nআপনি মূল্যায়ন করছেন?
ব্রায়ান জে

উত্তর:


1

পাইথ, 18 বাইট

#IgZlQB .(Q=Z@QZ)Q

এখানে চেষ্টা করুন।



@ ল্যাকিয়ুন এবং আমি ভেবেছিলাম এটি যথেষ্ট পরীক্ষা করেছি! অভিশাপ
এরিক Outgolfer

কমপক্ষে প্রদত্ত টেস্টকেসগুলি পরীক্ষা করে দেখুন।
লিকি নুন

@ ল্যাকইনুন মাঝে মাঝে আমার কাছে মনে হয় কোডটি আমাকে আসলে যা দেয় তার চেয়ে আলাদা ফলাফল দেয় ... ফিক্সিং ... ফিক্সড (ওহ এবং বিটিডব্লিউ আমি পরীক্ষার কেস টিবিএফ থেকে ফরম্যাটটি সরিয়ে দিতে কিছুটা অলস)
এরিক দ্য আউটগল্ফার

5

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

f=(a,k=0,x=a[k])=>1/x?f(a.splice(x,1)&&a,x):a

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


4

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

g.pure.(0:)একটি বেনামি ফাংশন Intএর তালিকা গ্রহণ এবং ফিরিয়ে দেওয়া , হিসাবে ব্যবহার করুন (g.pure.(0:))[1,2,3,4,5]

g.pure.(0:)
g(a,_:b:c)=g$splitAt b$a++b:c
g(a,_)=a

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

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

  • ফাংশনটি gএকটি বিভক্ত তালিকার প্রতিনিধিত্ব করে একটি দ্বৈত আর্গুমেন্ট নেয়। aপূর্ববর্তী পদক্ষেপে রক্ষিত প্রাথমিক উপাদানগুলির তালিকাটি _হ'ল উপাদানটি ফেলে দেওয়া হবে, bএটি দৈর্ঘ্য হিসাবে ব্যবহৃত পরবর্তী উপাদান এবং cবাকি উপাদানগুলি।
    • যদি টিউলের দ্বিতীয় অংশে একটি নির্বাচন করতে পর্যাপ্ত উপাদান থাকে bতবে একটি নতুন বিভাজন সঞ্চালিত হয় এবং gপুনরাবৃত্তি হয়। অন্যথায়, aফলাফল হিসাবে এটি থামে ।
  • বেনামে ফাংশন টিপলের সাথে g.pure.(0:)কল করে এটি শুরু করে , ইনপুটটি কোথায় রয়েছে এবং ততক্ষণে তা বাতিল হয়ে যায় । g([],0:l)l0g
    • pureএখানে Applicative(বাইনারি) টিউপসগুলির জন্য উদাহরণটি ব্যবহার করা হয়েছে , এবং ফলাফলের প্রকারের সাথে ([Int],[Int])সহজেই []প্রথম উপাদান হিসাবে টিপলে দ্বিতীয় উপাদান হিসাবে তার যুক্তিটি রাখে ।



2

জাভা 8, 68 বাইট

এই ল্যাম্বদা একটি পরিবর্তনীয় List<Integer>(সমর্থন remove(int), যেমন ArrayList) গ্রহণ করে। আউটপুটটি রূপান্তরিত ইনপুট। এতে হস্তান্তর Consumer<List<Integer>>

l->{for(int i=0,f=0;i<l.size();f^=1)i=f>0?l.remove(i)*0+i:l.get(i);}

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

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


1

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

1∘{n∇⍣(n≤≢w)⊢w←⍵/⍨(n1+⍺⊃⍵)≠⍳≢⍵}

ব্যাখ্যা

1∘{                             } bind 1 as starting left argument (⍺)
                             ⍳≢⍵  generate indexes for right argument (⍵)
                   (n1+⍺⊃⍵)      n is 1+item at position  
              w←⍵/⍨              w is  with item at n removed
   n∇⍣(n≤≢w)⊢                     recurse with n as left and w as right arg if n <= length of w

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



1

হাস্কেল, 99 বাইট (ইন্ডেন্টেশন ব্যতীত 88)

f x y
 |y>=l=f x$l-1
 |e>=l=x
 |True=f (take e x ++ drop (1+e) x) e
 where e=x!!y
       l=length x

আমি সম্ভবত "সত্য" এর পরিবর্তে "1 = 1" ব্যবহার করে 1 বাইট সংরক্ষণ করতে পারতাম, এছাড়াও "++" এর কাছাকাছি দুটি স্থান সরিয়ে নেওয়া যেতে পারে
গিয়াকোমো টেক্যা পিগানি

1

ষষ্ঠ, 31 25 বাইট

O@0kdd<C-v><C-a>Y<C-v><C-x>gg@a<Esc>"add<C-a>Y<C-x>@a

<C-?>এর সাথে মিল রয়েছে Control + ?, এবং স্পষ্টতই <Esc>to Escapeএগুলির প্রতিটি গণনা 1 বাইট ( মেটা দেখুন ) এর জন্য।

ইনপুট

ইনপুট ফাইলে শেষে প্রতিটি লাইন + 1 ফাঁকা রেখায় 1 টি পূর্ণসংখ্যা থাকা উচিত, উদাহরণস্বরূপ:

1
2
3
4
5
⁣

আমরা ইনপুট ফাইলের প্রতিটি লাইনকে অ্যারে উপাদান হিসাবে দেখতে পাই, যেমন 1 :: 2 :: 3 :: 4 :: 5 :: []কিছু ভাষায় (উদাহরণস্বরূপ ক্যামেল)।

শুরু করা

আপনি নিম্নলিখিত কমান্ড দিয়ে vi শুরু করতে পারেন, এবং স্ট্রোক দ্বারা সমাধান স্ট্রোক টাইপ করতে পারেন:

vi -u NONE input

আপনি এই ওয়ান-লাইনারটিও ব্যবহার করতে পারেন:

vi -u NONE -c ':exec "norm O@0kdd\<C-v>\<C-a>Y\<C-v>\<C-x>gg@a\<Esc>\"add\<C-a>Y\<C-x>@a"' -c ":w output" -c ':q' input

এটি outputএকটি ইনপুট ফাইল থেকে সঠিক ফলাফল সহ একটি ফাইল উত্পাদন করা উচিত input

ব্যাখ্যা

সমাধানটি উপস্থাপনের জন্য, আমি প্রথমে একটি 19-বাইট সমাধান উপস্থাপন করব কেবলমাত্র 0 ছাড়া অ্যারেগুলির জন্য কাজ করে এই সমাধানটি একটি পুনরাবৃত্ত ম্যাক্রো ব্যবহার করে, চূড়ান্ত সমাধানে সামান্য পরিবর্তন সহ ব্যবহার করা হয়:

Yqa@0ddYgg@aquggY@a

আংশিক সমাধানের ব্যাখ্যা

Y                       # yank first line (first integer + line break) to "0 register
 qa                     # start recording a macro ("a register)
   @0                   # jump n lines, where n is the content of the "0 register
     dd                 # delete the current line (n+1th line)
       Y                # yank current line (integer after the previously deleted line)
        gg              # go back to the first line
          @a            # recurse on macro "a"
            q           # finish recording the macro
             u          # cancel modifications done by the execution of the macro
              gg        # go back to the first line
                Y@a     # apply the recorded macro with first parameter equal to the first integer

এখানে কৌশলটি হ'ল "0বর্তমান পূর্ণসংখ্যা (এবং লাইন বিরতি, খুব গুরুত্বপূর্ণ) সংরক্ষণ করার জন্য নিবন্ধটি ব্যবহার করা । সুতরাং, কমান্ডটি লাইনগুলিতে @0ঝাঁপ দেওয়ার অনুমতি দেয় n( nএর মানটি কল করে "0)। যদি জাম্পটি ফাইলের লাইনগুলির সংখ্যা ছাড়িয়ে যায় তবে ম্যাক্রো ব্যর্থ হবে, সুতরাং প্রোগ্রামটি থামবে (প্রয়োজন অনুসারে অ্যারে সীমানার বাইরে)।

ইনপুট থাকলে এই সমাধানটি কাজ করে না 0। প্রকৃতপক্ষে, যদি "0নিবন্ধের মান সমান হয় 0, তবে @0একটি লাইনে লাফিয়ে যাবে (লাইন ব্রেকের কারণে), 0আমাদের পছন্দ মতো নয় । সুতরাং পরবর্তী কমান্ড ( dd) 0 তম পূর্ণসংখ্যা মুছে ফেলবে না, তবে প্রথম (সঠিক নয়)।

হ্যান্ডেল করার একটি বৈধ সমাধান 0হ'ল ইঙ্কিংয়ের আগে পূর্ণসংখ্যাকে সর্বদা বৃদ্ধি করা এবং ঠিক এরপরেই এটি হ্রাস করা। সুতরাং, @0কমান্ডটি n+1লাইনগুলিতে ঝাঁপ দেবে ( nএটি বর্তমানে পূর্ণসংখ্যা যা বাড়ানো হয়েছে)। একটি kকমান্ডের পরে লাইনে যেতে হবে n(পূর্ববর্তী লাইন)। এই কৌশলটি ব্যবহার করে, অ্যারের বাইরে জাম্পিং এড়ানোর জন্য ইনপুট ফাইলের শেষে একটি ফাঁকা রেখা প্রয়োজন (সুতরাং প্রোগ্রামটি শেষ করা), যেহেতু আমরা এখন n+1আগের লাইনে ঝাঁপ দেওয়ার আগে লাইনগুলিকে ঝাঁপিয়ে পড়েছি।

চূড়ান্ত সমাধানের ব্যাখ্যা

O                                                       # insert a new line at the beginning of the file, enter insert mode to write the macro content
 @0                                                     # jump n lines                                                       
   k                                                    # go to the previous line
    dd                                                  # delete this line
      <C-v><C-a>                                        # type Control+A (C-v is needed because we are in insert mode) to increment the current integer
                Y                                       # yank the incremented integer
                 <C-v><C-x>                             # decrement the current integer
                           gg                           # go to the first line
                             @a                         # recurse on macro "a"
                               <Esc>                    # exit insert mode : at this step, the first line of the file contains the macro content @0kdd^AY^Xgg@a
                                    "add                # copy @0kdd^AY^Xgg@a line to the register "a and delete the line
                                        <C-a>           # increment the first integer
                                             Y          # yank it (into "0)
                                              <C-x>     # decrement the first integer
                                                   @a   # apply macro in a" (initial @0 will jump n+1 lines, since we incremented the first integer before calling the macro)

ফাইলটির অভ্যন্তরে ম্যাক্রো সামগ্রীটি নিবন্ধভুক্ত করার আগে কিছু বাইট সংরক্ষণ করতে দেয়:

  • qa...qনিবন্ধভুক্ত করার পরে সমস্ত পরিবর্তন লিখতে এবং পূর্বাবস্থায় ফিরুন
  • এড়ানো :let @a="...")

সম্পাদনাগুলি

# 1

  • প্রথম লাইনে ম্যাক্রো সামগ্রী লিখুন (শেষ লাইনের পরিবর্তে)
  • ইনপুট পরিবর্তন করুন (শেষে 1 টি ফাঁকা লাইন)
  • কমান্ড-লাইনে পরীক্ষার জন্য একটি-লাইনার যুক্ত করুন

0

পাইথ, 32 বাইট

VlQIgNlQBK@QNI!K=QYBIgKlQB.(QK;Q

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


পাইথ তার চেয়ে অনেক বেশি মার্জিত হতে পারে :) #VlQ.(Q@QN;Qকাজটি 12 বাইটে করে এবং আমি নিশ্চিত যে এটি আরও গল্ফ করা যেতে পারে
ডেভ

পুরাতন স্কুল পাইথোনিক পদ্ধতির রেখে আপনি করতে পারেন W<Zl=Q+<Q@QZ>Qh@QZ=Z@QZ)Q(25)। যদিও পিজ্জাকিমে এর পদ্ধতি অনেক ভাল is

4
@ করানএলঙ্গোভানকে ক্ষমা চাওয়ার কিছুই নেই, তারা কেবল আপনাকে সাহায্য করার চেষ্টা করছে।
লিকি নুন

1
চূড়ান্ত পরীক্ষা ক্ষেত্রে জন্য সুনির্দিষ্ট করা থাকে, এটি 15 বাইট আসে আউট: #VlQ .(Q@QN)%;Q। পাইথ গল্ফারদের প্রতিক্রিয়া স্বাগত জানানো হবে, আমি এখনও শিখছি!
ডেভ

2
এই পদ্ধতির অবৈধ। এটি কেবল ফলাফল মুদ্রণ করে না, তবে এটি পরীক্ষার কেসগুলিতেও ব্যর্থ হয় (অন্তত দ্বিতীয়টি সর্বশেষ)। আপনি কি এই উত্তরটি মুছতে পারবেন / ঠিক করতে পারেন?

0

সি # (.নেট কোর) , 74 বাইট

n=>{for(int i=n[0];i<n.Count;){n.RemoveAt(i);i=i<n.Count?n[i]:n.Count+1;}}

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

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


আপনি যদি ল্যাম্বদা সংজ্ঞাতে প্যারামিটারের প্রকার বাদ দেওয়ার কথা উল্লেখ করছেন তবে এটি অনুমোদিত
Jakob

@ জ্যাকব আমি এটি বুঝতে পারি। আমি কেবল এর System.Collections.Generic.List<int>পরিবর্তে কিছুটা নোংরা অনুভব করছি using System.Collections.Genericএবং এটি বাইট গণনায় যুক্ত করব। তবে আমার ধারণা এটি কোনও অ্যারে ব্যবহারের চেয়ে আলাদা নয়।
জেকেলম

আচ্ছা বুঝলাম. ভাল আপনি চাইলে ব্যবহার usingকরতে পারেন; যতক্ষণ লাম্বদা নিজে বিবৃতিতে নির্ভর করে না আপনি এটিকে বাইট গণনায় অন্তর্ভুক্ত করতে হবে না। ব্যক্তিগতভাবে আমি সর্বদা পরীক্ষার কোডে পুরোপুরি-যোগ্য নামগুলি ব্যবহার করি যাতে এটি ল্যাম্বদা ব্যবহার করে যা আমদানি করে তা পরিষ্কার এবং সহজেই যাচাইযোগ্য।
জ্যাকব

0

আর , 64 53 বাইট

f=function(a,i=1,d=a[i]+1)"if"(is.na(d),a,f(a[-d],d))

পুনরাবৃত্তি ফাংশন। একটি বাধ্যতামূলক ইনপুট রয়েছে, aতালিকার বাইরে চলে যাওয়ার জন্য। iউপরের দিকে ঝাঁপিয়ে পড়ার জিনিসগুলির সংখ্যার সূচক (ডিফল্ট 1) এবং dএটি প্রয়োজনীয় মানটি সরানোর পরে পরবর্তী আইটেমের সূচক, যা সরানো আইটেমের সূচকও। numeric(0)খালি আউটপুট জন্য একটি খালি ভেক্টর, ফেরত দেয় ।

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

Ungolfed:

f <- function(a, i = 1, d = a[i] + 1) {
  if(is.na(d)) {   # d is NA if and only if a[i] is out of bounds
    a
  } else {
    f( a[-d], d, a[d] + 1 )   # a[-d] is a with the item at index d removed
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.