একটি অ্যারের গভীরতা নির্ধারণ করুন


31

আপনার সোমবার সন্ধ্যায় একটি সহজ চ্যালেঞ্জ (ভাল, বা মঙ্গলবার সকালে বিশ্বের অন্যান্য অর্ধেক ...)

আপনাকে ইনপুট হিসাবে একটি নেস্টেড, সম্ভাব্য ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে পড়ে যায় positive

[1, [[2, 3, [[4], 5], 6, [7, 8]], 9, [10, [[[11]]]], 12, 13], 14]

আপনার কাজটি তার গভীরতা নির্ধারণ করা, যা তালিকার কোনও পূর্ণসংখ্যার সবচেয়ে বড় নীড়-গভীরতা। এই ক্ষেত্রে, এর গভীরতা 11হ'ল 6, যা বৃহত্তম।

আপনি ধরে নিতে পারেন যে অ্যারেগুলির কোনওটিই খালি থাকবে না।

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে এবং STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে ফলাফল আউটপুট করতে পারেন।

ইনপুট কোনও সুবিধাজনক তালিকা বা স্ট্রিং ফর্ম্যাটে নেওয়া যেতে পারে যা অ-আয়তক্ষেত্রাকার অ্যারে সমর্থন করে (বিভিন্ন গভীরতার নেস্টেড অ্যারে সহ), যতক্ষণ না আসল তথ্য প্রাক-প্রক্রিয়াজাত না হয়।

আপনাকে অ্যারের আকারের সাথে সম্পর্কিত কোনও বিল্ট-ইনগুলি ব্যবহার করবেন না (বিল্ট-ইনগুলি যা এই চ্যালেঞ্জটিকে সমাধান করে, যা আপনাকে নেস্টেড অ্যারের মাত্রা দেয়)। এটির ব্যতিক্রম শুধুমাত্র একটি অ্যারের দৈর্ঘ্য পাচ্ছে।

স্ট্যান্ডার্ড বিধি প্রযোজ্য।

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

[1]                                                               -> 1
[1, 2, 3]                                                         -> 1
[[1, 2, 3]]                                                       -> 2
[3, [3, [3], 3], 3]                                               -> 3
[[[[1], 2], [3, [4]]]]                                            -> 4
[1, [[3]], [5, 6], [[[[8]]]], 1]                                  -> 5
[1, [[2, 3, [[4], 5], 6, [7, 8]], 9, [10, [[[11]]]], 12, 13], 14] -> 6
[[[[[[[3]]]]]]]                                                   -> 7

2
আড্ডায় আলোচনার পরে আমি সিদ্ধান্ত নিয়েছিলাম দৈর্ঘ্যের বিল্ট-ইনগুলি মঞ্জুরি দেওয়ার, কারণ কিছু ভাষায় এটিকে পরিষ্কারভাবে অ্যারে দিয়ে পুনরাবৃত্তি করা প্রয়োজন।
মার্টিন ইন্ডার

2
শুধু সাধারণ Education: APL জন্য বিল্ট ইন আদিম হল ঠিক এই
Adám

@ মার্টিনবাটনার আমি একটি ক্ষুদ্র সমস্যার মধ্যে পড়েছি। আমি জাভাতে এটি শুরু করেছি, নিরপেক্ষভাবে ইনপুট পরীক্ষা করার সময় কমাগুলি এর ফলে ইনপুটগুলিকে একাধিক কমান্ড লাইন আর্গুমেন্টে বিভক্ত করে তোলে then আমি কি \ ইনপুটগুলিতে পালানোর চরিত্রটি ব্যবহার করতে পারি ? সম্পাদনা: কিছুই নয় এটি ঠিক এর মতো চেষ্টা করে। এটি এমনকি কাজ করে না। আমি কি সিএমডি আরগ ব্যবহার করতে পারি না?
আশ্বিন গুপ্ত

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

@ মার্টিনবাটনার ওহ, আমি জানতাম না যে উদ্ধৃতিযুক্ত জিনিসটি আমি চেষ্টা করে দেখব। বর্তমানে কেবল স্ক্যানার ব্যবহার করছি। (System.in)। আমি বিশ্বাস করি যে এটি স্টাডিনের একটি রূপ?
আশ্বিন গুপ্ত

উত্তর:


20

কে, 4 বাইট

#,/\

কে-তে, ,/একটি তালিকার সমস্ত উপাদানগুলিতে যোগদান করবে। সাধারণ ,//অভিবাদন একটি নির্ধারিত বিন্দুতে পুনরাবৃত্তি করে, নির্বিচারে নেস্টেড তালিকাটিকে পুরোপুরি সমতল করে। ,/\একইভাবে একটি নির্দিষ্ট পয়েন্টে পুনরাবৃত্তি হবে, তবে মধ্যবর্তী ফলাফলের তালিকা সংগ্রহ করবে। নির্দিষ্ট পয়েন্টে পৌঁছানোর আগে আমরা কতগুলি মধ্যবর্তী ফলাফল পরিদর্শন করি তার দ্বারা ( #), আমরা যে উত্তরটি চাই তা পাই: নীড়ের সর্বাধিক গভীরতা।

"স্থির-পয়েন্ট স্ক্যানের মাধ্যমে যোগদানের গণনা"।

