আমার সময় পরিচালনা করতে আমাকে সহায়তা করুন


15

আমাকে সম্প্রতি নতুন বছরের দ্বারা একটি পুরো পদার্থবিজ্ঞানের পাঠ্যপুস্তকটি পড়তে বলা হয়েছে (সত্য গল্প, দুর্ভাগ্যক্রমে)। প্রতিদিন কোন অধ্যায়গুলি পড়তে হবে তা নির্ধারণ করতে আমার আপনার সহায়তা দরকার। এটা কি সেই জাইগা যেখানে তুমি এসেছিলে।

ইনপুট

  • দুটি তারিখ, যে কোনও বিন্যাসে। দ্বিতীয় তারিখ সর্বদা প্রথমের চেয়ে পরে হবে।
  • অধ্যায় সংখ্যার একটি তালিকা। এই কমা-বিচ্ছিন্ন তালিকায় একক অধ্যায় ( 12) বা অন্তর্ভুক্ত ব্যাপ্তি ( 1-3) থাকতে পারে । যাত্রা। 1-3,5,6,10-13
  • Monday -> Moশিডিউল থেকে বাদ দেওয়ার জন্য সপ্তাহের দিনগুলির একটি তালিকা (নামের প্রথম দুটি অক্ষর দ্বারা প্রতিনিধিত্ব করা )। যাত্রা। Mo,Tu,Fr

আউটপুট

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

উদাহরণ:

ইনপুট: 9/17/2015 9/27/2015 1-15 Tu

আউটপুট:

9/17/2015: 1 2
9/18/2015: 3 4
9/19/2015: 5 6
9/20/2015: 7 8
9/21/2015: 9 10
9/23/2015: 11
9/24/2015: 12
9/25/2015: 13
9/26/2015: 14
9/27/2015: 15

