দিনের রূপান্তরের দশমিক সময়


15

ভূমিকা

সময় বিভ্রান্তিকর। ষাট সেকেন্ড থেকে এক মিনিট, ষাট মিনিট থেকে এক ঘন্টা, চব্বিশ ঘন্টা থেকে এক দিন (এবং সেই অস্থির am / pm এর উল্লেখ না করা!)।

আজকাল এ জাতীয় নির্বিকার থাকার কোনও জায়গা নেই, তাই আমরা একমাত্র বুদ্ধিমান বিকল্প গ্রহণ করার সিদ্ধান্ত নিয়েছি: দশমিক দিন! এর অর্থ হ'ল, প্রতিটি দিনকে 1 টি পুরো ইউনিট হিসাবে বিবেচনা করা হয়, এবং ছোট যে কোনও কিছুই সেই দিনের দশমিক ভগ্নাংশ হিসাবে লেখা হয়। সুতরাং, উদাহরণস্বরূপ: "12:00:00" "0.5" হিসাবে লেখা হবে, এবং "01:23:45" "0.058159" হিসাবে লিখিত হতে পারে।

যেহেতু নতুন সিস্টেমে অভ্যস্ত হতে সময় লাগবে, আপনাকে এমন একটি প্রোগ্রাম লেখার দায়িত্ব দেওয়া হয়েছে যা উভয় দিকের মধ্যে তাদের মধ্যে রূপান্তর করতে পারে।

চ্যালেঞ্জ

আপনার পছন্দের ভাষায় একটি প্রোগ্রাম লিখুন, যা "এইচএচ: মিমি: এসএস" এর আইএসও -8601 ফর্ম্যাটে একটি আধুনিক সময় দিয়েছে, সমান দশমিক ভগ্নাংশ ইউনিটকে ফিরিয়ে দেবে। তেমনি, দশমিক ভগ্নাংশ দেওয়া, প্রোগ্রামটির প্রাথমিকভাবে নির্দিষ্ট করা আধুনিক বিন্যাসে সময়টি ফিরিয়ে আনা উচিত।

আপনি নিম্নলিখিত অনুমানগুলি করতে পারেন:

  • আধুনিক সময়ের ইনপুট এবং আউটপুট "00:00:00" থেকে "24:00:00" পর্যন্ত হতে পারে
  • দশমিক সময়ের ইনপুট এবং আউটপুট "0" থেকে "1" পর্যন্ত হতে পারে এবং কমপক্ষে 5 দশমিক স্থানে (যেমন "0.12345") গ্রহণ / আউটপুট গ্রহণ করতে সক্ষম হওয়া উচিত। আরও নির্ভুলতা গ্রহণযোগ্য
  • প্রোগ্রামটি ইনপুটের ভিত্তিতে কোন রূপান্তর দিকটি সম্পাদন করবে তা জানতে সক্ষম হওয়া উচিত
  • আপনি সময় সম্পর্কিত ফাংশন / গ্রন্থাগার ব্যবহার করতে পারবেন না

বিজয়ীটি সংক্ষিপ্ততম কোড দ্বারা নির্ধারিত হবে যা মানদণ্ডটি সম্পাদন করে। এগুলি কমপক্ষে dec দশমিক দশমিক এক ইউনিটে বা যদি / যখন পর্যাপ্ত জমা দেওয়া হয়েছে সেখানে নির্বাচিত হবে।

উদাহরণ

এখানে জাভাস্ক্রিপ্ট কোডটির খারাপ ব্যবহার করা একটি উদাহরণ (উদাহরণস্বরূপ):

function decimalDay(hms) {
    var x, h, m, s;
    if (typeof hms === 'string' && hms.indexOf(':') > -1) {
        x = hms.split(':');
        return (x[0] * 3600 + x[1] * 60 + x[2] * 1) / 86400;
    }
    h = Math.floor(hms * 24) % 24;
    m = Math.floor(hms * 1440) % 60;
    s = Math.floor(hms * 86400) % 60;
    return (h > 9 ? '' : '0') + h + ':' + (m > 9 ? '' : '0') + m + ':' + (s > 9 ? '' : '0') + s;
}
decimalDay('02:57:46'); // 0.12344907407407407
decimalDay('23:42:12'); // 0.9876388888888888
decimalDay(0.5); // 12:00:00
decimalDay(0.05816); // 01:23:45

হুম ... almost০ প্রায় 64৪ বছর। আমি অবাক হই যে এক মিনিটে seconds৪ সেকেন্ড এবং এক ঘন্টাে minutes৪ মিনিট (এবং দিনে ১ 16 বা ৩২ ঘন্টা) সময় কেমন হবে?