পদক্ষেপে:

 (#,/\)'(,1
        1 2 3
        ,1 2 3
        (3;(3;,3;3);3)
        ,((,1;2);(3;,4)))
1 1 2 3 4

15

রেটিনা , 10

  • @ To এর জন্য 1 বাইট সংরক্ষণ করা হয়েছে ӍѲꝆΛҐӍΛПҒЦꝆ
  • @ মার্টিনব্যাটনারকে 14 টি অতিরিক্ত বাইট সংরক্ষণ করা হয়েছে
+ + `\ W |} {

{

এখানে ইনপুট ফর্ম্যাটটি কিছুটা স্বাক্ষরিত - _তালিকা বিভাজকগুলির জন্য অক্ষরগুলি ব্যবহৃত হয়, সুতরাং একটি ইনপুট এর মতো দেখায়{1_{{2_3_{{4}_5}_6_{7_8}}_9_{10_{{{11}}}}_12_13}_14}

  • মঞ্চ 1 - বারবার অপসারণ }{এবং অন্যান্য সমস্ত \wঅক্ষর। এর প্রভাব রয়েছে ক) সমস্ত স্তরে সমস্ত তালিকা তৈরির ক্ষেত্রে কেবলমাত্র একটি উপাদান রয়েছে এবং খ) সমস্ত তালিকাভুক্ত-কাঠামোগত অক্ষর মুছে ফেলতে হবে।
  • দ্বিতীয় পর্যায় - বাকি গণনা {। এটি নীড়ের গভীরতম স্তর দেয়।

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


যদি এটি খুব প্রসারিত হয়, তবে পূর্ববর্তী উত্তরটি ছিল:

রেটিনা , 13

ধরে নিই তালিকায় কোঁকড়া ধনুর্বন্ধনী রয়েছে {}

+ + `[^} {] |} {

{

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


1
আপনার কোডটি 13 বাইটে সংক্ষিপ্ত করা যেতে পারে (আপনি যদি ইনপুট ফর্ম্যাটটি কিছুটা প্রসারিত করেন তবে 11)। আপনি যদি কোনও ইঙ্গিত চান তবে আমাকে জানান। :) (আমি আসলেই এটি পোস্ট করতে চাই না, কারণ এটি কার্যত একই সমাধান))
মার্টিন এন্ডার

এটি দুটি জিনিস। ক) আপনি ইনপুট ফর্ম্যাটটি সামান্য টুইট করে একটি বাইট বা তাই সংরক্ষণ করতে পারেন । খ) আপনি নির্বিশেষে প্রচুর বাইট সংরক্ষণ করতে পারেন ... আপনি যদি একক রানে একাধিক পরীক্ষার কেসগুলি পরিচালনা না করার চেষ্টা করেন তবে আপনি একটি সংক্ষিপ্ত (এবং আরও সহজ) সমাধান খুঁজে পেতে পারেন?
মার্টিন ইন্ডার

আমি এটা ভাবিনি। সেই পরিমাণ বাইট তখন সাশ্রয় হয়েছে। আমার ইনপুট ফর্ম্যাটে পরিবর্তনটি আরও দুর্বল হত। খ সম্পর্কে) কি মনে রাখবেন রেটিনার খুব প্রথম এবং সহজতম অপারেশন পদ্ধতিটি কী ছিল?
মার্টিন ইন্ডার

1
হাঁ। আমার ক) যদিও ইনপুট থেকে স্পেসগুলি সরিয়ে ফেলার কথা উল্লেখ করেছে। এবং তারপরে আপনি এর _পরিবর্তে আরও দুটি বাইট সংরক্ষণ করতে পারেন ,তবে এটি কিছুটা প্রসারিত হতে পারে।
মার্টিন ইন্ডার

@ মার্টিনব্যাটনার ভাল ধারণা! সম্মত - _বিভাজকরা খুব স্বতন্ত্র হতে পারে। সুতরাং আমি উত্তরে উভয় সংস্করণটি রেখে দিচ্ছি
ডিজিটাল ট্রমা

12

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

f=lambda l:l>{}and-~max(map(f,l))

সংখ্যার গভীরতা 0 হ'ল বলে পুনরাবৃত্তভাবে গভীরতা সংজ্ঞায়িত করা হয় এবং তালিকার গভীরতা তার উপাদানগুলির সর্বোচ্চ গভীরতার চেয়ে আরও একটি। নম্বর বনাম তালিকাটি খালি অভিধানের সাথে তুলনা করে পরীক্ষা করা হয় {}, যা সংখ্যার উপরে পড়ে তবে পাইথন 2 এর বিল্ট-ইন প্রকারের স্বেচ্ছাসেবী অর্ডারে তালিকার নীচে।


দৈর্ঘ্য বিল্ট-ইনগুলি এখন যদি অনুমতি দেয় তবে তা অনুমোদিত।
মার্টিন ইন্ডার

6

পাইথ - 11 10 7 বাইট

@ ডেনিসকে ধন্যবাদ 1 টি বাইট সংরক্ষণ করেছে

@ থমাস কোওয়া ধন্যবাদ 4 বাইট সংরক্ষণ করা

eU.usNQ

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

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


m!!dহয়ে যেতে পারে &R1
ডেনিস

@ ডেনিস দুর্দান্ত, এটি স্মার্ট
মালটিসেন

