সান্তা কখন বেসমেন্টে প্রবেশ করে? (এওসির প্রথম দিন)


20

আমি নির্মাতার অনুমতি নিয়ে কোডের অ্যাডভেন্টের প্রথম দিনের দ্বিতীয় অংশটি পুনরুত্পাদন করছি

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

একটি খোলার প্রথম বন্ধনী, এর (অর্থ হল তার এক তলা উপরে উঠা উচিত, এবং একটি বন্ধ হওয়া বন্ধনী ), এর অর্থ হল তার এক তলায় যেতে হবে।

অ্যাপার্টমেন্ট বিল্ডিং খুব লম্বা, এবং বেসমেন্ট খুব গভীর; তিনি কখনও উপরে বা নীচ তল খুঁজে পাবেন না।

নির্দেশাবলীর একটি সেট দেওয়া হয়েছে, প্রথম চরিত্রের অবস্থানটি অনুসন্ধান করুন যা তাকে বেসমেন্টে প্রবেশের কারণ করে (তল -1)।

উদাহরণ হিসাবে:

ইনপুট )তাকে চরিত্রের অবস্থান 1 এ বেসমেন্টে প্রবেশ করায়।

ইনপুট ()())তাকে চরিত্রের অবস্থান 5 এ বেসমেন্টে প্রবেশ করায়।

এখানে একটি দীর্ঘ ইনপুট দেওয়া হয়েছে যা 1797 এর সমাধান দেয়।

এটি কোড গল্ফ, তাই সংক্ষিপ্ততম সমাধানটি জয়ী হয়!


আমাদের কি সেই সঠিক অক্ষর ব্যবহার করতে হবে?
নীল

1
@ মুদ্দিফিশ মূল চ্যালেঞ্জের ইনপুটগুলি একটি নির্দিষ্ট আকারে দেওয়া হত এবং তাই প্রায়শই চ্যালেঞ্জের মূল অংশটি ইনপুটগুলি বিশ্লেষণ করে; যদিও আমি এটি "গিরগিটি সমস্যা" হয়ে উঠতে চাই না আমি মনে করি মূলটির স্পিরিটটি হ'ল ইনপুটটি বন্ধনীগুলির একটি স্ট্রিং হওয়া উচিত। আমি বুঝতে পারি যে এটি অন্যের তুলনায় কয়েকটি ভাষার পক্ষে সুবিধা অর্জন করে তবে আমি ভোটারদেরকে সমাধানগুলিতে অগ্রাধিকার দেওয়ার সময় এটিকে বিবেচনায় নেওয়ার আহ্বান জানাব।
এ সিমন্স

প্যারেন্টিফাইফিয়েবল বাইনারি সংখ্যার সাথে খুব ঘনিষ্ঠভাবে জড়িত ... আমি যথেষ্ট দৃ .়ভাবে মনে করি না যে এটি দ্বিগুণ, সুতরাং পরিবর্তে আমি কেবল একটি মন্তব্য করব।
অ্যাডমবর্কবার্ক

@ টিমিমি আমি আপনার অর্থটি দেখতে পাচ্ছি তবে আমার মনে হচ্ছে এই প্রশ্নটি যথেষ্ট আলাদা যে প্রতিযোগিতামূলক উত্তরগুলি সেই প্রশ্ন থেকে খুব বেশি আঁকতে সক্ষম হবে না!
এ সিমন্স

1
আমি এটি এসএমবিএফ (মূলত বিএফ) এ সমাধান করার চেষ্টা করছি, এবং এই ভাষাটি ডিবাগ করার জন্য এসইউকেকেএস ... উগ্।
mbomb007

উত্তর:


17

জেলি, 8 7 বাইট

O-*+\i-

1 বাইট বন্ধ করে গল্ফ করার জন্য @ স্প3000 কে ধন্যবাদ!

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

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

O-*+\i-    Main link. Input: s (string)

O          Ordinal; replace each character with its code point.
           This maps "()" to [48, 49].
 -*        Apply x -> (-1) ** x.
           This maps [48, 49] to [1, -1].
   +\      Compute the cumulative sum, i.e., the list of partial sums.
     i-    Find the first index of -1.

16

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

try:input()
except Exception,e:print e[1][2]

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

