সময়কে একটি স্ট্রিতে রূপান্তর করুন


17

সমস্যা

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

আপনার কাজটি এখন এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করা যা ঘন্টা এবং মিনিট (সেকেন্ডগুলি alচ্ছিক) (ঘন্টাগুলি 24 ভিত্তিক হয়) দিয়ে একটি ইনপুট সময় দেওয়া হয়, একটি পাঠযোগ্য ইংরেজি বাক্যকে আউটপুট দেয়, এতে সংখ্যা থাকে না।

এটি সেকেন্ডে আউটপুট করা প্রয়োজন হয় না।

উদাহরণস্বরূপ, 08:45:15আউটপুট করা উচিতquarter to nine o'clock AM

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

00:00:00 > twelve night
12:00:00 > twelve noon
06:00:00 > six o'clock AM
18:00:00 > six o'clock PM
06:15:00 > quarter past six o'clock AM
18:45:00 > quarter to seven o'clock PM
11:30:00 > half past eleven o'clock AM
13:22:00 > twentytwo minutes past one o'clock PM
17:43:00 > seventeen minutes to six o'clock PM
00:09:00 > nine minutes past twelve o'clock AM

বিধি

আউটপুটিং নম্বরগুলি চল্লিশ বা চল্লিশের আকারে উভয়ই হতে পারে, আপনি যেটি পছন্দ করতে পারেন। স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়। ট্রেলিং করা নতুন লাইনের অনুমতি রয়েছে তবে বাক্যটি 1 লাইনে হওয়া উচিত।

ইনপুট আপনার কাঙ্ক্ষিত বিন্যাসে হতে পারে, উদাহরণস্বরূপ HH:MM:SS, HH,MM,SS, HHMMSS, HH/MM/SS, বা কোনো সেকেন্ড ছাড়া বৈকল্পিক, কিন্তু আপনি ইনপুট বিন্যাস আপনার উত্তর পরিষ্কার করা উচিত। এর one minuteপরিবর্তে আউটপুট দেওয়ার দরকার নেইone minutes

0 টি ট্রাথ 30 (0 এবং 30 অন্তর্ভুক্ত) থেকে শুরু করে কয়েক মিনিটের জন্য আপনার ব্যবহার করা উচিত pastএবং অন্যদের জন্য আপনার ব্যবহার করা উচিতto

কারণ সময় আপেক্ষিক, বাইট জেতে সংক্ষিপ্ততম কোড।


1
এটি দেখতে দুর্দান্ত চ্যালেঞ্জের মতো, তবে আমি বোনাসগুলি সরিয়ে দেওয়ার জন্য দৃ strongly়ভাবে পরামর্শ দিচ্ছি। আপনি কী করছেন তা আপনি যদি না জানেন তবে চ্যালেঞ্জগুলি লেখার সময়
ডেনকার

1
আরও দুটি (অপ্রাপ্তবয়স্ক) বিষয়: forty-fiveপরীক্ষার কেসগুলি quarter toযথাযথ ইনপুট ফর্ম্যাট হিসাবে পরিষ্কারভাবে বর্ণনা করলে আপনি কীভাবে লেখেন তা কেন গুরুত্বপূর্ণ ? (কেবল এটিকে বত্রিশে পরিবর্তন করুন;)) এছাড়াও, কলমোগোরভ-জটিলতা কোনও উপযুক্ত ট্যাগ নয়।
সান্চাইজস

@ সানচিইস সম্পাদিত। আমি কলমোগোরভ ট্যাগকে ভুল বুঝেছি এবং ভেবেছিলাম যে এটি কোনও দেওয়া স্ট্রিংয়ের পরিবর্তে কোনও স্ট্রিং আউটপুট দেওয়ার ক্ষেত্রে সমস্যা আছে।
ডেনিস ভ্যান গিলস

1
@ টিমিমিডি -70% হ'ল একটি রসিকতা, আমি কল্পনাও করিনি যে কেউ কোড-গল্ফে ফরাসি অনুবাদ করার চেষ্টা করবেন। যাইহোক, আমি অনুভব করি যে নেতিবাচক আকার থাকা নিখুঁত ফরাসি-ইংরেজি অনুবাদকের জন্য উপযুক্ত প্রতিদান
ডেনিস ভ্যান গিল