ওপিতে থমাসকওয়া lঅনুমোদিত নয়।
মালটিসেন

@ থমাসকওয়া যে সত্যিই স্মার্ট, ধন্যবাদ!
মালটিসেন

দৈর্ঘ্য বিল্ট-ইনগুলি এখন যদি অনুমতি দেয় তবে তা অনুমোদিত।
মার্টিন ইন্ডার

6

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

'['#x=x-1
']'#x=x+1
_#x=x
maximum.scanr(#)0

ব্যবহারের উদাহরণ: maximum.scanr(#)0 $ "[1, [[3]], [5, 6], [[[[8]]]], 1]"-> 5

হাস্কেলের মিশ্র তালিকাগুলি ( Integerমিশ্রিত List of Integer) নেই, তাই আমি কিছু তালিকা সনাক্তকরণ ফাংশনটি কাজে লাগাতে পারি না এবং স্ট্রিংটি পার্স করতে হয়।

আমি ডান দিক থেকে শুরু করছি 0এবং প্রত্যেকের জন্য 1 যুক্ত করব ], প্রত্যেকের জন্য 1 টি বিয়োগ করুন [এবং অন্যথায় মান রাখবেন। scanrসমস্ত মধ্যবর্তী ফলাফল রাখে, সুতরাং maximumএটি কাজ করতে পারে।


5

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

f=a=>a[0]?Math.max(...a.map(f))+1:0

ব্যাখ্যা

রিকার্সিভ ফাংশন যা কোনও অ্যারের সর্বাধিক গভীরতা বা 0কোনও সংখ্যায় পাস করা হলে দেয়।

var solution =

f=a=>
  a[0]?                   // if a is an array
    Math.max(...a.map(f)) // return the maximum depth of each element in the array
    +1                    // add 1 to increase the depth
  :0                      // if a is a number, return 0

// Test cases
result.textContent =
`[1]                                                              -> 1
[1, 2, 3]                                                         -> 1
[[1, 2, 3]]                                                       -> 2
[3, [3, [3], 3], 3]                                               -> 3
[[[[1], 2], [3, [4]]]]                                            -> 4
[1, [[3]], [5, 6], [[[[8]]]], 1]                                  -> 5
[1, [[2, 3, [[4], 5], 6, [7, 8]], 9, [10, [[[11]]]], 12, 13], 14] -> 6
[[[[[[[3]]]]]]]                                                   -> 7`
.split`\n`.map(t=>(c=t.split`->`.map(p=>p.trim()),c[0]+" == "+c[1]+": "+(solution(eval(c[0]))==c[1]?"Passed":"Failed"))).join`\n`
<input type="text" id="input" value="[1, [[2, 3, [[4], 5], 6, [7, 8]], 9, [10, [[[11]]]], 12, 13], 14]" />
<button onclick="result.textContent=solution(eval(input.value))">Go</button>
<pre id="result"></pre>


দৈর্ঘ্য বিল্ট-ইনগুলি এখন যদি অনুমতি দেয় তবে তা অনুমোদিত।
মার্টিন ইন্ডার

4

এমএটিএল , 11 14 15 বাইট

'}{'!=dYsX>

এই ধরণের অ্যারেগুলির জন্য MATL এ কোঁকড়া ধনুর্বন্ধনী ব্যবহার করা হয়। যাইহোক, ইনপুটটি স্ট্রিং হিসাবে নেওয়া এবং প্রক্রিয়াজাত করা হয়, সুতরাং কোডের দুটি অক্ষরকে সংশোধন করে স্কোয়ার বন্ধনীগুলি সমানভাবে ব্যবহার করা যেতে পারে।

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

          % implicitly take input as a string (row array of chars)
'}{'!     % 2x1 (column) char array with the two curly brace symbols
=         % 2-row array. First / second row contains 1 where '}' / '{' is found
d         % second row minus first row
Ys        % cumulative sum of the array
X>        % maximum of the array
          % implicitly display result

দৈর্ঘ্য বিল্ট-ইনগুলি এখন যদি অনুমতি দেয় তবে তা অনুমোদিত।
মার্টিন ইন্ডার

4

অক্টাভা, 29 বাইট

@(a)max(cumsum(92-(a(a>90))))

[1 এবং 1-থেকে মানচিত্রগুলি ], তারপরে সংখ্যার যোগফলের সর্বাধিক লাগে।

ইনপুট ফর্মের একটি স্ট্রিং

S6 = '[1, [[3]], [5, 6], [[[[8]]]], 1]';

আদর্শের উপর নমুনা রান করুন ।


আপনি ব্যবহার করা উচিত {, }? ওপিতে অ্যারেগুলির সমান অক্টাভা সেল অ্যারে হয়, আমার ধারণা
লুইস মেন্ডো

@ লুইসমেডো না, কারণ এটি 2 অতিরিক্ত বাইট :) প্লাস, যেহেতু আমি আসলে কখনও অ্যারে তৈরি করি না, কেবল ইনপুট স্ট্রিংটিকে বিশ্লেষণ করি বলে আমি মনে করি না এটি গুরুত্ব দেয়। তবে আপনি আমার উত্তরে প্রত্যাশিত ইনপুট যুক্ত করতে আমাকে স্মরণ করিয়ে দিয়েছেন।
বেকার

সত্য! দীর্ঘ এএসসিআইআই কোড
লুইস মেন্ডো

@ লুইসমেডো প্রকৃতপক্ষে, 1 বাইট দীর্ঘ। এই দ্বিতীয় তুলনাটি কেবল '9' এর চেয়ে বেশি হওয়া দরকার। তবে আপনি ধারণাটি পাবেন: ডি
বেকার

4

জুলিয়া, 55 26 বাইট

f(a)=0a!=0&&maximum(f,a)+1

এটি একটি পুনরাবৃত্ত ফাংশন যা ধরণের সামগ্রীর সাথে এক-মাত্রিক অ্যারে গ্রহণ করে Anyএবং পূর্ণসংখ্যা ফেরত দেয়। ফাংশনে একটি অ্যারে পাস করার সময়, সমস্ত বন্ধনী Any, যেমন সহ উপসর্গ করুন f(Any[1,Any[2,3]])

পদ্ধতিটি বেশ সহজ। একটি ইনপুট করতে একটি , আমরা সংখ্যাবৃদ্ধি একটি 0 এবং দ্বারা কিনা তা পরীক্ষা করুন ফলাফলের স্কালে 0. যদি তা না হয়, আমরা জানি যে একটি একটি অ্যারের, তাই আমরা প্রতিটি উপাদানে ফাংশন প্রয়োগ একটি , সর্বোচ্চ গ্রহণ করা এবং 1 যোগ করুন।

ডেনিসের জন্য 29 বাইট সংরক্ষণ করা!


2
ডেটা গল্ফ <ফিলার>
এল'েন্ডিয়া স্টারম্যান

3

রুবি, 53 বাইট

i=0;p gets.chars.map{|c|i+=('] ['.index(c)||1)-1}.max

STDIN থেকে ইনপুট, STDOUT এ আউটপুট।

i=0;                 initialize counter variable
p                    output to STDOUT...
gets                 get line of input
.chars               enumerator of each character in the input
.map{|c|             map each character to...
i+=                  increment i (and return the new value) by...
('] ['.index(c)||1)  returns 0 for ], 2 for [, 1 for anything else
-1                   now it's -1 for ], 1 for [, 0 for anything else
                     therefore: increment i on increase in nesting, decrement i
                       on decrease, do nothing otherwise
}.max                find the highest nesting level that we've seen

দৈর্ঘ্য বিল্ট-ইনগুলি এখন যদি অনুমতি দেয় তবে তা অনুমোদিত।
মার্টিন ইন্ডার

3

জেলি, 10 7 বাইট

¬;/SпL

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

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

¬;/SпL  Main link. Input: A (list)

¬        Negate all integers in A. This replaces them with zeroes.
    п   Cumulative while loop.
   S       Condition: Compute the sum of all lists in A.
                      If the sum is an integer, it will be zero (hence falsy).
 ;/        Body:      Concatenate all lists in A.
      L  Count the number of iterations.

হালনাগাদ

এই উত্তরটি লেখার সময়, আমি লক্ষ্য করেছি যে জেলি র‌্যাগড তালিকার চেয়ে অদ্ভুত আচরণ করে, কারণ আমি কোনও তালিকাটির আইটেমগুলির বর্ধিত ন্যূনতমতম হিসাবে গভীরতার গণনা করেছি ।

এটি সর্বশেষতম সংস্করণে সম্বোধন করা হয়েছে, সুতরাং নিম্নলিখিত কোড ( 6 বাইট ) এখন কাজ করবে।

¬SSпL

এটি অ্যারেগুলির সারিগুলি সংক্ষেপণের পরিবর্তে তার যোগফল দেয়।


সম্ভবত, ŒḊচ্যালেঞ্জের চেয়ে নতুন কি?
কায়ার্ড কইনিরিংহিংহ

আপনাকে অ্যারের আকারের সাথে সম্পর্কিত কোনও বিল্ট-ইনগুলি ব্যবহার করা উচিত নয় (বিল্ট-ইনগুলি সহ এই চ্যালেঞ্জটি সমাধান করে, যা আপনাকে নেস্টেড অ্যারের মাত্রা দেয়)।
ডেনিস


3

গণিত, 27 20 বাইট

Max[#0/@#]+1&[0#]-1&

সাধারণ পুনরাবৃত্তি ফাংশন।


এটি বাতিল করা সম্ভব If, 7 বাইট সংরক্ষণ করা। (আপনি যদি কোনও ইঙ্গিত চান তবে আমাকে জানান))
মার্টিন এন্ডার

@ মার্টিনবাটনার আমি হাল ছেড়ে দিচ্ছি ... একটি Replaceভিত্তিক সমাধান কমপক্ষে যতক্ষণ না এটি হয় ...
লেজিয়ানম্যামাল 978

1
Mapএকটি পূর্ণসংখ্যা উপর পিং কোন সমিতি হল: Max[#0/@#]+1&[0#]-1&-1এছাড়াও মত ভেতরের কল ভিতরে যেতে পারেন ...&[0#-1]&
মার্টিন ইন্ডার

3

পিএইচপি, 61 বাইট

function d($a){return is_array($a)?1+max(array_map(d,$a)):0;}

রিকার্সিভ ফাংশন যা প্রতিটি উপাদানকে তার গভীরতার সাথে প্রতিস্থাপন করতে ম্যাপিং ফাংশন হিসাবে নিজেকে ব্যবহার করে।


আমি কেবল লক্ষ্য করেছি: জেএসে একই জিনিসটির কেবল 35 বাইট রয়েছে। এখনও পিএইচপি মধ্যে সুন্দর।
তিতাস

খুব ভাল, তুমি আমাকে মারধর করেছ কিন্তু আমি আপডেট খনি এবং আপনি ফিরে বীট :)
aross

3

পিএইচপি, 84 72 64 63 60 বাইট

দ্রষ্টব্য: সম্মিলিত তুলনা অপারেটরের জন্য পিএইচপি 7 প্রয়োজন। এছাড়াও আইবিএম -850 এনকোডিং ব্যবহার করে

for(;$c=$argv[1][$i++];)$c>A&&$t=max($t,$z+=~ú<=>$c);echo$t;

এভাবে চালান:

php -r 'for(;$c=$argv[1][$i++];)$c>A&&$t=max($t,$z+=~ú<=>$c);echo$t;' "[1, [[3]], [5, 6], [[[[8]]]], 1]"
  • পরিবর্তে স্ট্রিং উপস্থাপনের ব্রেসগুলি গণনা করে 12 বাইট সংরক্ষণ করা হয়েছে
  • স্ট্রিং তুলনা সরল ক্ষেত্রে গৃহস্থালি পূরণবাচক সংখ্যা ব্যবহার করে 8 বাইট সংরক্ষিত [এবং]
  • $iকোনও int এ কাস্ট না করে একটি বাইট সংরক্ষণ করা হয়েছে । স্ট্রিং অফসেটগুলি একটি অন্তর্নিহিতভাবে কাস্ট করা হয়
  • অর্ডিনাল সংখ্যার পরিবর্তে সম্মিলিত তুলনা অপারেটর ব্যবহার করে 3 বাইট সংরক্ষণ করা হয়েছে

দুর্দান্ত ধারণা, দুর্দান্ত গল্ফিং! আমার পরীক্ষা করে দেখুন ।
তিতাস


2

পাইথন 3, 42 39 বাইট

-3 বাইট স্প3000 ধন্যবাদ

এটি মূলত xnor এর পাইথন 2 সমাধানের একটি বন্দর :

f=lambda l:"A"<str(l)and-~max(map(f,l))

দুর্ভাগ্যক্রমে, [] > {}একটি unorderable typesত্রুটি ফিরে আসে , যাতে এক্সনোরগুলির সেই বিশেষ চালাক ট্রিক ব্যবহার করা যায় না। তার জায়গায়, -0123456789ASCII মানের চেয়ে Aকম, যা এর চেয়ে কম [], সুতরাং স্ট্রিং তুলনা কাজ করে।


2

সিজেএম (15 বাইট)

q~{__e_-M*}h],(

অনলাইন ডেমো

ব্যবচ্ছেদ

q~      e# Read line and parse to array
{       e# Loop...
  _     e#   Leave a copy of the array on the stack to count it later
  _e_-  e#   Remove a flattened version of the array; this removes non-array elements from
        e#   the top-level array.
  M*    e#   Remove one level from each array directly in the top-level array
}h      e# ...until we get to an empty array
],(     e# Collect everything together, count and decrement to account for the extra []

একই দৈর্ঘ্যের জন্য তবে কুরুচিপূর্ণ হ্যাক অঞ্চলে আরও বেশি,

q'[,-{:~_}h],2-

s/ugly/beautiful/
ডেনিস

@ ডেনিস, আমি '[,-স্ট্রিংটি নীচে নামানোর জন্য বিশেষভাবে ব্যবহারের কথা উল্লেখ করছিলাম [], যা বিষয়বস্তু সীমাবদ্ধ থাকার উপর নির্ভর করে। অ্যারেটির বিষয়বস্তু নির্বিশেষে যে পদ্ধতির সমতলতা কাজ করে।
পিটার টেলর

দ্বিতীয়টি হ'ল প্রাকটিটিয়ার। প্রথমটিরটিতে দুটি ধরণের অমিল ধনুর্বন্ধনী রয়েছে
সায়োস

2

সেড, 40 অক্ষর

(39 অক্ষর কোড + 1 অক্ষর কমান্ড লাইন বিকল্প।)

s/[^][]+//g
:;s/]\[//;t
s/]//g
s/\[/1/g

ইনপুট: স্ট্রিং, আউটপুট: আনরি নম্বর।

নমুনা রান:

bash-4.3$ sed -r 's/[^][]+//g;:;s/]\[//;t;s/]//g;s/\[/1/g' <<< '[1, [[2, 3, [[4], 5], 6, [7, 8]], 9, [10, [[[11]]]], 12, 13], 14]'
111111

সেড, 33 টি অক্ষর

(32 টি অক্ষরের কোড + 1 অক্ষর কমান্ড লাইন বিকল্প))

