গণনার সময় পত্রক


14

সময় পত্রক

কাজের জায়গায় আপনাকে প্রায়শই সময় পত্রক শেষ করতে হয়। এই টাস্কটি এটিকে সাহায্য করার জন্য লিখিত কোড।

ইনপুট

কিছুটা অ-মানক 12 ঘন্টা ঘড়ির মধ্যে দু'বার সময় কোনও স্থান দ্বারা পৃথক করে দিনের শুরু এবং শেষের ইঙ্গিত দেয়। তৃতীয় সংখ্যাটি মধ্যাহ্নভোজনে নেওয়া মিনিটের সংখ্যা উপস্থাপন করে। উদাহরণ স্বরূপ

9:14 5:12 30

এর অর্থ আপনি সকাল 9:14 টায় কাজ শুরু করেছেন, সন্ধ্যা :12 টা १२ মিনিটে কাজ শেষ করেছেন এবং মধ্যাহ্নভোজনে ৩০ মিনিট সময় নিয়েছেন।

আপনি ধরে নিতে পারেন

  • প্রথম কলামে যে কোনও সময় রাত ১০ টা (মধ্যরাত) অবধি কিন্তু দুপুর ১ টা পর্যন্ত নয় এবং দ্বিতীয় কলামের যে কোনও সময় রাত ১১ টা ৫৫ মিনিট নাগাদ সর্বাগ্রে বিকাল 1 টা পর্যন্ত নয়।
  • দুপুরের খাবারের বিরতি আর কার্যদিবসের চেয়ে বেশি নয়!

ইনপুট ফর্ম্যাটটি অবশ্যই প্রদত্ত উদাহরণগুলির মতো হওয়া উচিত।

কার্য

আপনার কোডগুলিতে এই ট্রিপলগুলির একটি ফাইল (বা স্ট্যান্ডার্ড ইনপুট) পড়তে হবে এবং প্রতিটি আউটপুটের জন্য আপনি কতক্ষণ কাজ করেছেন তা পড়তে হবে। এই আউটপুটটি কয়েক ঘন্টা নির্দেশ করে। উপরের উদাহরণের জন্য এটি হ'ল:

7 ঘন্টা এবং 58 মিনিট বিয়োগ 30 মিনিট যা 7 ঘন্টা 28 মিনিট।

আউটপুট

আপনার আউটপুটে অবশ্যই ঘন্টা (মিনিট) পুরো এবং পুরো সংখ্যাটি উল্লেখ করতে হবে এবং 59 মিনিটের বেশি তালিকা তৈরি করা উচিত নয়। এটিই আপনি 2 ঘন্টা 123 মিনিট আউটপুট দিতে পারবেন না। এগুলি ছাড়াও, আপনার কোড আপনার পক্ষে সুবিধাজনক যে কোনও সহজেই মানুষের পঠন বিন্যাসে আউটপুট দিতে পারে।

উদাহরণ

10:00 1:00 30    --> 2hr 30min
12:59 1:00 0     --> 0hr 1min
00:00 11:59 0    --> 23hr 59min
10:00 2:03 123   --> 2hr 0min 

3
আমি দেখতে পাচ্ছি না কীভাবে কঠোর ইনপুট ফর্ম্যাট ( :12 ঘন্টা ঘড়ির সীমিত সময়) এই চ্যালেঞ্জটিতে কিছু যুক্ত করে।
শেগি

3
@ শেগি ইনপুট ফর্ম্যাটটি পার্স করা আমার পক্ষে কমপক্ষে চ্যালেঞ্জ ছিল, কারণ আপনি চরিত্রের অবস্থানগুলি ধরে নিতে পারবেন না যেহেতু ঘন্টাগুলি দু'একটি বা দুটি চরিত্র হতে পারে ...
রায়ান

কোডটি কি কয়েকটি লাইন পড়তে হবে? নাকি এটি এক লাইন পড়ে যথেষ্ট?
লুইস মেন্ডো

1
হ্যাঁ কোডটির একাধিক লাইন গ্রহণ করতে হবে।
আনুশ

5
@ mbomb007 আপনি ডাউনওয়েতে পারেন তবে ইনপুট ফর্ম্যাটটি পছন্দ না করা ভিটিসি-র কোনও কারণ নয়।
Okx

উত্তর:


7

1
এটা খুব চিত্তাকর্ষক!
আনুশ

আউটপুটটি এই বিন্যাসে থাকা উচিত নয় "XXhr YYmin"?
ইব্রাহিম মাহিরির

