চলমান সত্য গণনা করুন


59

আমার প্রিয় বন্ধু এবং সহকর্মীর দ্বারা অনুপ্রাণিত এবং স্মরণে,

ড্যান ব্যারোনেট

ড্যান ব্যারোনেট , 1956 - 2016. আরআইপি

তিনি এই কার্যের সবচেয়ে সংক্ষিপ্ততম এপিএল সমাধান খুঁজে পেয়েছেন:

কার্য

একটি বুলিয়ান তালিকা দেওয়া, ট্রেলিংয়ের সত্য মানগুলির সংখ্যা গণনা করুন।

উদাহরণস্বরূপ কেস

{}0

{0}0

{1}1

{0, 1, 1, 0, 0}0

{1, 1, 1, 0, 1}1

{1, 1, 0, 1, 1}2

{0, 0, 1, 1, 1}3

{1, 1, 1, 1, 1, 1}6


আমরা কি তালিকাটিকে শূন্য এবং এর স্ট্রিং হিসাবে নিতে পারি? যেমন 01100?
আদনান

@ অ্যাডানান কেবল তখনই আপনার ভাষার পক্ষে বুলিয়ান তালিকা উপস্থাপনের সবচেয়ে সাধারণ উপায়।
অ্যাডম

71
তোমার ক্ষতির জন্য দুঃখিত.
মার্টিন ইন্ডার

6
@ মার্টিনইেন্ডার আপনাকে ধন্যবাদ এটি এগিয়ে যাওয়া কঠিন হবে। ডায়ালগ ডায়ালগের জন্য কাজ করার জন্য আমাকে যা শিখতে হবে তা শিখিয়েছিলেন।
অ্যাডম

5
ড্যানকে বিদায় জানান। আরআইপি ...
এরিক দি আউটগল্ফার

উত্তর:


36

ডায়ালগ এপিএল, 6 2 বাইট

⊥⍨

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

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

(Uptack, dyadic: ডিকোড) বেস রূপান্তর সম্পাদন করে। যদি বাম অপারেন্ডটি ভেক্টর হয় তবে এটি মিশ্র বেস রূপান্তর সম্পাদন করে , যা এই কাজের জন্য উপযুক্ত।

একটি বেস ভেক্টর জন্য খ = খ এন , ⋯, খ 0 এবং একটি অঙ্ক ভেক্টর একটি = একটি এন , ⋯, একটি 0 , বো ⊥ একটি পরিবর্তিত একটি মিশ্র বেস , অর্থাৎ, এটি নির্ণয় 0 ⋯ খ এন -1 একটি এন + ⋯ + বি 0 বি 12 + বি 01 + a 0

এখন, (টিলডে ডেইরেসিস, কমিউট) অপারেটরটিকে নীচে বামে পরিবর্তন করে। এক একাত্ম প্রসঙ্গে, এটি অপারেটরকে সমান বাম এবং ডান যুক্তি দিয়ে কল করে।

উদাহরণস্বরূপ, ⊥⍨ একটি হিসাবে সংজ্ঞায়িত করা হয় একটি ⊥ একটি যা নির্ণয়, একটি 0 ⋯ একটি এন + + ⋯ + একটি 0 একটি 1 একটি 2 + একটি 0 একটি 1 + একটি 0 , বাম ডান থেকে সমস্ত ক্রমসঞ্চিত গুণফলের সমষ্টি ।

জন্য trailing বেশী, ডানদিকের পণ্য 1 এবং অন্যান্য হয় 0 ফলে তাদের যোগফল সমান, k


14
ইঙ্গিত: ড্যান এটি মাত্র দুটি বাইটে করেছে।
অ্যাডম

3
মিশ্র বেস রূপান্তর! যে চালাক।
ডেনিস

1
উহু. মিশ্র বেস রূপান্তর, এটি কীভাবে আবার আঘাত করে।
কনর ও'ব্রায়েন

