এই তারিখ পর্যন্ত কত দিন?


11

ধারণাটি হ'ল: এখন / আজকের তারিখ থেকে আর্গুমেন্ট হিসাবে সরবরাহিত তারিখ পর্যন্ত (বর্তমান সময়ে ফাংশনটি বলা হয়) মুদ্রণের জন্য একটি ফাংশন লিখুন।

অনুমিতি:

  • ইনপুট তারিখ সর্বদা আগামীকাল বা পরবর্তী সময়ে, ভবিষ্যতে থাকবে।
  • ইনপুট তারিখ ভবিষ্যতে কখনই 10 বছরের বেশি হবে না।

নিয়মাবলী:

  • আউটপুট অবশ্যই এই ফর্ম্যাটে থাকতে হবে: "[জেড বছর (গুলি)], [x মাস (গুলি)], ই-ইনপুট তারিখ- অবধি y দিন (গুলি)"
  • আউটপুট সময় ফ্রেম (দিন / মাস / বছর) সঠিকভাবে বহুবচন করতে হবে। যেমন 1 month, না1 months
  • ইনপুট যেটা তারিখ বিন্যাস হতে পারে আপনি পছন্দ (- 15 মার্চ, 2012 - 2012.03.15 3/15/12)।

উদাহরণ: ধরে নেওয়া প্রোগ্রামটি মার্চ 15, 2012 এ চালিত হয়:

  • ইনপুট তারিখ 3/20/12=5 days until 3/20/12
  • 4/16/12= এর ইনপুট তারিখ নয়1 month, 1 days until 3/20/12
  • ইনপুট তারিখ 2012.04.20=1 month, 5 days until 2012.04.20
  • 2012.04.20= এর ইনপুট তারিখ নয়36 days until 2012.04.20
  • ইনপুট তারিখ 10/31/17=5 years, 7 months, 16 days until 10/31/17
  • ইনপুট তারিখ 3/15/13=1 year until 3/15/13

এটি কোড গল্ফ, সুতরাং সবচেয়ে সংক্ষিপ্ত দৈর্ঘ্যের কোড জিতবে।

আমি মনে করি একটি সময়সীমা বেঁধে দেওয়ার জন্য, আমি একটি উত্তর নির্বাচন করব:

23 শে মার্চ, 2012!

(এটি আমার প্রথম সিজি প্রশ্ন, সুতরাং আমি আমার পক্ষ থেকে যে কোনও প্রশ্নের ত্রুটি সংশোধন করে খুশি হব!)


3
ওল্ফ্রাম | আলফা 10 অক্ষর:: now until <input time> পি
গ্রিফিন

3
@ গ্রিফিন ৪ টি চর:now-<input time>
ফিনটপি

1
@ ফিলনটপি ভাল খেলেছে, ভালো স্যার।
গ্রিফিন

2
"3/16/12 অবধি 1 দিন" বলা কি ঠিক আছে?
মিঃজান্ডার

1
উত্তরে লিপ ইরাসের সাথে কীভাবে কাজ করবেন? 10 বছরের মধ্যে 2 দিনের ত্রুটি হবে। মাস কত দিন?
হাউলেথ

উত্তর:


3

আর, 99 টি অক্ষর

আমি জানি এটি ধরণের প্রতারণা, তবে আর এর সমস্ত প্যাকেজগুলিই রয়েছে এবং লুব্রিডেট এই ধরণের কাজের জন্য এতটাই সুবিধাজনক!

f=function(x){library(lubridate);cat(show(as.period(interval(mdy("3/15/2012"),mdy(x)))),"until",x)}

ব্যবহার:

f("10/31/2017")
[1] 5 years, 7 months and 16 days 
5 years, 7 months and 16 days  until 10/31/2017

1

পিএইচপি, 315 টি অক্ষর

function p($z)
{
list($d,$m,$y)=explode("/",$z);
$d=$d-date("d");
$n=$m-1;
$m=$m-date("m")-($d<0);
$d=$d+($d<0)*($n>7^$n&1)+27+($n-2?3:($y%4?1:($y%100?2:($y%400?1:2))));
$y=$y-date("Y")-($m<0);
$s="s ";
echo ($y?$y." year".$s[$y<2]:"")." ".($m?$m." month".$s[$m<2]:"")." ".($d?$d." day".$s[$d<2]:"")." until ".$z;
}