এটি দেখতে আরও ভাল দেখাচ্ছে তবে আরও কয়েকটি ফর্ম্যাটিং স্পষ্টকরণের প্রয়োজন। বিশেষ করে "থেকে" "অতীতে" এবং মধ্যে নির্বাচন সংক্রান্ত - উদাহরণ থেকে শোনাচ্ছে আপনি শুধুমাত্র সংখ্যা ব্যবহার করতে অনুপস্থিত করছেন oneকরার twenty-nineসঙ্গে, quarterপ্রতিস্থাপন fifteenএবং halfপ্রতিনিধিত্বমূলক thirty, কিন্তু যে পরিষ্কার না। এছাড়াও, ভবিষ্যতের প্রশ্নের জন্য, আমি স্যান্ডবক্সকে পোস্টের আগে খিঙ্কগুলি নিয়ে কাজ করার পরামর্শ দিচ্ছি recommend
অ্যাডমবর্কবার্ক

উত্তর:


2

জাভাস্ক্রিপ্ট, 384 381 বাইট

(h,m)=>(o='one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thir,,fif,,,eigh,'.split`,`,o=o.map((x,i)=>i>11?(x||o[i-10])+'teen':x),(a=m>30,t=12,m?(m-30?m%15?((m=a?59-m:m)>=(b=a?19:20)?'twenty'+((m%=b)?o[a?m:m-1]:''):o[a?m:m-1])+' minutes':'quarter':'half')+(a?' to ':' past '):'')+(h%t|m?o[(a?h:(h?h-1:11))%t]+` o'clock ${h>t?'P':'A'}M`:o[11]+(h-t?' night':' noon')))


1
সূক্ষ্মভাবে কাজ করে, এবং এমনকি পার্ল একটি 4 বাইট দ্বারা পরাজিত হয়েছে! ফিফটি, আট ইত্যাদি বিটিডব্লিউ সহ দুর্দান্ত কৌশল।
ডেনিস ভ্যান গিলস 8:25

4

ল্যাটেক্স, 466 বাইট