@ বিবিহিমাহমাহিরির চ্যালেঞ্জটি বলেছে যে আপনার কোড আপনার পক্ষে উপযুক্ত যে কোনও সহজেই মানবিক পাঠ্য বিন্যাসে আউটপুট
লুইস মেন্ডো

1
আহ আমি দেখি! আমি আমার উত্তরটি এটি সংক্ষিপ্ত করতে সম্পাদনা করতে যাচ্ছি। ধন্যবাদ!
ইব্রাহিম মাহরির

5

রেটিনা 0.8.2 , 83 বাইট

\d+
$*
 (1+:)
 12$*1$1
+`1:
:60$*
(1*) :\1(1*)(1*) \2
$3
:(1{60})*(1*)
$#1hr $.2min

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

\d+
$*

ইনপুটটি আনারিতে রূপান্তর করুন।

 (1+:)
 12$*1$1

থামার সময়টিতে 12 ঘন্টা যুক্ত করুন।

+`1:
:60$*

ঘন্টাটি 60 দ্বারা গুণ করুন এবং কয়েক মিনিট যুক্ত করুন।

(1*) :\1(1*)(1*) \2
$3

শুরুর সময়টি শুরু করুন এবং স্টপ সময় থেকে বিরতি দিন।

:(1{60})*(1*)
$#1hr $.2min

60 দ্বারা বিভক্ত। (আরও বিরক্তিকর আউটপুট ফর্ম্যাট জন্য 5 বাইট সংরক্ষণ করুন।)



4

পাইথন 3, 161 বাইট

আমি জানি এটি এমনকি ক্ষুদ্রতমের কাছেও হবে না তবে এটি কোনও ফাইলে পড়ে:

for l in open('t'):
    l=l[:-1].split(':')
    m=-int(l[0])*60+int(l[1][:2])+(int(l[1][3:])*60+720+int(l[2][:2])-int(l[2][2:]))
    print(f'{m//60}hr {m-(m//60*60)}min')

আমি আমার টাইমশিটটি এটি করার জন্য বিরতি দেওয়ার বিড়ম্বনা বোধ করছি ...

পাইথন 2.7, 133 বাইট

মন্তব্যে পরামর্শের জন্য ধন্যবাদ! পাইথন ২.7 এ স্যুইচ করা আরও কয়েকটি বাইট সংরক্ষণ করে কারণ এটি পূর্ণসংখ্যা বিভাগে ডিফল্ট হয়:

for l in open('t'):i,h,l=int,60,l[:-1].split(':');m=-i(l[0])*h+i(l[1][:2])+(i(l[1][3:])*h+720+i(l[2][:2])-i(l[2][2:]));print m/h,m%60

পাইথন 3 এর সাথে একই পদ্ধতির 135 বাইট মুদ্রণ বিবৃতি এবং ভাসমান বিভাগে ডিফল্ট হওয়ার কারণে:

for l in open('t'):i,h,l=int,60,l[:-1].split(':');m=-i(l[0])*h+i(l[1][:2])+(i(l[1][3:])*h+720+i(l[2][:2])-i(l[2][2:]));print(m//h,m%60)

1
আপনি i=intশুরুতে রেখে তৃতীয় লাইনটি পরিবর্তন করে 4 জ্যাকেট বাঁচাতে পারবেনm=-i(l[0])*60+i(l[1][:2])+(i(l[1][3:])*60+720+i(l[2][:2])-i(l[2][2:]))
জেমস

@ ডিজেএমসিমেহেম আপনাকে ধন্যবাদ! আমি সেগুলি সরল করার একটি উপায় নিয়ে ভাবার চেষ্টা করছিলাম ...
রায়ান

2
খুব সুন্দর প্রথম উত্তর, প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! কিছুটা গল্ফিংয়ে সহায়তা করতে, আপনি এসটিডিআইএন থেকে ইনপুট নিতে পারবেন, map(int,l[:-1].split(':'))একাধিক রূপান্তর ব্যবহার করতে এবং ড্রপ করতে পারবেন , ইনডেন্টেশন প্রতিস্থাপনের মাধ্যমে সবকিছুকে এক-লাইনারে ভেঙে ফেলতে পারেন এবং ;কয়েকটি বাইট সংরক্ষণ করতে পারেন। অতিরিক্তভাবে, গল্ফর জীবনের সময়ে অন্যান্য ব্যবহারকারীরা আবিষ্কার করেছেন আরও কিছু ঝরঝরে কৌশলগুলির জন্য আপনি পাইথনে গল্ফ করার টিপস দেখতে পারেন ।
মিঃ এক্সকোডার

1
অতিরিক্ত হিসাবে, ওপি আউটপুট ফর্ম্যাট সম্পর্কে কম সীমাবদ্ধ বলে মনে হচ্ছে , তাই আমার মনে হয় print(m,m%60)যথেষ্ট হবে। ( m%60এর জায়গায় এর ব্যবহারটিও লক্ষ করুন m-(m//60*60))
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার ধন্যবাদ!
রায়ান

4

সি, 105 বাইট

a,b,c,d,e;f(){for(;scanf("%d:%d%d:%d%d",&a,&b,&c,&d,&e);)a=(12+c-a)*60+d-b-e,printf("%d:%d ",a/60,a%60);}

সম্পূর্ণ সোজা। এটি এখানে অনলাইনে চেষ্টা করুন

Ungolfed:

a, b, c, d, e; // start hours, minutes; end hours, minutes; break - all implicitly int
f() { // function - return type is implicitly int (unused)
    for(; scanf("%d:%d%d:%d%d", &a, &b, &c, &d, &e) ;) // until EOF is hit, read line by line
        a = (12 + c - a) * 60 + d - b - e, printf("%d:%d,", a / 60, a % 60); // calculate the minutes and store, then output separated: "h m"
}

এর a,b,c,d;f(e)পরিবর্তে a,b,c,d,e;f()এবং এর ;printf("%d:%d ",a/60,a%60))a=(12+c-a)*60+d-b-e;}পরিবর্তে;)a=(12+c-a)*60+d-b-e,printf("%d:%d ",a/60,a%60);
সিলিংক্যাট

4

ওল্ফ্রাম ভাষা 125 119 111 বাইট