উদাহরণের ইনপুটটি `9/17/2015 9/27/2015 1-15 Tu 'হওয়া উচিত কারণ 9/22 মঙ্গলবার।
ডেভিডসি

@ ডেভিডক্যারাহার আপনি ঠিক বলেছেন, যখন আমি সেই নমুনা ইনপুটটি তৈরি করেছি আমি কোনও কারণে নভেম্বরের কথা ভাবছিলাম।
গ্যামারকর্পস

7
এটি যদি আমার হয় তবে শেষ তারিখের সমস্ত অধ্যায় থাকত :)
মিকিটি

@ মিকিটি এই চ্যালেঞ্জের জন্য যথাযথভাবে আমার অনুপ্রেরণা।
গ্যামারকম্পস

পদার্থবিদ্যা কত আশ্চর্যজনক তা আপনি শীঘ্রই আবিষ্কার করবেন। আপনি আসলে ভাগ্যবান।
Fabrizio Calderan

উত্তর:


2

পাওয়ারশেল ভি 4, 367 357 323 313 308 307 305 277 বাইট

param($a,$b,$c,$d)$e=@();$c=-split('('+($c-replace'-','..'-replace',','),(')+')'|iex|%{$_-join' '});while($a-le$b){if(-join"$($a.DayOfWeek)"[0,1]-notin$d){$e+=$a;$z++}$a=$a.AddDays(1)}$g=,0*$z;$c|%{$g[$c.IndexOf($_)%$z]++};1..$z|%{"$($e[$_-1]): "+$c[$i..($i+=$g[$_-1]-1)];$i++}

সম্পাদনা করুন - সুস্পষ্ট ইনপুট বিন্যাস ব্যবহার করে 28 বাইট গল্ফ করা হয়েছে।

ব্যাখ্যা:

param($a,$b,$c,$d)    # Parameters, takes our four inputs
$e=@()                # This is our array of valid output dates

$c=-split('('+($c-replace'-','..'-replace',','),(')+')'|iex|%{$_-join' '})
# Ridiculously complex way to turn the input chapters into an int array
# The first part changes "1,5-9,12" into a "(1),(5..9),(12)" format that
# PowerShell understands, then executes that with iex, which creates an 
# array of arrays. Then iterate through each inner array and joins them all
# together with spaces, then finally splits on spaces to create a 1D array

while($a-le$b){       # Until we reach the end day
  if(-join"$($a.DayOfWeek)"[0,1]-notin$d){
    # Not an excluded day of the week
    $e+=$a            # Add it to our list of days
    $z++              # Increment our count of total days
  }
  $a=$a.AddDays(1)    # Move to the next day in the range
}

$g=,0*$z              # Populate a new array with zeroes, same length as $e

$c|%{$g[$c.IndexOf($_)%$z]++}
# This populates $g for how many chapters we need each day

1..$z|%{"$($e[$_-1]): "+$c[$i..($i+=$g[$_-1]-1)];$i++}
# Goes through the days in $e, prints them, and slices $c based on $g

ব্যবহার

তারিখগুলি নেট নেট DateTimeফর্ম্যাটে আসবে বলে আশা করে । "এড়িয়ে যাওয়া" দিনগুলি অ্যারেতে থাকবে (পাওয়ারশেলের একটি তালিকার সমতুল্য) ects

PS C:\Tools\Scripts\golfing> .\help-me-manage-my-time.ps1 (Get-Date '9/17/2015') (Get-Date '9/27/2015') '5,1-3,6,10-13,20-27' @('Su','Tu')
09/17/2015 00:00:00: 5 1 2
09/18/2015 00:00:00: 3 6
09/19/2015 00:00:00: 10 11
09/21/2015 00:00:00: 12 13
09/23/2015 00:00:00: 20 21
09/24/2015 00:00:00: 22 23
09/25/2015 00:00:00: 24 25
09/26/2015 00:00:00: 26 27

3
এখানে অনেক ডলারের চিহ্ন রয়েছে ... এটি অবশ্যই ব্যয়বহুল! : ডি
kirbyfan64sos

@ kirbyfan64sos এখানে কেবলমাত্র 12% চরিত্রগুলি $... এটি পাওয়ারশেল গল্ফগুলির পক্ষে আসলে বেশ গড়, যা প্রায় 10% থেকে 15% বলে মনে হয় (আমার পোস্ট করা উত্তরগুলির নিজস্ব অনানুষ্ঠানিক গণনার উপর ভিত্তি করে)।
অ্যাডমবর্কবার্ক

আপনাকে আবারও :-)
উইলেম

আমার জন্য হুঁ 308 ...
উইলিয়াম

305 এ ভাল কাজ! 300 এখন :-)
উইলেম

3

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

(a,b,c,d)=>{u=0;c.split`,`.map(m=>{p=m[s]`-`;for(q=n=p[0];n<=(p[1]||q);r=++u)c+=","+n++},c="");c=c.split`,`;x=d.map(p=>"SuMoTuWeThFrSa".search(p)/2);for(g=[];a<b;a.setTime(+a+864e5))x.indexOf(a.getDay())<0&&(t=y=g.push(a+" "));return g.map(w=>w+c.slice(u-r+1,u-(r-=r/y--+.99|0)+1)).join`
`}

ব্যবহার

f(new Date("2015-09-17"),new Date("2015-09-27"),"5,1-4,6,10-13,20-27",["Su","Tu"])
=> "Thu Sep 17 2015 10:00:00 GMT+1000 (AUS Eastern Standard Time) 5,1,2
Fri Sep 18 2015 10:00:00 GMT+1000 (AUS Eastern Standard Time) 3,4,6
Sat Sep 19 2015 10:00:00 GMT+1000 (AUS Eastern Standard Time) 10,11
Mon Sep 21 2015 10:00:00 GMT+1000 (AUS Eastern Standard Time) 12,13
Wed Sep 23 2015 10:00:00 GMT+1000 (AUS Eastern Standard Time) 20,21
Thu Sep 24 2015 10:00:00 GMT+1000 (AUS Eastern Standard Time) 22,23
Fri Sep 25 2015 10:00:00 GMT+1000 (AUS Eastern Standard Time) 24,25
Sat Sep 26 2015 10:00:00 GMT+1000 (AUS Eastern Standard Time) 26,27"

ব্যাখ্যা

(a,b,c,d)=>{

  u=0;                                                 // u = total chapters
  c.split`,`.map(m=>{                                  // c = array of each chapter
    p=m[s]`-`;
    for(q=n=p[0];n<=(p[1]||q);r=++u)                   // get each chapter from ranges
      c+=","+n++
  },c="");
  c=c.split`,`;

  x=d.map(p=>"SuMoTuWeThFrSa".search(p)/2);            // x = days to skip
  for(g=[];a<b;a.setTime(+a+864e5))                    // for each day between a and b
    x.indexOf(a.getDay())<0&&                          // if this day is not skipped
      (t=y=g.push(a+" "));                             // add it to the list of days
                                                       // t = total days
                                                       // y = days remaining

  return g.map(w=>w+
    c.slice(u-r+1,u-(r-=r/y--+.99|0)+1)                // add the chapters of the day
  ).join`
`
}

2

পাইথন 2 - 338 317 308 304 300

এখানে আমরা বলটি ঘূর্ণায়মান ...

def f(a,b,c,d):
 from pandas import*;import numpy as n
 s=str.split;e=n.array([])
 for g in s(c,','):h=s(g,'-');e=n.append(e,range(int(h[0]),int(h[-1])+1))
 k=[t for t in date_range(a,b) if s('Mo Tu We Th Fr Sa Su')[t.weekday()]not in d];j=len(k);e=array_split(e,j)
 for u in range(j):print k[u],e[u]

উদাহরণ ইনপুট:

f('9/17/2015','9/27/2015','5,1-3,6,10-13,20-27',['Su','Tu'])

উদাহরণ আউটপুট:

2015-09-17 00:00:00 [ 5.  1.  2.]
2015-09-18 00:00:00 [ 3.  6.]
2015-09-19 00:00:00 [ 10.  11.]
2015-09-21 00:00:00 [ 12.  13.]
2015-09-23 00:00:00 [ 20.  21.]
2015-09-24 00:00:00 [ 22.  23.]
2015-09-25 00:00:00 [ 24.  25.]
2015-09-26 00:00:00 [ 26.  27.]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.