অ্যান্টি ক্রমানুসরণ উত্পন্ন করুন


13

ভূমিকা

আমি পূর্ববর্তী চ্যালেঞ্জে অ্যান্টসির ক্রম শ্রেণির সংজ্ঞা দিয়েছি । একটি অনুস্মারক, একটি বিন্যাস হিসাবে পি থেকে সংখ্যার 0 থেকে R-1 বিরোধ, যদি প্রত্যেক এন্ট্রির জন্য পি [আমি] প্রথম ব্যতীত, কিছু আগে এন্ট্রি পি [Ik] যেমন যে পি [আমি] == পি [ ik] ± 1 । একটি মজাদার ঘটনা হিসাবে, আমি এও বলেছি যে r ≥ 1 এর জন্য দৈর্ঘ্যের r এর ঠিক 2 r-1 antsy ক্রমায়ন রয়েছে । এর অর্থ দাঁড়ায় যে দৈর্ঘ্য আর এর অ্যান্টসি ক্রমাঙ্কন এবং দৈর্ঘ্য আর -1 এর বাইনারি ভেক্টরগুলির মধ্যে একের সাথে একের মধ্যে যোগাযোগ রয়েছে। এই চ্যালেঞ্জে আপনার কাজটি হ'ল এই জাতীয় চিঠিপত্র প্রয়োগ করা।

কাজটি

আপনার কাজ হ'ল এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা দৈর্ঘ্য 1 ≤ n 1 99 এর বাইনারি ভেক্টর গ্রহণ করে এবং দৈর্ঘ্য এন + 1 এর এনটসির অনুমতি দেয় । ক্রমায়নটি হয় 1-ভিত্তিক 0-ভিত্তিক হতে পারে (তবে এটি অবশ্যই সামঞ্জস্যপূর্ণ), এবং ইনপুট এবং আউটপুট যে কোনও যুক্তিসঙ্গত বিন্যাসে হতে পারে। তদুপরি, বিভিন্ন ইনপুট অবশ্যই সর্বদা বিভিন্ন আউটপুট দেয়; এটি বাদে আপনি যে অ্যান্টসি ক্রমিটেশন চান তা ফেরত দিতে পারেন।

সর্বনিম্ন বাইট গণনা জিতেছে।

উদাহরণ

দৈর্ঘ্যের 4 (0-ভিত্তিক) antsy ক্রম হয়

0 1 2 3
1 0 2 3
1 2 0 3
1 2 3 0
2 1 0 3
2 1 3 0
2 3 1 0
3 2 1 0

এবং আপনার প্রোগ্রামটির দৈর্ঘ্যের 3 বিট ভেক্টরগুলির প্রত্যেকটির জন্য একটির প্রত্যাবর্তন করা উচিত:

0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

প্রোগ্রামটি পরিবর্তে প্রতিটি বাইনারি ভেক্টরের পূর্ণসংখ্যার উপস্থাপনা নিতে পারে?
mbomb007

1
@ mbomb007 না, কারণ নেতৃস্থানীয় শূন্যগুলি উল্লেখযোগ্য। 0 1এবং 0 0 1বিভিন্ন দৈর্ঘ্যের আউটপুট দেওয়া উচিত।
জাগারব

উত্তর:


3

জেলি , 12 11 10 বাইট

ḟẋLṭ+
0;ç/

এটি অনলাইন চেষ্টা করুন! বা দৈর্ঘ্যের সমস্ত ক্রম উত্পাদন 4

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

0;ç/   Main link. Argument: B (bit array)

0;     Prepend a 0 to B.
  ç/   Reduce [0] + B by the helper link.


ḟẋLṭ+  Helper link. Left argument: A (array or 0). Right argument: b (bit)

 ẋ     Repeat A b times, yielding A or [].
ḟ      Filter false; remove the elements of A or [] from A.
  L    Get the length of the resulting array.
       This yield len(A) if b = 0 and 0 if b = 1.
    +  Add b to all elements of A.
   ṭ   Tack; append the result to the left to the result to the right.

3

পাইথন 2, 62 60 বাইট

x=0,
for n in input():x=[t-n+1for t in x]+[n*len(x)]
print x

2x বাইট বন্ধ করে গল্ফ করার জন্য @ এক্সনরকে ধন্যবাদ!

আইডিয়নে এটি পরীক্ষা করুন ।


আপনার কি কমা দরকার x=0,?
ETH প্রোডাকশনগুলি

0,একটি tuple হয়। কমা ব্যতীত এক্স এর সাথে ম্যাপিং ব্যর্থ হবে।
ডেনিস

আমি মনে করি আপনি এটি করতে ফ্লিপ nকরতে পারেন [n*len(x)]এবং মানচিত্রটিকে একটি তালিকা কমপিতে পরিবর্তন করতে পারেন ।
xnor

@ xnor আসলেই। ধন্যবাদ!
ডেনিস

3

পাইথন, 54 বাইট

lambda l:[i-i*x+sum(l[i:])for i,x in enumerate([1]+l)]

নিম্নলিখিত পদ্ধতি ব্যবহার করে:

  1. তালিকায় একটি 1 প্রস্তুত করুন।
  2. প্রতিটি 0 টি প্রবেশের জন্য 0-সূচক তালিকায় এর অবস্থানটি লিখুন।
  3. প্রতিটি প্রবেশের জন্য, 1 এর সংখ্যাটি তার ডানদিকে লিখুন, নিজেই গণনা করছেন না।
  4. প্রবেশের 2 এবং 3 পদক্ষেপের ফলাফল যুক্ত করুন।