i=Interpreter;j=IntegerPart;Row@{j[t=(i["Time"][#2<>"pm"]-i["Time"][#])[[1]]-#3/60],"hr ",j[60Mod[t,1]],"min"}&

202729 ব্যবহারকারীর জন্য 8 বাইট সংরক্ষণ করা হয়েছে thanks

উদাহরণ

সংক্ষিপ্তসারগুলি এখানে যুক্তি ব্যবহার করা সহজ করার জন্য ব্যবহার করা হয় না।

Row[{IntegerPart[
 t = (Interpreter["Time"][#2 <> "pm"] - 
      Interpreter["Time"][#])[[1]] - #3/60], "hr ",
IntegerPart[60 Mod[t,1]], "min"}] &["9:00", "4:12", 20]

6 ঘন্টা 51 মিনিট

Interpreter["Time"][#2 <> "pm"] দ্বিতীয় প্যারামিটারটি "বিকেল" এর পরে অর্থাত্ ব্যাখ্যা করা হয়, যথা, এই ক্ষেত্রে "4: 12 অপরাহ্ন", TimeObject4:12 অপরাহ্নের সাথে ফিরে আসে ।

-Interpreter["Time"][# <> "am"])[[1]] - #3/60]#3তৃতীয় প্যারামিটার, যথা 20 মিনিট। বিয়োগ চিহ্নটি শিফট সময়ের শেষে মধ্যাহ্নভোজনের সময় ব্যবধানকে বিয়োগ করে। এটি শিফট সময়ের সমন্বিত প্রান্তটি ফেরৎ দেয়, অর্থাৎ শিফটের শেষটি প্রযোজ্য হবে যদি ব্যক্তি মধ্যাহ্নভোজনের জন্য বিরতি না নিয়ে থাকে।

Interpreter["Time"][#] প্রথম প্যারামিটারকে সময় হিসাবে ব্যাখ্যা করে, এই ক্ষেত্রে "9:00", TimeObjectসকাল 9: 00 এর অনুরূপ ফিরে আসে ।

শিফট সময় ফলনের সমন্বিত প্রান্ত থেকে শিফ্ট শুরুটি বিয়োগ করা t, সময়ের ব্যবধানটি কয়েক ঘন্টা প্রকাশ করা হয়। IntegerPart[t]পরিশ্রমকৃত পুরো ঘন্টা সংখ্যা প্রদান করে। IntegerPart[60 Mod[t,1]], "min"}]অতিরিক্ত মিনিট কাজ করে দেয়।


হ্যাঁ. ধন্যবাদ। প্রথমবার আমি Mod[x, 1]ব্যবহার দেখতে পাচ্ছি ।
ডেভিডসি

এই (মুছে ফেলা) টিপস থেকে নেওয়া । / প্রকৃতপক্ষে Mod 1 ণাত্মক সংখ্যার জন্য ভগ্নাংশ অংশ থেকে আলাদা আচরণ করে। / Floorব্যবহার করা যাবে IntegerPart?
ব্যবহারকারী 202729

মেঝেটি -6hr 52minআমার ব্যবহৃত নমুনা মানেরগুলির জন্য অনিবার্য ফল একটি, আমাকে দেয়। কেন ঘণ্টার জন্য (এবং স্পষ্টত কয়েক মিনিট) একটি নেতিবাচক মান উত্পন্ন হয়েছিল তা বুঝতে আমার এটি খতিয়ে দেখার দরকার।
ডেভিডসি

3

জাভাস্ক্রিপ্ট, 83 বাইট 76 বাইট

s=>(r=s.match(/\d+/g),r=(r[2]-r[0]+12)*60-r[4]-r[1]+ +r[3],(r/60|0)+':'+r%60)

কেবল নীচের সমাধানটি (আমি কী ভাবছিলাম?) থেকে অভ্যন্তরীণ ফান্ট থেকে মুক্তি পেয়েছি। পাশাপাশি আউটপুট বিন্যাস পরিবর্তন করা হয়েছে।

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


ওল্ড: জাভাস্ক্রিপ্ট, 112 বাইট 111 বাইট 110 বাইট

s=>(t=(h,m,a)=>(a?12+h:h)*60+m,r=s.match(/\d+/g),r=t(+r[2],r[3]-r[4],1)-t(r[0],+r[1]),`${r/60|0}hr ${r%60}min`)

ব্যাখ্যা:

মূল ফাংশনের অভ্যন্তরে, আমরা অন্যটি সংজ্ঞায়িত করে শুরু করি যা একটি প্রদত্ত সময়টির মিনিট গণনা করতে আমাদের সহায়তা করবে, তৃতীয় প্যারামিটারটি সত্য হলে ঘন্টাের প্যারামিটারে 12 ঘন্টা যোগ করতে হবে:

(hours, minutes, addTwelve) =>
    (addTwelve? hours + 12: hours) * 60 + minutes

এর পরে, আমরা স্ট্রিংটি হয় বা দ্বারা বিভক্ত করি' '':' স্ট্রিংয়ের ভিতরে থাকা সংখ্যাগুলির সাথে মিল রেখে স্ট্রিংয়ের সমস্ত সংখ্যার অ্যারে তৈরি করি।

তারপরে আমরা শেষ সময়ের পার্থক্য গণনা করি এবং সময় শুরু করি এবং মধ্যাহ্নভোজনের সময়টিকে পূর্ব নির্ধারিত ফাংশনটি ব্যবহার করে (প্রয়োজনে স্ট্রিংগুলিকে সংখ্যায় রূপান্তর করে) ব্যবহার করে ract

অবশেষে আমরা ফলাফলের স্ট্রিং উত্পাদন করি: ঘন্টাগুলি হল পূর্ণসংখ্যার অংশ r/60এবং মিনিটগুলি r%60

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


@ জ্যাকব আমি একজন নতুন কোডগল্ফ ব্যবহারকারী। টিআইও সহ এখানে কীভাবে জিনিসগুলি কাজ করে তা আমি এখনও জানি না। এছাড়াও আমি এই মন্তব্যে জিজ্ঞাসা করেছি কীভাবে জাভাস্ক্রিপ্ট ব্যবহার করে আমি এর কাছে যাব তবে কেউ সাড়া দেয়নি।
ইব্রাহিম মাহরির

@ যাকব টিআইও স্থির করেছেন এবং আমি নোডজেএস ব্যবহার করছি না, আমি ব্রাউজারের কনসোলটি ব্যবহার করছি। নোডজেএস টিআইও যোগ করেছিলেন।
ইব্রাহিম মাহরির

এখনও নিশ্চিত হন না যে ইনপুট পদ্ধতিটি আইনী (এই প্রশ্নটি দুর্ভাগ্যক্রমে সীমাবদ্ধ) তবে চিম ইন করার জন্য আমাদের আরও অভিজ্ঞ জেএস গল্ফার প্রয়োজন হতে পারে But তবে আরও মনে রাখবেন যে প্রোগ্রামগুলি একাধিক দিনের ইনপুট ডেটা সমর্থন করতে পারে - দুর্ভাগ্যক্রমে এটি তৈরি হয়নি was বর্ণনায় খুব স্পষ্ট।
Jakob

@Jakob দিন ইনপুট হিসাবে ব্যবহার করা উচিত যদি আমি শুধু ফাংশন একটি অ্যারে এবং ব্যবহারের গ্রহণ করতে পারে map: a=>a.map(...)। এটি আমার উত্তরে 5 বাইট যুক্ত করবে। তবে আমি এখনও আমার মন্তব্যে ওপি (বা যে কেউ) প্রতিক্রিয়াটির অপেক্ষায় রয়েছি।
ইব্রাহিম মাহরির

খাঁটি জাভাস্ক্রিপ্টের স্ট্যান্ডার্ড ইনপুট বা ফাইলগুলিতে অ্যাক্সেস নেই , তাই আমি আপনাকে জিইউআই প্রম্পট ব্যবহারের ডিফল্ট পদ্ধতিটি অনুসরণ করার পরামর্শ দিই: কোডগল্ফ.মেটা.স্ট্যাকেক্সেঞ্জিং
::

3

পাইথন 2 , 100 বাইট

for I in open('x'):x,y,z,w,l=map(int,I.replace(':',' ').split());d=60*(12+z-x)+w-y-l;print d/60,d%60

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

ওপি দ্বারা নির্দেশিত সম্পূর্ণ প্রোগ্রাম যা কোনও পাঠ্য ফাইল থেকে একাধিক লাইন পড়ে। এমন একটি ফাংশন যা কেবলমাত্র একটি লাইনের বিশ্লেষণ করে একটি অতিরিক্ত 10 টি বাইট সংরক্ষণ করতে পারে।


1
এটি আমার প্রয়াসের চেয়ে আরও স্পষ্টতই সহজ!
রায়ান

3

জাভা 10, 194 191 বাইট

u->{var s=new java.util.Scanner(System.in).useDelimiter("\\D");for(int i,a[]=new int[5];;i=(12+a[2]-a[0])*60+a[3]-a[1]-a[4],System.out.println(i/60+":"+i%60))for(i=0;i<5;)a[i++]=s.nextInt();}

I / O জাভাতে বেদনাদায়ক। যখন পড়ার জন্য ইনপুটটির কোনও পরবর্তী লাইন না থাকে তখন অস্বাভাবিকভাবে শেষ করে। এটি এখানে অনলাইনে চেষ্টা করুন

Ungolfed:

u -> { // lambda taking a dummy input – we're not using it, but it saves a byte
var s = new java.util.Scanner(System.in).useDelimiter("\\D"); // we use this to read integers from standard input; the delimiter is any character that is not part of an integer
for(int i, a[] = new int[5]; ; // infinite loop; i will be used to loop through each line and to store the result in minutes between lines; a will hold the inputs
    i = (12 + a[2] - a[0]) * 60 + a[3] - a[1] - a[4], // after each line, calculate the result in minutes ...
    System.out.println(i / 60 + ":" + i % 60)) // ... and output the result in hours:minutes, followed by a newline
    for(i = 0; i < 5; ) // read the five integers on the current line ...
        a[i++] = s.nextInt(); // ... into the array
}

2

লাল , 35 বাইট

func[s e l][e + 12:0 - s -(l * 60)]

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

দ্রষ্টব্য: আউটপুটটি ফর্ম্যাটে রয়েছে hh:mm:ss


কি দারুন! এটি অত্যন্ত আশ্চর্যজনক :)
আনুশ

@ আনুশ হ্যাঁ, রেড (এবং অবশ্যই রেবোল) এর সময়কাল ডেটাটাইপ খুব ভাল।
গ্যালেন ইভানভ

2

আর , 97 বাইট

s=matrix(strtoi(unlist(strsplit(scan(,""),':'))),5,,T)%*%c(-60,-1,60,1,-1);paste(12+s%/%60,s%%60)

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

প্রতিটি লাইনের জন্য ফেরত "hours minutes"

  • -১ by বাইট জাইসিকে ধন্যবাদ!

আমি data.frameকিছু বাইট সংরক্ষণ করতে একটি ব্যবহার করার চেষ্টা করেছি - এখন পর্যন্ত কাজ করছি না । তবে এই সাধারণ পরিবর্তনটি করে :)
জেসি


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