\usepackage{fmtcount,etoolbox}\def\x{\the\numexpr}\def\n[#1]{\numberstringnum{#1}}\def\h[#1]{\ifnumequal{#1}{0}{twelve night}{\ifnumequal{#1}{12}{twelve noon}{\ifnumless{#1}{13}{\n[#1] o'clock AM}{\n[\x#1-12\relax] o'clock PM}}}}\def\m[#1]{\ifnumequal{#1}{15}{quarter}{\ifnumequal{#1}{30}{half}{\n[#1] minutes}}}\newcounter{c}\def\f[#1]#2{\ifnumequal{#2}{0}{\h[#1]}{\ifnumless{#2}{31}{\m[#2] past \h[#1]}{\setcounter{c}{\x60-#2\relax}\m[\thec] to \h[\x#1+1\relax]}}}

শুধু ম্যাক্রো কল \fহিসাবে \f[hour]{minutes}, এখানে কিছু পরীক্ষার:

\begin{document}

\noindent
\textbf{Test cases:} \\ \\
00:00 = \f[00]{00} \\
12:00 = \f[12]{00} \\
06:00 = \f[6]{00} \\
18:00 = \f[18]{00} \\
06:15 = \f[6]{15} \\
18:45 = \f[18]{45} \\
11:30 = \f[11]{30} \\
13:22 = \f[13]{22} \\
17:43 = \f[17]{43} \\

\noindent
\textbf{More test cases:} \\ \\
00:13 = \f[00]{13} \\
12:12 = \f[12]{12} \\
12:15 = \f[12]{15} \\
11:45 = \f[11]{45} \\
11:41 = \f[11]{41} \\

\end{document}

আপনি কি জানেন কীভাবে এবং কোথায় আমি এটি চেষ্টা করতে পারি? আমি চেষ্টা মাকড়সার জালের ন্যায় এবং papeeria কিন্তু তারা কাজ করে নি।
ডেনিস ভ্যান গিলস 5:58

@ ডেনিসওয়ানগিলস আমি পেস্টেরিয়ায় এই পেস্টবিন .com/kdpSQHSb চেষ্টা করেছিলাম এবং এটি কার্যকর হয়েছিল।
বব

এটি পেস্টবিন কোড দিয়ে চেষ্টা করেছিল এবং এটি কাজ করেছিল, অনুমান করে এটি কাজ করে না কারণ আমার নেই\documentclass[a4paper,12pt]{article}
ডেনিস ভ্যান গিল

3

পাইথন 2, 498 বাইট

ইনপুট ফাংশন আর্গুমেন্ট হিসাবে আসে। প্রথম ঘন্টা এবং তারপরে মিনিট, উভয়ই পূর্ণসংখ্যা হিসাবে। ফলাফল স্ক্রিনে মুদ্রিত হয়।

def g(h,m):
 a=lambda x:"twelve one two three four five six seven eigth nine ten eleven".split()[x%12];b=lambda x:a(x)+" o'clock "+["AM","PM"][x>=12]
 if m:
    z=m if m<30else 60-m;print(a(z)if z<13else("twenty"+(a(z-20)if z-20else"")if z>19else"thirteen fourteen fifteen sixteen seventeen eighteen nineteen".split()[z-13])if m%15else"quarter"if m-30else"half")+(" minutes"if m-30and m%15else"")+[" past "+b(h)," to "+b(h+1)][m>30]
 else:print"twelve "+("noon"if h else "night")if h in[0,12]else b(h)

এটি অনলাইন চেষ্টা করুন! (সামান্য বর্ধিত টেস্টকেস সহ)

এটি একটি বেশ মজাদার গল্ফ ছিল। যদিও এই সমস্ত নেস্টেড টেরিনারি আমাকে খানিকটা উন্মাদ করে তুলেছিল।
আমি এর পরে পাইথটিতে এটি করার পরিকল্পনা করছিলাম, তবে আমি মনে করি না যে আমি এই মুহুর্তে (বা কখনও) মানসিকভাবে এটি করতে সক্ষম হয়েছি।

Ungolfed:

def ungolfed(h,m):
    toStr=lambda x:"twelve one two three four five six seven eigth nine ten eleven".split()[x%12]
    hour=lambda x:toStr(x)+" o'clock "+["AM","PM"][x>=12]
    minute=lambda x:"twenty"+(toStr(x-20)if x-20else"")if x>19else"thirteen fourteen fifteen sixteen seventeen eighteen nineteen".split()[x-13]

    if m:
        s=""
        if m==30:
            s+="half"
        else:
            if m%15==0:
                s+="quarter"
            else:
                z=m if m<30 else 60-m
                if z<13:
                    s+=toStr(z)
                else:
                    s+=minute(z)
        print s+(" minutes"if m-30and m%15else "")+[" past "+hour(h)," to "+hour(h+1)][m>30]
    else:
        if h in[0,12]:
            print"twelve "+("noon"if h else "night")
        else:
            print hour(h)

আপনার [x>12]হওয়া উচিত [x>=12], 12:01 PM এএম, এএম নয়
ডেনিস ভ্যান গিল

1
@ ডেনিসভানগিলস ভাল ধরা, আপনাকে ধন্যবাদ! ঠিক কর. :) আমরা জার্মানরা এই পুরো এএম / প্রধানমন্ত্রী-জিনিসটি নিয়ে অনুমান করি না: পি
ডেনকার

আমি ডাচ, তাই নিশ্চিত হওয়ার জন্য আমাকেও এটি সন্ধান করতে হবে।
ডেনিস ভ্যান গিল

1

পার্ল 5, 367 361 385 বাইট

বিকৃত

use integer;$_=<>;~/(\d+):(\d+)/;@b=(one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve); @x=(@b,thirteen,(map{/fi/?quarter:$_.teen}@b[3..8]),(map{twenty.$_}'',@b[0..8]),half);@y=map{/^q|h/?$_:$_.' minutes'}@x;$s=1-$2/31;$y=abs((-29,0)[$s]+$2%31)-1;$h=$1-$s;print((+-$2?@y[$y].' '.(to,past)[$s].' ':'').@b[$h++%12]." o' clock ".($h%12?(AM,PM)[$h/12]:(night,noon)[$h/12%2]))