উদাহরণস্বরূপ, l=[1,0,1,0]দেয়f(l) == [2,1,3,0,4]

List with prepended 1         1 1 0 1 0

0-indexed position for 0's        2   4
Number of 1's to right        2 1 1 0 0
Sum of above two              2 1 3 0 4

0 টি প্রস্তুত করাও একই ফলাফল দেয়। enumerateক্লাঙ্কি, যদি এটা ভাল সম্পন্ন recursively পাবেনা আমি দেখতে পাবেন।


চতুর কৌশল! এটি আকর্ষণীয় যে প্রতিটি ভাষায় বিভিন্ন কৌশল কীভাবে সেরা। আমি এটিকে জেএসে বন্দর দেওয়ার চেষ্টা করেছি, তবে sumসিনট্যাক্সের অভাব এবং কাটা কাটা কারণে এটি 57 এ শেষ হয়েছিল ।
ETH প্রোডাকশনগুলি

3

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

a=>[h=l=0,...a.map(c=>c?--l:++h)].map(e=>e-l)

এটি @ETH উত্পাদনের পদ্ধতির সাথে সাদৃশ্য হিসাবে প্রমাণিত হয়েছিল, কেবলমাত্র আমি প্রথম উপাদানটি সরাসরি গণনা করে এবং তারপরে বাইনারি ভেক্টর ব্যবহার করে প্রতিটি ডিজিট নতুন বা উচ্চতর হয় কিনা তা নির্ধারণ করতে শুরু করি except সম্পাদনা: @ বুদ্ধিমানের জন্য 1 টি বাইট সংরক্ষণ করা হয়েছে শূন্য দিয়ে শুরু করে এবং পরে সামঞ্জস্য করে 2 বাইট সংরক্ষণ করা। আমার আগের পদ্ধতিটি @ ডেনিসের পদ্ধতির মতো হয়ে গেছে তবে 54 বাইট নিয়েছে:

a=>a.reduce((r,b)=>[...r.map(e=>b+e),r.length*!b],[0])

2

পার্ল, 33 বাইট

এর জন্য +1 অন্তর্ভুক্ত -p

STDIN এ ফাঁকা ছাড়াই ভেক্টরটিকে স্ট্রিং হিসাবে দিন:

antsy.pl <<< 110

antsy.pl:

#!/usr/bin/perl -p
s%^|.%y/0//+($&?++$a:$b--).$"%eg

2

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

v=>[...v,l=0].map(x=>x?l++:h--,h=v.length).reverse()

এটি পরীক্ষা করে দেখুন:

f=v=>[...v,l=0].map(x=>x?l++:h--,h=v.length).reverse()
g=v=>console.log(f((v.match(/[01]/g)||[]).map(x=>+x)))
<input oninput="g(this.value)" value="010">

ব্যাখ্যা

এটি এন্টিসি ক্রমিটেশনটি বিপরীত করা হলে, প্রতিটি আইটেমটি পূর্ববর্তী নিম্ন এন্ট্রিগুলির সর্বাধিক চেয়ে 1 টি বেশি বা পূর্ববর্তী উচ্চতর এন্ট্রিগুলির সর্বনিম্নের তুলনায় 1 টি কম হয়ে যায় তার সত্যতাটি গ্রহণ করে। একটি উচ্চতর আইটেমকে একটি 0এবং নিম্ন আইটেম হিসাবে চিহ্নিত করে 1আমরা দৈর্ঘ্য n এর অ্যান্টসি ক্রমাঙ্কন এবং দৈর্ঘ্য n - 1 এর বাইনারি ভেক্টরগুলির মধ্যে সঠিক এক থেকে একের যোগাযোগ তৈরি করতে পারি ।

ডেনিসের কৌশলটি দিয়ে আমি যা করতে পারি তা হ'ল 57 বাইট:

v=>v.reduce((x,n)=>[...x.map(i=>i+n),!n*++j],[j=0])
v=>v.map(n=>x=[...x.map(i=>i+n),!n*++j],x=[j=0])&&x

xnor এর সমাধান হল 56 (@ নীলকে ধন্যবাদ 1 বাইট সংরক্ষিত):

l=>[1,...l].map((x,i)=>i*!x+eval(l.slice(i).join`+`||0))

i-i*xহতে পারে i*!x
নিল

@ নীল আহ্ হ্যাঁ, ধন্যবাদ
ETH প্রোডাকশনগুলি

0

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

foldl(\r a->map(+0^a)r++[a*length r])[0]

ডেনিসের পাইথন সলিউশন হাসাকেলের সাথে mapএবং এর সাথে দুর্দান্তভাবে গল্ফ করে fold। আমার সরাসরি প্রবেশের নির্দেশটি পোর্ট করার জন্য আমার প্রয়াসের চেয়ে এটি সংক্ষিপ্ত :

f l=[i*0^x+sum(drop i l)|(i,x)<-zip[0..]$0:l]
f l=[a+c-b*c|(a,c,b)<-zip3(scanr(+)0l)[0..]$0:l]

0

ব্যাচ, 127 বাইট

@set s=%*
@set/an=h=l=%s: =+%
@for %%b in (%*)do @call:%%b
:0
@echo %n%
@set/an=h+=1
@exit/b
:1
@echo %n%
@set/an=l-=1

কমান্ড-লাইন প্যারামিটার হিসাবে ইনপুট নেয়, আউটপুট লাইন দ্বারা পৃথক। (কোনও অতিরিক্ত ব্যয় ছাড়াই STDIN এ স্থান-পৃথক হিসাবে ইনপুট দেওয়া সম্ভব))

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