একটি এন-মাত্রিক অ্যারে বিপরীত


10

বিস্তারিত

কোনও ক্রিয়াকলাপ বা প্রোগ্রাম লিখুন যা একটি অ্যারে (বা তালিকা) দেওয়া আছে, যেখানে কেবলমাত্র পূর্ণসংখ্যা, সমস্ত উপ-উপাদানগুলি বিপরীত করে একটি অ্যারে প্রদান করে বা আউটপুট দেয়। এটি হল, গভীরতম অ্যারের সমস্ত উপাদানগুলি বিপরীত করুন, তারপরে দ্বিতীয় গভীরতম ইত্যাদি The মাত্রাগুলি নির্দিষ্ট করার দরকার নেই, তবে ফাংশন বা প্রোগ্রামটি অবশ্যই আপনার প্রোগ্রামিং ভাষার নেটিভ ফর্ম্যাটে জ্যাগড অ্যারেগুলির জন্য কাজ করবে ।


উদাহরণ

এই:

[[1,2], [3,4]]

এটি হয়ে উঠবে:

[[4,3], [2,1]]

এই:

[[[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9]],
 [[10,11,12], [13,14,15], [16,17,18]],
 [[19,20,21], [22,23,24], [25,26,27]],
 [[28,29,30], [31,32,33], [34,35,36]],
 [[37,38,39], [40,41,42], [43,44,45]],
 [[46,47,48], [49,50,51], [52,53,54]]]

এটি হয়ে উঠবে:

[[[54,53,52], [51,50,49], [48,47,46]],
 [[45,44,43], [42,41,40], [39,38,37]],
 [[36,35,34], [33,32,31], [30,29,28]],
 [[27,26,25], [24,23,22], [21,20,19]],
 [[18,17,16], [15,14,13], [12,11,10]],
 [[ 9, 8, 7], [ 6, 5, 4], [ 3, 2, 1]]]

এই:

[[[1,2]],
 [[3,4], [5]],
 [[6,7,8], [9], [10,11]],
 [[[12,13], [14,15]], [16], [17,18,19,20]],
 [21]]

এটি হয়ে উঠবে:

[[21],
 [[20,19,18,17], [16], [[15,14], [13,12]]],
 [[11,10], [9], [8,7,6]],
 [[5], [4,3]],
 [[2,1]]]

বোনাস

এটি আশাবাদী কিছু বস্তু-ভিত্তিক প্রোগ্রামিং ভাষায় উত্তরগুলি উত্সাহিত করবে ...

-50% বাইটকাউন্ট যদি আপনার প্রোগ্রামটি বিভিন্ন সদস্যের এর সদস্যের সাথে ইনপুট হিসাবে কোনও অ্যারে (বা তালিকা) নিতে পারে (এগুলি বস্তুর আকারে হতে পারে) এবং সফলভাবে সমস্ত অ্যারে বিপরীত করে।

এই:

[["Foo",["Bar",1]],
  2,
 ["Baz"],
 [[["Qux"],3],3.14]]

এটি হয়ে উঠবে:

[[3.14,[3,["Qux"]]],
 ["Baz"],
  2,
 [[1,"Bar"],"Foo"]]

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

@ Nᴮᶻ আপনি কি বিশ্বাস করেন যে -50% বাইটেক্যান্টটি খুব উদার? আমি বিভিন্ন ডেটা ধরণের জন্য -30% বাইটকাউন্ট, এবং স্ট্রিংগুলিকে বিপরীত করার জন্য -10% বাইটকন্টের মতো, -15% বাইটকন্টের (123 -> 321) এবং বিপরীতের জন্য -15% বাইটকন্টের লাইনে কিছু করতে পারি একটি ভাসমান প্রকার (3.14 -> 41.3)।
মিঃপ্রজাতন্ত্রী

1
আমি সাধারণত বোনাস অপছন্দ করি। পূর্ণসংখ্যা এবং ফ্লোটগুলি বিপরীত করা ... আকর্ষণীয়।
অ্যাডাম

4
এটি আপাতত ছেড়ে দিন, তবে পরের বারে, আপনি এই জাতীয় জিনিসগুলি বের করতে স্যান্ডবক্স ব্যবহার করতে চাইতে পারেন।
অ্যাডাম

উত্তর:


9

পাইথ, 11 - 50% = 5.5 বাইট