1
আমাদের কি লিপ সেকেন্ডে পরিচালনা করতে হবে? সুতরাং 23:59:60 একটি 86401 দ্বিতীয় দিনের শেষে থেকে 1 সেকেন্ড?
স্পার

1
@ স্পার লিপ সেকেন্ড সম্পর্কে চিন্তা করার দরকার নেই। এটিই ভবিষ্যত, যেখানে আমরা স্থির করেছি যে এটি পৃথিবীর আবর্তনের আপেক্ষিক গতির সাথে বেঁধে দেওয়ার পরেও একে একে একে পরম মূল্য হিসাবে বিবেচনা করার মতো নির্বোধ;)
এমআরআর 247


1
@ এমডব্লিউ 247 হ্যাঁ ডিএনএস টিটিএলের একটি ক্ষেত্র ছিল (ছিল?) nযেখানে n2 seconds n সেকেন্ড is সুতরাং '6' এর মানটিতে প্রায় 1 মিনিটের টিটিএল ছিল। '12' এর মানটির প্রায় 1 ঘন্টা টিটিএল ছিল। '15' প্রায় 8 ঘন্টা ইত্যাদি ছিল। এটি একটি বাইটকে সময়সীমা নির্ধারণ করতে এবং আপনাকে স্বল্প বা দীর্ঘ সময়ের জন্য পর্যাপ্ত নিয়ন্ত্রণ দেয়।

উত্তর:


6

সিজেম, 58 56 42 বাইট

আমি নিশ্চিত যে এটি খুব দীর্ঘ এবং অনেক গল্ফ করা যেতে পারে। তবে এখানেই শুরু:

86400q':/:d_,({60bd\/}{~*i60b{s2Ue[}%':*}?

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



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

আপনি কি জানেন .. আমার কোড ব্যবহার করতে নির্দ্বিধায় 86400q':/:d_,({60bd\/}{~*mo60bAfmd2/':*}?:, আমি আমার উত্তরটি মুছছি। moযাতে 0.058159 ধর্মান্তরিত 01:23:45 করতে
aditsu প্রস্থান কারণ দঃপূঃ মন্দ

3

পাইথন 2, 159 150 141 + 2 = 143 বাইট

সোজা সমাধান, সম্ভবত অনেক খাটো হতে পারে। এটিতে কাজ করবে।

"এস-এ সংযুক্ত থাকা প্রয়োজন বলে ইনপুটটির জন্য অ্যাকাউন্টে দুটি বাইট যুক্ত করা হয়েছে। এছাড়াও, এসপি 3000 ইওল () ব্যাখ্যা করে অষ্টাল সহ একটি ইস্যু দেখিয়েছে এবং বিন্যাসকে সংক্ষিপ্ত করার, মানচিত্র () ব্যবহার এবং একটি মুদ্রণ সরিয়ে দেওয়ার উপায় দেখিয়েছে।

n=input();i=float;d=864e2
if':'in n:a,b,c=map(i,n.split(':'));o=a/24+b/1440+c/d
else:n=i(n);o=(':%02d'*3%(n*24,n*1440%60,n*d%60))[1:]
print o

এটি আদর্শ এখানে পরীক্ষা করে দেখুন।


2

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

f=x=>x[0]?([h,m,s]=x.split(':'),+s+m*60+h*3600)/86400:[24,60,60].map(y=>('0'+~~(x*=y)%60).slice(-2)).join(':')


// for snippet demo:
i=prompt();
i=i==+i?+i:i; // convert decimal string to number type
alert(f(i))

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

f=x=>
    x[0] ? // if x is a string (has a defined property at '0')
        ([h, m, s] = x.split(':'), // split into hours, minutes, seconds
        +s + m*60 + h*3600) // calculate number of seconds
        / 86400 // divide by seconds in a day
    : // else
        [24, 60, 60]. // array of hours, minutes, seconds
        map(y=> // map each with function
            ('0' + // prepend with string zero
                ~~(x *= y) // multiply x by y and floor it
                % 60 // get remainder
            ).slice(-2) // get last 2 digits
        ).join(':') // join resulting array with colons

24:00:00উত্পাদন করে 1তবে বিপরীতটি সত্য নয়
rink.attendant.6

@ rink.attendant.6 স্থির
nderscore

2

পাইথন 3: 143 বাইট

i,k,l,m=input(),60,86400,float
if'.'in i:i=m(i)*l;m=(3*':%02d'%(i/k/k,i/k%k,i%k))[1:]
else:a,b,c=map(m,i.split(':'));m=(a*k*k+b*k+c)/l
print(m)

