সংক্ষিপ্ত স্ক্রিপ্ট যা ইউনিক্স টাইমস্ট্যাম্পের পরে সময় কেটে দেয়


9

এই চ্যালেঞ্জটি জিততে আপনার যা করা দরকার তা হ'ল সংক্ষিপ্ত "টাইমাগো" স্ক্রিপ্টটি লিখতে যা প্রদত্ত ইউনিক্স টাইমস্ট্যাম্প এবং স্ক্রিপ্টটি চালনার সময়টির মধ্যে দশক, বছর, সপ্তাহ, দিন, ঘন্টা, মিনিট এবং সেকেন্ডের সংখ্যাকে ছাড়িয়ে যায়।

আপনাকে অবশ্যই "সর্বনিম্ন পদগুলিতে" সময়ের পার্থক্য দিতে হবে, যেমন 1 weekনয় 7 days, 9 yearsনয় 0 decades 9 years। আপনাকে অবশ্যই বহুবচন রূপগুলি অবশ্যই সঠিকভাবে ব্যবহার করতে হবে, যেমন 1 dayনা 1 days

আপনার স্ক্রিপ্ট অবশ্যই প্লাস বা বিয়োগ 1 সেকেন্ডের মধ্যে সঠিক হতে হবে (সুতরাং সঠিক দ্বিতীয় রাউন্ডিং পদ্ধতিটি গুরুত্বহীন)।

Time Equivalency Table
1 decade = 10 years
1 year = 31536000 seconds (not technically correct but close enough)
1 week = 7 days
1 day = 24 hours
1 hour = 60 minutes
1 minute = 60 seconds

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

A decade(s) B year(s) C week(s) D day(s) E hour(s) F minute(s) G second(s)

যেখানে A...Gসমস্ত অ-নেতিবাচক পূর্ণসংখ্যা রয়েছে এবং sকেবল সেখানে বহুবচন রয়েছে।

মন্তব্য

  • টাইমস্ট্যাম্প সর্বদা অতীতের একটি সময় হবে। এটা নেতিবাচক হতে পারে।
  • ইনপুট এবং আউটপুট যুক্তিসঙ্গত যেকোন কিছু হতে পারে: স্টিডিন / স্টডআউট, ফাংশন ইনপুট এবং রিটার্ন মান ইত্যাদি etc.
  • ইতিমধ্যে এটি করা কোনও সরঞ্জাম আপনি ব্যবহার করতে পারবেন না। অর্থাত্ যদি আপনার ভাষায় কোনও timesince(timestamp)ফাংশন নির্মিত হয় তবে আপনি সেই ফাংশনটি ব্যবহার করতে পারবেন না।

অস্পষ্ট প্রশ্ন এবং পুরানো ব্যবহারকারীদের যাদের পরিপূর্ণতার প্রয়োজন রয়েছে তাদের মধ্যে কিছুটা নির্বোধ লড়াইয়ের আশ্বাসে এটি পরিষ্কার করার জন্য আমি এটি ব্যাপকভাবে সম্পাদনা করেছি have এটা একটা ভয়ানক প্রশ্ন (যদিও এখন এটা খুব অনুরূপ হতে পারে ছিল না এই )।

শেষ উত্তরের পরে যথেষ্ট সময় পার হয়ে গেছে, আমি থ্রি ইফ বাই হুইস্কি এর 177 বাইট দিয়ে রুবি বাস্তবায়নের সাথে এই প্রসঙ্গে বিজয়ী ঘোষণা করি !


2
"জাভাস্ক্রিপ্টের ক্ষেত্রে জিক্যুয়ারি নিষিদ্ধ: পি সমস্ত কিছু ঠিক আছে" " - জেপ্টো কি অনুমোদিত?
জন ডিভোরাক

4
চশমা দরিদ্র দরিদ্র। এটি করার কথা বলে অনুগ্রহ করে একটি সঠিক সংজ্ঞা দিন - উদাহরণ প্রয়োগ কার্যকর হয় না।
জন ডিভোরাক