ব্যবহার:

p("11/03/2006");

একটি dd/mm/yyyyফর্ম্যাটে তারিখ নেয় । গ্রিফিনের মাসের দৈর্ঘ্যের গণনা ( আবার ) ব্যবহার করেছি , যদিও অগ্রাধিকারটি সঠিকভাবে কাজ করার জন্য আমাকে এতে অতিরিক্ত বন্ধনী আটকে থাকতে হয়েছিল। এটিকে পড়া আরও সহজ করার জন্য আমি কিছু লাইন-ব্রেকও রেখেছি।


1

রুবি (213)

যে কোনও বিন্যাসে তারিখ Date.parseগ্রহণ করে। সাথে চেষ্টা করলামyyyy-mm-dd

def u s
t=Date.today
f=Date.parse s
[[0,'year'],[0,'month'],[0,'day']].map{|c,n| while t<f 
c+=1
t=t.send"next_#{n}"
end
c,t=c-1,t.send("prev_#{n}")if t>f
[c,n+(c>1??s:'')]*' 'if c>0}.compact*', '+' until '+s
end

এছাড়াও সপ্তাহ পেতে, যোগ করুন:

['prev_','next_'].each{|n|Date.send(:define_method,n+'week'){send n+'day',7}}

এবং [0,'week'],(মাস এবং দিনের মধ্যে)। দিনগুলি তখন সর্বদা থাকবে< 7


আপনি কোন রুবি সংস্করণটি ব্যবহার করছেন .... আমি আপনার কোডটি রুবি ১.২.২.২০ তে চালানোর চেষ্টা করেছি, তবে এটি আমাকে ত্রুটি দেয় uninitialized constant Object::Date (NameError)... আমি মনে করি আপনি রেল Dateক্লাসটি ব্যবহার করছেন
রোহিত

@ রোহিত ১.৯.৩, রেল স্টাফ ব্যবহার না করে। তারিখ rdoc
jsvnm

আমি ডকটি আগে দেখেছি .. তবে আমি যে ত্রুটি পাচ্ছিলাম সে সম্পর্কে বিভ্রান্ত হয়ে পড়েছিলাম ... আমি কেন এই ত্রুটিটি পাচ্ছি তা এখনও সনাক্ত করতে পারছি না। আমি উইন্ডোজ 7 64-বিটে, রুবি 192p0
রোহিত

@রোহিত 193 দিয়ে চেষ্টা করবেন?
jsvnm

1

ভিবিএ: 766 631 চার্স

মেলামোকবকে ধন্যবাদ স্ট্রিং তৈরির কাজটি সংক্ষিপ্ত করতে এবং IIf

Function k(i)
e=" month"
g="s"
n=Now()
r=Month(n)
s=Month(i)
t=DateSerial(Year(i),s,1)
u=DateSerial(Year(i),s-1,1)
v=Day(n)
w=Day(i)
x=DateSerial(Year(n),r,1)
d=t-u-v+w
For y=0 To 10
If Year(DateAdd("yyyy",-1*y,i))=Year(n) Then Exit For
Next
y=IIf(s=1,y-1,y)
z=s-r
z=IIf(z<0,z+12,z)
For m=0 To z
If Month(DateAdd("m",-1*m,i))=r Then Exit For
Next
d=IIf(v<=w,w-v,d)
m=IIf(v>w,m-1,m)
If y Then a=y & " year" & Left(g,y-1)
a=IIf((m Or d) And y,a & ",",a)
If m Then b=IIf(d,m & e & Left(g,m-1) & ",",m & e & Left(g,m-1))
If d Then c=IIf(d>1,d & " days",d & " day")
k=Trim(Trim(a & " " & b) & " " & c) & " until " & i & "."
End Function

আমি জানি VBAযে স্পষ্টভাবে কোড গল্ফিংয়ের পাশাপাশি কিছু অন্যান্য ভাষায় ndণ দেয় না, তবে এটিই আমি ভাল (বিশেষজ্ঞ নয়)। :-)

