হলিডে মাথা ব্যথা


14

সতর্কতা: এই পোস্ট থেকে চিকিত্সার পরামর্শ নেবেন না। আপনি যদি চিকিত্সার পরামর্শ চান, তবে একজন দক্ষ পেশাদারের কাছে যান।

আমার মাথাব্যথা. আমার মাথা ব্যাথার বড়ি দরকার।

আমি আপনাকে শেষ কয়েকটি ডোজ জানাবো, এবং আপনি আমাকে বলবেন যে আমি যখন আমার পরবর্তী ডোজটি গ্রহণ করতে পারি, তখন ওভারডোজ না করে।

আমি আপনাকে এই স্ট্রিং দেব: P: 00:00, I: 02:00, P: 04:00, I: 06:00

এবং আপনি আমাকে এটি দিতে হবে: Next P: 08:00, I: 10:00

ইনপুট:

স্ট্রিং নিম্নলিখিত ওষুধে প্রতিটি ওষুধ গ্রহণের সময়কে উপস্থাপন করে:

P: 00:00, I: 02:00, P: 04:00, I: 06:00

এর অর্থ প্যারাসিটামল নেওয়া হয়েছিল 00:00 এবং 04:00 এ এবং আইবুপ্রোফেনকে নেওয়া হয়েছিল 02:00 এবং 06:00 এ

আউটপুট (আপডেট):

প্রতিটি ওষুধের পরবর্তী সময়গুলির সাথে স্ট্রিং নিম্নলিখিত বিন্যাসে নেওয়া যেতে পারে:

Next P: 08:00, I: 10:00
  • আউটপুট ক্রমটি ওষুধটি যে ক্রমটি গ্রহণ করা উচিত সেভাবে হওয়া উচিত। - যদি আইবুপ্রোফেনটি 09:35 এবং প্যারাসিটামল এবং 10:22-তে নেওয়া হয় তবে আউটপুট হওয়া উচিতNext I: 09:35, P: 10:22
  • যদি প্রতিটি ওষুধের পরবর্তী ডোজের সময়গুলি একই হয় তবে আউটপুট ক্রমের কোনও গুরুত্ব নেই: Next P: 08:00, I: 08:00OR ORNext I: 08:00, P: 08:00
  • যদি কেবলমাত্র একটি ওষুধ নেওয়া হয় (ইনপুট স্ট্রিংয়ে) তবে কেবলমাত্র ওষুধটি আউটপুট স্ট্রিংয়ে থাকতে হবে: Next P: 02:00

নিয়মাবলী:

  • প্যারাসিটামল 'পি' এবং আইবুপ্রোফেন 'আই' কেবলমাত্র দুটি ধরণের medicationষধ থাকবে।
  • প্যারাসিটামল প্রতি 4 ঘন্টা একবার একবার নেওয়া যেতে পারে, 24 ঘন্টা সময়কালে সর্বোচ্চ 4 বার।
  • আইবুপ্রোফেনও প্রতি 4 ঘন্টা একবার একবার নেওয়া যেতে পারে, 24 ঘন্টা সময়কালে সর্বোচ্চ 4 বার।
  • প্যারাসিটামল এবং ইবুপ্রোফেন একসাথে বা পৃথক সময়ে নেওয়া যেতে পারে। একটি অন্যের ডোজ বিবেচনা করে না।
  • ইনপুট স্ট্রিংয়ের সময়গুলি সর্বদা ধারাবাহিক থাকবে তবে মধ্যরাতের উপর দিয়ে রোল (23:00 -> 03:00)
  • ইনপুট স্ট্রিংয়ের সময়গুলি 24 ঘণ্টার বেশি সময় কাটবে না
  • প্রতিটি ওষুধের জন্য সর্বাধিক 4 বার (মোট 8 টি)
  • ইনপুট সর্বদা শূন্য থাকে এবং এতে কমপক্ষে একটি ওষুধ এবং এক সময় থাকে

উদাহরণ:

দুই ঘন্টার ব্যবধানে প্রতিটিের জন্য দুটি ডোজ:

"P: 00:00, I: 02:00, P: 04:00, I: 06:00" -> "Next P: 08:00, I: 10:00"

প্যারাসিটামল এর একক ডোজ

"P: 22:00" -> "Next P: 02:00"

সর্বোচ্চ প্যারাসিটামল ডোজ 24 ঘন্টা, একক আইবুপ্রোফেন ডোজ

"P: 04:05, P: 08:10, P: 12:15, I: 12:30, P: 16:25" -> "Next I: 16:30, P: 04:05"

পরীক্ষার কেস:

"I: 06:00" -> "Next I: 10:00"
"P: 22:00" -> "Next P: 02:00"
"P: 22:00, P: 02:00, I: 06:00" -> "Next P: 06:00, I: 10:00"
"P: 00:00, I: 02:00, P: 04:00, I: 06:00" -> "Next P: 08:00, I: 10:00"
"P: 04:05, P: 08:10, P: 12:15, I: 12:30, P: 16:25" -> "Next I: 16:30, P: 04:05"
"I: 06:32, P: 08:15, I: 10:44, P: 13:03" -> "Next I: 14:44, P: 17:03"
"P: 07:30, I: 07:30, P: 11:30, I: 11:30, P: 15:30, I: 15:30, I: 19:30" -> "Next P: 19:30, I: 07:30"
"I: 07:30, P: 11:30, I: 11:30, P: 15:30, I: 15:30, P: 19:30, I: 19:30" -> "Next P: 23:30, I: 07:30"
"P: 07:30, I: 07:30, P: 11:30, I: 11:30, P: 15:30, I: 15:30, P: 19:30, I: 19:30" -> "Next P: 07:30, I: 07:30" OR "Next I: 07:30, P: 07:30"

এটি কোড গল্ফ, তাই সংক্ষিপ্ত উত্তর ইন্ট বাইট জেতে।

হালনাগাদ:

আউটপুট এখন প্যারাসিটামল এবং ইবুপ্রোফেনের সংক্ষিপ্তসার হতে পারে; PএবংI


আমি ইনপুট এবং আউটপুট ফর্ম্যাটে
কিছুটা উত্তম

@ গুরুপাদ মমাদাপুর আউটপুট হতে পারে, তবে ইনপুট থেকে সময় ও ওষুধের ধরণ বের করা অর্ধেক চ্যালেঞ্জ
এরেরসেন

আমি আপনাকে প্রস্তাব দিই যে লোকেরা আউটপুটটিতে প্যারাসিটামল এবং আইবুপ্রোফেন সংক্ষিপ্তসার হিসাবে মঞ্জুরি দেবে, কারণ তারা জমা দেওয়ার ক্ষেত্রে অপ্রয়োজনীয় দৈর্ঘ্য যোগ করে
সাইয়েস

@ কিয়েস হ্যাঁ আমি একমত, আমি নিজেই একটি সমাধান চেষ্টা করে দেখছি এবং এটি আসলে কিছুটা জটিল - সংক্ষিপ্ত আউটপুটটিকে অনুমোদনের জন্য বিধিগুলি আপডেট করেছে
এরেসেন ২16

@ লিন সম্মত হয়েছে এবং আপডেট হয়েছে
এর্রেসেন

উত্তর:


4

জাভাস্ক্রিপ্ট (ES6), 367 362 354 358 বাইট

গল্ফ সংস্করণ:

A=i=>i>9?""+i:"0"+i,B=(s,a=":")=>s.split(a),C=(a,b,c,d)=>[...[s,t]=B((b>3?c:d)||":"),a+` ${A(s=b>3?+s:(+s+4)%24)}:`+A(t=+t)],F=s=>{a=B(s,m=", ");for(b=c=d=e=f=p=q=0;f<a.length;g=="P:"?(b++,d=d?h:p=h):(c++,e=e?h:q=h))[g,h]=B(a[f++]," ");[i,j,k]=C("P",b,p,d),[n,o,l]=C("I",c,q,e),r=B(h)[0];return"Next "+c?b?n*60+(n<r)*1440+j<i*60+(i<r)*1440+o?l+m+k:k+m+l:l:k}

Ungolfed / মন্তব্য করেছেন:

// Returns a zero-padded string of the argument.
A=i=>i>9?""+i:"0"+i,

// Since we do a lot of splitting, alias it. Making the
// second argument optional (and defaulting to ':') saved
// 3 bytes
B=(s,a=":")=>s.split(a),

// Constructs a string for output, along with the time
// of the next dose, in the format [hour, minute, string].
// Arguments:               type
// a -> type (P/I)          String
// b -> amount of doses     Number
//      taken
// c -> first dose taken    String
// d -> last dose taken     String
//
// The first two values are split from the string, but
// before the array is returned, they are converted to
// integers (during the string construction).
C=(a,b,c,d)=>[...[s,t]=B((b>3?c:d)||":"),a+` ${A(s=b>3?+s:(+s+4)%24)}:`+A(t=+t)],