আউটপুটে পেছনের জায়গাগুলির অনুমতি থাকলে।

s/[^][]+//g
:;s/]\[//;t
y/[]/1 /

ইনপুট: স্ট্রিং, আউটপুট: আনরি নম্বর।

নমুনা রান:

bash-4.3$ sed -r 's/[^][]+//g;:;s/]\[//;t;y/[]/1 /' <<< '[1, [[2, 3, [[4], 5], 6, [7, 8]], 9, [10, [[[11]]]], 12, 13], 14]'
111111      

2

হেক্সাগনি , 61 বাইট

সম্পাদনা করুন : ধন্যবাদ মার্টিন ইন্ডার me আমাকে দুর্দান্ত 1-বুদ্ধি থেকে 1 বাইট বাঁচানোর জন্য!

|/'Z{>"-\..(.."/'&<'..{>-&,=+<$.{\$._{..><.Z=/...({=Z&"&@!-"

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

নীচের চিত্রগুলি পরিবর্তিত হয়নি তবে প্রবাহটি মূলত একই। এছাড়াও মনে রাখবেন যে এটি ফিরে আসবে-1 ইনপুটটি অ্যারে না হলে (যেমন ছাড়াই)[] ) ।

হেক্সাগনের ভিতরে আমার প্রচুর কোনও বিকল্প নেই ... আমার ধারণা এটি আরও গল্ফ করা যেতে পারে।

