আমার কাছে কখন বাইনারি গাড়ি থাকবে?


19

আমি লক্ষ্য করেছি যে আমি আজ কাজ করতে গিয়ে আমার গাড়ির ওডোমিটারটি 101101 তে ছিল। এটি একটি দুর্দান্ত নম্বর কারণ এটি বাইনারি (এবং একটি প্যালিনড্রোম, তবে এটি গুরুত্বপূর্ণ নয়)। এখন, আমি জানতে চাই যে পরের বার কখন আমার কাছে বাইনারি ওডোমিটার পড়বে। গাড়ি চালানোর সময় আমি ওডোমিটারটি পড়তে পারি না, কারণ এটি বিপজ্জনক হবে, তাই আমি যখন কাজ করতে যাব বা বাড়িতে পৌঁছব তখন তা বাইনারি হতে হবে।

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

এই চ্যালেঞ্জের উদ্দেশ্যগুলির জন্য, একটি দিন একটি বৃত্তাকার ভ্রমণ এবং আমার কাজের পথে যাত্রা শুরু করে।

আপনাকে ওডোমিটারের প্রাথমিক পাঠ এবং প্রতিটি উপায়ে মাইলের পরিমাণ উপস্থাপন করে একটি 10 ​​উপাদান ক্রম গ্রহণ করতে হবে। আপনি বাইনারি ওডোমিটার পড়া না পাওয়া পর্যন্ত এই ক্রমটি পুনরাবৃত্তি করা উচিত। তারপরে আপনারা বাইনারি পড়ার আগ পর্যন্ত আপনাকে যত দিন সময় লাগে তা আউটপুট করা উচিত।

রুটের জন্য মাইলেজ এবং ওডোমিটার রিডিং উভয়ই ইতিবাচক পূর্ণসংখ্যার হবে। দিনের গণনা হয় হয় xবা হয় x.5, সুতরাং আপনার দিন গণনার আউটপুটে অর্ধ দিনের জন্য ভাসমান পয়েন্টটি সমর্থন করা দরকার। যদি দিন গণনাটি একটি পূর্ণসংখ্যা হয় তবে আপনাকে আউটপুট আউট করার প্রয়োজন হবে না .0। ওডোমিটার সর্বদা অবশেষে বাইনারি অবস্থায় পৌঁছে যাবে।

ইনপুট / আউটপুট যে কোনও ফর্ম গ্রহণযোগ্য এবং মানীয় লুফোলগুলি অনুমোদিত নয়।

পরীক্ষার কেস:

101101, [27, 27, 27, 27, 27, 27, 27, 27, 27, 27] == 165.0
1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100] == 22.5
2, [2, 3, 1, 2, 7, 6, 10, 92, 3, 7] == 2.0

একটি দিনের ফলাফল কি কেবল কোনও পূর্ণসংখ্যা বা পূর্ণসংখ্যার যোগ দেড় হবে?
FryAmTheEggman

2
নিবন্ধন করুন প্রতিটি পদক্ষেপ অর্ধেক দিন।
মরগান থ্রাপ

5
আপনি কোথায় কাজ করেন / বাস করেন যে 3, 25 এবং 92 মাইল (কিমি?) নিয়মিত গ্রহণযোগ্য যাতায়াত দূরত্বে?
কিংফোজাল

1
নিবন্ধন করুন
মরগান থ্রাপ

1
@ টবিস্পাইট এটি অসীম সংখ্যার এক মায়াবী ওডোমিটার।
মরগান থ্র্যাপ

উত্তর:


3

জেলি, 22 17 16 বাইট

RịS+³DṀ=1
Ṡç1#SH

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

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

Ṡç1#SH     Main link. Left input: n (initial reading). Right input: A (distances)

Ṡ          Compute the sign of n. Since n is positive, this returns 1.
 ç         Apply the helper link to 1, 2, 3, ... until...
  1#         one match is found. Return the match in an array.
    S      Compute the sum of the array. This yields the match.
     H     Halve the result.


RịS+³DṀ=1  Helper link. Left argument: k (integer). Right argument: A (distances)

R          Range; yield [1, ..., k].
 ị         Retrieve the elements of A at those indices.
           Indexing in modular in Jelly.
  S        Compute the sum of the retrieved distances.
   +³      Add n (left input) to the sum.
     D     Convert the sum to base 10.
      Ṁ    Get the maximum digit.
       =1  Compare it with 1.

