সময়ের কিং হো ইউনিট


40

ভার্নর ভিঞ্জের দুর্দান্ত এবং আকর্ষণীয় বই এ ডিপনেস ইন দ্য স্কাইতে (যা, আমি অত্যন্ত উচ্চারণের জন্য 1 টির পরামর্শ দিয়েছি ), বিভিন্ন তারকা ব্যবস্থায় ছড়িয়ে পড়া সংস্কৃতি, কং হো -তে "দিন," "মাস," "এর কোনও ধারণা নেই" বছর, "ইত্যাদি, এবং তাই এক অনন্য টাইমকিপিং সিস্টেম রয়েছে যা পুরো সময়টিকে সেকেন্ডে পরিমাপ করে। সর্বাধিক ব্যবহৃত ইউনিটগুলি হ'ল কাসে (কিলোসেকেন্ড), ম্যাসেক (মেগাসেকেন্ড) এবং গেসে (গিগাসেকেন্ড)। আমার নিজের বইয়ের অনুলিপি থেকে একটি কার্যকর চার্ট রয়েছে (যেহেতু আমি এটি অনলাইনে খুঁজে পাচ্ছি না):

সহজ চার্ট

আপনি বর্তমানে ফাম নুওয়েনে বিমান চালাচ্ছেন এবং আপনি " পৃথিবী " নামক এক অদ্ভুত, অজানা গ্রহের কাছ থেকে একটি বার্তা পেয়েছেন । 2 তারা আপনার চেয়ে আলাদা সময় ইউনিট ব্যবহার করে এবং আপনার কম্পিউটারগুলি তাদের চিনতে পারে না। জাহাজের আবাসিক প্রোগ্রামার-প্রত্নতত্ববিদ হিসাবে আপনার কাজটি হ্যান্ডলিং কোডটি প্যাচ করা যাতে এটি পৃথিবীর সময়ের এককগুলিকে স্বীকৃতি দেয় ।

স্বাভাবিকভাবেই, যেহেতু আপনি কেবল কয়েক অন্যান্য কেসিসের জন্য স্নিগ্ধতার বাইরে রয়েছেন, আপনি নিজের কোডটি যত তাড়াতাড়ি সংক্ষিপ্ত করতে চান যাতে এটি দ্রুত লেখা যায়। ভাগ্যক্রমে, একটি আন্তঃবিষ্টার ট্রেডিং সংস্কৃতি হিসাবে, Qeng হো উদ্ভাবিত প্রতিটি প্রোগ্রামিং ভাষার অ্যাক্সেস পেয়েছে।

ইনপুট

ইনপুটটি এক বা একাধিক স্পেস-বিচ্ছিন্ন উপাদানযুক্ত একক স্ট্রিং হবে । একটি কম্পোনেন্ট একটি পূর্ণসংখ্যা সংখ্যা> 0 এবং ≤ 255, তারপর একটি স্পেস হিসাবে সংজ্ঞায়িত করা হয়, এবং তারপর এক second, minute, hour, day, week, month, year, decade, অথবা century, সম্ভবত বহুবচন হয় (সঙ্গে একটি যোগ s, অথবা centuriesশেষ কেস জন্য)।

এখানে কিছু বৈধ উদাহরণ ইনপুট রয়েছে:

10 days 12 hours
1 year
184 centuries 1 second
9 weeks 6 days 2 hours 1 minute 20 seconds

আপনি ইনপুট সম্পর্কে নিম্নলিখিতটি ধরে নিতে পারেন:

  • ইউনিট বহুবচনকরণ সর্বদা প্রাসঙ্গিক সংখ্যার সাথে একমত হবে।

  • যদি ইনপুটটিতে একাধিক উপাদান থাকে তবে সেগুলি সর্বদা দৈর্ঘ্যের ক্রমবর্ধমান ক্রমে থাকবে।

এই চ্যালেঞ্জের উদ্দেশ্যে বিভিন্ন ইনপুট ইউনিট কী বোঝায় তা এখানে রয়েছে:

unit     relative    absolute
---------------------------------------
second   1 second    1 second
minute   60 seconds  60 seconds
hour     60 minutes  3600 seconds
day      24 hours    86400 seconds
week     7 days      604800 seconds
month    30 days     2592000 seconds
year     365 days    31536000 seconds
decade   10 years    315360000 seconds
century  10 decades  3153600000 seconds