L?+IbY_yMbb

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

এটি একটি ফাংশন সংজ্ঞায়িত করে y। অতিরিক্ত 3 বাইট <newline>yQকেবল ইনপুট তালিকার সাহায্যে ফাংশনটি কল করে এবং তাই মোট বাইটগুলির মধ্যে গণনা করার দরকার নেই।

ব্যাখ্যা:

L?+IbY_yMbb
L             define a function y(b), that returns:
 ?+IbY           if b + [] == b (test if b is a list):
      _yMb           recursively call y on all elements in b, then reverse the list
          b      else: b

6

ডায়ালগ এপিএল , 14 - 50% = 7 বাইট

{∇¨⍣(×|≡⍵)⌽⍵}

⌽⍵বিপরীত যুক্তি
⍣(×|≡⍵)যদি আর্গুমেন্ট কোনও পরমাণু না হয় ([নিখুঁত] গভীরতার লক্ষণ) ...
∇¨... প্রতিটি উপাদানকে (বিপরীত যুক্তির) প্রয়োগ করুন।

যদি ⎕ML←3(আইবিএম স্টাইল), যা এপিএল 2 থেকে স্থানান্তরিত হওয়া সিস্টেমগুলির ক্ষেত্রে হয় তবে একটি বাইট অপসারণের মাধ্যমে সংরক্ষণ করা যায় |

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

কৌতূহলের জন্য, প্রস্তাবিত ইনট এবং ফ্লোট বিপরীত:

{∇¨⍣(×≡⍵){0::⌽⍵⋄⍎⌽⍕⍵}⍵}

অভ্যন্তরীণ ফাংশন:

0::⌽⍵যদি কোনও ত্রুটি দেখা দেয় তবে কেবল শ্রদ্ধেয় যুক্তিটিকে
⍎⌽⍕স্ট্রিংয়ে ফিরুন , বিপরীত করুন, সংখ্যায় করুন


4

প্রোলোগ, 40 - 50% = 20 বাইট

a(X,Y):-reverse(X,Z),maplist(a,Z,Y);X=Y.

এই যাও recursively কল সম্পৃক্ত a/2সঙ্গে maplist/3, তালিকাটির প্রতিটি সদস্যের জন্য পর্যন্ত reverse/2ব্যর্থ হয় (অর্থাত শেষ উপাদান একটি তালিকা ছিল না)।


4

পাইথন 2, 40 - 50% = 20

f=lambda x:map(f,x)[::-1]if"">x>[]else x

বোনাস পাওয়ার জন্য এটি করার প্রাথমিক উপায় থেকে কিছু ছোটখাটো পরিবর্তন প্রয়োজন। সমস্ত তালিকাগুলি খালি স্ট্রিংয়ের চেয়ে কম এবং সমস্ত নম্বর খালি তালিকার চেয়ে কম হয় এই বিষয়টি ব্যবহার করে।

সমস্ত পরীক্ষার কেস


বোনাস ছাড়া সংস্করণটি হ'ল কেবল একটি নোট f=lambda x:map(f,x)[::-1]if x>[]else x
mbomb007

3

ইমাস লিস্প, 46 বাইট * 0.5 = 23

