মাইক্রোসেকেন্ডগুলিকে ঘন্টা হিসাবে বিন্যাস করুন: মিনিট: সেকেন্ড, ইত্যাদি


28

নিম্নলিখিত আজ স্ট্যাক ওভারফ্লোতে উঠে আসা একটি প্রশ্ন দ্বারা অনুপ্রাণিত হয় ।

বেশ কয়েকটি মাইক্রোসেকেন্ড দেওয়া 0 <= n <= 86400000000(যেমন 12345678900), আউটপুট একটি ফর্ম্যাট স্ট্রিং hh:mm:ss:000:000, যেমন 03:25:45:678:900

          0 -> '00:00:00:000:000'
12345678900 -> '03:25:45:678:900'
86400000000 -> '24:00:00:000:000'

আমার পাইথনে 209 বাইটে একটি সমাধান আছে, তবে এটি কী আরও কম যেতে পারে?


1
আমি এখন উপলব্ধি করেছি যে এটি লেখার সময়গুলির জন্য সত্যই কোনও আদর্শ বিন্যাস নয় এবং hh:mm:ss.000000সম্ভবত এটি আরও ভাল (এবং সহজ) হতে পারত। তবুও, এখনই এটি পরিবর্তন করা যায় না।
স্যাম

1
কৌতূহলের বাইরে, এসও পোস্টটি কী ছিল?
ডিজিটাল ট্রমা

অপেক্ষাকৃত নতুন ব্যবহারকারীর দ্বারা @ ডিজিটালট্রামা স্ট্যাকওভারফ্লো. com/ প্রশ্নস / ৩১২৫১7777 । ইতিমধ্যে একটি সঠিক উত্তরটি বেছে নেওয়া হয়েছিল, আমি কেবল আইডিএল-তে খেলছিলাম এবং একটি উদ্ভট-দৃষ্টিকোণ অভিধান উপলব্ধিটি নিয়ে এলাম যা প্রশ্নের বিশেষ উত্তর ছিল না। কেউ এটি দেখে এবং একটি মন্তব্যে এই সাইটটি নির্দেশ করেছেন। আমি এখানে এসেছি, একটি প্রশ্ন লিখেছি (এসও পোস্টের থেকে কিছুটা আলাদা), এবং আমার উত্তরের একটি আরও উন্নত সংস্করণও লিখেছি (যা আমি পোস্ট করি নি, এবং যা এখন নীচের সমস্ত আরও কমপ্যাক্ট এবং কল্পিত উত্তরগুলির জন্য অপ্রয়োজনীয়) ।
স্যাম

ইনপুটটিতে কি ঘন্টা সংখ্যার সীমা রয়েছে?
FUZxxl

হ্যাঁ, ইচ্ছামত আমি এটিকে <= 8640000000000 মাইক্রোসিস তৈরি করেছি, তাই <= 24 ঘন্টা।
স্যাম

উত্তর:


15

পাইথন 2, 82 79 বাইট

n=input()
o=""
for k in[1000]*2+[60]*3:o=":%0*d"%(k%7/2,n%k)+o;n/=k
print o[1:]

স্ট্রিমটি তৈরি করে, ডিভোডসের একটি সিরিজ দিয়ে পুনরাবৃত্তি করে। একমাত্র অভিনব বিট হ'ল %7/2, কোনটি মানচিত্র 1000 -> 3এবং 60 -> 2


6

পাইথ, 31 বাইট

j\:_m>l`td+"00"%~/QddCM"ϨϨ<<<

অনলাইনে চেষ্টা করুন: বিক্ষোভ

ব্যাখ্যা:

                                 implicit: Q = input number
                       "ϨϨ<<<   string "ϨϨ<<<" (5 chars but 7 bytes)
                     CM          convert each to number => [1000, 1000, 60, 60, 60]
    m                            map each number d to:
                 /Qd                divide Q by d
                ~                   and update Q with the new value
               %~ Q d               but use the old value to calculate Q mod d
          +"00"                     add the result to the string "00"
     >                              but only take the last 
      l`td                          len(str(d-1)) chars
   _                             revert order
j\:                              join the strings with ":"s

5

বাশ + কোর্টিলস, 61

এখন পর্যন্ত সংক্ষিপ্ততম "মূলধারার" ভাষা ...

a=%02d:
printf $a$a$a%03d:%03d `dc -e$1\ A00~rA00~r60~r60~rf`

পরীক্ষার আউটপুট:

$ for t in 0 12345678900 86400000000; do ./usec.sh $t; echo; done
00:00:00:000:000
03:25:45:678:900
24:00:00:000:000
$ 


4

সি, 97 বাইট

q=1000,s=60;
#define f(n)printf("%02d:%02d:%02d:%03d:%03d",n/s/s/q/q,n/s/q/q%s,n/q/q%s,n/q%q,n%q)

পরীক্ষার কোড:

int main(int intc, char **argv)
{
    long long n = atoll(argv[1]);
    f(n);
}

1
সি-তে উত্তরগুলি একটি সম্পূর্ণ, প্রোগ্রাম হিসাবে অনুমিত হয়; একটি স্নিপেট না
নোবিনাডা - মনিকা

এটি প্রশ্নে উল্লেখ করা হয়নি। কিছু বিশ্বব্যাপী প্রয়োজনীয়তা আছে?
কিছু ব্যবহারকারী


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

3
এই সাইটে প্রচুর উত্তর পুরো প্রোগ্রামগুলির পরিবর্তে ফাংশন ব্যবহার করে - উদাহরণস্বরূপ আমি কখনও মনে করি না যে আমি কোনও জাভা উত্তর দেখেছি যা একটি সম্পূর্ণ প্রোগ্রাম ছিল ...
জেরি যেরেমিয়া

4

q (34)

আমি নিশ্চিত যে এটি আরও কম হতে পারে

":"sv 0 8 11__[;8]15$2_($)16h$1e3*

যেমন

q)f:":"sv 0 8 11__[;8]15$2_($)16h$1e3*
q)f 12345678900
"03:25:45:678:900"

4
কোন অনলাইন সংকলক? অন্য কথায় - আমি কীভাবে এটি অলস ব্যক্তি হিসাবে চালাব?
অপ্টিমাইজার 21

32 বিট সংস্করণটি কেএক্স.কম
স্কিভে

ভাল জায়গা দুর্ভাগ্যক্রমে
ফিক্সটি

1
আপনি এখানে আরও বাইট কাটতে পারেন":"sv 0 8 11__[;8]15$2_($)"n"$1e3*
WooiKent Lee

3

জুলিয়া, 110 96 95 বাইট

t->(o="";for i=int([36e8,6e7,1e6,1e3,1]) x,t=t÷i,t%i;o*=lpad(x,i>1e3?2:3,0)*":"end;o[1:end-1])

এটি একটি নামবিহীন ফাংশন তৈরি করে যা কোনও পূর্ণসংখ্যাকে ইনপুট হিসাবে গ্রহণ করে এবং একটি স্ট্রিং প্রদান করে। এটি কল করার জন্য, এটির একটি নাম দিনf=t->...

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

function f(t)
    # Initialize an output string
    o = ""

    # Loop over an array consisting of the number of microseconds in
    # an hour, minute, second, millisecond, and microsecond
    for i = int([36e8, 6e7, 1e6, 1e3, 1])

        # Get the quotient and remainder for microseconds into t,
        # setting t to be the remainder
        x, t = t ÷ i, t % i

        # Left-pad x with zeroes and append it to the output
        o *= lpad(x, i > 1e3 ? 2 : 3, 0) * ":"
    end

    # o has a trailing :, so return everything but the last character
    o[1:end-1]
end

উদাহরণ:

julia> f(12345678900)
"03:25:45:678:900"

julia> f(0)
"00:00:00:000:000"

julia> f(86400000000)
"24:00:00:000:000"

সুন্দর. আপনি আমার ভোট পেয়েছেন কারণ আপনি আমার মতলব উত্তরটি অনুপ্রাণিত করেছেন :-)
হকি

3

সি #, 179 175 বাইট

যখন আপনার নিজের হাতে বিল্টিন রয়েছে, তখন কেন তাদের ব্যবহার করবেন না?

static void Main(string[]a){var t=TimeSpan.FromTicks(long.Parse(Console.ReadLine())*10);Console.Write(t.ToString((t.Days<1?"hh":@"\2\4")+@"\:mm\:ss\:ffffff").Insert(12,":"));}

আরও ভাল ফর্ম্যাটিং সহ:

static void Main(string[]a){
    var t = TimeSpan.FromTicks(long.Parse(Console.ReadLine())*10);
    Console.Write(t.ToString((t.Days<1?"hh":@"\2\4")+@"\:mm\:ss\:ffffff").Insert(12,":"));
    Console.Read();
}

3

এক্সেল, 65 63 টি অক্ষর

ধরে নেওয়া আপনার মাইক্রোসেকেন্ডগুলি এ 1 এ রয়েছে :