ফর্ম্যাট এবং পরীক্ষার কেস:

use integer;
map{
    # capture (implicit $_)
    ~/(\d+):(\d+)/;
    # bare words
    @b=(one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve);
    # construct up to 30
    @x=(@b,thirteen,
       (map{/fi/?quarter:$_.teen}@b[3..8]),
       (map{twenty.$_}'',@b[0..8]),half);
    # quarter/half business
    @y=map{/^q|h/?$_:$_.' minutes'}@x;
    # whether we are to/past
    $s=1-$2/31;
    # num minutes wrapped around
    $y=abs((-29,0)[$s]+$2%31)-1;
    # num hours
    $h=$1-$s;
    #print('$s='.$s."\th=".$h."\th%12=".($h%12)."\n");
    print($_.' > ');
    #minute component
    print((+-$2
          ?@y[$y].' '.(to,past)[$s].' '
          :'')
        # hours
        .@b[$h++%12]
        ." o' clock "
        # Night/Noon
        .($h%12
          ?(AM,PM)[$h/12]
          :(night,noon)[$h/12%2]));
    print "\n"
}
('00:00:00',
 '00:01:00',
 '11:59:00',
 '12:00:00',
 '12:01:00',
 '06:00:00', 
 '18:00:00', 
 '06:15:00', 
 '18:45:00', 
 '11:30:00', 
 '13:22:00', 
 '17:43:00',
 '23:59:59')

দিতে বলে মনে হয় one minutes to one o' clock night, 00:01 জন্য আউটপুট পরিবর্তে one minutes past twelve o'clock AMবাone minutes past twelve night
ডেনিস ভ্যান Gils

তুমি ঠিক বলছো. আমি প্রায় 12 বার পরীক্ষার কেস যুক্ত করেছি।
ওয়ালপেপ করুন pen

1

সি, 478 বাইট