(defun g(x)(if(atom x)x(mapcar'g(reverse x))))

ব্যবহারের উদাহরণ: (g '((1 2) 3 (four 5)))->((5 four) 3 (2 1))

ক্লাসিক পুনরাবৃত্তি পদ্ধতির: যুক্তিটি যদি তালিকা না হয় তবে এটি অপরিবর্তিত রাখুন, যদি এটি একটি তালিকা থাকে তবে তালিকার বিপরীতে ফাংশনটি মানচিত্র করুন।


2

গণিত, 34/2 = 17 বাইট

Quiet[Reverse//@#]/.Reverse->(#&)&

অথবা কেবলমাত্র Reverse//@#&আপনি যদি এক টোন ত্রুটি চান এবং Reverseসর্বত্র এটির জন্য।



1

জাভাস্ক্রিপ্ট ES6, 42 - 50% = 21 বাইট

আমার স্কোর অনেক উপায়ে নিখুঁত। এমন ক্রিয়াকলাপ কার্যকর করে rযা এর ইনপুটটির সদস্যদের কাছে পুনরাবৃত্তভাবে প্রয়োগ করে।

r=a=>Array.isArray(a)?a.reverse().map(r):a

যদি আমরা ধরে নিই যে কোনও বস্তুর সম্পত্তি নেই pop, তবে এটি হয়ে যায় (31 - 50% = 15.5), দেব-নালকে ধন্যবাদ:

r=a=>a.pop?a.reverse().map(r):a

অথবা, যদি আমরা ধরে নিই যে এই অবজেক্টটির বুদ্ধিমান reverseসম্পত্তি রয়েছে তবে আমরা এটিও করতে পারি (35 - 50% = 17.5):

r=a=>a[R="reverse"]?a[R]().map(r):a

আমি আপনি নিরাপদে এই মত একটি অ্যারের জন্য চেক পারে: a.pop?a.reverse().map(r):a। ধরে নিচ্ছি হ্যান্ডেল করার প্রয়োজন নেই void 0এবং কাস্টম অবজেক্টস নেই।
andlrc

1

লুয়া, 111 99 * .5 = 55.5 49.5 বাইট

function r(a)local t={}for i,v in next,a do t[#a+1-i]=type(v)=="table"and r(v)or v end return t end

পুনরাবৃত্তি ভাল বিট


1

সিজেএম, 20 বাইট * 50% = 10

{_`0='[={W%{F}%}&}:F

নামকৃত ব্লকটি সংজ্ঞায়িত করে Fযা স্ট্যাকের উপরে একটি অ্যারেতে প্রয়োগ করা যেতে পারে (বা অন্য কোনও কিছু, যার ক্ষেত্রে এটি কোনও অপশন নেই)।

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


1

ব্র্যাচল্যাগ , 5 - 50% = 2.5 বাইট

ċ↔↰ᵐ|

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

         The input
ċ        which is a list
 ↔       reversed
   ᵐ     with each element
  ↰      passed through this same predicate
    |    is the output. If the input isn't a list,
         it is the output.

যেহেতু স্ট্রিং এবং পূর্ণসংখ্যাগুলিও বিপরীত করতে পারে তাই আমাদের স্পষ্টতই নন-তালিকা ব্যর্থ করতে হবে ċ


1

ওল্ফ্রাম ভাষা (গণিত) , 23 -50% = 11.5 বাইট

#/.List->Reverse@*List&

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

Listগণিতের (গুলি {...}) এর সমতুল্য List[...]@*রচনা অপারেটর, তাই প্রতিটি occurence প্রতিস্থাপন হয় Listসঙ্গে Reverse@*Listউল্টিয়ে যে তালিকা যে ইনপুট (ঘটে Reverse@*List[...]= Reverse[{...}])।


24 -50% = 12 বাইট

#~Reverse~Range@Depth@#&

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

শুধু Listএস উপর কাজ করে না ।


1

ক্লোজার, 38 বাইট

(এবং আমার ধারণা একটি বোনাস, তবে ক্লোজুর একটি গতিশীল ভাষা তাই এটি নিখরচায় আসে)

(fn f[x](if(seq? x)(map f(into()x))x))

এটি একটি ভাল শুরু কিন্তু এই অপ্টিমাইজেশানগুলি নিয়োগ করে না:

  • fnনামযুক্তটির পরিবর্তে একটি বেনামি ফাংশন সংজ্ঞায়িত করুন defn। তবে fপুনরাবৃত্তির জন্য আমাদের এখনও একটি "স্কোপড" নাম দরকার
  • ভেক্টরের পরিবর্তে একটি তালিকা হিসাবে ইনপুট নিন, তারপরে আমরা এর seq?পরিবর্তে ব্যবহার করতে পারিcoll?
  • (into () ...)পরিবর্তে ব্যবহার করুনreverse
  • xম্যাপিংয়ের আগে বিপরীত করুন , আমাদের তখনকার মতো বেশি স্পেসের দরকার নেই

0

রুবি , 32 - 50% = 16 বাইট

পুনরাবৃত্তি ফাংশন। কোনও সংখ্যা বা স্ট্রিংয়ের চেষ্টা করার সময় সেই ট্রিগারটি rescueধরতে ব্যবহার করে ইনপুটটি অ্যারে রয়েছে কিনা তা যাচাই করার চেয়ে 2 বাইট কম সংক্ষিপ্ত হতে দেখা যায় ।NoMethodErrorreversemapa==[*a]

f=->a{a.reverse.map(&f)rescue a}

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

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