পাইথন 2 সমাধান হিসাবে একই বাইট গণনা তবে এটি মনে হয় আমরা গণিতে পৃথক পদ্ধতি গ্রহণ করেছি।


2

জুলিয়া, 152 143 142 বাইট

ঠিক আছে, আমি গল্ফের খাতিরে বলেছি যে তারা "জুলিয়ান" কম হওয়ার জন্য আমার দৃষ্টিভঙ্গি আপডেট করেছি। আরও ভাল (যদিও কম সংক্ষিপ্ত) পদ্ধতির জন্য, পুনর্বিবেচনার ইতিহাসটি দেখুন।

x->(t=[3600,60,1];d=86400;typeof(x)<:String?dot(int(split(x,":")),t)/d:(x*=d;o="";for i=t q,x=x÷i,x%i;o*=lpad(int(q),2,0)*":"end;o[1:end-1]))

এটি একটি শিরোনামহীন ফাংশন তৈরি করে যা স্ট্রিং বা -৪-বিট ফ্লোটিং পয়েন্ট নম্বর গ্রহণ করে এবং যথাক্রমে একটি -৪-বিট ভাসমান পয়েন্ট নম্বর বা স্ট্রিং প্রদান করে। এটি কল করার জন্য, এটির একটি নাম দিনf=x->...

অবহেলিত + ব্যাখ্যা:

function f(x)
    # Construct a vector of the number of seconds in an hour,
    # minute, and second
    t = [3600, 60, 1]

    # Store the number of seconds in 24 hours
    d = 86400

    # Does the type of x inherit from the type String?
    if typeof(x) <: String
        # Compute the total number of observed seconds as the
        # dot product of the time split into a vector with the
        # number of seconds in an hour, minute, and second
        s = dot(int(split(x, ":")), t)

        # Get the proportion of the day by dividing this by
        # the number of seconds in 24 hours
        s / d
    else
        # Convert x to the number of observed seconds
        x *= d

        # Initialize an output string
        o = ""

        # Loop over the number of seconds in each time unit
        for i in t
            # Set q to be the quotient and x to be the remainder
            # from x divided by i
            q, x = divrem(x, i)

            # Append q to o, padded with zeroes as necessary
            o *= lpad(int(q), 2, 0) * ":"
        end

        # o has a trailing :, so return everything up to that
        o[1:end-1]
    end
end

উদাহরণ:

julia> f("23:42:12")
0.9876388888888888

julia> f(0.9876388888888888)
"23:42:12"

julia> f(f("23:42:12"))
"23:42:12"

2

সি, 137 বাইট

ফুল সি প্রোগ্রাম। স্টিডিনে স্টপ্ট এবং আউটপুটগুলিতে ইনপুট নেয়।

main(c){float a,b;scanf("%f:%f:%d",&a,&b,&c)<3?c=a*86400,printf("%02d:%02d:%02d",c/3600,c/60%60,c%60):printf("%f",a/24+b/1440+c/86400.);}

অবহেলিত এবং মন্তব্য করেছেন:

int main() {
    // b is float to save a . on 1440
    float a,b;
    // c is int to implicitly cast floats
    int c;

    // If the input is hh:mm:ss it gets splitted into a, b, c
    // Three arguments are filled, so ret = 3
    // If the input is a float, it gets stored in a
    // scanf stops at the first semicolon and only fills a, so ret = 1
    int ret = scanf("%f:%f:%d", &a, &b, &c);

    if(ret < 3) {
        // Got a float, convert to time
        // c = number of seconds from 00:00:00
        c = a * 86400;
        printf("%02d:%02d:%02d", c/3600, c/60 % 60, c%60);
    }
    else {
        // a = hh, b = mm, c = ss
        // In one day there are:
        // 24 hours
        // 1440 minutes
        // 86400 seconds
        printf("%f", a/24 + b/1440 + c/86400.);
    }
}

স্ক্যানফ এবং% f এর খুব স্পষ্ট ব্যবহার
কিছু ব্যবহারকারী

ডি আহা! আমি "চালাক" বলতে চাইছিলাম।
কিছু ব্যবহারকারী 4

2

জে, 85 বাইট

ফলাফল:

টি '12: 00: 00 '
0.5

টি 0.5
12 0 0

টি '12: 34: 56 '
0.524259

টি 0.524259
12 34 56

T=:3 :'a=.86400 if.1=#y do.>.(24 60 60#:y*a)else.a%~+/3600 60 1*".y#~#:192 24 3 end.'

মোট 85