আউটপুট

এখানে আপনার কোডটি সমর্থন করতে পারে এমন কেনেগ হো ইউনিট রয়েছে:

unit    relative      absolute
----------------------------------------
second  1 second      1 second
Ksec    1000 seconds  1000 seconds
Msec    1000 Ksecs    1000000 seconds
Gsec    1000 Msecs    1000000000 seconds

আপনার কোডের আউটপুট নির্ধারণ করতে নিম্নলিখিত অ্যালগরিদম ব্যবহার করুন:

  • প্রথমে ইনপুট প্রতিনিধিত্ব করে এমন মোট পরিমাণ যোগ করুন।

  • সবচেয়ে বৃহত্তর কেনেগ হো ইউনিটটি সংক্ষিপ্ত বা ইনপুট হিসাবে একই সময়ের পরিমাণ Find মূলতঃ সর্বনিম্ন একক বৃহত্তম ইউনিট সন্ধান করুন।

  • ইনপুটটিতে প্রদত্ত মোট সময়ের পরিমাণটিকে এই ইউনিটে রূপান্তর করুন এবং ফলাফলটি আউটপুট করুন, তিন দশমিক জায়গায় গোল করে।

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

বৃত্তাকার ফলাফলের ঠিক হয়, তাহলে 1.000, আপনি একবচন ব্যবহার করা আবশ্যক ( second, Ksec, Msec, Gsec); অন্যথায়, বহুবচন ব্যবহার করুন ( seconds, Ksecs, Msecs, Gsecs)।

নির্দিষ্ট প্রান্তের ক্ষেত্রে, আপনি সম্ভবত ইউনিট ব্যবহার করছেন, উদাহরণস্বরূপ, কাসেক, তবে 1000.000 কাসেকের একটি বৃত্তাকার ফলাফল পান। এই ক্ষেত্রে, আপনি কেবল 1000.000 Ksecsপরিবর্তে আউটপুট করতে পারেন 1 Msec

আপনি সর্বদা ধরে নিতে পারেন যে ইনপুটটি ইউনিটগুলির ক্রমবর্ধমান ক্রমে (শতাব্দী, দশক, বছর, ইত্যাদি); তদ্ব্যতীত, যে কোনও ইউনিটের পরে যে উপাদানটি আসে তা সর্বদা সংক্ষিপ্ত হবে (যা 1 decade 20 yearsঅবৈধ ইনপুট)।

পরীক্ষার মামলা

দ্রষ্টব্য: একটি তারকাচিহ্ন ( *) দ্বারা চিহ্নিত ফলাফলগুলি বৃত্তাকার পার্থক্যের কারণে একটি নগন্য পরিমাণে পৃথক হতে পারে।

input                                         output
-------------------------------------------------------------
1 hour                                        3.600 Ksecs
1 day                                         86.400 Ksecs
2 weeks                                       1.210 Msecs
1 year                                        31.536 Msecs
32 years                                      1.009 Gsecs   *
1 second                                      1.000 second
1 century 6 decades                           5.046 Gsecs   *
255 centuries                                 804.168 Gsecs
2 weeks 6 days 1 hour 19 minutes 4 seconds    1.733 Msecs
1 week 3 days 3 hours 7 minutes               875.220 Ksecs
1 week 4 days 13 hours 46 minutes 40 seconds  1.000 Msec
2 months 2 hours                              5.191 Msecs   *
16 minutes 39 seconds                         999.000 seconds

বিধি

  • এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

1: তবে আপনি অবশ্যই হার্ড স্কিফি পছন্দ করেন। যে ক্ষেত্রে আমি প্রথমে একটি ফায়ার আপ অন দিপ পড়ার পরামর্শ দিচ্ছি , এটি (আমার মতে) আরও চমত্কার।

2: ভাল, প্রযুক্তিগতভাবে "ওল্ড আর্থ" এর আকাশে ডিপনেসে বেশ কয়েকবার উল্লেখ করা হয়েছে , তবে ...


পরীক্ষার কেস 9 টি ভুল বলে মনে হচ্ছে (আমার উত্তর দেখুন)
edc65

1
এই জাহাজটি পৃথিবীর সময় জানে না, তবে পৃথিবীর সমস্ত প্রোগ্রামিং ভাষার সম্পূর্ণ জ্ঞান রয়েছে । খুব যৌক্তিক। </arcasm>
তালি দাও