6

জাভাস্ক্রিপ্ট, 68 63 61 60 52 বাইট

5 বাইট অফ ধন্যবাদ @ ইটিআর প্রডাকশনগুলি2 3 11 !! বাইটস অফ ধন্যবাদ @ নোটাটচর্লস

f=(i,a,m=0)=>/[^01]/.test(i+=a[m++%10])?f(i,a,m):m/2

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


হ্যাঁ, আপনি আমাকে এটি মারধর।
সুপারজেডি ২৪

চান (i+=a[++m%10])কাজ করে?
ETH প্রোডাকশন

@ETHproductions। ভাল একটা!! আমি ভুলে গিয়েছিলাম এটি সর্বদা 10
সরানো

কেন 0.5 হিসাবে আর আরম্ভ করা হয় না? অথবা আরম্ভ rবা যা mকিছু নয় (তাদের শূন্য হওয়া উচিত, যেমন, 0)
চার্লস

1
আপনি m=0মডিউল ( m++%10) এর পরে ইনিশিয়ালায়ার এবং ইনক্রিমেন্ট তৈরি করে একটি বাইটও সংরক্ষণ করতে পারেন ... যে মুহুর্তে আপনি কেবল rপুরোপুরি ড্রপ করতে পারেন । পুরো পদ্ধতিটি তখন নিম্ন 50 এর দশকে
চার্লস

5

এমএটিএল , 29 26 25 বাইট

`tvyyYs+V50<!A~]xx1Mf1)2/

ইনপুট ফর্ম্যাট হয়

[27; 27; 27; 27; 27; 27; 27; 27; 27; 27]
101101

সম্পাদনা (10 জুন, 2016): নিম্নলিখিত লিঙ্কটি ভাষা পরিবর্তনের সাথে মানিয়ে নিতে ( 26 বাইট ) vদ্বারা প্রতিস্থাপিত হয়েছে&v

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

`              ]           % do---while loop. Exit loop when top of stack is falsy
 t                         % duplicate. Takes first input (array) first time
  v                        % concat vertically (doubles length of array)
   yy                      % copy top two. Takes second input (todasy's value) first time
     Ys                    % cumulative sum of (repeated) miles each way
       +                   % add to today's value
        V                  % convert each number to a string
         50<!A             % true for strings than only contain '01 ' (ASCII less than 50)
              ~            % negate. This is the loop condition
                xx         % delete stack contents
                  1M       % push again array that tells which strings only contain '01 '
                    f1)    % pick index of first true entry
                       2/  % divide by 2

3

লুয়া, 108 বাইট

প্রথমবার একটি কোডগল্ফে পুনরাবৃত্তি..অনটি লুপ ব্যবহার করুন!