বলিহারি! প্রকৃতপক্ষে, ড্যানের কারণে আমরা বিশেষ-কেস করেছি b⊥bএবং ⊥⍨bঅসীম গতি বাড়িয়ে দেব ।
অ্যাডাম

19

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

f=l=>l.pop()?f(l)+1:0

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


কিভাবে কাজ করে? কিভাবে f(l)+1একটি মান ফেরত দেয় > 2?
অলিভার

@ অলিভার এটি একটি পুনরাবৃত্ত প্রক্রিয়া, হিসাবে মূল্যায়ন করা হয় l.pop()?(l.pop()?(l.pop()?(...etc...)+1:0)+1:0)+1:0
আর্নল্ড

আমি দেখি. ব্যাখ্যা করার জন্য ধন্যবাদ.
অলিভার

11

জেলি , 4 বাইট

ŒrṪP

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

সেই ক্ষেত্রে যেখানে তালিকাটি খালি রয়েছে, সেখানে কিছু কৌতূহলী পর্যবেক্ষণ রয়েছে। প্রথমত, রান-দৈর্ঘ্যের এনকোডিং খালি তালিকাকে []অন্য খালি তালিকা দেয় []। তারপর শেষ উপাদান থেকে লেজ ব্যবহার retreiving ফেরৎ 0একজোড়া পরিবর্তে [value, count]যা রান দৈর্ঘ্য এনকোড অ্যারের নিয়মিত উপাদান। তারপরে পণ্যটি যখন Pপ্রত্যাবর্তিত হয় 0তখন 0প্রত্যাশিত ফলাফল।

ব্যাখ্যা

ŒrṪP  Main link. Input: list M
Œr    Run-length encode
  Ṫ   Tail, get the last value
   P  Product, multiply the values together

বিকল্পভাবে, ŒgṪSকাজ করে!
লিন

এটি ইনপুট হিসাবে খালি তালিকার জন্য সঠিক আউটপুট দেয়, তবে বিচ্ছিন্ন হয়ে আমি অবাক হয়েছি। আপনি কি বিশেষ বিশেষ ক্ষেত্রে দিয়ে যেতে মনে করবেন?
পিটার টেলর

@ পিটারটেলর @ আমি অবাক হয়েছি যে এটি কাজ করেছিল। এছাড়াও, আমি কেবল লক্ষ্য করেছি যে প্রথম লিঙ্কটিতে ভুল কোড রয়েছে।
মাইল

@PeterTaylor জেলি হিসেবে বাস্তবায়িত হয়: lambda z: iterable(z).pop() if iterable(z) else 0iterableযখন কোনও তালিকায় ডাকা হয় কেবলমাত্র তালিকাটি ফিরে আসে এবং খালি তালিকা অবশ্যই মিথ্যা বলে।
FryAmTheEggman

10

ব্র্যাচল্যাগ , 7 6 5 বাইট

@]#=+

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

ব্যাখ্যা

@]        A suffix of the Input...
  #=      ...whose elements are all equal
    +     Sum its elements

যেহেতু @] - Suffixসবচেয়ে বড় প্রত্যয় থেকে শুরু করে সবচেয়ে ছোট পর্যন্ত এটি প্রথমে সবচেয়ে দীর্ঘতম রান খুঁজে পাবে।



10

হাস্কেল, 26 25 বাইট

a%b|b=1+a|0<3=0
foldl(%)0

ব্যবহার:

Prelude> foldl(%)0 [True,False,True,True]
2

পয়েন্টফ্রি সংস্করণ (26 বাইট):

length.fst.span id.reverse

বুল তালিকার পরিবর্তে একটি পূর্ণসংখ্যা তালিকা ব্যবহার করা (21 বাইট, খ্রিস্টান সিভার্সকে ধন্যবাদ):

a%b=b*(a+1)
foldl(%)0

ব্যবহার:

Prelude> foldl(%)0 [1,0,1,1]
2

পয়েন্টফ্রি সংস্করণ (25 বাইট)

sum.fst.span(==1).reverse

