সময়ের সময়কালের যোগফল


18

চ্যালেঞ্জ

সংক্ষিপ্ততম কোডটি লিখুন যা স্টিডিনে উপস্থিত সমস্ত সময়ের সময়কালের সমষ্টি করতে পারে। প্রোগ্রামটি কেবল নিম্নলিখিত স্ট্রিংগুলির সাথে মেলে এমন স্ট্রিংগুলি বিবেচনা করতে হবে এবং বাকিগুলি উপেক্ষা করবে।

    HH:MM:SS     (it will be interpreted as HH hours, MM minutes and SS seconds)        
    H:MM:SS      (it will be interpreted as H hours, MM minutes and SS seconds)
    MM:SS        (it will be interpreted as MM minutes, SS seconds)
    M:SS         (it will be interpreted as M minutes, SS seconds)

স্ট্রিংগুলির উদাহরণ যা গণিতের নিদর্শনগুলির সাথে মেলে:

    12:00:01  
    2:03:22  
    00:53  
    9:13

আউটপুট ফর্ম হতে হবে

    HHh MMm SSs      (that means HH hours, MM minutes and SS seconds with non-zero-padding)

উদাহরণ

stdin

স্বাগতম ভিডিও দেখুন।
ভিডিও: 10:37 মিনিট
কোর্সে ভিডিওর ভূমিকা দেখুন।
ভিডিও: 3:30 মিনিট পাঠের ওভারভিউটি কীভাবে ব্যবহার করতে হয় তার ভিডিও দেখুন।
ভিডিও: 9:13 মিনিট
আপনার কাজটি ভাগ করে নেওয়ার জন্য অ্যাপসিলেন সিস্টেমটি কীভাবে ব্যবহার করবেন তার ভিডিও ওভারভিউ দেখুন।
ভিডিও: 03:15 মিনিট
স্টেট অফ টেক্সাস অ্যাসেসমেন্ট অফ একাডেমিক রেডিওয়ান্স (স্টার) সম্পর্কে জানতে ভিডিওটি দেখুন।
ভিডিও: 1:05:26 মিনিট

stdout- এ

1 ঘন্টা 32 মি 1 এস


স্ট্রিংগুলির মতো কী 10:4:56? বর্তমান স্পেসিফিকেশন অনুযায়ী তাদের হিসাবে বিবেচনা করতে হবে 4m 56s, অংশ 10উপেক্ষা করা হবে। একই প্রশ্ন সম্পর্কে 10:12:7মানে কী 10m 12sএর উপেক্ষা সঙ্গে 7? বা এই জাতীয় স্ট্রিং পরিচালনা বাস্তবায়ন সংজ্ঞায়িত করা যেতে পারে?
কিওয়ারটি

প্রোগ্রামটি কেবল মিনিট এবং দ্বিতীয় ক্ষেত্রে জিরো-প্যাডিং সহ সময়কাল বিবেচনা করে। আপনার উদাহরণে "10: 4: 56" স্ট্রিং 4m 56s হিসাবে গণ্য হবে। এছাড়াও "10: 12: 7" স্ট্রিংটি 10 ​​মি 12 এর মতো ব্যাখ্যা করা হবে।
আলফ্রেডো ডিয়াজ

অদ্ভুত তবে ঠিক আছে :)
Qwertiy

1h 19m 18sআউটপুটটিতে আপনি কীভাবে পেলেন ? 37+30+13+15+26==121, 10+3+9+3+5==30, 1==1, তাই আমি আশা 1h 32m 01s। এই যুক্তিতে কী ভুল? এছাড়াও, এই জাতীয় আউটপুট ফর্ম্যাটটি যা প্রত্যাশিত, তাই না?
কিওয়ারটি

তুমি ঠিক. দুঃখিত: এস
আলফ্রেডো ডিয়াজ

উত্তর:


3

পাইথ 105