=TEXT(A1/50/1200^3,"[HH]:mm:ss:")&RIGHT(TEXT(A1,"000\:000"),7)

আউটপুট:

        A              B
1            0  00:00:00:000:000
2  12345678900  03:25:46:678:900
3  86400000000  24:00:00:000:000

2

পার্ল, 141 78 বাইট

printf"%02d"x3.%03d:%03d",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_‌​%1e3

77 টি বাইট কোডের জন্য, -nপতাকাটির জন্য +1 । সাথে চালান:

echo 12345678900 | perl -ne'printf"%02d"x3.%03d:%03d",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_‌​%1e3'

থমাস কোওয়া এবং আমার কোডের আকারটি প্রায় অর্ধেক কেটে দেওয়ার জন্য চিলিমাজিককে ধন্যবাদ জানাই।


আমার মনে হয় 3600000000হতে পারে 36e8
lirtosiast

পরিবর্তে chomp($n=<STDIN>);আপনি এটি -nপতাকা সহ ওয়ান-লাইনার হিসাবে চালাতে পারেন (যা 1 টি চরিত্র হিসাবে গণনা করা হয়)। int(..)আপনারও প্রত্যেকের চারপাশের দরকার নেই $_। থমাসের টিপটি প্রয়োগ করাও আমরা এটিকে নামিয়ে আনতে পারি echo 12345678900 | perl -ne'printf"%02d:%02d:%02d:%03d:%03d\n",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_%1e3'এবং আরও ছোট একটি উপায়ও হতে পারে!
hmatt1

আপনার \nআউটপুট স্ট্রিংয়ের দরকার নেই । এছাড়াও আপনি সাথে STRING প্রতিস্থাপন করতে পারেন"%02d:"x3 ."%03d:%03d"
hmatt1

@ চিলেমাজিক কি "প্রতিধ্বনি" গণনাটি বাইট বৃদ্ধি হিসাবে ব্যবহার করে?
ASCIIThenANSI

@ এসসিআইথেনানসি এটি আপনার প্রোগ্রামের অংশ না বলে এটি করে না। আপনি যে অক্ষরগুলি গণনা করবেন সেগুলি হ'ল একক উদ্ধৃতিগুলির মধ্যে অর্থাত্ printf"%02d:%02d:%02d:%03d:%03d\n",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_‌​%1e3এবং তারপরে আপনি -nপতাকাটির জন্য একটি অতিরিক্ত বাইট যুক্ত করবেন । যদি আপনি -nleউদাহরণস্বরূপ ব্যবহার করেন তবে এটি অতিরিক্ত 2 হিসাবে গণ্য হবে (এবং nএবং এর জন্য l)। আপনি পেতে -এবং e(অথবা Eআপনার ব্যবহারের জন্য প্রয়োজন হলে say) বিনামূল্যে জন্য।
hmatt1

1

মতলব - 88 89 বাইট

বিল্ট ইন ফাংশনটি ব্যবহার না করে সমাধান সহ একটি বাইট অর্জন করেছেন:

n=[36e8,6e7,1e6,1e3];f=@(t)sprintf('%02d:%02d:%02d:%03d:%03d',fix([t mod(t,n)]./[n 1]))

একটি ইনলাইন ফাংশন তৈরি করুন যা একটি সংখ্যার ইনপুট আর্গুমেন্ট নেয় t এবং একটি স্ট্রিং ফেরত দেয়।

এটি fixএবং এর একটি ভেক্টরাইজড সংমিশ্রণ ব্যবহার করেmod সময় উপাদানের আলাদা, তারপর প্রদর্শন।

এটি খানিকটা হতাশার যে আউটপুট স্ট্রিংয়ের ফর্ম্যাটিংটি নিজেরাই গণনার চেয়ে অনেক বেশি নেয় ...

টেস্ট:

for t=[0 12345678900 86400000000]
    f(t)
end

ans =
00:00:00:000:000
ans =
03:25:45:678:900
ans =
24:00:00:000:000

89 বাইট সংস্করণ:

f=@(t)sprintf('%s:%03d:%03d',datestr(fix(t/1e6)/86400,13),fix(mod(t,1e6)/1e3),mod(t,1e3))

এটি সংখ্যাটি বিভক্ত করে, এইচএইচ: মিমি: এসএস অংশের জন্য একটি অন্তর্নির্মিত ফাংশন ব্যবহার করে, যা মাইক্রোসেকেন্ডগুলির সাথে ডিল করতে পারে না তাই স্ট্রিংটি সংমিশ্রণ fixএবং modক্রিয়াকলাপের সাথে সমাপ্ত হয়