ব্যাখ্যা

সংক্ষেপে, এটি -1সংঘর্ষের সময় [যুক্ত হয় এবং 1যখন মুখোমুখি হয় তখন যুক্ত হয়] । অবশেষে এটি সর্বাধিক এটি প্রিন্ট করে।

স্ট্রিং বরাবর এটি চালিত হয় তখন এর আচরণ দেখতে টেস্ট কেস 5 এর সাথে চালানো যাক [1, [[3]], [5, 6], [[[[8]]]], 1] :

এটি শুরুতে শুরু হয় এবং ডাব্লু কোণে এটির ইনপুট নেয়:

বন্ধনী

যেহেতু এখনও ইনপুট রয়েছে (নাল অক্ষর নয়) \0 বা EOL নয়), এটি শীর্ষে আবৃত এবং ক্রিমসন পথ শুরু করে।

সেখান থেকে কিউট পর্যন্ত এখানে ঘটে যায় happens >< :

,সার্চ [বাফার, এবং {এবং Zধ্রুবক জেড সেট করে 90. হতে 'পার্থক্য এ চলে আসে এবং -পার্থক্য হিসাব করে। জন্য [এবং ]পার্থক্য হতে হবে 1এবং 3যথাক্রমে। সংখ্যা এবং স্পেস এবং কমাগুলির জন্য এটি নেতিবাচক হবে।

এম 1 M2

তারপর আমরা চালানো (পেতে (আরক্ত পথ, সবুজ পথ এ মোড়ানো পর শুরুতে এক শেষে একবার) দুইবার -1এবং 1জন্য রেস্প [এবং ]। এখানে আমরা নামকরণ পরিবর্তন Diffকরতে Value। এই মানটি গভীরতার সাথে যুক্ত করুন। (আমি Z&নিশ্চিত করতাম যে এটি সঠিক প্রতিবেশীর অনুলিপি করে)। তারপরে আমরা গণনা lastMin - Depthকরে মেমরি প্রান্তে একটি সংখ্যা পেয়েছি minLR

তারপরে আমরা এতে &(সবুজ পথের শেষে) প্রয়োগ করব minLR: যদি নম্বর <= 0 হয় তবে এটি বাম মানটি অনুলিপি করে (যেমনlastMin - Depth <= 0 => lastMin <= Depth ) , অন্যথায় এটি সঠিক মান নেয়।

আমরা অনুভূমিক নীল পথটিতে আবৃত হই এবং Z&আবার আমরা দেখতে পাই যা অনুলিপি করে minLR। তারপরে আমরা "&এবং গণনা করা মিনিটের একটি অনুলিপি তৈরি করেছি। বন্ধনীগুলি ভারসাম্যযুক্ত বলে ধরে নেওয়া হয়, সুতরাং মিনিটটি অবশ্যই <= 0 হতে হবে। মোড়ানোর পরে, নীল পথটি বামদিকে চলে এবং আঘাত করে (, অনুলিপিটিটিকে 1সত্যিকারের মিনিটের চেয়ে কম করে তুলবে। পুনরায় ব্যবহার করে -, আমরা বাফের প্রতিবেশী হিসাবে আরও 1 টি অফ অনুলিপি তৈরি করেছি:

M3

বিঃদ্রঃ: copy হিসাবে নামকরণ হয়েছে1-off

যখন নীল পথটি হিট হয় \এবং একটি সুন্দর "এবং< এটিকে মূল লুপটিতে ফিরে যায়।

যখন লুপ হিট 1, ,বা অথবা ইনপুট হিসাবে অন্যান্য সংখ্যা:

অন্যদেরM4

ডিফটি নেতিবাচক হয়ে উঠবে এবং এটি পরবর্তী ইনপুটটির জন্য মূল লুপে প্রতিফলিত হবে।

যখন সমস্ত কিছুই মূল লুপের মধ্য দিয়ে যায়, আমরা ইওএল পৌঁছায় যা বাফারকে তৈরি করে -1এবং এটি শেষ পর্যন্ত নীচে প্রান্তে চলে যায়:

: M5

'এমপিটিকে সরানো হয় 1-off copyএবং )এটি বৃদ্ধি করে এবং ~তা প্রত্যাখ্যানের সাথে এটি সঠিক সর্বাধিক গভীরতার মান পায় যা মুদ্রিত হয় is!

এবং গল্পটি একটি দিয়ে শেষ হয় @

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

এসোটেরিক আইডিই এবং হেক্সাগনি কলোরারের জন্য টিমউইকে দুর্দান্ত ধন্যবাদ !


আপনি ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারবেন -1থেকে ,: থেকে শেষ সারি পরিবর্তন করে @!-".(যদিও সে ব্যাপারে আমি সম্মত এটি আরো অনেক বন্ধ শেভ বা এমনকি কিছু পুনর্গঠন সঙ্গে পার্শ্ব দৈর্ঘ্যের 4 এই মাপসই সম্ভবত সম্ভব)।
মার্টিন এন্ডার

-1 এর ব্যবহার করার কথা ভাবেননি! আমি আমার কম্পিউটার পেয়ে গেলে সম্পাদনা করব। যদি টেম্পটি বাম প্রতিবেশী হয় তবে আমি Zব্যবহার থেকে বেশ কয়েকজনকে বাঁচাতে পারতাম Z&। প্রোগ্রামটি শুরু করার সাথে আরও ভাল উপায় থাকতে হবে যদি তা অন্তর্ভুক্ত থাকে।
সানি পুন

2

ব্রেনফাক, 48 বাইট

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

বিন্যাসকৃত:

,
[
  <++[>-<------]>++
  [
    not close paren
    +
    [
      not open paren
      <
    ]
    >>[-]
  ]
  +<,
]
-[<[>+<-]>>]
<.

ইনপুট ফর্ম্যাট মতো লাগে (1, ((3)), (5, 6), ((((8)))), 1)এবং একটি বাইট মান আউটপুট করে ।

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

এটি মেমরির অবস্থান দ্বারা গভীরতা সঞ্চয় করে, পয়েন্টারটিকে ডান (এবং বাম দিকে সরানো )এবং অন্যান্য অক্ষর উপেক্ষা করে। দর্শিত কক্ষগুলি একটি 1পতাকা সহ চিহ্নিত করা হয় , সুতরাং মূল লুপের শেষে depth + 1বর্তমান কক্ষের ডানদিকে পতাকা থাকবে । এর পরে চূড়ান্ত ফলাফল মুদ্রণের জন্য যুক্ত করা হয়।


একটি ভিন্ন পদ্ধতির ব্যবহার করে পূর্ববর্তী 69-বাইট সমাধান:

,
[
  >>++[<<->>------]<-<++
  [
    not close paren
    >++<+
    [
      not open paren
      >-<[-]
    ]
  ]
  <
  [
    [>+>]
    <[<-<]
    >
  ]
  >>[<+> >+<-]
  ,
]
<.

এই সংস্করণে, গভীরতা এবং সর্বাধিক গভীরতা কোষগুলিতে স্পষ্টভাবে সংরক্ষণ করা হয়।


1

পাইথ, 15 13 বাইট

@ মাল্টেসেন দ্বারা -2 বাইট

eSm-F/Ld`Y._z

[এবং এর সংখ্যক সংখ্যার মধ্যে পার্থক্য গণনা করে এবং ]সর্বাধিক লাগে। Yখালি অ্যারে, এবং এর স্ট্রিং প্রতিনিধিত্ব ( `) সুবিধাজনকভাবে হয় []

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


দৈর্ঘ্য বিল্ট-ইনগুলি এখন যদি অনুমতি দেয় তবে তা অনুমোদিত।
মার্টিন ইন্ডার

1

সিজেম, 19 22 23 বাইট

0l{_91=\93=-+_}%:e>

আমার এমএটিএল উত্তরের অনুরূপ ধারণা।

3 বাইট অপসারণ করার জন্য পিটার টেলরকে ধন্যবাদ

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

0                            push a 0
l                            read line as string
{            }%              map this block on the string
  _91=\93=-                  1 if it's an opening bracket, -1 if closing
           +_                cumulative sum
               :e>           fold maximum function

1

পার্ল 5, 34 বাইট

32, আরও দুটি জন্য -p

{s&]\[|[^][]&&g&&redo}$_=@a=/]/g

থেকে চুরি ডিজিটাল ট্রমা এর অক্ষিপট উত্তর ... যা 26% এর চেয়ে খাটো।:-)