*w(i){char*p,*n[]={"","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};return i>19?asprintf(&p,"twenty%s",n[i%20]),p:n[i];}main(m,h){scanf("%d%d",&h,&m);m>30?h++:0;printf("%s%s%s%s%s %s\n",m%15?m>30?w(60-m):w(m):m^30?m?"quarter":"":"half",m%15?" minutes":"",m?m>30?" to ":" past ":"",w((h+11)%12+1),h%12||m?" o'clock":"",h%12||m?h>11?"PM":"AM":h?"noon":"night");}

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

$ echo "0 0" | ./a.out
twelve night
$ echo "12 0" | ./a.out
twelve noon
$ echo "6 0" | ./a.out
six o'clock AM
$ echo "18 0" | ./a.out
six o'clock PM
$ echo "6 15" | ./a.out
quarter past six o'clock AM
$ echo "18 45" | ./a.out
quarter to seven o'clock PM
$ echo "11 30" | ./a.out
half past eleven o'clock AM
$ echo "13 22" | ./a.out
twentytwo minutes past one o'clock PM
$ echo "17 43" | ./a.out
seventeen minutes to six o'clock PM
$ echo "0 9" | ./a.out
nine minutes past twelve o'clock AM

এখানে চেষ্টা করুন


দেখতে ভাল. আকর্ষণীয় কীভাবে কীভাবে 00 00সঠিক আউটপুট 00:00দেয় , যখন দেয় one minutes past twelve o'clock AMতবে আমি নিশ্চিত যে আপনি কীভাবে ইনপুটকে পার্স করবেন তার কিছু করার আছে।
ডেনিস ভ্যান গিলস

হ্যাঁ, এটি দুটি পূর্ণসংখ্যার (ঘন্টা এবং মিনিট) প্রত্যাশা করে। scanfকেউ আশা করতে পারে '00: 00 'কে সম্ভবত পার্স করবেন না :)
কোল ক্যামেরন

0

ব্যাচ, 779 774 752 749 বাইট

@echo off
set t=%1
set/ah=%t:~0,2%,m=%t:~3,2%
set p=past
if %m% gtr 30 set p=to&set/am=60-m,h+=1
for %%a in ("one minute.1" quarter.15 half.30)do if %%~xa==.%m% set o=%%~na&goto g
set o=
if %m% gtr 20 set o=twenty-&set/am-=20
for %%a in (one.1 two.2 three.3 four.4 five.5 six.6 seven.7 eight.8 nine.9 ten.10 eleven.11 twelve.12 thirten.13 fourteen.14 sixteen.16 seventeen.17 eighteen.18 nineteen.19 twenty.20)do if %%~xa==.%m% set o=%o%%%~na minutes
:g
if not %m%==0 set o=%o% %p% 
set a= AM
if %h% gtr 12 set a= PM&set/ah%%=12
if %h%==0 (echo %o%twelve night)else if %h%==12 (echo %o%twelve noon)else for %%a in (one.1 two.2 three.3 four.4 five.5 six.6 seven.7 eight.8 nine.9 ten.10 eleven.11)do if %%~xa==.%h% echo %o%%%~na o'clock%a%

set t=%1%time%যদি সময় না দেওয়া হয় তবে বর্তমান সময়টি বলার জন্য দ্বিতীয় লাইনটি ডিফল্টে পরিবর্তন করুন ।

সম্পাদনা করুন: আমার set/aবক্তব্যগুলি অনুকূল করে 22 বাইট সংরক্ষণ করা হয়েছে। @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ এর জন্য 3 বাইট সংরক্ষণ করা হয়েছে ᴏʟғᴇʀ

আমি যখন আমার আসল সংস্করণটি লিখেছিলাম তখন সময়টি বলতে আসলে আমি যেমনটি বলেছিলাম ঠিক ততক্ষণে ভুল করেছিলাম, ঠিক ঠিক সময় হয়েছে ঠিক রাত্রে, এবং মধ্যরাত ও মধ্যরাতের পরিবর্তে বারো রাত ও বারোটা:

@echo off
set t=%1
set/a h=%t:~0,2%
set/a m=%t:~3,2%
set p=past
if %m% gtr 30 set p=to&set/a m=60-m&set/a h=h+1
for %%a in ("one minute.1" quarter.15 half.30) do if %%~xa==.%m% set o=%%~na&goto g
set o=
if %m% gtr 20 set o=twenty-&set/a m=%m%-20
for %%a in (one.1 two.2 three.3 four.4 five.5 six.6 seven.7 eight.8 nine.9 ten.10 eleven.11 twelve.12 thirten.13 fourteen.14 sixteen.16 seventeen.17 eighteen.18 nineteen.19 twenty.20) do if %%~xa==.%m% set o=%o%%%~na minutes
:g
set o=%o% %p% 
set a= AM
if %h% gtr 12 set a= PM&set/a h=h%%12
if %m%==0 set a= o'clock%a%&set o=
if %h%==0 (echo %o%midnight)else if %h%==12 (echo %o%midday)else for %%a in (one.1 two.2 three.3 four.4 five.5 six.6 seven.7 eight.8 nine.9 ten.10 eleven.11) do if %%~xa==.%h% echo %o%%%~na%a%

তোমার 12:00 এবং 00:00 পরীক্ষার কাজ করে না তারা কেবল echo midnightএবং middayপরিবর্তে twelve nightএবং twelve noon। লুপ বিটিডব্লিউর জন্য আপনি কীভাবে আপনার জাল এক্সটেনশন এবং নামগুলি ব্যবহার করেন তা আমি সত্যিই পছন্দ করি।
ডেনিস ভ্যান গিলস 5:58

2
@ ডেনিসওয়ানগিলস সম্ভবত অন্যান্য পরীক্ষা এটি ব্যর্থ হয়েছে; আমি পরে এটি ঠিক করব।
নিল

@ ডেনিসওয়ানগিলস আমি মনে করি এটি এখন কাজ করছে, এবং সুবিধাজনকভাবে এটি আরও খাটো!
নীল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.