function f(o,t)i=0repeat i,o=i+1,(o+t[i%#t+1]).."."o=o:sub(1,o:find("%.")-1)until tonumber(o,2)print(i/2)end

Ungolfed

function f(o,t)               -- o can either be a number or a string, t is a table
                              -- call it like f(2,{27,14,5...})
  i=0                         -- initialise the travel count
  repeat                      -- proceed like a do..while in C
    i,o=i+1,(o+t[i%#t+1]).."."-- increment i, and add t[i] to the odometer
    o=o:sub(1,o:find("%.")-1) -- remove the decimal part of the odometer
  until tonumber(o,2)         -- tries to convert o from binary to decimal
                              -- return nil (and repeat the loop) if it can't
  print(i/2)                  -- print i/2 which is the number of days for i travels
end

প্রথম লুপের পরে, oদশমিক একটি অংশ থাকবে কারণ এটি tonumberআমাকে সরিয়ে ফেলতে হয়েছিল ... এবং প্রথম কেসটি যুক্ত করার জন্য, আমি এটিকে এটি দিয়ে যুক্ত করছি "."


3

জাভা, 112 মাইল বাইট

float c(int r,int[]d){float y=0;for(int i=0;;i%=d.length){y+=.5;r+=d[i++];if((""+r).matches("[01]+"))return y;}}

3

05 এ বি 1 ই , 31 বাইট

কোড:

0IE\[²vs>sy+D§'aT«-""Qi\2/?}Ž}Ž

একরকম, কোডটি চলমান থামবে না (এবং আমি কেন তা বুঝতে পারি না) । স্পষ্টতই আমি ভুলে গিয়েছিলাম যে ২ এর পরিবর্তে তিনটি লুপ চলছে So সুতরাং এটি এখনও একটি অসীম লুপে প্রবেশ করবে ...

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


3

পাওয়ারশেল, 84 73 67 59 57 বাইট

param($a,$b)do{$a+=$b[$i++%10]}until(!+($a-replace1))$i/2

ইনপুট নেয় $aএবং $b, $bমাইলেজের একটি সুস্পষ্ট অ্যারে (যেমন, .\binary-car.ps1 1 @(13,25,3,4,10,8,92,3,3,100)) আশা করে। তারপরে আমরা একটি do/ untilলুপ প্রবেশ করি । প্রতিটি পুনরাবৃত্তি, আমরা $aমাইলেজটি $bপজিশনে বৃদ্ধি করি $i++ % 10যাতে আমরা ক্রমাগত অ্যারের মধ্য দিয়ে লুপ করি। এটি শূন্য থেকে শুরু হবে যেহেতু প্রথম লুপটির জন্য $iপ্রারম্ভিক নয়, এবং তাই এর $nullপরিমাপ হয় যা 0এই প্রসঙ্গে সমান হয় , এবং এর মূল্যায়ণের পরেই এটি ++ঘটে।

তারপরে, untilবিবৃতিটি পরীক্ষা করে দেখেছে যে আমাদের সংখ্যাটি কেবল 0এবং কোনও কিছু না রেখে 1প্রথমে সেই -replaceমানটিকে 1পূর্ণসংখ্যার সাথে কাস্ট করে +এবং তারপরে বুলিয়ান-না দিয়ে নেওয়া হয় !। যদি এটি সত্য মূল্যায়ণ করে তবে আমরা লুপ, আউটপুট $i / 2এবং প্রোগ্রামটি শেষ করব ।

লুপের শর্তসাপেক্ষে ব্যাখ্যা - পাওয়ারশেলের ক্ষেত্রে যে কোনও শূণ্য পূর্ণসংখ্যা হয় $trueএবং কোনও খালি ফাঁকা স্ট্রিংও হয় $true। উদাহরণস্বরূপ, 231145(একটি পূর্ণসংখ্যা) এর পরিবর্তন করতে হবে "2345"(ক STRING) পর -replace, যা পূর্ণসংখ্যা ঢালাই যেমন হবে 2345(একটি পূর্ণসংখ্যা), !যা হল $false। যাইহোক, 101101(একটি পূর্ণসংখ্যা) এর পরিবর্তন করতে হবে "00"(ক STRING) যা নিক্ষেপ করা হবে 0(একটি পূর্ণসংখ্যা), !যা হল $true। আমরা আছে না করে থাকেন তাহলে +, "00"ইচ্ছা !করতে $falseযেহেতু এটি একটি খালি স্ট্রিং এর।

সম্পাদনা - জন্য কঠোরভাবে-জিরো সমতা অন-দৈর্ঘ্যের সোয়াপিং দ্বারা সংরক্ষিত 11 বাইট
নিরূপক যে সংরক্ষিত অন্য 6 বাইট - সম্পাদনা 2 $b.countসবসময় হতে হবে 10...
/ Do ব্যবহার করে সংরক্ষিত আরেকটি 8 বাইট পর্যন্ত পরিবর্তে জন্য - 3 সম্পাদনা
সম্পাদনা 4 - যদি অবজেক্টটি -replaceডি হচ্ছে একটি পূর্ণসংখ্যা মান হয় তবে অন্য 2 বাইট সংরক্ষণ করে উদ্ধৃতিগুলির প্রয়োজন হবে না


2

রুবি, 58

বিশেষ কিছু না. শুধু একটি চক্র ...

->s,a,i=0{a.cycle{|e|i+=0.5;break i if/[2-9]/!~'%d'%s+=e}}

কীভাবে চালাবেন?
বগল

1
@ বোগল এটি ল্যাম্বডা - বর্গ বন্ধনীগুলিতে পরমগুলি যুক্ত করা সবচেয়ে সহজ উপায়। অথবা আপনি ল্যাম্বডাকে একটি ভেরিয়েবলের জন্য বরাদ্দ করতে পারেন এবং আবার স্কোয়ার বন্ধনীগুলিতে প্যারাম যুক্ত করতে পারেন। উদাহরণস্বরূপ, ->s,a,i=0{a.cycle{|e|i+=0.5;break i if/[2-9]/!~'%d'%s+=e}}[1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100]]বা ...f=->s,a,i=0{a.cycle{|e|i+=0.5;break i if/[2-9]/!~'%d'%s+=e}}; f[1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100]]
চার্লস

1

গণিত, 92 বাইট

(y=1;x=#+#2[[1]];While[!StringMatchQ[ToString@x,{"0","1"}..],x+=#2[[y++~Mod~10+1]]];N@y/2)&

হাঁ। ইনপুটটি ওডোমিটার এবং সময়ের তালিকা। আউটপুট দিন গণনা।


1

পিএইচপি, 102 98

function f($i,$s){while(1)foreach($s as$v){$d+=.5;$i+=$v;if(preg_match('/^[01]+$/',$i))return$d;}}

অবহেলিত সংস্করণ

function f($i,$s) {
    $d = 0;
    while(true) {
        foreach($s as $v) {
            $d += 0.5;
            $i+=$v;
            if(preg_match('/^[0|1]+$/', $i)) {
                return $d;
            }
        }
    }
}

পিএইচপি বিজ্ঞপ্তিগুলি $d = 0;গল্ফ সংস্করণে 4 টি অক্ষরের অতিরিক্ত ব্যয় সরানো যেতে পারে ।

উদাহরণ

$i = 101101;
$s = [27, 27, 27, 27, 27, 27, 27, 27, 27, 27];
f($i,$s);

চারপাশে কোঁকড়ানো ধনুর্বন্ধনী বন্ধনীর ifঅপসারণ, 0 থেকে 0.5অপসারণ |এবং আপনার রেজেক্সে 1 এবং 0 এর মধ্যে সরিয়ে ফেলা আপনাকে 4 বাইট সংরক্ষণ করে। function f($i,$s){while(1)foreach($s as$v){$d+=.5;$i+=$v;if(preg_match('/^[01]+$/',$i))return$d;}}
সামস্যাঙ্কাঞ্চ

@ স্যামস্কোঞ্চ, ভাল পরামর্শ, বন্ধনী এবং 0 এর আগে .5 স্পষ্টভাবে আমি মিস করেছি। এখন বদলে গেছে।
কুলদীপ.কম্বুজ

1

পাইথ, 36 32 30 বাইট

Jvz.V0=J+J@QbI<ssM{`J2KbB;chK2

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

ব্যাখ্যা

Jvz.V0=J+J@QbI <ssM {`J2KbB; chK2 # Q = ইনপুট ক্রম

জেভিজেড # জেতে শুরুর মান নির্ধারণ করে
   .V0 # 0 থেকে শুরু করে খ-এর উপর দিয়ে অসীম লুপটি শুরু করুন
      = জে # সেট জে
        + জে # জে এর যোগফল
          @ কিউবি # এবং কিউ [b% লেন (q)] এর মান
             আমি # যদি
              <2 # 2 এর চেয়ে কম
                  `` জে # জে থেকে নকল অঙ্কগুলি সরান 
               এসএসএম # মানচিত্রগুলি পুনরায় মানগুলি অঙ্ক করে পূর্ণসংখ্যায় ফিরে আসে এবং তাদের যোগফল দেয়
                      উপরেরটি সত্য হিসাবে প্রমাণিত হলে কেবিবি # কেতে কে সংরক্ষণ করুন এবং লুপটি ছেড়ে দিন
                         ; # শেষ লুপ বডি
                           এইচ কে # বর্ধমান কে কারণ আমরা একটি লুপের বৃদ্ধি মিস করেছি
                          সি 2 # এবং দিনগুলি পেতে এটি 2 দিয়ে ভাগ করুন


0

সি শার্প, 180।

প্রিয় প্রভু সি # দীর্ঘ।

using System.Text.RegularExpressions;class a{double c(int a,int[]b){var d=0.5;a+=b[0];var i=1;while(!Regex.IsMatch(a.ToString(),"^[01]+$")){a+=b[i];i+=1;i=i%10;d+=0.5;}return d;}}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.