বা, সমান:

{s&]\[|[^][]&&g&&redo}$_=y///c/2

@ কিউস, কেন? ]ব্র্যাকেট ব্যতীত পালানোর দরকার নেই।
msh210

@ কিয়েস, s&...&...&gহ'ল বিকল্প ব্যবস্থাপক। দেখুন perldoc.perl.org/perlop.html
msh210

1

রুবি, 51 অক্ষর

( ডুরকনব -এর রুবি উত্তরের উন্নতির পরামর্শ হিসাবে শুরু হয়েছিল তবে অন্যরকমভাবে শেষ হয়েছে So তাই আমি এটিকে পৃথক উত্তর হিসাবে পোস্ট করেছি counting গভীর গণনা আইডিয়াটির জন্য অগ্রণীগুলি ( ?\\<=>$&, অবতরণ করে '] ['.index(c)) মূল উত্তরে যেতে হবে))

m=i=0
gets.gsub(/\[|\]/){m=[m,i+=?\\<=>$&].max}
p m

ইনপুট: স্ট্রিং, আউটপুট: সংখ্যা।

নমুনা রান:

bash-4.3$ ruby -e 'm=i=0;gets.gsub(/\[|\]/){m=[m,i+=?\\<=>$&].max};p m' <<< '[1, [[2, 3, [[4], 5], 6, [7, 8]], 9, [10, [[[11]]]], 12, 13], 14]'
6