কৌশলটি পাইথনের পার্সারটিকে কাজটি করতে দেওয়া। ফাংশনটি input()একটি ইনপুট স্ট্রিংকে মূল্যায়নের চেষ্টা করে এবং প্রথম মিল না করে পেরেনে একটি ত্রুটি ছুড়ে দেয়। এই ত্রুটিটি ধরা পড়লে তা রূপ নিয়েছে

SyntaxError('unexpected EOF while parsing', ('<string>', 1, 1, ')'))

যেখানে ত্রুটি ঘটেছিল সেখানে অক্ষর নম্বর অন্তর্ভুক্ত।


7

পাইথন, 79 77 বাইট

lambda m:[sum([2*(z<')')-1for z in m][:g])for g in range(len(m)+1)].index(-1)

এটি করার সম্ভবত আরও ভাল উপায় আছে তবে আমি ধারণার বাইরে। এছাড়াও কোডগল্ফে এটি আমার প্রথম পোস্ট।

@ ইরওয়ানকে ধন্যবাদ 2 বাইট বন্ধ গল্ফিং জন্য।


সাইটে স্বাগতম! এটি একটি খুব সুন্দর প্রথম পোস্ট। :)
অ্যালেক্স এ।

আপনি [0:g]দ্বারা প্রতিস্থাপন করতে পারেন[:g]
Erwan

এবং এই প্রতিস্থাপনটি আমার মনে হয় 1 বাইট সংরক্ষণ করে -2*ord(z)+81 হয় করে2*(z<')')-1
এরওয়ান

5

পাইথন 3, 59

জিআরসি ধন্যবাদ 3 বাইট সংরক্ষণ করা।

পাইথনে ম্যানুয়াল স্ট্রিং ইন্ডেক্সিং করা সত্যিই আমার পছন্দ নয়। এটা খুব ভুল মনে হচ্ছে।

def f(x):
 c=q=0
 while-~c:c+=1-(x[q]>'(')*2;q+=1
 return q


5

সিজেম, 10 বাইট

0l'_*:~1#)

অথবা

0l'_*~]1#)

বা (ডেনিসকে ক্রেডিট)

Wl+'_*:~1#

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

ব্যাখ্যা

যেহেতু একটি সিমন্স ইতিমধ্যে উল্লেখ করেছে, ()সিজেমের পক্ষে ভাগ্যবান পছন্দ কারণ সেগুলি যথাক্রমে হ্রাস / বর্ধিত অপারেটর are এর অর্থ যদি আমরা শূন্য থেকে শুরু করি তবে আমরা সেই ধাপটি সন্ধান করছি যেখানে সান্তা 1 তলে পৌঁছেছে।

0   e# Push 0, the initial floor.
l   e# Read input.
'_* e# Riffle the input string with underscores, which duplicate the top of the stack.
:~  e# Evaluate each character, using a map which wraps the result in an array.
1#  e# Find the position of the first 1.
)   e# Increment because we're looking for a one-based index.

4

ল্যাবরেথ , 18 বাইট