2
ডাং, অন্তর্নির্মিত ইউনিট সমর্থনটি ব্যবহার করে আমার কাছে একটি খুব ছোট ম্যাথমেটিকা ​​সমাধান ছিল তবে এটি 2 months 2 hours"2 মাস * 2 ঘন্টা" হিসাবে ব্যাখ্যা করে ।
2012campion

1
হুম, আমি লক্ষ্য করেছি যে এই উপাদানগুলি অচলভাবে সময়-হ্যান্ডলিংয়ের ক্রিয়াকলাপগুলির মতো দেখতে অদ্ভুতভাবে দেখায় যা এই ভাষাগুলিতে কেউ ব্যবহার করে না।
র্যান্ডম 832

উত্তর:


6

এপিএল (ডায়ালগ এপিএল) , 157 156 154 151 154 141 142 বাইট

{∊(3⍕N)' '((B/S⊃' KMG')'sec','ond'/⍨~B←T≥1E3),'s'/⍨1≠N←T÷1E3*S←⌊1E3⍟T←+/×/↑⍎¨'\d+ .a?i?'⎕S'&'⊢⍵⊣c←10×d←10×⊃y m w←365 30 7×da←24×h←×⍨mi←60×s←1}

13 বাইট বন্ধ শেভ করার জন্য এনএনজি ধন্যবাদ।

থাকা আবশ্যক ⎕IO←0, যা অনেকগুলি এপিএলে ডিফল্ট।

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


যদি আপনি একটি নামকে (z এর মতো) 1E3 বরাদ্দ করেন তবে প্রথম বারে আপনি দুটি অক্ষর নষ্ট করেছেন, দ্বিতীয় দৃষ্টিতে আপনি ইতিমধ্যে একটি সংরক্ষণ করেছেন এবং তৃতীয় ঘটনা থেকে আপনি দুটি অক্ষর সংরক্ষণ করছেন। আপনি না?
lstefano

@lstefano না, প্রথম 4 খরচ হবে: ⌊1E3⍟⌊(z←1E3)⍟এবং তারপর পরবর্তী প্রতিটি 2 সংরক্ষণ করুন 1E3z
অ্যাডম

হ্যাঁ, একেবারে ঠিক। এবং প্রদত্ত যে তাদের মধ্যে কেবলমাত্র 3 জন রয়েছে, কোনও লাভ নেই। গোলমাল জন্য দুঃখিত।
lstefano

6

জাভাস্ক্রিপ্ট (ES6) 255

f=s=>(s=s.replace(/(\d+) (..)/g,(_,n,u)=>t+={se:1,mi:60,ho:3600,da:86400,we:604800,mo:2592e3,ye:31536e3,de:31536e4,ce:31536e5}[u]*n,t=0),[a,b]=t>=1e9?[t/1e9,' Gsec']:t>=1e6?[t/1e6,' Msec']:t>999?[t/1e3,' Ksec']:[t,' second'],a.toFixed(3)+b+(a-1?'s':''))  

// test

console.log=x=>O.innerHTML+=x+'\n'

;[
 ['1 hour','3.600 Ksecs']
,['1 day','86.400 Ksecs']
,['2 weeks','1.210 Msecs']
,['1 year','31.536 Msecs']
,['32 years','1.009 Gsecs'] 
,['1 second','1.000 second']
,['1 century 6 decades','5.046 Gsecs']
,['255 centuries','804.168 Gsecs']
,['2 weeks 6 days 1 hour 19 minutes 4 seconds','1.733 Msecs']
,['1 week 3 days 3 hours 7 minutes','875.220 Ksecs']
,['1 week 4 days 13 hours 46 minutes 40 seconds', '1.000 Msec']
,['2 months 2 hours', '5.191 Msecs']
,['16 minutes 39 seconds', '999 seconds']
].forEach(t=>console.log(t[0]+' '+f(t[0])+' (Check:'+t[1]+')'))
<pre id=O></pre>


2

পাইথন, 366 363 বাইট

d={};l=1;q=str.replace;i=q(raw_input(),"ie","y")
for u,t in zip('second minute hour day week month year decade century'.split(),(1,60,60,24,7,30./7,73./6,10,10)):l=t*l;d[u]=d[u+"s"]=l
while" "in i:
 i=q(q(i," ","*",1)," ","+",1)