1

পার্ল 6, 53 বাইট

বন্ধ:

{my ($m,$d);/[\[{$d++;$m=max $m,$d}|\]{$d--}|.]*/;$m}

একটি যুক্তি প্রয়োজন, যেমন:

{my ($m,$d);/[\[{$d++;$m=max $m,$d}|\]{$d--}|.]*/;$m}("[[[3]][2]]")
3

ব্যাখ্যা:

{ my ($m,$d);                 # start closure, declare variables    

  /                           # start regex match

   [                          # start (non-capturing) group

     \[ {$d++;$m=max $m,$d} | # match [ and track depth; OR

     \] {$d--}              | # match ] and track depth; OR

     .                        # match one character

   ]*                         # repeat group

  /;                          # end regex

  $m                          # return max depth
}

1

মিনকোলাং 0.15 , 31 29 24 বাইট

লুই মেন্দোর সিজেএম উত্তর দ্বারা অনুপ্রেরণা নিয়ে আমার অ্যালগরিদমকে ওভারহুল করে দিয়েছিল এবং 5 টি বাইট সংরক্ষণ করেছে!

od5&j$ZN.d"["=$r"]"=~++d

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

ব্যাখ্যা

মূলত, এই কোডটি যা করে তা হ'ল প্রতিটিটির জন্য +1 এবং প্রতিটিটির [জন্য -1 দিয়ে একটি চলমান মোট ]রাখে, সর্বোচ্চ মান পৌঁছনোর ট্র্যাক রেখে, শেষে সেই সর্বোচ্চটি আউটপুট করে। লুপিং মিনকোল্যাংয়ের কোডবক্সের টরয়েডাল প্রকৃতি দ্বারা পরিচালিত হয়।