+(+"#(!@
:  :
%2_,

এটি অনলাইন চেষ্টা করুন!এই উত্তরটি @ মার্টিনব্যাটনার সাথে সহযোগিতার ফলাফল ছিল।

ব্যাখ্যা

সাধারণ ল্যাবরেথ প্রাইমার (আমি "স্বাভাবিক" বলি, তবে আমি আসলে এটি প্রতিবারই আবার লিখি):

  • ল্যাবরেথ একটি স্ট্যাক-ভিত্তিক 2 ডি ভাষা, কার্যকর প্রথম বৈধ চর থেকে শুরু হয় (এখানে উপরে বাম দিকে)। প্রতিটি সংযোগে, নির্দেশ নির্দেশকের জন্য যেখানে দুটি বা ততোধিক সম্ভাব্য পাথ রয়েছে সেখানে স্ট্যাকের শীর্ষটি কোথায় পরীক্ষা করা উচিত তা নির্ধারণ করার জন্য চেক করা হয়। নেতিবাচক বাম দিকে ঘুরছে, শূন্য এগিয়ে এবং ধনাত্মক ডান দিকে ঘুরছে turn
  • স্ট্যাকটি নিরবচ্ছিন্ন এবং শূন্যে ভরা, সুতরাং খালি স্ট্যাক থেকে পপিং কোনও ত্রুটি নয়।
  • উত্স কোডের অঙ্কগুলি সংশ্লিষ্ট নম্বরটিকে ধাক্কা দেয় না - পরিবর্তে, তারা স্ট্যাকের শীর্ষে পপ করে এবং ধাক্কা দেয় n*10 + <digit>। এটি বিশাল সংখ্যককে সহজেই বিল্ডিং করতে দেয়। নতুন নম্বর শুরু করতে, ব্যবহার করুন_ , যা শূন্যকে ঠেলে দেয়।

এই কোডটি কিছুটা অদ্ভুত কারণ গল্ফিংয়ের উদ্দেশ্যে, মূল লুপটি দুটি কার্যকে এক সাথে সংযুক্ত করে। প্রথম পাসের প্রথমার্ধের জন্য, এখানে যা ঘটেছিল তা এখানে:

+(+             Add two zeroes, decrement, add with zero
                This leaves -1 on the stack
"               NOP at a junction. -1 is negative so we try to turn left, fail, and
                turn right instead.
:               Duplicate -1

এখন যে স্ট্যাকটি শীর্ষে -1 দিয়ে শুরু করা হয়েছে, আসল প্রক্রিয়াজাতকরণ শুরু হতে পারে। মূল লুপটি কী করে তা এখানে।

,               Read a byte of input
_2%             Take modulo 2.
:+              Duplicate and add, i.e. double
(               Decrement
                This maps "(" -> -1, ")" -> 1
+               Add to running total
"               NOP at a junction. Go forward if zero, otherwise turn right.
:               Duplicate the top of the stack

সর্বশেষ নকলটি আমাদের সম্পাদিত প্রতিটি পুনরাবৃত্তির জন্য স্ট্যাকটিতে একটি উপাদান যুক্ত করে। এটি গুরুত্বপূর্ণ কারণ আমরা যখন শূন্যকে আঘাত করি এবং এনওপিতে এগিয়ে যাই, তখন আমরা এটি করি:

#               Push stack depth
(               Decrement
!               Output as num
@               Terminate

3

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

SELECT MIN(l)FROM(SELECT l,SUM(m)OVER(ORDER BY l)p FROM(SELECT LEVEL l,DECODE(SUBSTR(:1,LEVEL,1),'(',1,-1)m FROM DUAL CONNECT BY LEVEL<=LENGTH(:1)))WHERE p=-1;

আন golfed

SELECT MIN(l) -- Keep the min level
FROM(
  SELECT l,SUM(m)OVER(ORDER BY l)p -- Sum the () up to the current row
  FROM(
    SELECT LEVEL l,DECODE(SUBSTR(:1,LEVEL,1),'(',1,-1)m -- ( equal 1 and ) equal -1 
    FROM DUAL 
    CONNECT BY LEVEL<= LENGTH(:1)
  )
)
WHERE p=-1 -- Keep the rows where the () sum is equal to -1

3

অক্ষিপট ,22 21

! M` ^ ((\ () |। (<- 2>)) + +

এটি অনলাইনে চেষ্টা করুন বা বড় পরীক্ষার কেসটি ব্যবহার করে দেখুন। (বড় পরীক্ষার ক্ষেত্রে URL টি বড়, এটি যদি আপনার জন্য ব্রেক হয়ে যায় তবে ক্রোমে ঠিক আছে বলে মনে করুন))

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

আমরা ভারসাম্য প্রথম বন্ধনীর প্রথম সেটটির সাথে মিল রেখে এটিকে বের করি, তারপরে আমরা খালি স্ট্রিংটি সেই ফলাফলটির সাথে কত বার মিলবে তা গণনা করি। আমি নিশ্চিত না যে এটি রেটিনার ক্ষেত্রে এটি করার সর্বোত্তম উপায় কিনা, বিশেষত যদি পিসিআরই মোড এটি খাটো করে তোলে তবে ব্যবহার করে$#_ প্রতিস্থাপনটি করা দীর্ঘায়িত বলে মনে হচ্ছে কারণ একটি ত্রুটি এবং একাধিক ম্যাচ থাকার সমস্যা রয়েছে।

এই অ্যালগরিদমটি অবৈধ ইনপুটটির জন্য অদ্ভুত আচরণের কারণ ঘটায়, এটি মূলত ধরে নিয়েছে যে সান্তা যদি বেসমেন্টে এটি না করে, তবে তিনি অন্যান্য আন্দোলনের পরে রহস্যজনকভাবে টেলিপোর্ট করেন।



3

গ্রেপ + এডাব্লুকে, 51 বাইট

grep -o .|awk '/\(/{s++}/)/{s--}s<0{print NR;exit}'

grepকমান্ড একটি নতুন লাইন প্রতিটি অক্ষর স্থাপন করা হয়।


3

পাইথ, 13 বাইট

f!hsm^_1Cd<zT

ব্যাখ্যা

              - autoassign z = input()
f             - First where V returns Truthy.
          <zT -     z[:T]
    m         -    [V for d in ^]
        Cd    -     ord(d)
     ^_1      -      -1**^
   s          -   sum(^)
 !h           -  not (^+1)

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

ওল্ড অ্যালগরিদম, 15 বাইট

f!h-/J<zT\(/J\)

ব্যাখ্যা:

                - autoassign z = input()
f               - First where V returns Truthy.
      <zT       -      z[:T]
     J          -     autoassign J = ^
    /    \(     -    ^.count("(")
           /J\) -    J.count(")")
   -            -   ^-^
 !h             -  not (^+1)

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

অথবা যদি ছাড়া অন্য ব্যবহার অক্ষর করার অনুমতি দেওয়া (এবং ), 9 বাইট (চলন্ত ইনপুট প্রাক প্রক্রিয়াকরণ)

f!.v+<zT1

ব্যাখ্যা

          - autoassign z = input()
f         - First where V returns Truthy.
     <zT  -     z[:T]
    +   1 -    ^+"1"
  .v      -   eval(^)
 !        -  not ^

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


3

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

f=(s,t=s)=>s<')'?f(s.replace('()',''),t):t.length-s.length+1

()প্রথম অক্ষর a না হওয়া পর্যন্ত পুনরাবৃত্তভাবে এক জোড়া মেলানো সরিয়ে কাজ করে )। সতর্কতা: স্ট্রিংগুলিতে এটির চেষ্টা করবেন না যাতে পর্যাপ্ত পরিমাণ নেই )। উদাহরণ:

((()())()))
((())()))
(()()))
(()))
())
)

এই মুহুর্তে এটি দেখতে পাবে যে 12 টি অক্ষর মোট মুছে ফেলা হয়েছে যাতে উত্তর 13 হয়।


পরিবর্তে আপনি এই মন্তব্যটি আপনার উত্তরে রেখে দিতে পারেন।
mbomb007

3

এমএটিএল , 12 11 বাইট

ইনপুট স্ট্রিং-এ গণনা -1 বাড়ানোর ডেনিসের ধারণা ব্যবহার করে 1 বাইট সংরক্ষণ করা হয়েছে

1_j^Ys0<f1)

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

1_         % number -1
j          % take string input
^          % element-wise power. This transforms '('  to 1 and ')' to -1
Ys         % cumulative sum
0<         % true for negative values
f          % find all such values 
1)         % pick first. Implicit display

2

সিজেম, 12 10 বাইট

0q{~_}%1#)

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

দুটি বাইট মার্টিনকে ধন্যবাদ রক্ষা করেছে।

ব্যাখ্যা:

0              Load 0 onto the stack
 q             Load input onto the stack without evaluating
  {  }       Code block
   ~_          Evaluate the next command and duplicate the top stack element. The format of the question is good for CJam and Golfscript since ) and ( are increment and decrement operators (though the wrong way round).
        %      Map this code block over the string. This yields an array of Santa's floor positions
         1#   Find the first instance of a 1, since decrement and increment are swapped
           )  Fix the off-by-1 error caused by zero-indexing

2

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

o=f=0;i=prompt().split('');for(c in i){switch (i[c]){case '(':f++;break;case ')':f--;if(f<0){alert(o+1);i=[];}}o++;}

অন্যান্য চরিত্রগুলি উপেক্ষা করে। ব্যবহার promptএবং alert


2

পার্ল, 34 + 1 = 35 বাইট

$.+=s+.+++s+\)++while")"gt$_;$_=$.

কিছু পরামর্শের জন্য ডেনিসকে ধন্যবাদ।

সাথে চালান -pপতাকা দৌড়াও। এটি পার্ল ৫.১০ এ কাজ করে তবে পরবর্তী সংস্করণগুলির জন্য এখানে একটি স্থান প্রয়োজন:++ while

পুরাতন, অরোগল্ফড সংস্করণ:

$_ = <>;                # get a line of input
while ($_ lt ')') {     # while it begins with a (
    s/.//;              # remove the first (
    s/\)//;             # remove the first )
    $i += 2;            # increase index by 2
}
print $i + 1;           # print the position

2

পাইথন, 44 বাইট

f=lambda s,i=1:i and-~f(s[1:],i-1+2*(s<')'))

মেঝেটি এমনভাবে iশুরু হয় 1যাতে আমরা iভুয়া মান হিসাবে শেষ করি 0। যদি অবসান না হয়, তবে পুনরাবৃত্তভাবে প্রথম অক্ষরটিকে সরিয়ে ফেলা হয়েছে এবং সেই চরিত্রের উপর ভিত্তি করে ফ্লোর নম্বর আপডেট করা হবে result


2

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

p=>{c=0;for(i in p){c+=p[i]==')'?-1:1;if(c<0)return+i+1}}

খুব সহজ, কেবল ইনপুট দিয়ে পুনরাবৃত্তি করে, যদি ('ডেস্ক যদি') 'থাকে তবে ইনকগুলি হয়। প্রথম নেতিবাচক উপর ফিরে আসে।



1

সি, 73 বাইট

main(f,c){f=c=0;for(;f!=-1;c++){f+=1-((getchar()&1)<<1);}printf("%d",c);}

STDIN এ ইনপুট আশা করে; এর চেয়ে অন্য অক্ষর (এবং )ইনপুট প্রদর্শিত হতে পারে (অন্তত যতক্ষণ না আমরা উত্তর পৌঁছে গেছেন)। ইনপুট অবশ্যই ASCII হতে ।

STDOUT এ উত্তরটি প্রকাশ করে।

জন্য হওয়া ASCII মধ্যে 1-বিট পার্থক্য ব্যবহার (এবং )

/* old-style arguments, implicitly int */
main(x, f)
{
    /* c is our character counter, f is the floor*/
    c = f = 0;
    /* increase c while f is not -1 */
    for (;f != -1; c++) {
        /* use difference in LSB to add one for (, subtract one for ) */
        f += 1-((getchar()&1)<<1);
    }
    /* answer */
    printf("%d", c);
}

সুন্দরভাবে বিন্যাসিত সংস্করণ:


বাইট সংরক্ষণ করার জন্য আপনি f=c=0লুপটির সূচনাতে স্থানান্তর করতে পারেন for(f=c=0;f!=...?
অ্যাডমবর্কবার্ক

@ টিমমিডগুলিকে তাদের বিশ্বব্যাপী করতে আরও ভাল করা যাতে তারা স্বয়ংক্রিয়ভাবে আরম্ভ হয়।
কোল ক্যামেরন

1

পাওয়ারশেল, 75 65 62 বাইট

[char[]]$args[0]|%{$c+=(1,-1)[$_%40];$d++;if($c-lt0){$d;exit}}

প্রতিটি ইনপুট অক্ষরের মধ্য দিয়ে লুপ করতে পেরেন্টিফাইফিয়েবল বাইনারি সংখ্যার মতো একই কৌশল ব্যবহার করে, প্রতিটিটির জন্য একটি চলমান $cআউন্টার রেখে+1(-1 ব্যবহার করে ), এবং , তারপরে পরীক্ষা করে আমরা নেতিবাচক আঘাত করেছি কিনা (যেমন, আমরা বেসমেন্টে আছি) testing

সম্পাদনা - তাদের সূচকগুলির চেয়ে প্রকৃত অক্ষরগুলিকে পুনরাবৃত্তি করে 10 বাইট সংরক্ষণ করা হয়েছে 2 সম্পাদনা করুন - মডুলোর
জন্য সাম্যতার চেক অদলবদল করে 3 অতিরিক্ত বাইট সংরক্ষণ করা হয়েছে তাই ingালাই অন্তর্ভুক্ত


1

গণিত, 62 55 বাইট

Position[Accumulate[(-1)^ToCharacterCode@#],-1][[1,1]]&

সমস্ত দীর্ঘ ফাংশন নাম! সিমোনসের সিজেএম উত্তরের অনুরূপ কাজ করে।


1

বেফঞ্জ 25 বাইট

অচেনা আউটপুট। এটি আপনাকে প্রথম তলায় শুরু করে এবং 0 পর্যন্ত চলে যাবে।

1<\1_v#:+-*2%2~
:#._@>$1>

1

র‌্যাকেট (১০২)

(λ(s)(let l((c 0)(b 0)(s(string->list s)))(if(> 0 b)c(l(+ 1 c)((if(eqv?(car s)#\()+ -)b 1)(cdr s)))))

Ungolfed

(λ (input)
  (let loop ((count 0) (balance 0) (chars (string->list input)))
    (if (> 0 balance)
        count
        (loop (+ 1 count)
              ((if (eqv? (car chars) #\() + -) balance 1)
              (cdr chars)))))

1

এপিএল, ১৮ টি চর

{1⍳⍨¯1=+\¯1*')'=⍵}

ইংরেজীতে:

  • ¯1*')'=⍵: -1 যেখানে ইনপুট = ")", 1 অন্যথায়;
  • +\: চলমান যোগফল;
  • 1⍳⍨¯1=: প্রথম -1 এর সূচকটি সন্ধান করুন।

1

লুয়া, 92 89 87 বাইট

এটি একটি কমান্ড-লাইন আর্গুমেন্ট গ্রহণ করে।

সম্পাদনা করুন: 3 বাইট সংরক্ষণ করা হয়েছে

সম্পাদনা করুন: 2 বাইট সংরক্ষণ করা হয়েছে এবং একটি বাগ সংশোধন করা হয়েছে যা প্রান্তের ক্ষেত্রে ঘটতে পারে, এটি এখন তার প্রস্থান কোডের মাধ্যমে আউটপুট দেয়

r=0i=0(...):gsub(".",function(c)i=i+1r=r+(c==")"and-1or 1)if r<0then os.exit(i)end end)

Ungolfed

r,i=0,0                     -- set r (the actual floor), and i(the character count)
(...):gsub(".",function(c) -- apply an anonymous functions on each character of the input
  i,r=i+1,                  -- increment i
      r+(c==")"and -1 or 1) -- decrement r if c==")", increment it otherwise
  if r<0 then os.exit(i)end -- if r==-1, exit and output the current index
end)

1

কে / কোনা , 23 21 বাইট

অপ্রয়োজনীয় প্রথম বন্ধনী অপসারণ করে 2 বাইট সংরক্ষণ করা হয়েছে।

{1+(+\1 -1"()"?x)?-1}

ব্যবহার:

k){1+(+\1 -1"()"?x)?-1} "())"
3

0

পার্ল, 40 + 1 = 41 বাইট

$y++,($i+=/\(/*2-1)<0&&last for/./g;$_=$y

-pপতাকা প্রয়োজন :

$ perl -pe'$y++,($i+=/\(/*2-1)<0&&last for/./g;$_=$y' <<< '()())'
5
$ perl -pe'$y++,($i+=/\(/*2-1)<0&&last for/./g;$_=$y' 1797.txt
1797

গ্রহণযোগ্য বৈধ ইনপুট।

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

                                           # -p read line by line into $_ and auto prints at the end
        $y++,                              # Counter for steps taken
             ($i+=/\(/*2-1) < 0            # The match /\(/ will give 1 or 0 in a numeric context 1 for `(` and 0 for anything else
                                           # times it by 2 and subtracting -1 will yield 1 or -1
                               && last     # End the iteration if $i < 0
for/./g;                                   # Iterate over each items in the input
                                      $_=$y# Print the output

0

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

(s,r,f=0)=>s.split``.map((l,i)=>(f+=l=='('?1:-1,f<0?r=r||++i:0))&&r

প্রথম যুক্তি হিসাবে ইনপুট নেয়

ব্যাখ্যা

(s, r, f=0)                                  //Gets string, declares r and f to equal undefined and 0
         =>
            s.split``                        //Splits string into character array
            .map(                            //Loops over array
                 (l, i)=>(
                         f +=                //Increment f
                         l=='(' ? 1 : -1,    //By either 1 or -1 depending on character
                         f<0 ?               //If the floor is less than 0
                         r=r||++i            //And is first time below, r equals index (+1 to make it '1 indexed not 0')
                         : 0)
                         &&r                   //Return index

0

পাইথন (3.5), 78 71 62 বাইট

একটি পুনরাবৃত্তি সমাধান

f=lambda s,p=0,v=0:p if v<0else f(s[1:],p+1,v+2*(s[0]<')')-1) 

এটা অনুরূপ এই মিনি গল্ফের জন্য সমাধানের

আমরা ধরে নিতে পারি যে সান্তা সবসময় বেসমেন্টে পৌঁছায়

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