// Main function. Returns the time(s) for the next dose.
// Argument:                type
// s -> list of times of    String
//      and types of 
//      doses taken
F=s=>{
    a=B(s,m=", "); // Split the input by comma + space,
                   // and save that string, since we
                   // need it later when constructing
                   // the output string.
    // For loop has been restructured. Original:
    // for(b=c=f=0;f<a.length;g=="P:"?(b++,d=d?h:p=h):(c++,e=e?h:q=h))
    //     [g,h]=B(a[f++]," ");
    b = 0; // P-dose counter
    c = 0; // I-dose counter
    d = 0; // Last P-dose
    e = 0; // Last I-dose
    p = 0; // First P-dose
    q = 0; // First I-dose
    for (f = 0; f < a.length; f++) {
        [g, h] = B(a[f], " ");  // g contains the type,
                                // h contains the time
        if (g == "P:") {
            b++;                // increase the counter

            if (d == 0) {   // store h in p if this is
                p = h;      // the first dose of this
            }               // type
            d = h;
        } else {
            // See the above code block for comments
            c++;

            if (e == 0) {
                q = h;
            }
            e = h;
        }
    }
    // End of restructured for loop.

    // Construct the output strings, and get the times.
    // See comments at C function.
    [i, j, k] = C("P", b, p, d);
    [n, o, l] = C("I", c, q, e);

    // Get the amount of hours of the dose taken last.
    // We use this to get the correct order of the two
    // times.
    r = B(h)[0];

    // Return statement has been restructured. Original:
    // return "Next "+c?b?n*60+(n<r)*1440+j<i*60+(i<r)*1440+o?l+m+k:k+m+l:l:k
    //==================================================
    // Start creating the output string.
    output = "Next "
    // Use the following checks to figure out what needs
    // to be part of the output and in what order.
    if (c > 0) {
        if (b > 0) {
            // Compare the times of next doses
            // P_time = (i + (i < r) * 24) * 60
            // I'm using implicit conversion of
            // booleans to numbers. If the next
            // dose is past midnight, add 1 * 24
            // to the time, so it is compared
            // correctly.
            // Then add the minutes to the number.
            P_time = i*60+(i<r)*1440+o;
            I_time = n*60+(n<r)*1440+j;

            if (I_time < P_time) {
                output += l + m + k; // I first
            } else {
                output += k + m + l; // P first
            }
        } else {
            output += l; // Just I
        }
    } else {
        output += k; // Just P
    }

    // Finally, return the output
    return output;
}

এটি ব্যবহার করতে স্ট্রিং দিয়ে এফের মতো যুক্তি হিসাবে কল করুন:

F("P: 04:00, I: 06:00")

এটি দুর্দান্ত, তবে আমার বেশ কয়েকটি সমস্যা ছিল। এটি ইনপুটটিতে কেবলমাত্র এক ধরণের বড়ি যেমন ব্যর্থ হয়েছে বলে মনে হচ্ছে F("P: 22:00")-> ReferenceError: q is not defined। এই ইনপুটটি চালানো হবে যদি পিএন্ডআই এর আগে উল্লেখ করা হয়েছিল তবে আমি পুরানো বিশদ সহ I.
ক্রিস এম

ধন্যবাদ! আমি কেবল এটি পরীক্ষা করেছি এবং আপনি রেফারেন্স ত্রুটি সম্পর্কে সঠিক। আমার ধারণা, কিউ ভেরিয়েবলটি পুনরায় সেট করা হয়নি এবং পরীক্ষার সময় আমি যথেষ্ট মনোযোগ দিইনি। আমাকে জানানোর জন্য ধন্যবাদ, আমি এটি পরে ঠিক করব।
লুক

একটি সহজ ফিক্স হিসাবে পরিণত, কিন্তু এটি আমার 4 বাইট খরচ।
লুক

1

পাইথন 3 - 437 বাইট

a=input();i=p=l=-1;j=q=0
for x in a.split(", ")[::-1]:
    for y, z in [x.split(": ")]:
        s=lambda q,r,t:[t,sum([a*b for a,b in zip([60,1],map(int,q.split(':')))])][r%4<2]+[0,240][r<2]
        if y=="I":j+=1;i=s(z,j,i)
        else:q+=1;p=s(z,q,p)
        l=[l,p+i-239][j+q<2]
r=lambda d,e:("","%s: %02d:%02d, "%(d,(e/60)%24,e%60))[e>-1];p+=[1440,0][p>=l];i+=[1440,0][i>=l];print("Next "+[r("I",i)+r("P",p),r("P",p)+r("I",i)][p<i][:-2])

ব্যাখ্যা:

a=input();i=p=l=-1;j=q=0
for x in a.split(", ")[::-1]: #Read in reverse order, a="P: 01:00"
    for y, z in [x.split(": ")]:#Y="P", Z="00:00"
        s=
        lambda q,r,t:[t,sum([a*b for a,b in zip([60,1],map(int,q.split(':')))])]#Convert "01:01" to 61
        [r%4<2]#In case it's the first or fourth string calculate a new value, otherwise: return the original value
        +[0,240][r<2]#In case it's the last string: add 4 hours. Otherwise, leave it.
        if y=="I":j+=1;i=s(z,j,i)#Calculate for i
        else:q+=1;p=s(z,q,p)#Calculate for p
        l=[l,p+i-239][j+q<2]#Sets the last record. Since we read in reverse order, this should be the first one. We've added 4 hours though so remove those again