পূর্ণসংখ্যার তালিকার জন্য foldlধারণাটি কাজ করেa%b=b*(a+1)
খ্রিস্টান সিভর্স

9

রেটিনা , 7 5 বাইট

r`1\G

এটি অনলাইন চেষ্টা করুন! (প্রথম লাইন একটি লাইনফিড-বিচ্ছিন্ন পরীক্ষা স্যুট সক্ষম করে))

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

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

রেজেক্স নিজেই, এটি right থেকে বামে \Gমেলে এবং প্রতিটি ম্যাচটি আগেরটির সাথে ম্যাচ করে। সুতরাং, 1এটি স্ট্রিংয়ের শেষে থেকে আমরা কয়টি মেলে তা গণনা করে।


"হ্যাঁ, রেটিনার পক্ষে, এটি কেবল স্ট্রিংগুলি পরিচালনা করে, আমি মনে করি একটি" 01 "বা" এফটি "স্ট্রিং
ক্রমযুক্ত is

9

05 এ বি 1 ই , 12 10 6 5 বাইট

কারুসোমপুটিংয়ের জন্য 1 বাইট সংরক্ষণ করা হয়েছে

Î0¡¤g

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

ব্যাখ্যা

Î      # push 0 and input
 0¡    # split on 0
   ¤   # take last item in list
    g  # get length

0¡¤gচার বাইট হয়।
যাদু অক্টোপাস উরন

@ কারাসোকম্পুটিং: দুর্দান্ত! এটি লেখার সময় স্ট্রিং ইনপুট ঠিক আছে কিনা তা এখনও পরিষ্কার করা হয়নি তবে এখন দেখছি এটি :)
এমিগানা

J0¡¤gএছাড়াও এখনও খাটো;)।
যাদু অক্টোপাস উরান

@ কারাসোকম্পিউটিং: দুর্ভাগ্যক্রমে আমাদের Îখালি ইনপুটটি পরিচালনা করতে হবে তবে এটি এখনও একটি বাইট সংরক্ষিত ধন্যবাদ :)
এমিগানা




7

গণিত, 25 24 বাইট

Fold[If[#2,#+1,0]&,0,#]&

3
ড্যানের শীতল মিশ্র-বেস সমাধানের একটি বন্দরটি কেবল রেকর্ডিং: FromDigits[b=Boole@#,MixedRadix@b]&(35 বাইট)।
গ্রেগ মার্টিন


5

C90 (gcc), 46 বাইট

r;main(c,v)int**v;{while(0<--c&*v[c])r++;c=r;}

ইনপুটটি কমান্ড-লাইন আর্গুমেন্টের মাধ্যমে হয় (প্রতিটি যুক্তি অনুসারে একটি পূর্ণসংখ্যা), প্রস্থান কোডের মাধ্যমে আউটপুট ।

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

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

r একটি গ্লোবাল ভেরিয়েবল। এর ধরন ডিফল্টে int এবং, গ্লোবাল হচ্ছে, এটা ডিফল্ট মান 0

ফাংশন যুক্তি ডিফল্টে int হিসাবে ভাল। এটি এন বুলিয়ান্সের অ্যারেগুলির জন্য পূর্ণসংখ্যা n + 1 টি ধারণ করবে ; প্রধানের প্রথম যুক্তি হ'ল সর্বদা নির্বাহের পথ।

ফাংশন আর্গুমেন্ট v হিসাবে ঘোষিত হয় int**। আসল ধরণের ভি হবে char**তবে যেহেতু আমরা কেবলমাত্র প্রতিটি যুক্তিটির ন্যূনতম তাৎপর্যপূর্ণ বিট পরীক্ষা করব 0 (কোড পয়েন্ট 48 ) এবং 1 (কোড পয়েন্ট 49 ) পৃথক করে বলার জন্য , এটি সামান্য-এডিয়ান নিয়ে কিছু যায় আসে না মেশিন।

যখন লুপটি সি হ্রাস করে এবং এটি 0 টির সাথে তুলনা করে । সি একবার 0 এ পৌঁছানোর পরে আমরা লুপটি ভেঙে ফেলব। অ্যারেতে 0 টি না থাকলে কেবল এটি প্রয়োজন ।

যতক্ষণ 10<--c রিটার্ন হয় ততক্ষণ আমরা c তম কমান্ড-লাইন আর্গুমেন্ট ( ) গ্রহণ করি এবং পয়েন্টার ( ) এর ডিফারেন্স করে এর প্রথম অক্ষরটি বের করি । আমরা বুলিয়ান এবং চরিত্রের কোড পয়েন্টের (এবং এটি অনুসরণ করে এমন তিনটি আবর্জনা বাইট) এর বিটওয়াসা এবং গ্রহণ করি, সুতরাং লুপটি ভেঙে শর্তটি 0 ফিরে আসার পরে একবার 0 আসবে।v[c]*0<--c

বাকী ক্ষেত্রে, কমান্ড-লাইন আর্গুমেন্টগুলি 1 হওয়ার পরে , r++বৃদ্ধিগুলি 1 দ্বারা r হয় , এভাবে 1 এর পিছনে থাকা সংখ্যা গণনা করা হয় ।

অবশেষে, c=rএর কম্পিউটেড মান সঞ্চয় করে মধ্যে । ডিফল্ট সেটিংসের সাহায্যে, সংকলক নিয়োগটি অনুকূলিত করে এবং অপসারণ করে; এটি আসলে movl %eax, -4(%rbp)নির্দেশ তৈরি করে । যেহেতু retEAX নিবন্ধকের মান প্রদান করে, এটি পছন্দসই আউটপুট উত্পন্ন করে।

মনে রাখবেন যে, এই কোড নেই না C99, যা ফেরৎ সঙ্গে কাজ 0 থেকে প্রধান যদি শেষে প্রধান উপনিত।


Isn't argcঅন্তত 1(সঙ্গে argv[0]ফাইলের নাম ধারণকারী)? এর --c&&পরিবর্তে আপনি একটি বাইট সংরক্ষণ করতে পারেন 0<--c&। gcc´s এর প্রস্থান কোডটি নেওয়া হয়েছে argc? ঝরঝরে।
তিতাস

@ টিটাস এটি কাজ করবে না। 1 বা 0*v[c] এর কোড পয়েন্ট , সুতরাং এটি 49 বা 48 হয় এবং সুতরাং সর্বদা সত্য y
ডেনিস 18

C89 এবং C90 এর সাথে, জিসিসি সেই মুহুর্তে RAX- এ যা আছে তা ফিরিয়ে দেয়। শেষ হওয়াতে সি 99 সর্বদা প্রধান থেকে 0 প্রদান করে
ডেনিস

4

কে, 6 বাইট

+/&\|:

এই ফাংশনটি রচনার অনুবাদ sum mins reverseমধ্যে q, ভাষা এর আরো পাঠযোগ্য সহোদর, যেখানে মিনিট একটি ঘূর্ণায়মান সর্বনিম্ন।


বাদ দেওয়া যাবে?
স্ট্রিস্টার

4

জে, 9 3 বাইট

#.~

এটি প্রতিচ্ছবিযুক্ত মিশ্র বেস রূপান্তর। কারণ এটি মিশ্র বেস রূপান্তর হিসাবে একই। আবার।

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

   v =: #.~
   ]t =: '';0;1;0 1 1 0 0;1 1 1 0 1;1 1 0 1 1;0 0 1 1 1;1 1 1 1 1 1
++-+-+---------+---------+---------+---------+-----------+
||0|1|0 1 1 0 0|1 1 1 0 1|1 1 0 1 1|0 0 1 1 1|1 1 1 1 1 1|
++-+-+---------+---------+---------+---------+-----------+
   v&.> t
+-+-+-+-+-+-+-+-+
|0|0|1|0|1|2|3|6|
+-+-+-+-+-+-+-+-+
   (,. v&.>) t
+-----------+-+
|           |0|
+-----------+-+
|0          |0|
+-----------+-+
|1          |1|
+-----------+-+
|0 1 1 0 0  |0|
+-----------+-+
|1 1 1 0 1  |1|
+-----------+-+
|1 1 0 1 1  |2|
+-----------+-+
|0 0 1 1 1  |3|
+-----------+-+
|1 1 1 1 1 1|6|
+-----------+-+

2
ইঙ্গিত: ড্যানের সমাধানটির জে অনুবাদ ব্যবহার করে এটি কেবল 3 বাইটে করা যেতে পারে।
অ্যাডাম

1
@ অ্যাডাম আমি সমাধানের সন্ধান করার চেষ্টা করেছি। বেস রূপান্তর সম্পর্কে ভাবেন নি। এটাই তাঁর সম্পর্কে বেশ চালাক!
কনর ও'ব্রায়েন

1
হ্যাঁ. সে ছিল ড্যান। :-(
অ্যাডম

4

আর, 40 39 25 বাইট

সম্পূর্ণরূপে পুনর্গঠিত সমাধানটি @ ডেসনের জন্য ধন্যবাদ

sum(cumprod(rev(scan())))

স্টিডিনের কাছ থেকে ইনপুট পড়ুন, ভেক্টরটি বিপরীত করুন এবং এর প্রথম উপাদানটি যদি !=0রান-লেংথ এনকোডিংয়ের প্রথম দৈর্ঘ্য ( rle) আউটপুট দেয় অন্যথায় 0


1
আপনি দ্বিতীয় লাইনে পরিবর্তন করে একটি বাইট সংরক্ষণ করতে পারেন ifelse(r$v,r$l,0)[1]। (যদি, এবং তারপরে প্রথম উপাদানটি গ্রহণ করে তবে
ভেক্টরাইজড

1
ইফলেসের দরকার নেই - কেবল r $ v এবং r $ lকে গুণ করুন।
Dason

কিন্তু সমষ্টি (। Cumprod (Rev ())) রুট বাইট অনেকটা কোন পথে সংরক্ষণ করা উচিত
Dason

3

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

foldl(\a b->sum[a+1|b])0

তালিকার উপরের আইট্রেটস, প্রতিটি উপাদানের জন্য একটি যুক্ত করা, 0এটি হিট হওয়ার পরে পুনরায় সেট করা False

0/1 ইনপুট সহ 16 বাইট :

foldl((*).(+1))0

যদি তালিকাটি খালি খালি নিশ্চিত করা হয় তবে আমরা 14 বাইট পেতে পারি:

sum.scanr1(*)1

এটি পিছন থেকে সংযোজিত পণ্যটি গণনা করে, তারপর তাদের যোগফল দেয়। সংশ্লেষিত পণ্যটি 0 টি আঘাতের আগ পর্যন্ত 1 টি থেকে যায় এবং তার পরে 0 হয় 1



3

সি # 6, 103 72 বাইট

using System.Linq;
int a(bool[] l)=>l.Reverse().TakeWhile(x=>x).Count();

জেনারিক অ-জেনারিক তালিকা ব্যবহার করে জেনেরিক তালিকায় 1 বাইট লল বেজে যায়

-31 বাইট ধন্যবাদ স্কটকে


আপনি যদি একটি অ্যারে ব্যবহার করেন তবে আপনি intint a(int[] l)=>l.Reverse().TakeWhile(i=>i>0).Sum();
স্কট

@ স্কট অবশ্যই আমি কী ভাবছিলাম ... যদিও আমি বুল থাকব। প্রশ্ন বুলিয়ান তালিকা নির্দিষ্ট করে এবং এটি সি নয়
লিঙ্ক এনজি

একটি কম্পাইল Func<bool[], int>57 বাইট অর্থাত জন্যusing System.Linq;l=>l.Reverse().TakeWhile(x=>x).Count();
TheLethalCoder


2

DASH , 16 বাইট

@len mstr"1+$"#0

এটি সম্ভব সংক্ষিপ্ততম ড্যাশ সমাধান নয়, তবে সবচেয়ে সংক্ষিপ্ততম ড্যাশ সমাধান আমার উপর থেকে বেরিয়ে আসছে। আমি এই জায়গায় এই উপন্যাস পদ্ধতির পোস্ট করছি।

ব্যবহার:

(@len mstr"1+$"#0)"100111"

ব্যাখ্যা

@(                 #. Lambda
  len (            #. Get the length of the array after...
    mstr "1+$" #0  #. ... matching the argument with regex /1+$/
  )                #. * mstr returns an empty array for no matches
)

2

স্কালা, 25 বাইট

l=>l.reverse:+0 indexOf 0

Ungolfed:

l=>(l.reverse :+ 0).indexOf(0)

তালিকাটি বিপরীত করে, 0 যুক্ত করে এবং 0 এর প্রথম সূচী খুঁজে বের করে, যা প্রথম 0 এর আগে উপাদানগুলির সংখ্যা


2

ব্যাচ, 57 বাইট

@set n=0
@for %%n in (%*)do @set/an=n*%%n+%%n
@echo %n%

কমান্ড-লাইন প্যারামিটার হিসাবে ইনপুট নেয়। সংযোজকটিকে যোগ করার আগে এটির বর্তমান মান দ্বারা গুণ করে কাজ করে, যাতে কমান্ড লাইনের যে কোনও জেরো গণনা পুনরায় সেট করে। মনে রাখবেন যে, %%nহিসাবে একই নয় nবা %n%পরিবর্তনশীল।



2

জাভা 7, 62 বাইট

int c(boolean[]a){int r=0;for(boolean b:a)r=b?r+1:0;return r;}

অবরুদ্ধ এবং পরীক্ষার কোড:

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

class M{
  static int c(boolean[] a){
    int r = 0;
    for (boolean b : a){
      r = b ? r+1 : 0;
    }
    return r;
  }

  public static void main(String[] a){
    System.out.print(c(new boolean[]{}) + ", ");
    System.out.print(c(new boolean[]{ false }) + ", ");
    System.out.print(c(new boolean[]{ true }) + ", ");
    System.out.print(c(new boolean[]{ false, true, true, false, false }) + ", ");
    System.out.print(c(new boolean[]{ true, true, true, false, true }) + ", ");
    System.out.print(c(new boolean[]{ true, true, false, true, true }) + ", ");
    System.out.print(c(new boolean[]{ false, false, true, true, true }) + ", ");
    System.out.print(c(new boolean[]{ true, true, true, true, true, true }));
  }
}

আউটপুট:

0, 0, 1, 0, 1, 2, 3, 6

2

পার্ল 5.10, 22 বাইট

-aপতাকার জন্য 21 বাইট +1 বাইট । যেহেতু রেজেক্স-ভিত্তিক ভাবটি সম্পন্ন হয়েছিল ...: পি

অ্যারের জন্য ইনপুট মানগুলি অবশ্যই একটি স্পেস দ্বারা পৃথক করা উচিত।

$n++while pop@F;say$n

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


1
আপনি যদি কমান্ড লাইনের মাধ্যমে আর্গুমেন্ট নেন তবে সামান্য খাটো: perl -E '$_++while pop;say' 0 1 1 0 1 1 1তবে এটি কোনও 0কারণেই আউটপুট দেয় না (যদিও এটি কোনও সমস্যা কিনা তা নিশ্চিত নয়!)
ডম হেস্টিংস

2

পার্ল, 22 বাইট

-pপতাকার জন্য 21 বাইট কোড + 1 বাইট ।

s/.(?=.*0)//g;$_=y;1;

এটি চালানোর জন্য:

perl -pE 's/.(?=.*0)//g;$_=y;1;' <<< "0 1 1 0 1 1 1"

(আসলে, ইনপুট বিন্যাস অনেক ব্যাপার না: 0110111, 0 1 1 0 1 1 1, [0,1,1,0,1,1,1]ইত্যাদি would সব কাজ)


18 বাইট সংস্করণ থেকে @Dom হেস্টিংস কিন্তু এটা 0 এবং 1 একটি স্ট্রিং, যা অনুমোদিত নয় যেমন ইনপুট সরবরাহ প্রয়োজন:

perl -pE '/1*$/;$_=length$&' <<< '0110111'

যে প্রেমময় ;কৌতুক :) তাহলে বিন্যাস এক একটানা স্ট্রিং: perl -pE '/1*$/;$_=length$&' <<< '0110111'18 জন্য, নিশ্চিত না যদি সেই নিয়ম নমন যদিও বা না ...
ডোম হেস্টিংস

@ ডোমহাস্টিংস হ্যাঁ, আমিও! (আমাকে দেখানোর জন্য ধন্যবাদ টন!) প্রশ্নের সমাধানের প্রথম এবং দ্বিতীয় মন্তব্যগুলি আপনার সমাধানের জন্য আপনার প্রয়োজনীয় ইনপুট ফর্ম্যাটটিকে অস্বীকার করবে ... তবে ইনপুটটির ফর্ম্যাটটি যদি আরও থাকে তবে আমি আপনার সংস্করণটির পরামর্শ দেওয়ার জন্য আমার পোস্টটি সম্পাদনা করব I'll বিনামূল্যে।
দাদা

2

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

<?=strlen(preg_filter('/.*[^1]/','',join($argv)));

অদ্ভুতভাবে একটি রেজেক্সের সাথে আমার প্রথম চেষ্টা অ্যারে দিয়ে করা আমার চেষ্টা থেকে আরও ছোট হয়ে গেল ... এর
মতো ব্যবহার করুন:

php tt.php 1 1 0 1 1

2

রুবি 37 32 বাইট

->n{n.size-1-(n.rindex(!0)||-1)}

একটি বেনামি ফাংশন তৈরি করে যা কোনও ভুয়া মানটির ডান-সর্বাধিক উদাহরণ খুঁজে পায় এবং সেই মানটি থেকে শুরু করে সুব্রেরির আকার গণনা করে।

এটি !0রুবীতে সত্যবাদী মান হিসাবে 0 টি মিথ্যা হিসাবে ব্যবহার করে । rindexএকটি অ্যারেতে একটি মানের শেষ সূচকটি সন্ধান করে।

ব্যবহার :

boolean_list = [true, false, false, true]
->n{n.size-1-(n.rindex(!0)||-1)}[boolean_list]

রিটার্নস 1


যদি আমাকে কমান্ড লাইন প্যারামিটার হিসাবে 0s এবং 1 এর স্ট্রিং পাস করার অনুমতি দেওয়া হয় (যা রুবি বুলেটিনের তালিকা উপস্থাপন করে না তবে), আমি এটিকে 24 এ নামতে পারতাম:

$*[0]=~/(1*)\z/;p$1.size

এটি নিয়মিত এক্সপ্রেশন ব্যবহার করে এবং নিয়মিত এক্সপ্রেশন দ্বারা ফিরে আসা স্ট্রিংয়ের দৈর্ঘ্য মুদ্রণ করে /(1*)\z/, যেখানে \zস্ট্রিংয়ের সমাপ্তি ঘটে। $*[0]প্রথম আর্গুমেন্টটি পাস হয়েছে এবং 0 এবং 1 এর স্ট্রিং।

ব্যবহার:

trailing_truths.rb 011101

প্রত্যাবর্তন ঘ।


1
একবার আপনার কাছে সর্বশেষ মিথ্যা মানটির সূচক হয়ে গেলে, আপনাকে আবার অ্যারে থেকে উপাদানগুলি পুনরুদ্ধার করতে হবে কেন?
লি ডব্লু

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