1
টাইমাগো কিছু নতুন স্ক্রিপ্টিং ভাষা? প্রতি 30 সেকেন্ডে আপডেট করা optionচ্ছিক (এক জায়গায় যেমন বলা হয়েছে) বা প্রয়োজনীয়তা (অন্যদিকে যেমন বলা হয়েছে)? কোন আই / ও পদ্ধতি গ্রহণযোগ্য? কোন রাউন্ডিং ব্যবহার করা উচিত? বিশেষত, ক্যালেন্ডার মাস এবং বছরগুলির মতো পরিবর্তনশীল দৈর্ঘ্যের সময়কালের সাথে রাউন্ডিং কীভাবে যোগাযোগ করে? এর মধ্যে কয়েকটি আপনার উত্তরগুলির উপর নির্ভর করে ফলো-আপ প্রশ্নগুলি ইঙ্গিত করতে পারে।
পিটার টেলর

1
@ অ্যাডোসাম আমি জানি আমরা সকলেই বেশ উদ্বেগজনক বলে মনে করি তবে এটি কারণ কারণ এই সাইটের প্রশ্নগুলিতে উদ্দেশ্যমূলক বিজয়ী মানদণ্ড এবং একটি পরিষ্কার স্পেস রয়েছে
ক্যালভিনের

1
দুটি পরামর্শ: 1) এইচটিএমএল অংশটি ছেড়ে দিন। আমার ধারণা, মুদ্রণের সময়গুলির আসল কাজটি মোকাবেলা করার আগে কেউ এইচটিএমএল পার্সার লিখতে চায় না। 2) পরিষ্কার করুন যে আপনি "সেকেন্ড (গুলি)", "মিনিট (গুলি)", "ঘন্টা (গুলি)" এবং "দিন (গুলি)" সীমাবদ্ধ রেখেছেন। আপনি যদি চান তবে আপনি "সপ্তাহ (গুলি) যুক্ত করতে পারেন। কিন্তু মাস এবং বছরগুলি স্পষ্টভাবে সংজ্ঞায়িত হয় না (28-31 দিন / 365 বা 366 দিন ...)। এটি আমার দৃষ্টিতে এই প্রশ্নটি সহ বড় উদ্বেগগুলির সমাধান করা উচিত।
ফালকো

উত্তর:


2

রুবি, 184 177

->n{x=Time.now.to_i-n;d=[3650*y=86400,365*y,7*y,y,3600,60,1];(0..6).map{|i|c=x/d[i];(x%=d[i]*c;"#{c} #{%w[decade year week day hour minute second][i]}#{c<2?'':'s'}")if c>0}*' '}

এখানে বিশেষত চতুর কিছুই নেই, তবে আমি সন্দেহ করি এটি এখনও অনুকূলের খুব কাছাকাছি।

উদাহরণ রান

p ->n{x=Time.now.to_i-n;d=[3650*y=86400,365*y,7*y,y,3600,60,1];(0..6).map{|i|c=x/d[i];(x%=d[i]*c;"#{c} #{%w[decade year week day hour minute second][i]}#{c<2?'':'s'}")if c>0}*' '}[0]
"4 decades 4 years 41 weeks 3 days 14 hours 20 minutes 48 seconds"

2

জে, 165