r=lambda d,e:("","%s: %02d:%02d, "%(d,(e/60)%24,e%60))[e>-1];#Print function, don't print anything when we have no value
p+=[1440,0][p>=l];i+=[1440,0][i>=l];    #Add a day if record is before the last record so we can correctly calculate the order
print("Next "+[r("I",i)+r("P",p),r("P",p)+r("I",i)][p<i][:-2])#print it and remove the last ","

1

পিএইচপি, 228 241 239 227 226 বাইট

পিএইচপি 7 প্রয়োজন

Next<?foreach(explode(", ",$argv[1])as$d){[$m,$h,$i]=explode(":",$d);$x[$m][++$$m]=24+$h+$i/60;}foreach($x as$m=>$d)$r[$m]=$d[$$m-3]?:$d[$$m]-20;sort($r);foreach($r as$m=>$t)$o[]=" $m: ".date("i:s",$t%24*60);echo join(",",$o);

ভাঙ্গন

Next<?                              // print "Next"
foreach(explode(", ",$argv[1])as$d) // loop through string split by comma+space
{
    [$m,$h,$i]=explode(":",$d);         // separate drug, hours and minutes
    $x[$m][++$$m]=24+$h+$i/60;          // append time to array, track count in ${$m}
}                                       // (i.e. $P for drug "P" etc.)
foreach($x as$m=>$d)                // loop through drugs
    $r[$m]=                             // add time to result
        $d[$$m-3]                           // if more than 3 medications, use $$m-3
            ??$d[$$m]-20                    // else use last medication - 20 hours
    ;
sort($r);                           // sort results by time
foreach($r as$m=>$t)$o[]=" $m: "    // prepare for output: drug name and formatted time:
    .date("i:s",$t%24*60)           // use hrs as mins and mins as secs to avoid TZ problems
;
echo join(",",$o);                  // print

0

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

s=>s.split`, `.map(s=>(m[s[0]].unshift(t=s.replace(/\d+/,h=>(h=(1+h)%24)>9?h:`0`+h),s),l=l||t.slice(1)),l=0,m={I:[],P:[]})&&`Next `+[].concat(m.I[7]||m.I[0]||[],m.P[7]||m.P[0]||[]).sort((i,p)=>((i=i.slice(1))<l)-((p=p.slice(1))<l)||i>p).join`, `

ব্যাখ্যা:

প্রতিটি ডোজ উপর লুপিং, Iএবং Pডোজ দুটি অ্যারে বিভক্ত করা হয়। প্রতিটি ডোজ 4 ঘন্টা এছাড়াও যোগ করা হয়, এবং সেই সময় খুব সাশ্রয় হয়। অ্যারেগুলি 8 টি প্রবেশপথ সনাক্তকরণ আরও সহজ করে তুলতে বিপরীতে পপুলেট করা হয়। প্রথম ডোজ পরে 4 ঘন্টা সময় বাছাইয়ের সময় ব্যবহারের জন্য সংরক্ষণ করা হয়। এই মুহুর্তে প্রতিটি অ্যারে তিনটি রাজ্যের একটিতে হতে পারে:

  • 8 টি এন্ট্রি, যার ক্ষেত্রে সর্বশেষ এন্ট্রিটি প্রথম ডোজ এবং পরবর্তী ডোজ অবশ্যই এই ডোজের 24 ঘন্টা পরে হওয়া উচিত (অর্থাত কাল একই সময়)
  • 2, 4 বা 6 টি এন্ট্রি, এই ক্ষেত্রে প্রথম এন্ট্রিটি শেষ ডোজের 4 ঘন্টা পরে হয় এবং তাই পরবর্তী ডোজের সময়
  • 0 টি এন্ট্রি, []এক্ষেত্রে আমরা সম্মিলিত , যা সমতল হয়ে যায় এবং ফলস্বরূপ বাদ পড়ে exc

দুটি অ্যারে থেকে পরবর্তী ডোজ বার বের করে নেওয়ার পরে, এটি তাদের ক্রম অনুসারে বাছাই করা অবশেষ। এটি প্রথম ডোজের 4 ঘন্টা পরে সময়ের সাথে তাদের তুলনা করে করা হয়। যদি দু'বারের মধ্যে একটি যদি এই সময়ের আগে হয় তবে এটি অবশ্যই আগামীকালকে বোঝায় এবং সেই ডোজটি সর্বশেষে আসে। অন্যথায়, সময়গুলি সরাসরি সরাসরি তুলনা করা হয়। (বরং অসুবিধাজনকভাবে, ওষুধটি সময়ের আগে, সুতরাং সঠিকভাবে তুলনা করার জন্য আমাকে এটি স্ট্রিপ করতে হবে))

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