q=eval(i,d);f={};l=1
for u in('second','Ksec','Msec','Gsec'):
 l*=1e3
 if q<l:q=q*1e3/l;print"%.3f %s%s"%(q,u,("s","")[q<1.001]);break

আপনার q=eval(i,d);f={};l=1লাইনে অপ্রয়োজনীয় ইন্ডেন্টেশন রয়েছে , যা কোড ভঙ্গ করে। এছাড়া আপনি ব্যবহার 2 বাইট সংরক্ষণ করতে পারবেন 10.এবং 73.পরিবর্তে 10.0এবং 73.0। এছাড়াও, পরে জায়গার দরকার নেই print
অ্যাল্যান্ড

2

স্পেসবিএএস - 476 471 বাইট

কারণ কিছুই লাইন সংখ্যা এবং জিওটিও বিবৃতিগুলির চেয়ে "আমাদের প্রযুক্তিগত শ্রেষ্ঠত্বের আগে মুখ্য" বলে না :-)

1 INPUT e$: DIM t$(SPLIT e$,NOT " "): DIM m=31536e5,31536e4,31536e3,2592e3,604800,86400,3600,60,1
2 LET q=0,n$=" cedeyemowedahomise"
3 FOR i=1 TO ARSIZE t$() STEP 2: LET t=VAL t$(i),u$=t$(i+1)( TO 2),p=POS(u$,n$)/2: INC q,t*m(p): NEXT i
4 IF q>=1e9 THEN LET r=q/1e9,r$=" G": GO TO 8
5 IF q>=1e6 THEN LET r=q/1e6,r$=" M": GO TO 8
6 IF q>999 THEN LET r=q/1e3,r$=" K": GO TO 8
7 IF q<1e3 THEN LET r=q,r$=" "
8 PRINT USING$("&.*0###",r);r$;"sec"+("ond" AND q<1e3)+("s" AND r>1)

1

সি # (ফাংশন হিসাবে লিনকপ্যাডে), 460 বাইট

void Main(){var x=Console.ReadLine().Split(' ');long s=0,v,i=0;for(;i<x.Length;){v=long.Parse(x[i++]);var w=x[i++].Substring(0,2);s+=w=="ce"?v*3153600000:w=="de"?v*315360000:w=="ye"?v*31536000:w=="mo"?v*2592000:w=="we"?v*604800:w=="da"?v*86400:w=="ho"?v*3600:w=="mi"?v*60:v;}decimal k=1000,m=k*k,g=m*k,r=0;var o="sec";r=s/g>=1?s/g:s/m>=1?s/m:s/k>=1?s/k:s;o=s/g>=1?"G"+o:s/m>=1?"M"+o:s/k>=1?"K"+o:o+"ond";Console.WriteLine(Math.Round(r,3)+" "+o+(r==1?"":"s"));}

ungolfed:

void Main()
{
    var x=Console.ReadLine().Split(' ');
    long s=0,v,i=0;
    for(;i<x.Length;)
    {
        v=long.Parse(x[i++]);
        var w=x[i++].Substring(0,2);
        s+=w=="ce"?v*3153600000:w=="de"?v*315360000:w=="ye"?v*31536000:w=="mo"?v*2592000:w=="we"?v*604800:w=="da"?v*86400:w=="ho"?v*3600:w=="mi"?v*60:v;
    }
    decimal k=1000,m=k*k,g=m*k,r=0;
    var o="sec";
    r=s/g>=1?s/g:s/m>=1?s/m:s/k>=1?s/k:s;
    o=s/g>=1?"G"+o:s/m>=1?"M"+o:s/k>=1?"K"+o:o+"ond";
    Console.WriteLine(Math.Round(r,3)+" "+o+(r==1?"":"s"));
}

1

গণিত 296 281 বাইট

h: পরিমাণ মাত্রার এবং এককের তালিকায় ইনপুট স্ট্রিং বিচ্ছেদ পর Capitalizeএবং Pluralizeম্যাথামেটিকাল মধ্যে ইনপুট ইউনিট রূপান্তর Quantityসেকেন্ড মোট সংখ্যা প্রাপ্ত করা হয় যেখান থেকে এর।

dসেকেন্ডকে যথাযথ ইউনিটে রূপান্তরিত করে। sসময়টি 1 ইউনিটের (কোনও প্রকারের) সাথে সঙ্গতিপূর্ণ হলে চূড়ান্ত সরানো হবে।

