কখন আলো জ্বলবে?


10

ভাবুন আপনার দুটি বাতি আছে। এই লাইটগুলি একটি নির্দিষ্ট হারে জ্বলজ্বল করে এবং বন্ধ করে দেয়:

Light 0: Delay 0ms and then blink every 1000ms
Light 1: Delay 500ms and then blink every 1000ms

প্রথম 2000 মিমের জন্য এই আলোগুলি অনুকরণ করুন:

0ms:    Light 0 on
500ms:  Light 1 on
1000ms: Light 0 off
1500ms: Light 1 off
2000ms: Light 0 on

চ্যালেঞ্জ

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

ইনপুট

ইনপুটটি নিম্নলিখিত ফর্ম্যাটে হওয়া উচিত:

TimeToSimulate
Light0Delay,Light0Period
Light1Delay,Light1Period
...

এই বিন্যাসে, উপরের উদাহরণটি হ'ল:

2000
0,1000
500,1000

আউটপুট

আউটপুটটি অর্ডার করা ট্রিপলগুলির একটি সিরিজ হওয়া উচিত:

Time,LightNum,LightStatus

লাইটস্ট্যাটাস হ'ল একটি সত্যবাদী মান এবং যদি আলো চালু হয় এবং মিথ্যা মান যদি আলো বন্ধ হয়।

উপরের উদাহরণ থেকে আউটপুট হবে:

0,0,True
500,1,True
1000,0,False
1500,1,False
2000,0,True

যদি একই সাথে দুটি লাইট জ্বলজ্বল করে তবে কম সংখ্যার আলোটি প্রথমে আউটপুট প্রদর্শিত হবে।

অন্যান্য উপাদান

  • ইনপুট এবং আউটপুট ফর্ম্যাটগুলি কঠোর নয়
  • কোড কোনও ত্রুটি তৈরি করা উচিত নয়
  • সমাধানটি জাতি শর্তের উপর নির্ভর করা উচিত নয়
  • কোনও মানক ফাঁক নেই
  • এটি , তাই সংক্ষিপ্ততম সমাধানটি জিতল!

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

Input:

2000
0,1000
500,1000

Output:

0,0,True
500,1,True
1000,0,False
1500,1,False
2000,0,True

----

Input:

2
0,1
0,1

Output:

0,0,True
0,1,True
1,0,False
1,1,False
2,0,True
2,1,True

----

Input:

500
100,50
200,100
300,150

Output:

100,0,True
150,0,False
200,0,True
200,1,True
250,0,False
300,0,True
300,1,False
300,2,True
350,0,False
400,0,True
400,1,True
450,0,False
450,2,False
500,0,True
500,1,False

----

Input:

1000
23,345
65,98
912,12
43,365

Output:

23,0,True
43,3,True
65,1,True
163,1,False
261,1,True
359,1,False
368,0,False
408,3,False
457,1,True
555,1,False
653,1,True
713,0,True
751,1,False
773,3,True
849,1,True
912,2,True
924,2,False
936,2,True
947,1,False
948,2,False
960,2,True
972,2,False
984,2,True
996,2,False

লিডারবোর্ড স্নিপেট:


কত আউটপুট যথেষ্ট?
aschepler

পছন্দ করেছেন ইনপুটটি "অনুকরণ" করার জন্য সময়ের পরিমাণ নির্দিষ্ট করে
ড্যানিয়েল এম

উত্তর:


3

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

a=>b=>[...Array(a+1)].map((_,i)=>b.map((d,j)=>d[0]--||c.push([i,j,d[d[0]=d[1]-1,2]^=1])),c=[])&&c

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

সংরক্ষিত করার জন্য একটি বাইট ধন্যবাদ রোমশ - ব্যবহারের ইনপুট সিনট্যাক্স সংবাহন।


সংবাহন সঙ্গে একটি বাইট সংরক্ষণ করুন: a=>b=>
শেগি

@Shaggy। আপনি খুব দ্রুত, আমি একটি সম্পাদনা প্রস্তুত ছিল।

থাম্বের বিধি: 2 টি ইনপুট থাকলে সর্বদা তরকারি!
শেগি


2

জেলি ,  26  25 বাইট

Ḣrm⁸ð€µ;€€"J;"J$€€ẎẎḂ0¦€Ṣ

একটি ডায়াডিক লিঙ্ক delay, periodনম্বর-তালিকার একটি তালিকা এবং একটি সময়-ফ্রেম নম্বর নিয়ে এবং time, light, actionপূর্ণসংখ্যার একটি তালিকা ফেরত দেয় ।

লাইটগুলি 1-ইনডেক্সড হয় এবং 0'অফ' ক্রিয়াকে প্রতিনিধিত্ব করে, যখন1 উপস্থাপন করে 'অন' ক্রিয়াকে উপস্থাপন করে।

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

কিভাবে?

Ḣrm⁸ð€µ;€€"J;"J$€€ẎẎḂ0¦€Ṣ - Link: [[delay, period],...], time-frame 
    ð€                    - for €ach [delay, period]:
Ḣ                         -   head (get the delay and modify the item to [period])
 r                        -   inclusive range to time-frame = [delay,delay+1,...,time-frame]
   ⁸                      -   chain's left argument = [period]
  m                       -   modulo slice = [delay, delay+period, delay+2*period, ...]
      µ                   - monadic chain separation, call that v
           J              - range(length(v)) = [1,2,...,nLights]
          "               - zip with:
       ;€€                -   concatenate for €ach for €ach (add light indexes to times)
               $€€        - last two links as a monad for €ach for €ach:
              J           -   range (length(switch-times-for-a-light))
             "            -   zip with:
            ;             -     concatenation (i.e. append a 1-based index)
                  ẎẎ      - tighten & tighten again (flatten by 2 to a list of triples)
                      |€  - sparse application of (for €ach):
                     0    - ...to indexes: 0 (=last entry)
                    Ḃ     - ...action: modulo by 2 (even appended indexes ->0s; odds -> 1s)
                        Ṣ - sort the resulting list of triples