এটি আমার জন্য মজাদার অনুশীলন!


1
এটি সম্পূর্ণরূপে ভিবিএর দোষ নয়, আপনার কোডে যুক্তি সংযুক্ত করার কয়েকটি ভাল উপায় রয়েছে :) উদাহরণস্বরূপ, If y > 0 Then a = y & " year,":If y > 1 Then a = y & " years,"একত্রিত হতে পারেa = y & " year" & Left("s", y - 1) & ","
মেল্লামব্যাক

@ মেল্লামোকব খুব ভাল আমি এটি একবার দেখে নেব এবং পোস্ট করবো!
গাফি 14

আমি কিছু পরীক্ষার বিষয়, যথা নিয়ে একটা সমস্যা আছে 1 year, 1 month, 1 day। আমি উত্তরে এটি সংশোধন করেছি। এটি আসলে সংক্ষিপ্ত কোডের জন্য তৈরি!
গাফি

এবং আপডেটটি পোস্ট করার পরে আমি দেখতে পাচ্ছি যে অতিরিক্ত 20 টি অক্ষরের সঞ্চয় If v < w Then d = w - v:If v = w Then d = 0করার If v <= w Then d = w - vজন্য আমি পরিবর্তন করতে পারি । আমার পোস্টে আরও উল্লেখযোগ্য পরিবর্তন হলে আমি উত্তরটি আপডেট করব।
গাফি

আমি ধারণা করি অ্যারে দিয়ে আমি এটি আরও ভাল করতে পারি ... আমি আরও একবার নজর দেব এবং সম্ভবত আরও একটি উত্তর যুক্ত করব ...
গাফি

1

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

যেহেতু পাওলো উত্তরটি একটি বাহ্যিক গ্রন্থাগার ব্যবহার করেছে, আমিও তাই করব। নোড.জেএস হ'ল এনপিএম প্যাকেজ এবং মুহুর্ত সম্পর্কে + হিউম্যানাইজডিউরেশনটি এই কাজের জন্য এতটাই সুবিধাজনক!

নোড পরিবেশ

m=require('moment'),f=d=>console.log(require('humanize-duration')(m(d).diff(m()),{units:['y','mo','d'],round:1})+' until '+d)

ব্রাউজার পরিবেশ

যেহেতু গ্রন্থাগারগুলি বিশ্বব্যাপী ভেরিয়েবলগুলি ঘোষণা করে, এটি আসলে কিছুটা খাটো (১০২ বাইট)। তৃতীয় পক্ষের জাভাস্ক্রিপ্টে লোড করার জন্য আমাকে স্ক্রিপ্ট ট্যাগগুলি অন্তর্ভুক্ত করতে হবে কিনা তা পরিষ্কার নয়, তাই আমি নোডকে সরকারীভাবে গণনা করব।

f=d=>console.log(humanizeDuration((m=moment)(d).diff(m()),{units:['y','mo','d'],round:1})+' until '+d)

কফিস্ক্রিপ্ট, এছাড়াও 125 বাইট

f=(d)->console.log require('humanize-duration')((m=require 'moment')(d).diff(m()),{units:['y','mo','d'],round:1})+' until '+d

1

পিএইচপি, 151 অক্ষর

function p($z){$n=date_create(date('Y-m-d'));$d=date_create($z);$i=date_diff($n,$d);print($i->format('%R%y years, %m months, and %a days until '.$z));}

এটি বহুবচনগুলি অনুপস্থিত এবং সঠিকভাবে গণনা করছে না, কারণ ফর্ম্যাট () কয়েক মাস থেকে দিনগুলি বিয়োগ করে না ... পিএইচপি-তেও আমার একইরকম সমাধান ছিল।
Powtac

এটি আমার পিএইচপি সমাধান, তবে এখনও পূর্বে উল্লিখিত ত্রুটির অভাব রয়েছে: echo date_diff(new DateTime(),new DateTime($argv[1]))->format('%yyears, %mmonths, %a days');কমান্ড লাইনে ডাকা হলে এটির 92 টি দীর্ঘ লম্বা।
Powtac
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.