একটি ট্রেন একটি লেবেলযুক্ত ব্রিজটি অতিক্রম করে


9

ধনাত্মক পূর্ণসংখ্যার অঙ্কের সংখ্যার সাথে লেবেলযুক্ত টাইলগুলির দ্বারা গঠিত দৈর্ঘ্যের বি এর একটি সেতু বিবেচনা করুন । উদাহরণস্বরূপ, বি যদি 41 হয়, তবে এটির মতো দেখতে হবে:

-----------------------------------------
12345678910111213141516171819202122232425

এখন দৈর্ঘ্যের একটি ট্রেন কল্পনা টি সেতু পারাপারের। ট্রেনের বামতম পয়েন্টটি X (1-ইনডেক্সড) অবস্থান থেকে শুরু হয় । সমস্যার আরও ভাল ধারণা পেতে, আসুন বি = 41, টি = 10, এক্স = 10 দিয়ে ইভেন্টটির একটি স্কিম তৈরি করি । ট্রেনটি সমান চিহ্ন ( =) এবং লাইন ব্যবহার করে আঁকা :

         __________
         | ======== |
         | ======== |
-----------------------------------------
12345678910111213141516171819202122232425

ট্রেনটি প্রতিটি ধাপে, এটিতে অবস্থিত অনন্য টাইলসের যোগফলের মাধ্যমে অগ্রসর হতে পারে। উদাহরণস্বরূপ, উপরে ট্রেনগুলি যে টাইলগুলি দাঁড়িয়ে আছে [1, 0, 1, 1, 1, 2, 1, 3, 1, 4]সেগুলি [1, 0, 2, 3, 4]হ'ল :, অনন্য (অনুলিপি করা) টাইলগুলি হ'ল : এবং তাদের যোগফল 10। অতএব, ট্রেনটি 10টাইলস দিয়ে অগ্রসর হতে পারে । আমাদের আবার এটি আঁকতে হবে এবং ট্রেনের বাম দিকের পয়েন্টটি শেষ টাইলটি না পারা পর্যন্ত প্রক্রিয়াটি পুনরাবৃত্তি করা উচিত:

                   __________
                   | ======== |
                   | ======== |
-----------------------------------------
12345678910111213141516171819202122232425

অনন্য টাইলসের যোগফল: 1 + 5 + 6 + 7 + 8 + 9 = 36. ট্রেনটি 36 টাইল দিয়ে অগ্রসর হয় ...

                                                       __________
                                                       | ======== |
                                                       | ======== |
-----------------------------------------
12345678910111213141516171819202122232425

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

যেহেতু অভ্যন্তরীণ মানুষগুলি বিরক্ত, তাই তারা ট্রেনগুলি প্রতিটি সময়ই এগিয়েছে বলে গণনা করে। এই নির্দিষ্ট ক্ষেত্রে, 10এবং 36। সবকিছু সংক্ষেপে, ট্রেনটি 46সেতুর পাশ দিয়ে যাওয়ার আগে চলে গেছে।


কার্য

তিনটি ধনাত্মক পূর্ণসংখ্যা, বি (সেতুর দৈর্ঘ্য), টি (ট্রেনের দৈর্ঘ্য) এবং এক্স (প্রারম্ভিক অবস্থান, 1-সূচিকৃত ) দেওয়া আপনার কাজটি নিয়ম অনুসরণ করে ব্রিজটি অতিক্রম না করা অবধি ট্রেন কত টাইল সরে গেছে তা নির্ধারণ করা উপরে।

  • আপনি ধরে নিতে পারেন:
    • বি টি এর চেয়ে বেশি ।
    • এক্স বি এর চেয়ে কম ।
    • টি কমপক্ষে 2
    • ট্রেন অবশেষে ব্রিজটি অতিক্রম করে।
  • আমাদের সমস্ত মানক বিধি প্রযোজ্য।
  • এই , তাই বাইটস মধ্যে সংক্ষিপ্ত কোড!

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

ইনপুট ([বি, টি, এক্স]) -> আউটপুট

[41, 10, 10] -> 46
[40, 10, 10] -> 46
[30, 4, 16] -> 24
[50, 6, 11] -> 50

সর্বশেষ পরীক্ষার মামলার আরেকটি কাজের উদাহরণ:

ব্রিজটির দৈর্ঘ্য 50, ট্রেন 6 এবং প্রারম্ভিক অবস্থান 11।

          ______
          | ==== |
          | ==== |
--------------------------------------------------
12345678910111213141516171819202122232425262728293

স্বতন্ত্র টাইলস: [0, 1, 2] যোগফল: 3।

             ______
             | ==== |
             | ==== |
--------------------------------------------------
12345678910111213141516171819202122232425262728293

স্বতন্ত্র টাইলস: [1, 2, 3, 4]। যোগফল: 10।

                       ______
                       | ==== |
                       | ==== |