1

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

এটিতে কিছু গল্ফ সম্ভাবনা রয়েছে।

f=t=>(t<864e8?new Date(t/1e3).toJSON().slice(11,-1):`24:00:00:000`).replace(`.`,`:`)+':'+('00'+t%1e3).slice(-3)

ডেমো

এটি ES6 তাই শুধুমাত্র ফায়ারফক্স, যাইহোক:

f=t=>(t<864e8?new Date(t/1e3).toJSON().slice(11,-1):`24:00:00:000`).replace(`.`,`:`)+':'+('00'+t%1e3).slice(-3)

// DEMO
document.body.innerHTML += '<br>' + f(0);
document.body.innerHTML += '<br>' + f(12345678020);
document.body.innerHTML += '<br>' + f(86400000000);


প্রথম চেকের প্রয়োজন নেই, যেমন প্রশ্নটি স্পষ্ট: 0 <= n <= 86400000000
edc65

@ edc65 প্রথম চেক ব্যতীত আমি কেবল 0 ≤ n <86400000000 এর ব্যাপ্তি পেতে পারি, কারণ 8.64e10 পরের দিনটিতে গড়াবে।
rink.attendant.6

ওহ ঠিক আছে, আমি এটা মিস করেছি। toISOString () এর পরিবর্তে toJSON ()?
edc65

1

সি, 113 103 105 বাইট

সম্পাদনা: আরও কিছু বাইট বন্ধ করা

ফিক্স: সরানো দীর্ঘ প্রকার, কিছু ব্যবহারকারীর জন্য ধন্যবাদ

সংক্ষিপ্ত সি উত্তর নয়, তবে আমি গাড়ীর রিটার্নের সাথে কিছুটা মজা পেয়েছি তাই আমি অনুভব করেছি যে কেউ এটি পছন্দ করতে পারে।

i,k,p=16;
#define f(n)for(;i<5;p-=i++<2?4:3)k=i<2?1000:60,printf("%0*d%c\r",p,n%k,i?58:13),n/=k;puts("");

এটিকে কল করুন:

int main() {
    long long n = 12345678900;
    f(n);

    return 0;
}

প্ল্যাটফর্মে নির্ভর করে, "দীর্ঘ" কেবল 32-বিট হতে পারে। ( এন.ইউইকিপিডিয়া . org / উইকি / -64- বিট_কমপুটিং ing6464- বিট_ডেটা_মডেল দেখুন )। আমি "এফ" কে ফাংশনের পরিবর্তে ম্যাক্রো হিসাবে ঘোষণা করে সমস্যাটি এড়িয়েছি।
কিছু ব্যবহারকারী

আমি লক্ষ্য করেছি। আমি এক্স 64 এ জিসিসি ধরেছি, কাল এটি ঠিক করে দিচ্ছি।
আন্দ্রে বিওনদো

0

কফিস্ক্রিপ্ট, 127 বাইট

মধ্যে পদ্ধতির নেন ASCIIThenANSI এর উত্তর । এটি খুব খারাপ যে জাভাস্ক্রিপ্ট কনসোল এপিআই-তে প্যাডিং সংখ্যার জন্য ফর্ম্যাট স্থানধারক নেই।

p=(a,b)->('00'+~~a).slice -b||-2
f=(t)->console.log '%s:%s:%s:%s:%s',p(t/36e8),p(t/6e7%60),p(t/1e6%60),p(t/1e3%1e3,3),p t%1e3,3

0

PowerShell, 153

$t=[timespan]::FromTicks(($a=$args[0]));"{0:D2}:{1:D2}:{2:D2}:{3:D3}:{4:000}"-f
[int]($t.TotalHours),$t.Minutes,$t.Seconds,$t.Milliseconds,(($a%1e4)/10)

ব্যবহার

powershell -nologo .\modprintsec.ps1 123456789000    
03:25:45:678:900   
powershell -nologo .\modprintsec.ps1 864000000000   
24:00:00:000:000   
powershell -nologo .\modprintsec.ps1 0   
00:00:00:000:000 

0

এফ #, 111 92 102 বাইট

প্রথম পুনরাবৃত্তি: বেস ধারণা।

দ্বিতীয় পুনরাবৃত্তি: ছোট ধ্রুবক

তৃতীয় পুনরাবৃত্তি: একক অঙ্কের অংশগুলির জন্য সঠিক ফর্ম্যাটিং।