od           Take character from input and duplicate it (0 if input is empty)
  5&         Pop top of stack and skip the following five spaces if 0
    j$Z      Push the maximum value of the stack
       N.    Output as number and stop.

  d                  Duplicate top of stack for character tests
   "["=              +1 if the character is [
       $r            Swap top two items of stack
         "]"=~       -1 if the character is ]
              ++     Add twice
                d    Duplicate top of stack for the running total

1

রুবি, 41 অক্ষর

f=->a,d=1{a.map{|e|f[e,d+1]rescue d}.max}

প্যারামিটার: অ্যারে, রিটার্ন: সংখ্যা

নমুনা রান:

2.1.5 :001 > f=->a,d=1{a.map{|e|f[e,d+1]rescue d}.max}
 => #<Proc:0x0000000214d258@(irb):1 (lambda)> 

2.1.5 :002 > f[[1, [[2, 3, [[4], 5], 6, [7, 8]], 9, [10, [[[11]]]], 12, 13], 14]]
 => 6 

1

ওরাকল এসকিউএল 11.2, 133 বাইট

SELECT MAX(d)FROM(SELECT SUM(DECODE(SUBSTR(:1,LEVEL,1),'[',1,']',-1,0))OVER(ORDER BY LEVEL)d FROM DUAL CONNECT BY LEVEL<=LENGTH(:1));

আন golfed

SELECT MAX(d)
FROM   (
         SELECT SUM(DECODE(SUBSTR(:1,LEVEL,1),'[',1,']',-1,0))OVER(ORDER BY LEVEL) d 
         FROM   DUAL 
         CONNECT BY LEVEL<=LENGTH(:1)
       );

সংযুক্ত বাই বাই ইনপুট স্ট্রিংয়ে অক্ষর প্রতি এক সারি তৈরি করে।

SUBSTR সারি সংখ্যাটির সাথে সম্পর্কিত অক্ষরকে পৃথক করে।

DECODE প্রতিটি '[' থেকে 1, প্রতিটি ']' '-1 এবং অন্যান্য প্রতিটি চরিত্রকে 0 তে অনুবাদ করে।

বিশ্লেষক এসইউএম বর্তমান সারি সহ পূর্ববর্তী সারিগুলি থেকে প্রতিটি 1, -1 এবং 0 যোগ করে;

ম্যাক্সের যোগফলগুলি গভীরতা।


1

জাভা 8, 95

এটি a এর ল্যাম্বডা এক্সপ্রেশন ToIntFunction<String>Stringওপির উদাহরণ বিন্যাসে ইনপুটটিকে হিসাবে নেওয়া হয় ।

s->{int d=e=-1;for(String t:s.split("[")){d=++e>d?e:d;e-=t.split("]",-1).length()-1;}return d;}

মোটামুটি সোজা [ডিলিমিটার হিসাবে স্ট্রিং বিভক্ত করুন। তাদের প্রত্যেকের জন্য, কাউন্টারটি বাড়িয়ে তুলুন এবং কাউন্টারটির eসাথে এটির তুলনা করুন d, তাদের মধ্যে আরও বড় রাখুন d। তারপরে বর্তমানের পুনরাবৃত্তির স্ট্রিংটি ]এবার ডিলিমিটার হিসাবে ব্যবহার করে বিভাজন করুন এবং অতিরিক্ত স্প্লিটের সংখ্যাটি বিয়োগ করুন e

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