সাইটে স্বাগতম! আমি আপনার পোস্টটি সম্পাদনা করেছি যাতে কোড কোড হিসাবে প্রদর্শিত হবে। একটি অনলাইন লিঙ্ক হিসাবে, আমি সবচেয়ে ভাল জানি টিআইও । আমি আপনাকে একটি লিঙ্ক দেব, তবে আমি জে এর সাথে অভিজ্ঞ নই, সুতরাং এটি চাওয়ার সঠিক উপায় আমি জানি না। এছাড়াও, আপনি যখন প্রথম এবং শেষ লাইন অন্তর্ভুক্ত করবেন তখন এটি 91 বাইট বলে মনে হয়। এটা কি সঠিক?
জেমস

আপনার সাহায্যের জন্য ধন্যবাদ! প্রোগ্রাম [a = ... শেষ হতে হবে।] 77 The আমি এটিতে কাজ করব: ও)
রিচার্ড ডোনভান

এখন নিচে 85 বাইট ওয়ান-লাইনারে!
রিচার্ড ডোনভান

1

জাভাস্ক্রিপ্ট, 194 192 190 188 বাইট

function(z){if(isNaN(z)){x=z.split(':');return x[0]/24+x[1]/1440+x[2]/86400}h=(z*24)|0;h%=24;m=(z*1440)|0;m%=60;s=(z*86400)|0;s%=60;return""+(h>9?'':0)+h+':'+(m>9?'':0)+m+':'+(s>9?'':0)+s}

1

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

s=>s==+s?'246060'.replace(/../g,l=>':'+('0'+~~(s*=+l)%60).slice(-2)).slice(1):s.split`:`.reduce((a,b)=>+b+(+a)*60)*1/864e2;f(0.5);

দুর্ভাগ্যক্রমে, সময় সম্পর্কিত ফাংশনগুলি (যেমন "তারিখ" এবং "টুটাইমস্ট্রিং") এই চ্যালেঞ্জটিতে অনুমোদিত নয়। অন্যথায় এটি করার অনেক বেশি সংক্ষিপ্ত উপায় =)
এমডব্লিউ 247

@ এমআরআর ২৪7 ওহ এটি দেখেনি, আমি তখন এটি ঠিক করব
ডাউনগোট

1

সি, 156 152 বাইট

আমি ভেবেছিলাম এটি সি এর পক্ষে সহজ হতে চলেছে তবে এখনও বেশ বড় আকারে শেষ হয়েছে। :(

n,m=60;d(char*s){strchr(s,58)?printf("%f",(float)(atoi(s)*m*m+atoi(s+3)*m+atoi(s+6))/m/m/24):printf("%02d:%02d:%02d",(n=atof(s)*m*m*24)/m/m,n/m%m,n%m);}

পরীক্ষা প্রোগ্রাম:

#include <stdio.h>
#include <stdlib.h>

int n,m=60;
d(char*s)
{
    strchr(s,':') ? 
        printf("%f",(float)(atoi(s)*m*m+atoi(s+3)*m+atoi(s+6))/m/m/24):
        printf("%02d:%02d:%02d",(n=atof(s)*m*m*24)/m/m,n/m%m,n%m);
}

int main()
{
    d("01:23:45");
    printf("\n");
    d("02:57:46");
    printf("\n");
    d("23:42:12");
    printf("\n");
    d("12:00:00");
    printf("\n");
    d("0.5");
    printf("\n");
    d("0.05816");
    printf("\n");
    d("0");
    printf("\n");
    d("1");
    printf("\n");
    return 0;
}

আউটপুট:

0.058160
0.123449
0.987639
0.500000
12:00:00
01:23:45
00:00:00
24:00:00

1

পিএইচপি, 70 69 বাইট

<?=strpos($t=$argv[1],58)?strtotime($t)/86400:date("H:i:s",$t*86400);

কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়, STDOUT- এ প্রিন্ট করে:

যদি
ইনপুটটিতে কোনও কোলন থাকে, তবে ইউনিক্স সময়কে রূপান্তর করুন এবং (প্রতি সেকেন্ডে) দ্বারা ভাগ করুন, অন্যথায় সংখ্যাটি মানটি (প্রতি সেকেন্ডে) এবং বহুভিত্তিক ইউনিক্স সময়কে বিন্যাস করুন hh:mm:ss



0

এক্সেল, 178 বাইট

=IF(LEFT(A1,2)="0.",TEXT(FLOOR(A1*24,1),"00")&":"&TEXT(MOD(FLOOR(A1*1440,1),60),"00")&":"&TEXT(MOD(FLOOR(A1*86400,1),60),"00"),((LEFT(A1,2)*60+MID(A1,4,2))*60+RIGHT(A1,2))/86400)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.