নোট করুন এই ফাংশনটি অবশ্যই কাজ করার জন্য একটি int64 দেওয়া উচিত।

let s,t=60L,1000L
let f n=sprintf"%02d:%02d:%02d:%03d:%03d"(n/s/s/t/t)(n/s/t/t%s)(n/t/t%s)(n/t%t)(n%t)

উদাহরণ ফলাফল:

f 0L           -> "00:00:00:000:000"
f 12345678900L -> "03:25:45:678:900"
f 86400000000L -> "24:00:00:000:000"

0

পিএইচপি - 115 102 বাইট

155 বাইটে একটি সমাধান (পাঠযোগ্যতার জন্য এখানে 3 লাইনে মোড়ানো):

$a=$argv[1];
$h=($a-($m=($a=($a-($s=($a=($a-($t=($a=($a-($u=$a%1000))/1000)%1000))/1000)%60))/60)%60))/60;
printf("%02d:%02d:%02d:%03d:%03d",$h,$m,$s,$t,$u);

দ্বিতীয় লাইনের গণনাগুলি (ভিতরে থেকে বাইরের দিকে) মাইক্রোসেকেন্ডগুলি দিয়ে শুরু হওয়া উপাদানগুলির সঠিক মানগুলি।

সংক্ষিপ্ত সংস্করণ (১১৪ বাইট, পাঠযোগ্যতার জন্য দুটি লাইনে আবৃত):

$u=$argv[1];$h=($m=($s=($t=$u/1000)/1000)/60)/60;
printf("%02d:%02d:%02d:%03d:%03d",$h,$m%60,$s%60,$t%1000,$u%1000);

এটি ভাসমান পয়েন্ট সংখ্যা ব্যবহার করে মিলি সেকেন্ড, সেকেন্ড, মিনিট এবং ঘন্টাগুলিতে মাইক্রোসেকেন্ডগুলির ইনপুট সংখ্যার গণনা করতে এম্বেডড অ্যাসাইনমেন্টগুলি ব্যবহার করে। মডুলাস অপারেটর ( %) এবং এর দশমিক সংখ্যা বিন্যাস ( %d)printf() পরে তাদের পূর্ণসংখ্যার সংখ্যায় বাধ্য করতে ব্যবহৃত হয় (ভগ্নাংশটি উপেক্ষা করা হয়)।

আরেকটি সমাধান যা তারিখ ফাংশন ব্যবহার করে (১০২ বাইট)

$u=$argv[1];
echo gmdate("H:i:s",strtotime("@".substr($u,0,-6))),":",substr($u,-6,3),":",substr($u,-3);

ঘন্টা: মিনিট: সেকেন্ডের অংশটি পিএইচপি তারিখ ফাংশন gmdate()এবং দ্বারা পরিচালিত হয়strtotime() মিলি এবং মাইক্রো সেকেন্ডগুলি ইনপুট মান থেকে স্ট্রিং হিসাবে বের করা হয়।

ব্যবহার:

$ php -r '$u=$argv[1];echo gmdate("H:i:s",strtotime("@".substr($u,0,-6))),":",substr($u,-6,3),":",substr($u,-3);' 7198898787; echo
01:59:58:898:787

0

জাভা, 215 বাইট

String f(long n){return p(n/3600000000l,2)+":"+p(n/60000000%60,2)+":"+p(n/1000000%60,2)+":"+p(n/1000%1000,3)+":"+p(n%1000,3);}String p(long n,int i){String s=String.valueOf(n);while(s.length()<i){s="0"+s;}return s;}

পদ্ধতি fnঘন্টা, মিনিট ইত্যাদির বাইরে কাজ করার জন্য কিছু গণনা করেp প্রতিটি মানকে সঠিকভাবে ফর্ম্যাট করার ।

বিন্যাসকৃত:

String f(long n) {
    return p(n / 3600000000l, 2) + ":" + p(n / 60000000 % 60, 2) + ":" 
            + p(n / 1000000 % 60, 2) + ":" + p(n / 1000 % 1000, 3) + ":" + p(n % 1000, 3);
}

String p(long n, int i) {
    String s = String.valueOf(n);
    while (s.length() < i) {
        s = "0" + s;
    }
    return s;
}

ব্যবহার:

public void demo() {
    long n = 12345678900l;
    System.out.println(f(n));
}

-1

রুবি - 82 বাইট

puts (t=Time.at(0,gets.to_i)).strftime("%2H:%2M:%2S:%3L:#{(t.usec%1000).to_s.rjust(3,?0)}")

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