2

পাইথন 2 , 206 214 বাইট

  • বিধি মেনে চলার জন্য আটটি বাইট যুক্ত করা হয়েছে (স্টিডিনের মাধ্যমে ইনপুট নেওয়া)।
Q=input();D,T=Q[0],[map(int,q.split(","))for q in Q[1:]];O,l=[],len(T)
for j in range(l):
	t,b=T[j][0],9>8
	while t<=int(D):O+="%0*d,%0*d,%s"%(len(D),t,len(str(l)),j,b),;b=not b;t+=T[j][1]
print"\n".join(sorted(O))

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

এই কোডটি প্রতিটি আলোর স্যুইচিংয়ের সময়গুলিকে প্যাড করে এবং আলো শনাক্তকারীকে সমন্বিত একটি তালিকা তৈরি করে, তালিকাটি সাজায় এবং আউটপুট করে।


স্ট্যান্ডার্ড নিয়ম অনুসারে আপনাকে অবশ্যই ইনপুট নিতে হবে আপনি এটি কোনও চলকতে প্রাক-অস্তিত্বের প্রত্যাশা করতে পারবেন না। আপনি সম্ভবত পাবেন যে ব্যবহার input()আপনি তারা বাইট-গণনা অত্যন্ত কেটে অনুমতি দেবে (কোন স্ট্রিং পার্সিং প্রয়োজনীয় হবে যেহেতু পাইথন 2 এর input()হয় eval(raw_input())) :)।
জোনাথন অ্যালান

... এছাড়াও যদি আপনি স্ট্রিংয়ের পরিবর্তে সংখ্যাগুলি Oসাজান বাছাই করেন তবে এটি সম্ভবত বাইট
জোনাথন অ্যালান

@ জোনাথান অ্যালান বিধি বিযুক্তি লক্ষ্য করার জন্য ধন্যবাদ; পাইথন 2 উত্তর এখনই উল্লেখযোগ্যভাবে সংক্ষিপ্ত থাকায় আমি আপনার পরামর্শগুলিকে অন্তর্ভুক্ত করব না।
জোনাথন ফ্রেচ


1

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

import Data.List
t!l=sort$(zip[0..]l)>>=takeWhile(\(a,_,_)->a<=t).(\(i,(d,w))->iterate(\(t,i,s)->(t+w,i,not s))(d,i,2>1))

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

এই প্রোগ্রামটি থেকে আমি শুরু করেছি:

import Data.List

type LightId = Int
type Time = Int
type State = Bool
type LightEvent = (Time, LightId, State)

lightSimulation :: Time -> Time -> [(Time, State)]
lightSimulation delay interval = iterate step (delay, True)
  where step (time, state) = (time+interval, not state)

addId :: LightId -> (Time, State) -> LightEvent
addId id (t, s) = (t, id, s)

simulate :: Time -> [(Time, Time)] -> [LightEvent]
simulate timeLimit lights = sort $ concatMap lightSim (zip [0..] lights)
  where withinTimeLimit = ((<=timeLimit) . fst)
        lightSims (id, (delay, interval)) = map (addId id) $ takeWhile withinTimeLimit (lightSimulation delay interval)

এবং চূড়ান্ত গল্ফ করার আগে আমি এটিকে ছোট করে রেখেছি:

import Data.List

light (id,(delay,interval)) = iterate step (delay, id, True)
  where step (time, id, state) = (time+interval, id, not state)

simulate timeLimit lights = sort $ concatMap lightSims (zip [0..] lights)
  where lightSims l = takeWhile(\(a,b,c)->a<=timeLimit)$light l

1

রাদা , 105 87 85 বাইট

{|t|enum|[([_+_]*(t-_1[0]+1))()|enum|(_+_)]|{[[_+_4,_3,_4//_2%2=0]]if[_4%_2=0]}|sort}

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

ব্যাখ্যা:

{|t| /* Declare a lambda with one parameter */
/* The input stream contains arrays */
enum| /* For each array in the input, push an ascending number after it */
/* [1] (for stream content in this point, see below) */
[ /* For each array-number pair in the stream: */
    (
        [_+_] /* Create a copy of the array with the number as the last element */
        *(t-_1[0]+1) /* Create copies of the array for every ms simulated */
    )()| /* Push all copies to the stream */
    enum| /* After each copy, push an ascending number to the stream */
    (_+_) /* Append the number to each array before */
]|
/* [2] (for stream content in this point, see below) */
{
    /* Push an on or off event to the stream: */
    [[
        _+_4,      /* delay + time = actual time */
        _3,        /* light-id */
        _4//_2%2=0 /* does the light go on or off? */
    ]] 
    if[_4%_2=0] /* if the light goes on or off (time%period=0) */
}|
/* [3] (for stream content in this point, see below) */
sort /* Sort the events */
}

স্ট্রিমটিতে [1]নিম্নলিখিত ক্রমে পয়েন্টের মান রয়েছে :

[delay, period], light-id
 _1[0]  _1[1]    _2

স্ট্রিমটিতে [2]নিম্নলিখিত ক্রমে পয়েন্টের মান রয়েছে :

delay, period, light-id, time
_1     _2      _3        _4

স্ট্রিমটিতে [3]নিম্নোক্ত কাঠামোর সাথে বিন্দু অ্যারে রয়েছে :

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