--------------------------------------------------
12345678910111213141516171819202122232425262728293

স্বতন্ত্র টাইলস: [1, 7, 8, 9]। যোগফল: 25।

                                                ______
                                                | ==== |
                                                | ==== |
--------------------------------------------------
12345678910111213141516171819202122232425262728293

স্বতন্ত্র টাইলস: [9, 3]। যোগফল: 12
                                                            ______
                                                            | ==== |
                                                            | ==== |
--------------------------------------------------
12345678910111213141516171819202122232425262728293

ট্রেনটি ব্রিজের উপস্থিতি রয়েছে। মোট যোগফল: 3 + 10 + 25 + 12 = 50।

6
আমরা ট্রেন অনুমান করতে পারেন না অবশেষে সেতু পার? ইনপুটগুলির মতো (200, 2, 169), ট্রেনটি আটকে 00যায় …9899100101102…
লিন

@ লিন একটু দেরি করেছেন, হ্যাঁ, আপনি পারেন।
মিঃ এক্সকোডার

উত্তর:


3

হুশ , 20 বাইট

ṁ←U¡S↓←moΣuX_⁰↓Θ↑ṁdN

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

টি , বি , এক্স ক্রমে তিনটি আর্গুমেন্ট নেয় ।

ব্যাখ্যা

ṁ←U¡S↓←moΣuX_⁰↓Θ↑ṁdN
                 ṁdN    Build the list of digits of natural numbers
              ↓Θ↑       Take the first B digits, add a 0 in front
                        then drop the first X digits
           X_⁰          Get all sublists of length T
       moΣu             Map the sum of unique values of each sublist

   ¡S↓←                 Repeatedly drop as many elements from the start of the list as the
                        first element of the list says;
                        keep all partial results in an infinite list.

  U                     Take elements until the first repeated one
                        (drops tail of infinite empty lists)

ṁ←                      Sum the first elements of each remaining sublist

6

পাইথন 2 , 110 105 104 103 100 97 96 বাইট

  • মিঃ এক্সকোডারকে পাঁচটি বাইট সংরক্ষণ করে ; অপ্রয়োজনীয় অ্যাসাইনমেন্ট সরানো, অবহেলা উপলব্ধ হোয়াইট স্পেসে সরানো।
  • মিঃ এক্সকোডারকে একটি বাইট ধন্যবাদ সংরক্ষণ করা ; golfed [~-x:x+~-t]করতে [~-x:][:t]
  • একটি বাইট সংরক্ষণ করা; golfed ...range(1,-~b)))[:b]করতে ...range(b)))[1:-~b]
  • তিনটি বাইট সংরক্ষণ করা; golfed [1:-~b][~-x:]করতে [:-~b][x:]
  • তিনটি বাইট সংরক্ষণ করা; golfed [:-~b][x:]করতে [x:-~b]
  • লিনকে একটি বাইট ধন্যবাদ সংরক্ষণ করা ; whileএকটি execবিবৃতি লুপ গল্ফিং ।
b,t,x=input();S=x;exec"x+=sum(set(map(int,''.join(map(str,range(b)))[x:-~b][:t])));"*b;print-S+x

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


একটি বিকল্প 105 বাইট দীর্ঘ সমাধান।
জোনাথন ফ্রেচ

104 বাইট[~-x:x+~-t]প্রতিস্থাপন করা যেতে পারে[x-1:][:t]
মিস্টার এক্সকোডার

exec"x+=sum(set(map(int,''.join(map(str,range(b)))[x:-~b][:t])));"*b96. জন্য কাজ (ট্রেন কখনোই বেশি লাগবে bপদক্ষেপ সেতু ত্যাগ করার, এবং যে পুরো অপারেশন পরিমাণ হবে x+=0বহুবার একবার এটি বাম।)
লিন

4

হাস্কেল, 106 102 বাইট