K"smh"J"\D\D+|\d+:(?=\d:)|:\d\D"W:QJ1=Q:QJd;FN_msdCfn2lTm+*]0</k\:2msbck\:cQ)~k+d+hK_`%+NZ60=Z/N60=KtK;_k

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

এটি জাভাস্ক্রিপ্ট উত্তর হিসাবে একইভাবে এসটিডিআইএন থেকে ইনপুট প্রয়োজন, \ns হিসাবে নতুন লাইনের সাথে উদ্ধৃত পাঠ্য হিসাবে ।

নমুনা:

"View the Welcome video.\nVideo: 10:37 min.\nView the video introduction to the course.\nVideo: 3:30 min. View the video of how to use the Lesson Overview.\nVideo: 9:13 min.\nView the video overview of how to use the Epsilen system to share your work.\nVideo: 03:15 min.\nView the video to learn about the State of Texas Assessment of Academic Readiness (STAAR).\nVideo: 1:05:26 min."

আউটপুট

1h 32m 1s

ওয়েয়ার্ডার তারিখগুলির সাথে কাজ করার উদাহরণ:

"10:10:5 and 5:1:10 and 27 or 16: or 1:1:1 or 11:1\n"

আউটপুট

0h 11m 20s

(কেবলমাত্র 10:10 এবং 1:10 টি বৈধ সময়)

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


লাকি জারজ Pyth Regex আছে খুব !
অপ্টিমাইজার

@ অপ্টিমাইজার: ডি যদিও এটি ছিল সত্যিকারের ব্যথা। আপনি যে
আর্গুমেন্টটি

6

জাভাস্ক্রিপ্ট ES6, 138 অক্ষর

ফাংশন, ১৩৯

স্ট্রিংটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং কনসোলে আউটপুট লিখে:

f=s=>(r=0,s.replace(/(\d\d?):(\d\d)(:(\d\d))?/g,(m,a,b,x,c)=>r+=x?+c+b*60+a*3600:+b+a*60),console.log("%dh %dm %ds",r/3600,r%3600/60,r%60))

প্রোগ্রাম, 138

prompt(r=0).replace(/(\d\d?):(\d\d)(:(\d\d))?/g,(m,a,b,x,c)=>r+=x?+c+b*60+a*3600:+b+a*60),console.log("%dh %dm %ds",r/3600,r%3600/60,r%60)

ফাংশন জন্য পরীক্ষা

f("View the Welcome video.\n\
Video: 10:37 min.\n\
View the video introduction to the course.\n\
Video: 3:30 min. View the video of how to use the Lesson Overview.\n\
Video: 9:13 min.\n\
View the video overview of how to use the Epsilen system to share your work.\n\
Video: 03:15 min.\n\
View the video to learn about the State of Texas Assessment of Academic Readiness (STAAR).\n\
Video: 1:05:26 min.")

আউটপুট

"1h 32m 1s"

ঠিক আছে. ফায়ারফক্স বিকাশকারী সংস্করণ 36.0a2 এ সূক্ষ্মভাবে কাজ করে, ফর্ম্যাটিংটি কেবল ফায়ারফক্স 34.0 এ ব্যর্থ হয়।
manatwork

প্রোম্ট মাল্টিলাইন স্ট্রিংগুলিকে অনুমতি দেয় না। তবে আমি প্রম্পট () একই সংখ্যায়
চাত্রে

কীভাবে তাদের প্রবেশ করবেন?
কিওয়ারটি

@ অপ্টিমাইজার একটি নতুন লাইন সন্নিবেশ করা আমার এফএফ 35.0 তে কাজ করে না।
কিওয়ারটি

আমি এটা কাজ পেতে পারে না. আমি আদর্শের ডটকম এ
আলফ্রেডো ডিয়াজ

4

জাভাস্ক্রিপ্ট, ES6, 208 200 197 বাইট

আমি জানি এটি অত্যন্ত দীর্ঘ, তবে আমি ES6 এর সর্বশেষ বৈশিষ্ট্যগুলি, বিপরীত, মানচিত্র-হ্রাস, তীর ফাংশন এবং অ্যারে উপলব্ধি (স্প্রেড অপারেটর) অন্বেষণ করতে চেয়েছিলাম।

alert(prompt().match(/\d\d?:\d\d(:\d\d)?/g).map(x=>[...x.split(":").reverse(),z=0].slice(0,3)).reduce((a,b)=>b.map((y,i)=>+y+ +a[i])).map((x,i)=>(z=(t=x+z|0)/60,t%60+"smh"[i])).reverse().join(" "))

সাম্প্রতিকতম ফায়ারফক্সে স্নিপেট চালান run

এটি কীভাবে কাজ করে (কিছুটা অবহেলিত)

alert(                              // Alert the final result
  prompt()                          // Take the input via prompt
  .match(/\d\d?:\d\d(:\d\d)?/g)     // Match only correct time formats
  .map(                             // Map all matches using this method
    x=>[                            // Take each element as argument x
      ...x.split(":").reverse(),    // split x on ":" and reverse the array, then spread it
      z=0                           // put 0 as last element of return array
    ].slice(0,3)                    // Take only first 3 elements of the array
  ).reduce(                         // Reduce the result using this method
    (a,b)=>                         // Pairwise elements of the array
    b.map(                          // Map array b
      (y,i)=>~~y+~~a[i]             // Convert b[i] to b[i]+a[i]
    )                               // Now we have array like [SS, MM, HH]
  ).map(                            // Map these three values for carry over calculation
    (x,i)=>(
      t=x+z,                        // z contains carryover amount, add it to this value
      z=(t/60)|0,                   // Carryover is now floor(t/60)
      t%60+"smh"[i]                 // Remove overflow from t and add "s", "m" or "h"
    )                               // Now we have array like ["SSs", "MMm", "HHh"]
  ).reverse().join(" ")             // Reverse it and join by space
)

4

বাশ (গ্রেপ, সেড, অবাক এবং তারিখ সহ): 124 বাইট, 120 বাইট

এটিতে কেবল পাঠ্যটি পাইপ করুন:

grep -o '[:0-9]*'|sed 's/^[^:]*:[^:]*$/:\0/'|awk -F: '{T+=3600*$1+60*$2+$3}END{print"@"T}'|xargs date +"%Hh %Mm %Ss" -ud

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

  • গ্রেপ: কেবলমাত্র ইনপুট থেকে স্ট্র্যাপ আউটপুট করে 0123456789:
  • সেড: এমএম: এসএস এবং এম: এসএসকে এম: এসএসে পরিণত করে
  • awk: সেকেন্ড গণনা করে, খালি স্ট্রিং 0 হয়
  • xargs: তারিখ হিসাবে যুক্তি হিসাবে ইনপুট পাস
  • তারিখ: যুগের পর থেকে সেকেন্ড রূপান্তরিত হয় (@ এর সাথে পূর্বনির্ধারিত) প্রয়োজনীয় বিন্যাসে

এই সময়টি কি আপনার টাইমজোন সম্পর্কিত নয়?
কিওয়ারটি

আপনি ঠিক বলেছেন, দুর্দান্ত ধরা :) যুক্ত - ইউ পতাকা।
পিজি

3

পার্ল - 228 201

use integer;$h=0,$m=0,$s=0;while(<>){if(/(\d+:){1,2}\d+/){@a=reverse(split(/:/,$&));push @a,(0)x(3-@a);$s+=@a[0];$m+=@a[1];$h+=@a[2];}}$m+=$s/60;$s=$s%60;$h+=$m/60;$m=$m%60;print $h."h ".$m."m ".$s."s"

এটি অপটিমাইজারের (গ্রেপ, বিভাজন, বিপরীত, যুক্ত) এর মতো একই অ্যালগরিদম হতে পারে।

আমি পার্ল বিশেষজ্ঞ নই, তাই সম্ভবত বাইটের গণনা হ্রাস করা যায়।

Ungolfed

use integer;                              # will do integer division
$h=0,$m=0,$s=0;
while(<>){
    if(/(\d+:){1,2}\d+/) {                # extract date formats
        @a = reverse(split(/:/,$&));      # split by ":" and reverse
        push @a,(0)x(3-@a);               # pad with zeros (minutes and hours)
        $s+=@a[0];                        # sum seconds
        $m+=@a[1];                        # sum minutes
        $h+=@a[2];                        # sum hours
    }
}

# convert seconds as minutes    
$m += $s / 60;
$s = $s % 60;

# convert minutes as hours
$h += $m / 60;
$m = $m % 60;

print $h."h ".$m."m ".$s."s";

আমার হিসাবে, এটি জাভাস্ক্রিপ্টের চেয়ে বেশি দীর্ঘস্থায়ী সমাধান দেখতে আশ্চর্যজনক :)
Qwertiy

ঠিক আছে, এমনকি যদি শেবাং গণনা করা হয় তবে লম্বা হওয়া স্বাভাবিক।
manatwork

@ কিওয়ার্টি আমি সম্মত আমার আশা যে কিছু পার্ল গুরু আমাকে এটি ঠিক করতে সহায়তা করবে।
coredump

@ মানাতকর্ম কেন এটি গণনা করা হয়?
কিউয়ের্তি

@ কিওয়ার্টি, কারণ কর্ড্প এটিকে গণনা থেকে বাদ দিতে ভুলে গেছে। : এস সবে সরিয়ে ফেলা যায় (সমস্ত myকীওয়ার্ডের সাথে একত্রে )।
manatwork

3

রিবোল - 174

n: charset"1234567890"a:[1 2 n]b:[":"2 n]c: 0 parse input[any[copy x[a b b](c: c + do x)| copy x[a b](c: c + do join"0:"x)| skip]]print reword"$1h $2m $3s"[1 c/1 2 c/2 3 c/3]

অবহেলিত + টিকাদিত:

n: charset "1234567890"                      ; setup \d regex equiv
a: [1 2 n]                                   ; parse rule for \d{1,2} 
b: [":" 2 n]                                 ; parse rule for :\d\d
c: 0                                         ; time counter

parse input [                                ; parse the input (STDIN)
                                             ; (no regex in Rebol)

  any [                                      ; match zero or more... 
                                             ;
      copy x [a b b] (c: c + do x)           ;  HH:MM:SS or H:MM:SS
                                             ;    - copy match to x
                                             ;    - increment time (c) by x
                                             ; OR
    | copy x [a b] (c: c + do join "0:" x)   ;  MM:SS or M:SS
                                             ;    - copy match to x
                                             ;    - "MM:SS" into "0:MM:SS" (join)
                                             ;    - then increment time (c)
                                             ; OR
    | skip                                   ;   no match so move through input
  ]
]

print reword "$1h $2m $3s" [1 c/1 2 c/2 3 c/3]

রেবোল তার নিজস্ব time!ডেটাটাইপ নিয়ে আসে । উপরের কোডটি নীচের উদাহরণ থেকে (রিবোল কনসোলের মধ্যে থেকে) কীভাবে এটি ব্যবহার করে তা আপনি দেখতে পারেন:

>> 0:10:37 + 0:3:30 + 0:9:13 + 0:3:15 + 1:05:26
== 1:32:01

;; Rebol would treat 10:37 as 10 hours & 37 minutes (and not MM:SS)
;; So we have to prefix the "0:"

>> join "0:" 10:37
== "0:10:37"

;; This is a string so we use Rebol DO evaluator to convert to time!

>> do join "0:" 10:37 
== 0:10:37

>> type? do join "0:" 10:37
== time!

>> hms: do join "0:" 10:37
== 0:10:37

>> hms/hour
== 0

>> hms/second
== 37

>> hms/minute
== 10

2

গ্রোভি - 195

M=60
r=(System.in.text=~/((\d?\d):)?(\d\d):(\d\d)/).collect{it[2..4]*.toInteger().inject{s,i->(s?:0)*M+i}}.inject{s,i->s+=i}
f=[];(2..0).each{j=M**it;s=r%j;f<<(r-s)/j;r=s}
printf("%sh %sm %ss",f)

কীভাবে এটি আরও সংকুচিত করা যায় তা আমি বুঝতে পারি না।

Ungolfed

M=60
r=(System.in.text=~/((\d?\d):)?(\d\d):(\d\d)/).collect{  // extract dates
    it[2..4]*.toInteger().inject{ s,i ->                 // convert to seconds
        (s?:0)*M+i
    }
}.inject{s,i ->
    s+=i                                                 // sum seconds
}

f=[];
(2..0).each{                                             // convert to h,m,s
    j=M**it;
    s=r%j;
    f<<(r-s)/j;
    r=s
}

printf("%sh %sm %ss",f)

1

গণিত 300 টি চর

এই ছোট্ট অনুশীলনটি ম্যাথমেটিকার জন্যও প্রচুর কোড নিয়েছিল। এটি করার আরও অবশ্যই কার্যকর উপায় আছে।

Golfed

ধরে নিই যে ইনপুটটি সঞ্চিত আছে txt,

n=NumberString;
t=ToExpression;
o=TimeObject;

QuotientRemainder[QuantityMagnitude[Plus@@((o[#]-o[{0,0,0}])&/@
(StringSplit[StringCases[w,{(n~~":"~~n~~":"~~n),(n~~":"~~n)}],":"]
/.{{a_,b_}:> {0,t@a,t@b},{a_,b_,c_}:> {t@a,t@b,t@c}}))],60]/.{h_,m_}:> 
Row[{h,"h ",IntegerPart@m,"m ",Round[60 FractionalPart[m]],"s "}]

এটি কীভাবে কাজ করে (অ-গল্ফযুক্ত কোড ব্যবহার করে):

1-সময়গুলি সন্ধান করুন।

StringCases[txt,{(NumberString~~":"~~NumberString~~":"~~NumberString),
(NumberString~~":"~~NumberString)}];

10 "10:37", "3:30", "9:13", "03:15", "1:05:26"}


2-ঘন্টা, মিনিট, সেকেন্ডে বিরতি

StringSplit[%,":"]/.{{a_,b_}:> {0,ToExpression@a,ToExpression@b},{a_,b_,c_}:> 
{ToExpression@a,ToExpression@b,ToExpression@c}}

{{0, 10, 37}, {0, 3, 30}, {0, 9, 13}, {0, 3, 15}, {1, 5, 26}


3-সমষ্টি। সময়ের অবজেক্টগুলি ঘড়ির সময়। অন্য সময় থেকে এক সময় অবজেক্ট বিয়োগ করা একটি সময়কাল ফিরে আসে, এই ক্ষেত্রে 92.0167 মিনিট। QuantityMagnitudeপরিমাপের একক ড্রপ।

q=QuantityMagnitude[Plus@@((TimeObject[#]-TimeObject[{0,0,0}])&/@%)]

92,0167


4-92.0167 মিনিটকে ঘন্টা, মিনিট, সেকেন্ডে রূপান্তর করুন।

QuotientRemainder[q,60]/.{h_,m_}:> Row[{h,"h ",IntegerPart@m,"m ",
Round[60 FractionalPart[m]],"s "}]

1 ঘন্টা 32 মি 1 এস


1

পার্ল, 146

আমার এন্ট্রি আউটপুটটিকে একটি পিছনের জায়গার সাথে মুদ্রণ করে - আমি আশা করি এটি ঠিক আছে

while(<>){for(/(\d?\d(?::\d\d){1,2})/g){$m=1;for(reverse split/:/,$_){$t+=$m*$_;$m*=60}}}for('s','m'){$o=($t%60)."$_ $o";$t/=60}print int$t,"h $o"

যদি আমরা ধরে নিতে পারি যে ইনপুটটির প্রতি লাইনটিতে কেবল একবার সময় আসবে, আমরা 4 টি অক্ষর কেটে ফেলতে পারি:

while(<>){if(/(\d?\d(:\d\d){1,2})/){$m=1;for(reverse split/:/,$&){$t+=$m*$_;$m*=60}}}for('s','m'){$o=($t%60)."$_ $o";$t/=60}print int$t,"h $o"

এগুলি কেটে গেছে মোট সেকেন্ড জমা করে এবং পরে সেই মানটি ফর্ম্যাট করে work

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