কোডটিতে সামান্য সামঞ্জস্যের সাথে, এই পদ্ধতির প্রাকৃতিক ভাষা ইনপুট কোনও পরিমাপ পদ্ধতিতে রূপান্তর করার জন্য কাজ করা উচিত, প্রচলিত বা না।

h=Tr[UnitConvert[Quantity@@{ToExpression@#,Capitalize@Pluralize@#2},"Seconds"]&@@@Partition[StringSplit@#,2]][[1]]&;
d=ToString[N@#/(c=10^{9,6,3,0})[[p=Position[l=NumberDecompose[#,c],x_/;x>0][[1,1]]]]]<>StringDrop[{" Gsecs"," Msecs"," Ksecs"," seconds"}[[p]],-Boole[Tr[l]==1]]&
z=d@h@#&;

টেবিল ফর্ম মধ্যে রাখুন:

z1[n_]:={n,z@n}

Grid[z1 /@ {"1 hour", "2 day", "2 weeks", "1 year", "32 years", 
   "1 second", "1 century 6 decades", "255 centuries", 
   "2 weeks 6 days 1 hour 7 minutes", 
   "1 week 3 days 3 hours 46 minutes 40 seconds", 
   "1 week 4 days 13 hours 46 minutes 40 seconds", "2 months 2 hours",
    "16 minutes 39 seconds"}, Alignment -> Right]

মাংসখণ্ডের


0

Haskell,, 565 555 বাইট

import Data.List
import Numeric
import Data.Bool
i=isPrefixOf
s x=showFFloat(Just 3)x""
r=read
f=fromIntegral
b=bool"s"""
c=b.(=="1.000")
h(c:u:l)
 |i"s"u=(r c)+h l
 |i"mi"u=(r c*60)+h l
 |i"h"u=(r c*3600)+h l
 |i"da"u=(r c*86400)+h l
 |i"w"u=(r c*604800)+h l
 |i"mo"u=(r c*2592000)+h l
 |i"y"u=(r c*31536000)+h l
 |i"de"u=(r c*315360000)+h l
 |True=(r c*3153600000)+h l
h _=0
q i
 |v<-s((f i)/10^9),i>=10^9=v++" Gsec"++c v
 |v<-s((f i)/10^6),i>=10^6=v++" Msec"++c v
 |v<-s((f i)/1000),i>=1000=v++" ksec"++c v
 |True=show i++" second"++b(i==1)
t=q.h.words

আমি যুক্তিসঙ্গতভাবে নিশ্চিত যে আমি এখানে অনেক গল্ফিংয়ের সুযোগগুলি মিস করছি ... আমার মনে হয় একটি গল্ফিং শিক্ষানবিস হওয়ার দাম।

আমার উত্তরটি এমন একটি ফাংশন যা একটি ইনপুট প্যারামিটার হিসাবে পৃথিবীর সময়যুক্ত স্ট্রিং গ্রহণ করে এবং কেনেগ হোয়ের সময় ফিরিয়ে দেয়।

PS: আমি নির্বোধের সাথে 3 অঙ্কের নির্ভুলতা সম্পর্কে ভুলে গিয়েছিলাম ... যা বাইট গণনা চালিয়ে যায়।

পিপিএস: সেরা বাছাই করা শীর্ষ-স্তরের এক্সপ্রেশনগুলি 10 বাইট বন্ধ করে দেয় ... এবং এটি এখন বুট করার জন্য সঠিক হওয়া উচিত।


0

মতলব 315 বাইট

K='cedeyemowedahomiseconds';Q=' KMGT';for j=1:9;y(j)=double(~isempty(strfind(S,K(2*j-1:2*j))));end
y(y==1)=sscanf(S,repmat('%d %*s ',1,9));y=86400*sum(datenum([sum(y(1:3)*10.^[2;1;0]),y(4),y(5:6)*[7;1],y(7:9)]));z=floor(log10(y)/3);y=num2str(y/10^(3*z)+1e-4);[y(1:4),' ',Q(z+1),K(17:23-(y(1:4)=='1.00'))]

টেস্ট:

S = '2 centuries 1 decade 2 years 3 months 3 weeks 4 days 1 hour 44 minutes 58 seconds';

আউটপুট:

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