import Data.List
(b#t)x|x>b=0|y<-sum[read[c]|c<-nub$take t$drop(x-1)$take b$show=<<[1..]]=y+(b#t)(x+y)

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

(b#t)x
   |x>b=0                 -- if the train has left the bridge, return 0
   |y<-sum[   ]           -- else let y be the sum of
      read[c]|c<-         -- the digits c where c comes from
        nub               -- the uniquified list of
            show=<<[1..]] -- starting with the digits of all integers concatenated
          take b          -- taking b digits (length of bridge)
         drop(x-1)        -- dropping the part before the train
        take t            -- take the digits under the train
     =y+(b#t)(x+y)        -- return y plus a recursive call with the train advanced

3

আর , 123 বাইট

function(B,T,X){s=substring
while(X<B){F=F+(S=sum(unique(strtoi(s(s(paste(1:B,collapse=''),1,B),K<-X+1:T-1,K)))))
X=X+S}
F}

কেবল বর্ণিত অ্যালগরিদম প্রয়োগ করে।

স্ট্রিংগুলিতে আর বেশ ভয়ঙ্কর।

function(B,T,X){
 s <- substring                         # alias
 b <- s(paste(1:B,collapse=''),1,B)     # bridge characters
 while(X<B){                            # until we crossed the bridge
  K <- X+1:T-1                          # indices of the characters
  S <- s(b,K,K)                         # the characters from b
  S <- sum(unique(strtoi(S)))           # sum
  F <- F + S                            # F defaults to 0 at the beginning
  X <- X + S                            # advance the train
 }
 F                                      # number of steps, returned
}

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


2

জেলি ,  22  21 বাইট

ḣ⁵QS
RDẎḣ⁸ṫṫÇ‘$$ÐĿÇ€S

তিনটি আর্গুমেন্ট গ্রহণ করে একটি সম্পূর্ণ প্রোগ্রাম - ক্রমটি হল বি , এক্স , টি - যা ফলাফলটি মুদ্রণ করে।

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

কিভাবে?

ḣ⁵QS - Link 1, calculate next jump: list of digits, bridge under and beyond train's left
 ⁵   - program's fifth command line argument (3rd input) = T (train length)
ḣ    - head to index (get the digits of the tiles under the train)
  Q  - de-duplicate
   S - sum

RDẎḣ⁸ṫṫÇ‘$$ÐĿÇ€S - Main link: number, B (bridge length); number, X (starting position)
R                - range(B) = [1,2,3,...,B-1,B]
 D               - to decimal list (vectorises) = [[1],[2],[3],...,[digits of B-1],[digits of B]]
  Ẏ              - tighten (flatten by one) = [1,2,3,...,digits of B-1,digits of B]
    ⁸            - chain's left argument, B
   ḣ             - head to index (truncate to only the bridge's digits)
     ṫ           - tail from index (implicit X) (truncate from the train's left)
           ÐĿ    - loop, collecting results, until no more change occurs:
          $      -   last two links as a monad:
         $       -     last two links as a monad:
       Ç         -       call last link (1) as a monad (get next jump)
        ‘        -       increment
      ṫ          -     tail from that index (remove the track to the left after train jumps)
             Ç€  - call last link (1) as a monad for €ach (gets the jump sizes taken again)
               S - sum
                 - implicit print

1

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

f=(B,T,X,g=b=>b?g(b-1)+b:'',o=0)=>X<B?[...g(B).substr(X-1,T)].map((e,i,a)=>o+=i+X>B|a[-e]?0:a[-e]=+e)&&o+f(B,T,X+o):0

পুনরাবৃত্ত ফাংশনগুলির একটি জোড়া:

  1. f() ট্রেনের চলাফেরার পরিমাণ
  2. g() সংখ্যার স্ট্রিং তৈরি করে।

কম গল্ফড:

f=
(B,T,X,
 g=b=>b?g(b-1)+b:'',                       //creates the string of numbers
 o=0                                       //sum of tiles the train sits on
)=>
  X<B?                                     //if we're not past the bridge:
      [...g(B).substr(X - 1,T)].map(       //  grab the tiles we're sitting on
        (e,i,a)=>o += i + X > B |          //  if we've passed the bridge,
                      a[-e] ? 0 :          //  ... or we've seen this tile before, add 0 to o
                              a[-e] = +e   //  else store this tile and add its value to o
      ) &&
      o + f(B,T,X+o) :                     //recurse
  0


0

পিএইচপি> = 7.1, 153 বাইট

<?$s=substr;[,$p,$q,$r]=$argv;while($i<$p)$a.=++$i;$a=$s($a,0,$p);;while($r<$p){$x+=$n=array_sum(array_unique(str_split($s($a,$r-1,$q))));$r+=$n;}echo$x;

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

এটি পিএইচপি নিচের সংস্করণ পরিবর্তনের সঙ্গে সামঞ্জস্যপূর্ণ করতে [,$p,$q,$r]=করতে list(,$p,$q,$r)=(+4 বাইট)।

<?
[,$bridgelen,$trainlen,$position] = $argv;                  // grab input
while($i<$bridgelen)                                        // until the bridge is long enough...
  $bridgestr .= ++$i;                                       // add to the bridge
$bridgestr = substr($bridgestr,0,$bridgelen);               // cut the bridge down to size (if it splits mid-number)
while($position<$bridgelen){                                // while we are still on the bridge...
  $currtiles =                                              // set current tiles crossed to the...
    array_sum(                                              // sum of tiles...
      array_unique(                                         // uniquely...
        str_split(substr($bridgestr,$position-1,$trainlen)) // under the train
      )
    )
  ;
  $totaltiles += $currtiles;                                // increment total tiles crossed
  $position += $currtiles;                                  // set new position
}
echo $totaltiles;                                           // echo total tiles crossed
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.