;' '&,@":&.>@((#~([:*&>{."1))@((;:' decades years weeks days hours minutes seconds')(],.([}.~[:-1=])&.>)<"0@(_ 10 52 7 24 60 60&#:)@(-~([:".@}:[:2!:0'date +%s'"_))))

সম্ভবত আরও গল্ফ করা যেতে পারে। ইউনিক্সের যুগটি জেতে অনুপলব্ধ থাকায়, বর্তমান ইউনিক্স সময় সূচী পেতে পাওয়ার জন্য আজ অবধি শেল কল ব্যবহার করে

উদাহরণ রান:

;' '&,@":&.>@((#~([:*&>{."1))@((;:' decades years weeks days hours minutes seconds')(],.([}.~[:-1=])&.>)<"0@(_ 10 52 7 24 60 60&#:)@(-~([:".@}:[:2!:0'date +%s'"_)))) 0
4 decades 4 years 41 weeks 3 days 12 hours 54 minutes 1 second

2

পাইথন - 183

import time;t=int(time.time()-input());d=86400
for f,u in zip((3650*d,365*d,7*d,d,3600,60,1),'decade year week day hour minute second'.split()):
 if t/f:print`t/f`,u+'s'*(t/f>1),;t%=f

অতীতে টাইমস্ট্যাম্প 999996400 সেকেন্ডের জন্য আউটপুট:

3 decades 1 year 37 weeks 46 minutes 39 seconds

1

জাভাস্ক্রিপ্ট, 392

t=function(c){i=function(){var a=+new Date/1e3-c,b=document;29>a?b.write("just now"):60>a?b.write((a|0)+" seconds ago"):60<a&&120>a?b.write("1 minute ago"):60>a/60?b.write((a/60|0)+" minutes ago"):60<a/60&&120>a/60?b.write("1 hour ago"):24>a/3600?b.write((a/3600|0)+" hours ago"):24<a/3600&&48>a/3600?b.write("1 day ago"):1<=a/86400&&b.write((a/86400|0)+" days ago")};i();setInterval(i,3e4)};

কৌতূহলীগুলির জন্য অবিযুক্ত কোড

t = function(timestamp){

i = function() {
var diff = (+new Date/1e3)-(timestamp),
d = document;

    if( (diff) < 29) {

        d.write( 'just now' )
    }
    else if( diff < 60) {

        d.write( ( (diff) |0 ) + ' seconds ago' )
    }
    else if( diff > 60 && diff < 120) {
        d.write(  '1 minute ago' )
    }
    else if( (diff)/60 < 60) {
        d.write( ( (diff)/60 |0 ) + ' minutes ago' )
    }
    else if( (diff)/60 > 60 && (diff)/60 < 120) {
        d.write( '1 hour ago' )
    }
    else if( (diff)/3600 < 24) {
        d.write( ( (diff)/3600 |0 ) + ' hours ago' )
    }
    else if( (diff)/3600 > 24 && (diff)/3600 < 48) {
        d.write( '1 day ago' )
    }
    else if( (diff)/86400 >= 1) {
        d.write( ( (diff)/86400 |0 ) + ' days ago' )
    }
  }

i()

setInterval(i, 3e4)

}

এটি প্রতি 30 সেকেন্ডে আপডেট হয় এবং একক এবং বহুবচন উভয়ই গণনা করে।

এটি চালাতে t(unix_timestamp)


আপনার কি চর্বিযুক্ত তীর চিহ্ন ব্যবহার করা উচিত নয়?
গর্বিত হাস্কেলর

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

@ user965091 আমি এখানে কোনও মন্তব্য কীভাবে "উস্কানি" হিসাবে বিবেচিত হতে পারি তা দেখছি না don't যে কোনও ক্ষেত্রে, স্ট্যাক এক্সচেঞ্জ নেটওয়ার্কে অভদ্রতা সহ্য করা হয় না । আপনারা সন্দেহ করছেন যে তারা নিয়মগুলি ভঙ্গ করছে কিনা বা অন্য কোনও কারণে, দয়া করে সমস্ত ব্যবহারকারীর প্রতি বিনয়ী হওয়ার চেষ্টা করুন ।
ডুরকনব

1

জাভাস্ক্রিপ্ট, 287

function p(e,n){return e>2?e+" "+n+"s ":e+" "+n+" "}function t(e){n=new Date/1e3,l=e-n,c=1,m=60,h=60*m,d=24*h,w=7*d,y=365*d,a=10*y,s="",v={a:"Decade",y:"Year",w:"Week",d:"Day",h:"Hour",m:"Minute",c:"Second"};for(i in v)k=v[i],i=window[i],(r=Math.floor(l/i))>0&&(s+=p(r,k)),l%=i;alert(s)}

ব্যবহার চালাতে t(secondsInFuture);


1
আমি যখন চালাচ্ছি t(10)আমি খালি খালি পাই alert
ইনগো বার্ক

উঘ, কয়েক সেকেন্ড ভুলে গেছেন, ধন্যবাদ @ ইনগোবার্ক। এর পরিষ্কার হতেt(new Date()/1000 + 10);
বিজয়

ES6 এর চর্বিযুক্ত তীর চিহ্নটি ব্যবহার করুন, eval(i)এটি 2 বাইটের চেয়েও কম window[i]
nyuszika7h

0

জাভাস্ক্রিপ্ট, 263

i=[315360000,31536000,604800,86400,3600,60,1];s=['decade','year','week','day','hour','minute','second'];function g(d){return p(parseInt((new Date().getTime()-d)/1000), 0);}function p(d,n){k=d-d%i[n];r=k/i[n];return (r>0?r+' '+s[n]+'(s) ':'')+(n<6?p(d-k,n+1):'');}

জাভাস্ক্রিপ্ট কনসোল থেকে চালানোর জন্য, কল করুন

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