একটি শব্দ ঘড়ি মুদ্রণ করুন


59

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

একটি ওয়ার্ড ক্লক

সেই ঘড়ির উপরে প্রদর্শিত পাঠ্যটি নীচে রয়েছে।

IT IS HALF TEN
QUARTER TWENTY
FIVE MINUTES TO
PAST TWO THREE
ONE FOUR FIVE
SIX SEVEN EIGHT
NINE TEN ELEVEN
TWELVE O'CLOCK

আপনার কাজ হ'ল এই জাতীয় একটি কাজের ঘড়ি লিখুন। শব্দগুলি বর্তমান সময়ের মুদ্রণের সাথে প্রাসঙ্গিক হলে এবং কেবলমাত্র আলোকিত হয়। অন্যথায়, তারা শুয়ে আছে। শব্দগুলি মুদ্রিত হয়ে "আলোকিত" হয় এবং শব্দের দৈর্ঘ্য হওয়ায় অনেকগুলি স্থান দ্বারা প্রতিস্থাপিত হয়ে "আলোকিত" হয়।

উদাহরণ: যদি বর্তমান সময় 17:23 হয় তবে মুদ্রিত পাঠ্যটি অবশ্যই নীচের হতে হবে:

IT IS 
        TWENTY
FIVE MINUTES
PAST
         FIVE

বিধি

  1. মুদ্রিত সময়টি 12 ঘন্টা বৈকল্পিক, তবে এএম / পিএম ছাড়াই।
  2. গোলটি কেবল মিনিটের ভিত্তিতে করা হয় (সেকেন্ডগুলি সম্পূর্ণ অপ্রাসঙ্গিক)। রাউন্ডিংটি 5 এর নিকটতম এককটির সাথে করা হয়, উদাহরণস্বরূপ, যদিও 17:52:38 সত্যই 17:55 এর নিকটতম, তবে যেহেতু সেকেন্ডগুলি অপ্রাসঙ্গিক, তাই 17:52 আসলে গোল করে 17:50, এবং মুদ্রিত পাঠ্যটি হ'ল "IT is Ten MINUTES TO SIX" (প্রাসঙ্গিক ব্যবধান সহ)। সুতরাং যদি XXপাঁচটির একাধিক হয় তবে XXএইচএইচ: (XX-2): 00 থেকে এইচএইচ: (XX + 2): 59 পর্যন্ত ব্যবহৃত হবে। শব্দটি MINUTESঅবশ্যই উপস্থিত হবে FIVE, TENবা TWENTYমিনিটের বিভাগে জ্বলজ্বল করা থাকলে ("TO" বা "অতীত" এর আগে)।
  3. সমস্ত অপ্রাসঙ্গিক শব্দ উপরের টেমপ্লেটে যেখানে পাঠ্য রয়েছে সেখানে রাখার জন্য প্রয়োজনীয় অনেকগুলি স্থান দ্বারা প্রতিস্থাপিত হয়েছে। ট্রেলিং স্পেসগুলি ছাঁটাই করা যেতে পারে। প্রত্যাশিত অবস্থানে পাঠ্য প্রাসঙ্গিক স্পেস রাখতে হবে।
  4. ট্রেলিং লাইনগুলি পাশাপাশি ছাঁটাই করা যেতে পারে। প্রাসঙ্গিক খালি লাইনগুলি এখনও উপস্থিত হওয়া প্রয়োজন। উদাহরণ:

    IT IS      TEN
    
         MINUTES
    PAST TWO
    
  5. এই মানগুলি যখন ঘন্টাগুলিকে উল্লেখ TENকরে তখন প্রথম লাইনে বা FIVEতৃতীয় লাইনে আলোকপাত করবেন না ।

  6. আপনি একটি ইনপুট গ্রহণ করতে পারেন। আপনি যদি কোনও ইনপুট গ্রহণ করেন তবে ইনপুটটি আপনার যে কোনও বৈধ বিন্যাসে মুদ্রণের সময় হবে (স্ট্রিং, পূর্ণসংখ্যার তালিকা, নেটিভ টাইম আপনার ভাষা সমর্থন টাইপ করুন ...) তবে সেগুলি সম্পর্কিত না হলে কোনও প্যারামিটারের অনুমতি দেওয়া হবে না মুদ্রণ সময়। আপনি যদি কোনও ইনপুট সমর্থন করেন না, তবে আপনাকে অবশ্যই বর্তমান সময়টি ব্যবহার করতে হবে। আপনি যদি উভয়কে সমর্থন করেন তবে এটি আরও ভাল তবে কোনও বোনাস নেই;)
  7. আপনার কোড কোনও প্রোগ্রাম, একটি ফাংশন, ল্যাম্বডা হতে পারে তবে স্নিপেট নয়।
  8. যদি আপনার ভাষা কোনওভাবে মুদ্রণ সমর্থন করে তবে অবশ্যই ফলাফলটি মুদ্রণ করতে হবে (কোনও ফাইলে, স্ট্যান্ডার্ড আউটপুটে, আমার আপত্তি নেই)। যদি আপনার ভাষা কোনওভাবে মুদ্রণ সমর্থন করে না, তবে এটি প্রত্যাশিত পাঠ্যটিকে কেবল "ফেরত" দেওয়ার অনুমতি দেওয়া হয়। ফলাফলটি সমস্ত বড় হাতের বা সমস্ত ছোট হাতের অক্ষর হতে পারে, উভয়ের মিশ্রণ নয়।
  9. স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।
  10. এটি কোড-গল্ফ তাই সংক্ষিপ্ততম কোডটি জয়ী!
  11. সম্ভাব্যতার পরিমাপে, দয়া করে আপনার ভাষার কোনও অনলাইন দোভাষীকে একটি লিঙ্ক সরবরাহ করুন।

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

Input:  <no input> (the current local time is 19:20)
Output:     
IT IS
        TWENTY
     MINUTES
PAST 

    SEVEN

Input: 13:15
Output: (empty line is being printed)
IT IS
QUARTER

PAST
ONE

Input: 13:58
Output: (rounding)
IT IS


     TWO



       O'CLOCK

Input: 14:30
Output: (half is always a edge-case)
IT IS HALF


PAST TWO

Input: 15:35
Output: (light up "TO")
IT IS
        TWENTY
FIVE MINUTES TO

    FOUR

Input: 10:00
Output: (do not use the TEN or FIVE on the first line when referring to the hours)
IT IS





    TEN
      O'CLOCK

Input: 12:00
Output: (O'CLOCK and a lot of empty lines)
IT IS






TWELVE O'CLOCK

8
দুর্দান্ত চ্যালেঞ্জ, আমি সত্যিই এটি পছন্দ!
টিমটেক

উত্তর:


14

পিএইচপি, 387 384 353 352 342 323 310 306 298 293 291 বাইট

ক্রিস্টফকে ধন্যবাদ তাঁর দুর্দান্ত আবিষ্কারের পাশাপাশি গল্ফ করার জন্য !
কমপক্ষে 45 বাইট তার অ্যাকাউন্টে রয়েছে; 16 বা তার বেশি অনুপ্রাণিত।

একটি মার্ভেল দল আপ!

IT IS <?foreach([HALF,TEN,QUARTER,TWENTY,FIVE,MINUTES,TO,PAST,TWO,THREE,ONE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,ELEVEN,TWELVE,"O'CLOCK"]as$w)echo strstr([w,ghj,dhj,ej,fhj,fghj,cj,fghi,fhi,ei,dhi,ghi][$m=date(i)/5+.5].mklnopqrstuvm[date(h)-($m<7)],99+$i)?$w:$w^$w^"       ","
  "[$i++%3^$i<3];

ডেটাটি লুপ করে এবং বর্তমান সূচকটি উত্পন্ন স্ট্রিংয়ে রয়েছে কিনা তা যাচাই করার জন্য শব্দের সূচকগুলি অন্তর্ভুক্ত করে (অক্ষরে ম্যাপ করা হয়েছে); সূচকের উপর নির্ভর করে লাইনব্রেক বা স্থান সংযোজন করে।

আপনি যদি error_reporting(22519) জন্য ডিফল্ট মান ব্যবহার না করেন তবে বিজ্ঞপ্তিগুলি পেতে পারে ।

এটি অনলাইনে পরীক্ষা করুন।

ভাঙ্গন

IT IS <?
foreach([HALF,TEN,QUARTER,TWENTY,FIVE,MINUTES,TO,PAST,  // loop through words
TWO,THREE,ONE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,ELEVEN,TWELVE,"O'CLOCK"]as$w)
    echo strstr(                    // search word index in ...
        [w,ghj,dhj,ej,fhj,fghj,cj,fghi,fhi,ei,dhi,ghi][$m=date(i)/5+.5] // minutes & co
        .mklnopqrstuvm[date(h)-($m<7)]                          // hours (-1 if minutes<33)
    ,99+$i                          // (map 0..20 to c..w)
    )?$w:$w^$w^"       ",           // if found, print string, else print spaces
    "\n  "[$i++%3^$i<3];            // if $i in [3,5,8,...], print newline, else space

গল্ফ :

  • $x/5+.5|0দুই বাইট চেয়ে খাটো round($x/5)
  • ভেরিয়েবলের কাছে ফলাফল date(h)নির্ধারণের চেয়ে দুটি কল হ'ল এক বাইট কম date
  • একটি একক অ্যাসিগমেন্ট ব্যবহার করে লাইট-আপ সূচকগুলিতে সঞ্চিত ভেরিয়েবলটি গল্ফ করে।
  • অ্যারের পরিবর্তে লাইট-আপ সূচকগুলির জন্য একটি স্ট্রিং প্রায় 30 বাইট সংরক্ষণ করে
  • $w<Aএর চেয়ে কম তিনটি বাইট কম $w=="\n"- নিশ্চিত করুন যে কোনও ডিলিমিটারের পরে কোনও স্থান নেই!
  • abs মিনিট শব্দে 8 বাইট সংরক্ষণ করা।
  • ধন্যবাদ @ ক্রিসটফ: মানচিত্রের জন্য সংখ্যা থেকে অক্ষরে সরানো পৃথককারীকে অচল করে দেয় এবং অ্যারের পরিবর্তে আরও একটি স্ট্রিংকে অনুমতি দেয়; 23 + 8 বাইট সংরক্ষণ করা হয়েছে ।
    প্রথম সূচক হিসাবে আন্ডারস্কোর ব্যবহার করে এটিকে "এটি" বিকল্পের মধ্যে অন্তর্ভুক্ত করার অনুমতি দেওয়া হয়েছে; এবং এটি কয়েক ঘন্টা অপ্রচলিত জন্য উদ্ধৃতি রেন্ডার।
  • 1ঘন্টা মানচিত্রে মানটি অনুলিপি করা মডুলোকে অচল করে দেয় এবং অতিরিক্ত গল্ফিংয়ের সাথে 10 বাইট সংরক্ষণ করে। @ ক্রিসটফ দ্বারা অনুপ্রাণিত।
  • লাইনব্রেকগুলি এবং স্পেসগুলি হার্ডকডিংয়ের পরিবর্তে 19 বাইটে শেভ করা গণনা করা হচ্ছে ।
  • স্ট্রিংগুলিতে বিট লজিক 7 বাইট সংরক্ষণ করে: str_pad("",strlen($w))-> $w^$w^" "। (ক্রিস্টোফ)
  • যদি strtrএর দ্বিতীয় পরামিতিটির স্ট্রিং না থাকে তবে এটি ascii কোড হিসাবে ব্যাখ্যা করা হবে। 5 বাইট সঞ্চয়

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

1
বাকিদের মারধর: $i++%3^($i<3)থেকে $i++%3^$i<3। আমি এখন সরকারীভাবে পুরোপুরি নষ্ট। কেউ আমাদের সাথে মিল না পাওয়া পর্যন্ত আমি বিরতি নেব। ইহা সত্যিই রসিকতা ছিল. আপনার টিম ওয়ার্কের জন্য আপনাকে ধন্যবাদ টাইটাস!
ক্রিস্টোফ

1
@ ক্রিসটফ আপনি হলেন ... দুর্দান্ত একটি শব্দ মনে হচ্ছে। \ o /
তিতাস

18

টিআই-বেসিক, 335 334 বাইট

বেশ নিখুঁত, যেহেতু টিআই -৪৪ ক্যালকগুলিতে 8x16 অক্ষর প্রদর্শন রয়েছে এবং এটি 8x15। টিআই -৪৪ এর চেয়ে আগের ক্যালকগুলিকে সমর্থন করার জন্য তারিখটিকে ইনপুট হিসাবে নেওয়া হয়, যার অভ্যন্তরীণ ঘড়ি নেই। কোনও যুক্তি ছাড়াই, Inputডিফল্টরূপে ইনপুট পায় Xএবং এর Yমতো Prompt X,Y। সুতরাং Xঘন্টা তৈরি করুন (যে কোনও কিছুই >=0সঠিকভাবে কাজ করবে) এবং Yকয়েক মিনিট হবে।

Input 
ClrHome
int(Y/5-5.6
Output(1,1,"IT IS
If Ans=~6
Output(8,8,"O'CLOCK
If 2=abs(3-abs(Ans
Output(3,1,"FIVE
If 4=abs(Ans
Output(1,12,"TEN
If 3=abs(Ans
Output(2,1,"QUARTER
If 2=abs(Ans
Output(2,8,"TWENTY
If sum(abs(Ans)={1,2,4,5
Output(3,5,"MINUTES
If not(Ans
Output(1,7,"HALF
If Ans<1 and Ans+6
Output(4,1,"PAST
If Ans>0
Output(3,14,"TO
12fPart(12(^~1)(X+(Y>32->A
If not(Ans
12->A
{21,6,10,25,30,41,45,51,61,66,70,81
.05Ans(A
Output(int(4+Ans),20fPart(Ans),sub("ONE   TWO   THREE FOUR  FIVE  SIX   SEVEN EIGHT NINE  TEN   ELEVENTWELVE",6A-5,6

দ্রষ্টব্য 1: টিআই -৪৪ + এর জন্য আপনি এর Inputমতো কিছু দিয়ে প্রতিস্থাপন করতে পারেন getTime:Ans(1->X:getTime:Ans(2->Y। এছাড়াও, int(Y/5-5.6সমান round(Y/5,0)-6। এবং না, int(এক্ষেত্রে আর কোনও মতবিনিময় হতে পারে না iPart(

নোট 2: এটি ইনপুটটি ঠিক সূক্ষ্মভাবে মুদ্রণ করে, তবে নান্দনিক কারণে আপনি সম্ভবত প্রোগ্রামের সমাপ্তির Pauseপরে Doneবার্তাটি এড়াতে প্রোগ্রামের শেষে চান ।

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


আমার কাছে মনে হচ্ছে O'CLOCKকোড আউটপুট দেওয়ার পরে আউটপুটও চলে যাবে PAST...
নিল

2
আমি 545 বাইট গণনা আপনি কি আমাকে আলোকিত করতে পারেন?
ক্রিস্টোফ

2
@ ক্রিসটফ সম্পর্কিত মেটা পোস্টটি খুঁজে পেয়েছেন: meta.codegolf.stackexchange.com/a/4764/29637
ক্রিস্টোফ

1
@ অলিভিগ্রগ্রোয়েয়ার আসলে এটি পূর্ববর্তী লাইনের সাথে মোটেই সম্পর্কিত নয়। এটি যা করছে তা 24-ঘন্টাকে 12-ঘন্টা সময় এবং নিকটতম ঘন্টা (যেমন, কয়েক মিনিটের সাথে গোল করে) রূপান্তর করা with মূলত, একটি সাধারণ ভাষায় এটি দেখতে কিছুটা দেখতে দেখতে x+(y>32) mod 12যদি তুলনাটি টিআই-বেসিকের মতো 1 বা 0 টির মতো ফল দেয়।
টিমটেক

1
সুতরাং @ ক্রিসটফ দেখে মনে হচ্ছে আপনি সেই লিঙ্কটি দিয়ে নিজের প্রশ্নের উত্তর দিয়েছেন, আপনি কি এখনও আমাকে ব্যাখ্যা করতে চান? আপনি যদি দেখতে চান যে আমি কোথায় ASCII স্কোরিং থেকে টোকেনাইজডে স্যুইচ করেছি, পুনর্বিবেচনা # 4 দেখুন।
টিমটেক

11

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

কারিটিং সিনট্যাক্সের সাথে দুটি পূর্ণসংখ্যা হিসাবে ইনপুট নেয় (h)(m)

h=>m=>console.log(`IT IS HALF TEN
QUARTER TWENTY
FIVE MINUTES TO
PAST TWO THREE
ONE FOUR FIVE
SIX SEVEN EIGHT
NINE TEN ELEVEN
TWELVE O'CLOCK`.replace(/\S+/g,w=>(k/=2)&1?w:w.replace(/./g,' '),k=[x=1<<19,88,81,66,84,92,64.5,60,52,34,49,56,x,h=(m<33?h+11:h)%12][m/5+.4|0]*16|6|2048<<(h?h-(h<3):2)))

কিভাবে এটা কাজ করে

পুরো ঘড়িটি 23 টি এলইডি হিসাবে দেখা যেতে পারে যা চালু বা বন্ধ রয়েছে। সুতরাং, ঘড়ির অবস্থা একটি 23-বিট পূর্ণসংখ্যা।

Bit | Word        Bit | Word
----+--------     ----+--------
00  | IT          12  | ONE
01  | IS          13  | FOUR
02  | HALF        14  | FIVE
03  | TEN         15  | SIX
04  | QUARTER     16  | SEVEN
05  | TWENTY      17  | EIGHT
06  | FIVE        18  | NINE
07  | MINUTES     19  | TEN
08  | TO          20  | ELEVEN
09  | PAST        21  | TWELVE
10  | TWO         22  | O'CLOCK
11  | THREE             

মিনিট যুক্তিবিজ্ঞান যে আমরা সঠিক শব্দ সক্রিয় করতে বাস্তবায়নে প্রয়োজন হিসাবে সহজ হিসাবে এক নজরে মনে হতে পারে নয়। একটি যাদু-গল্ফিং সূত্র থাকতে পারে তবে আমি সহজ পথে চলেছি এবং প্রতিটি সম্ভাব্য কনফিগারেশনটি হার্ডকোড করার সিদ্ধান্ত নিয়েছি:

Minutes | Words                    | Enabled bits | Value   | Value / 8
--------+--------------------------+--------------+---------+----------
  00    | O'CLOCK                  | 22           | 4194304 | 524288
  05    | FIVE MINUTES PAST        | 6, 7, 9      | 704     | 88
  10    | TEN MINUTES PAST         | 3, 7, 9      | 648     | 81
  15    | QUARTER PAST             | 4, 9         | 528     | 66
  20    | TWENTY MINUTES PAST      | 5, 7, 9      | 672     | 84
  25    | TWENTY FIVE MINUTES PAST | 5, 6, 7, 9   | 736     | 92
  30    | HALF PAST                | 2, 9         | 516     | 64.5
  35    | TWENTY FIVE MINUTES TO   | 5, 6, 7, 8   | 480     | 60
  40    | TWENTY MINUTES TO        | 5, 7, 8      | 416     | 52
  45    | QUARTER TO               | 4, 8         | 272     | 34
  50    | TEN MINUTES TO           | 3, 7, 8      | 392     | 49
  55    | FIVE MINUTES TO          | 6, 7, 8      | 448     | 56

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


2
খুব চালাক. আমি আমার থেকে আরও কিছু বাইট কাটতে চেষ্টা করছিলাম, তখন আমি এটি দেখেছি এবং প্রতিযোগিতার কোনও আশা নেই।
edc65

টাস্ক (নিয়ম 8) বলছে যে এটি অবশ্যই প্রিন্ট করা উচিত, কেবল ফিরে আসেনি
16

@ এসএমএলস ওহ, আপনি ঠিক বলেছেন। এটা ঠিক আছে।
আর্নল্ড

খুব ঠান্ডা. সময়টি ব্যতীত :-( প্রদর্শন: এইচ = 13 মি = 15 আসল সময়: 14:43
স্ট্রবেরি

@ স্ট্রাবেরি দয়া করে নিয়ম # 6 দেখুন। এই বাস্তবায়ন স্থানীয় সময় নয়, একচেটিয়াভাবে ইনপুট ব্যবহার করছে।
আর্নল্ড

6

ব্যাচ, 789 বাইট

@echo off
if not "%1"=="" setlocal&set time=%1
set/a"h=%time:~0,2%,m=6%time:~3,2%%%60+2,h+=m/35,h%%=12,m=6-m/5%%12,n=m%%3,o=m%%2
set p=
set s=
call:c %m:-=% "IT IS HALF" 0 "IT IS      TEN" 4 "IT IS"
call:c %m:-=% QUARTER 3 "        TWENTY" 2 "        TWENTY" 1
if %m% lss 0 set s= TO
call:c 0 "            " %n% "     MINUTES" %o% "FIVE MINUTES"
set s=
set p=PAST 
if %m%==6 set p=     
if %m% lss 0 set p=     
call:c %h% TWO 2 "    THREE" 3
set p=
call:c %h% ONE 1 "    FOUR" 4 "          FIVE" 5
call:c %h% SIX 6 "    SEVEN" 7 "          EIGHT" 8
call:c %h% NINE 9 "     TEN" 10 "         ELEVEN" 11
if %m%==6 set s= O'CLOCK
call:c %h% TWELVE 0 "      "
exit/b
:c
set t=%1
:l
if %t%==%3 echo(%p%%~2%s%&exit/b
shift
shift
if not "%3"=="" goto l
echo(%p%%~2%s%

দ্রষ্টব্য: PASTনিম্নলিখিত দুটি লাইনের প্রত্যেকের পরে ট্রেলিং স্পেস এবং 5 টি ট্রেলিং স্পেস ।


আমি এটি চালিয়েছি এবং এটি ঠিক আছে (ঘন্টা 3 এর জন্য একটি অনুপস্থিত জায়গা বার করুন)! আমি ঠিক বুঝতে পারি না কী চলছে ( call:cউদাহরণস্বরূপ)! আমার সম্ভবত কিছু ব্যাচ শেখা উচিত :)
অলিভিয়ার গ্রাগোয়ার

@ অলিভিয়ারগ্রোগোয়ার দুঃখের বিষয় একটি স্থান নিখোঁজ হয়ে গেছে তবে এটি এখন ঠিক।
নিল

4

জাভাস্ক্রিপ্ট, 567 564 551 542 529 527 519 বাইট

আর্গুমেন্ট হিসাবে ঘন্টা এবং মিনিট সময় নেওয়া ঠিক আছে কিনা আমি জানি না। আপনি "পূর্ণসংখ্যার তালিকা" বলেছিলেন। এটি এখনও গণনা?

এটা আমার প্রথমবারের মতো, গল্ফ করে। আপনি কি মনে করেন?


সম্পাদনা করুন: কয়েক মিনিট ভাগ করে কিছু বাইট সংরক্ষণ করা হয়েছে। ধন্যবাদ, অলিভিয়ার!


হ্যাঁ, এই নিয়মের পিছনে ধারণাটি হ'ল আপনি যুক্তি তুলতে পারেন, তবে কেবলমাত্র যদি সেগুলি ইনপুট সম্পর্কিত হয়, যা মুদ্রণের সময় to
অলিভিয়ার

1
গল্ফিং সম্পর্কে, আপনি সম্ভবত আপনার 5 মিনিটের বিভাজন বিবেচনা করলে কিছু বাইট গল্ফ করতে পারেন g এছাড়াও, আপনি cনিজের ফাংশনের অভ্যন্তরে যেতে চান inside এমনটি করে আপনি কোনও বাইট হারাবেন না, আমার ধারণা, তবে এটি কোনও ফাংশনের চেয়ে স্নিপেটের মতো করে তোলে (আমার কাছে কমপক্ষে, সম্ভবত জেএস গুরুরা অন্যথায় বলবে)।
অলিভিয়ার

4

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

ইনপুট পরামিতি ঘন্টা (0..23) এবং মিনিট (0..59) সহ একটি ফাংশন। আউটপুট
ব্যবহার alertকরা যেমন জাভাস্ক্রিপ্টে এটি স্ট্যান্ডার্ড আউটপুট ফাংশন যেমন অসুবিধেও হয়। (এবং এটি সংক্ষিপ্ত)

(k,n,m=(n+2)/5|0,h=(k+(m>6))%12,i=0)=>alert(`IT IS HALF TEN
QUARTER TWENTY
FIVE MINUTES TO
PAST TWO THREE
ONE FOUR FIVE
SIX SEVEN EIGHT
NINE TEN ELEVEN
TWELVE O'CLOCK`.replace(/\S+/g,w=>[,,m-6,m-2&&m-10,m-3&&m-9,m-4&&m-8&&m-5&&m-7,m-1&&m-11&&m-5&&m-7,!(m%3),m<7|m==12,!m|m>6,h-2,h-3,h-1,h-4,h-5,h-6,h-7,h-8,h-9,h-10,h-11,h%12,m%12][i++]?w.replace(/./g,' '):w))

পরীক্ষার নোট: আপনার মানসিক প্রশান্তির জন্য, পরীক্ষার স্নিপেটে সতর্কতা আউটপুটটি পৃষ্ঠার পাঠ্যে পুনঃনির্দেশিত হয়

F=
(k,n,m=(n+2)/5|0,h=(k+(m>6))%12,i=0)=>alert(`IT IS HALF TEN
QUARTER TWENTY
FIVE MINUTES TO
PAST TWO THREE
ONE FOUR FIVE
SIX SEVEN EIGHT
NINE TEN ELEVEN
TWELVE O'CLOCK`.replace(/\S+/g,w=>[,,m-6,m-2&&m-10,m-3&&m-9,m-4&&m-8&&m-5&&m-7,m-1&&m-11&&m-5&&m-7,!(m%3),m<7|m==12,!m|m>6,h-2,h-3,h-1,h-4,h-5,h-6,h-7,h-8,h-9,h-10,h-11,h%12,m%12][i++]?w.replace(/./g,' '):w))

function alert(x) { O.textContent=x }
function update() { F(+H.value,+M.value) }

update()
input { width:3em }
Hours<input id=H type=number min=0 max=23 value=17 oninput='update()'>
Minutes<input id=M type=number min=0 max=59 value=37 oninput='update()'>
<pre id=O></pre>


আমি আপনার উত্তর ভালবাসি! আমি এটি থেকে একগুচ্ছ জিনিস শিখেছি! তবে স্কোয়ার বন্ধনী রয়েছে এমন তীর ফাংশনটি দিয়ে কী চলছে? এছাড়াও, এর ভূমিকা কী i? আমি দেখতে পাচ্ছি যে আপনি সমস্ত অ-হোয়াইটস্পেস গ্রুপ ("এলইডি") পেয়েছেন এবং আপনি তাদের প্রতিটির জন্য লিখেছেন এমন শর্তের উপর ভিত্তি করে আপনি তাদেরকে সাদা স্থান দিয়ে প্রতিস্থাপন করেছেন। উদাহরণস্বরূপ, h-2এটি কেবল তখনই মিথ্যা h == 2, সুতরাং আমি মনে করি আপনি এটি অন্য কোথাও উল্টাবেন? আপনি কিভাবে কিছুটা ব্যাখ্যা করতে পারেন? সম্ভবত আপনার উত্তরের সম্পাদনা হিসাবে? আমি সত্যিই কৃতজ্ঞ হতে হবে!
হিশ্তিয়ান দোদভ 21 '40

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

3
@ হ্রিস্টিয়ানডোডভ কেবল একটি অভিব্যক্তি দ্বারা তৈরি একটি তীর ফাংশন কেবল সেই অভিব্যক্তির মান প্রদান করে। উদাহরণ (a,b)=>{ return a+b }হিসাবে একই(a,b)=>a+b
edc65

4

পাইথন 2, 466 , 460 , 449 , 452 , 459 449 বাইট

এটি পূর্ণসংখ্যা হিসাবে h এবং m গ্রহণ করে একটি ফাংশন হওয়ার অনুমতি হিসাবে আমরা কয়েকটি বাইট সংরক্ষণ করতে পারি। এটি অনলাইনে চেষ্টা করুন

def t(h,m):


m=(2+m)//5
 h=h%12
 n=0
 if m>6:n,m=1,12-m;h+=1
 a="""IT IS _HALF _TEN_
 _QUARTER _TWENTY_
 _FIVE _MINUTES _TO_
 _PAST _TWO _THREE_
 _ONE _FOUR _FIVE_
 _SIX _SEVEN _EIGHT_
 _NINE _TEN _ELEVEN_
 _TWELVE _O'CLOCK""".split("_")
 b=[1,m==6,m==2,1,m==3,3<m<6,1,m in[1,5],m in[1,2,4],n*m,1,(1-n)*m,h==2,h==3,1,h==1,h==4,h==5,1,h==6,h==7,h==8,1,h==9,h==10,h==11,1,h==0,m==0]
 for i,c in enumerate(a):
  if b[i]:print c,
  else:print' '*len(c),

TO/ PASTবনামের যুক্তি সহ আমার বেশ কয়েকটি বাগ (এখন ঠিক করা) ছিল O'CLOCK। এছাড়াও জন্য কয়েক বাইট সংরক্ষিত enumerateপরিবর্তন import, এবং 19<m<26পরিবর্তে m in [20,25]। মিনিটের চেয়ে 5 মিনিটের খণ্ড রটারে কাজ করার জন্য আরও 8 টি সংরক্ষণ করা হয়েছে। রড আমাকে আরও কিছুটা ব্যয়ের জন্য আরও কিছু ত্রুটি দেখিয়েছিল, তবে আমি আরও দক্ষ কার্যনির্বাহী এবং আমার পক্ষে কাজ করা একটি বাগফিক্স সহ কিছুটা উদ্ধার করেছি।


@ টিটাসের পিএইচপি উত্তর থেকে কৌতুক নেয়। আমি ==তুলনা হিসাবে পাইথনের কাছে হেরে যাচ্ছি এবং আমি মনে করি আমি কয়েকটি hপরীক্ষার উন্নতি করতে পারি
ক্রিস এইচ

আপনি কেবল print cশেষ লাইনে থাকতে পারেন, cইতিমধ্যে a[i]যথাযথভাবে enumerate
রড

1
আউটপুট ফর্ম্যাটটি নষ্ট হয়ে গেছে, printপ্রতিটি মুদ্রণের পরে একটি নতুন লাইন যুক্ত করুন, আপনি এটি ,পরে যুক্ত করে দমন করতে পারেন c। এছাড়াও কোনও শব্দ মুদ্রিত না হলে খালি ফাঁকা জায়গা মুদ্রণ করা উচিত, আপনি else:print' '*len(c),
রড

1
বাইটের ক্রমটি যদি নামা হয় তবে ভাল।
গুরুপদ মামাদপুর

@ রড, বাগ-স্পটগুলির জন্য ধন্যবাদ, যদিও এটি এটি আরও দীর্ঘ করে ফেলেছে
ক্রিস এইচ

2

পার্ল 6 , 308 296 293 বাইট

->\h,\m{my \n=round(m/5)%12;say "IT IS HALF TEN
QUARTER TWENTY
FIVE MINUTES TO
PAST TWO THREE
ONE FOUR FIVE
SIX SEVEN EIGHT
NINE TEN ELEVEN
TWELVE O'CLOCK".subst: /\S+/,{++$==1|2|(0,7,4,5,6,(6|7),3)[min n,12-n]|8*?(n%3)|(23,10,9)[(n+5)/6]|(13,11,12,|(14..*))[(h+m/33-1)%12]??$_!!" "x.comb},:g}

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

ব্যাখ্যা

মূল কাঠামোটি নিম্নরূপ:

-> \h, \m {                             # A lambda taking two args (hour and minute).
    my \n = round(m / 5) % 12;          # Index from 0 to 11, representing the minutes.
    say "...".subst: /\S+/, {           # Print the template with each word replaced:
        ++$ == ...|...|...|...          # If counter equals one of expected indices,
            ?? $_                       # then replace the word with itself,
            !! " " x .comb              # else replace it with spaces.
    }, :g                               # (Use global matching.)
}

...|...|...|...উপরের মত প্রকাশিত অভিব্যক্তিটি 1-ভিত্তিক শব্দ সূচকগুলিকে উপস্থাপন করে পূর্ণসংখ্যার সংযোগ , এবং নিম্নলিখিত হিসাবে তৈরি করা হয়:

  1|2                                   # IT IS
| (0,7,4,5,6,(6|7),3)[min n,12-n]       # FIVE / TEN / QUARTER / TWENTY / TWENTY FIVE / HALF
| 8*?(n%3)                              # MINUTES
| (23,10,9)[(n+5)/6]                    # O'CLOCK / PAST / TO
| (13,11,12,|(14..*))[(h+m/33-1)%12]    # ONE / TWO / THREE / FOUR / FIVE / SIX / SEVEN / ...

2

পাইথন 3, (569 বাইট)

এই উত্তরটি বিন্যাসে সময়ের প্রয়োজন HH মিমি (ব্যবধান দ্বারা পৃথক পূর্ণসংখ্যার) .আমি '\ এন' মুদ্রিত, যা দ্বারা অনুপ্রাণিত হয় পরিচালিত ক্রিস এর method.Thanks, ক্রিস! কোড হ্রাস কোনও সহায়তা প্রশংসা করা হয়।

H,M=input().split()
w="""HALF _TEN_
_QUARTER _TWENTY_
_FIVE _MINUTES _TO_
_PAST _TWO _THREE_
_ONE _FOUR _FIVE_
_SIX _SEVEN _EIGHT_
_NINE _TEN _ELEVEN_
_TWELVE _O'CLOCK""".split("_")
h,m=int(H),int(M)
if h>12:h-=12
m=(m//5+1)*5 if m%5>2.5 else m//5*5
if m>30:
    m=60-m
    h=(h+1)%12
X=[m==30,m==10,1,m==15,m in[20,25],1,m in[5,25],m not in[0,15,30],int(M)>30 and m!=0,1,m!=0 and int(M)<31,h==2,h==3,1,h==1,h==4,h==5,1,h==6,h==7,h==8,1,h==9,h==10,h==11,1,h in[0,12],m==0]
t="IT IS "
for i in range(0,28):
    if(X[i]):t+=w[i]
    else:t+=" "*len(w[i])
print(t.strip())

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


আপনি কি একক স্ট্রিংয়ে ডাব্লু একত্রিত করতে পারেন এবং তারপরে ব্যবহার করতে পারেন .split(',')? কয়েকটা বাঁচানো উচিত
এলপেড্রো

আপনার ইনপুটটি H,M=input()যেখানে এইচ, এম হয় সেভাবেও যান। নিয়মের অধীনে দুটি পূর্ণসংখ্যার ক্রম অনুমোদিত, নিশ্চিত নয় যে এটি পাইথন 3 এর
আওতা

ধন্যবাদ @ এলপেড্রো .সকৃত 57 বাইট H,M=input()আপনি সন্দেহ হিসাবে কাজ করেন নি।
এফিকি কোডার

1

পাইথন 2 , 443 440 বাইট

R=range
w="HALF TEN QUARTER TWENTY FIVE MINUTES TO PAST TWO THREE ONE FOUR FIVE SIX SEVEN EIGHT NINE TEN ELEVEN TWELVE O'CLOCK".split(' ')
h=[10,8,9]+R(11,20)
c=['IT','IS']+[' '*len(x)for x in w]
i,j=input()
i=(i,i+1)[j>30]%13-1
j=int(round(j/5.0)*5.0)%60
for z in[[20],[4,5,7],[1,5,7],[2,7],[3,5,7],[3,4,5,7],[0,7],R(3,7),[3,5,6],[2,6],[1,5,6],R(4,7)][j/5]:c[z]=w[z]
c[h[i]]=w[h[i]]
x=0
for y in[4]+R(6,22,3)+[23]:print' '.join(c[x:y]);x=y

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

এটি সম্ভবত আরও কিছু গল্ফ থেকে উপকৃত হতে পারে। ইনপুট হল পূর্ণসংখ্যার একটি তালিকা যেমন 7,23 = 7:23


1

সিম্পিপেম্পলেট , 737 708 বাইট

হ্যাঁ, শব্দভাণ্ডার এবং "বাস্তব" গণিতের অভাব বাইটোকন্টকে খারাপভাবে আঘাত করে।

{@seth argv.0}{@php$DATA[m]=ceil($DATA[argv][1]/5)*5%60|0}{@ifm}{@ifm is30}{@setA"HALF"}{@/}{@if"@[15]0$@"is matchesm}{@setB"TEN"}{@/}{@if"@[14]5$@"is matchesm}{@setC"QUARTER"}{@/}{@if"@[24]0$@"is matchesm}{@setD"TWENTY"}{@/}{@if"@^[25]?5$@"is matchesm}{@setE"FIVE"}{@/}{@if"@^([235]?5|[1245]0)$@" is matchesm}{@setF"MINUTES"}{@/}{@ifm is greater30}{@setG"TO"}{@else}{@setH"PAST"}{@/}{@else}{@setU"O\'CLOCK"}{@/}{@setZ"","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN","ELEVEN","TWELVE"}{@setY"J"}{@incbyh Y}{@php$DATA[$DATA[Y]]=$DATA[Z][$DATA[h]]}{@print"IT IS%-6s%s\n%8s%s\n%-5s%-7s %s\n%4s %3s %s\n%3s %4s %s\n%3s %5s %s\n%4s %3s %s\n%6s %s",A,B,C,D,E,F,G,H,J,K,I,L,M,N,O,P,Q,R,S,T,U}

এটি ক্লাসে 1 ম এবং 2 য় প্যারামিটার হিসাবে ঘন্টা এবং মিনিটকে প্রত্যাশা করে।


Ungolfed:

{@set hour argv.0}

{@//The bitwise is required for the `@if minutes is 30`}
{@//Otherwise, I would be forced to write `@if minutes is equal to 30`}
{@php $DATA['minutes'] = ((ceil($DATA['argv'][1] / 5) * 5) % 60) | 0}

{@if minutes}
    {@if minutes is 30}
        {@set A "HALF"}
    {@/}
    {@if "@[15]0$@" is matches minutes}
        {@set B "TEN"}
    {@/}
    {@if "@[14]5$@" is matches minutes}
        {@set C "QUARTER"}
    {@/}
    {@if "@[24]0$@" is matches minutes}
        {@set D "TWENTY"}
    {@/}
    {@if "@^[25]?5$@" is matches minutes}
        {@set E "FIVE"}
    {@/}
    {@if "@^([235]?5|[1245]0)$@" is matches minutes}
        {@set F "MINUTES"}
    {@/}
    {@if m is greater than 30}
        {@set G "TO"}
    {@else}
        {@set H "PAST"}
    {@/}
{@else}
    {@set U "O\'CLOCK"}
{@/}


{@set numbers "", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "TEN", "ELEVEN", "TWELVE"}
{@set key "J"}
{@inc by hour key}
{@php $DATA[$DATA['key']] = $DATA['numbers'][$DATA['hour']]}

{@print "IT IS%-6s%s\n%8s%s\n%-5s%-7s %s\n%4s %3s %s\n%3s %4s %s\n%3s %5s %s\n%4s %3s %s\n%6s %s", A, B, C, D, E, F, G, H, J, K, I, L, M, N, O, P, Q, R, S, T, U}

কীভাবে চালাবেন:

  1. Https://github.com/ismael-miguel/SimpleTemplate থেকে কোড পান
  2. নিম্নলিখিত কোডটি চালান:

    <?php
        include 'SimpleTemplate.php';
    
        $template = new SimpleTemplate('<code>');
    
        $template->render($hour, $minutes);
    
        //system-time: $template->render(date('g'), date('i'));
    
  3. সম্পন্ন!


1

জাভা (ওপেনজেডিকে 9) , 437 বাইট

(h,m)->{h=(h+m/35+11)%12+1;Object[]s="HALF TEN QUARTER TWENTY FIVE MINUTES TO PAST TWO THREE ONE FOUR FIVE SIX SEVEN EIGHT NINE TEN ELEVEN TWELVE O'CLOCK".split(" ");for(int i=s.length,M[]={1<<20,176,162,132,168,184,129,120,104,68,98,112};i-->0;)s[i]=(7<i&i<20?h==i-(h>3?7:h>1?6:9):(M[(m+2)/5%12]&(1<<i))>0)?s[i]:"";System.out.printf("IT IS %4s %3s%n%7s %6s%n%4s %7s %2s%n%4s %3s %5s%n%3s %4s %4s%n%3s %5s %5s%n%4s %3s %6s%n%6s %7s",s);}

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

আমি ভেবেছিলাম অবশেষে আমার চ্যালেঞ্জের জন্য একটি শট দেব;)


1

পার্ল 5 , 487 449 বাইট

($a,$_,$h)=localtime;s/[3-7]$/5/;s/[12]$/0/;$m=s/(.?)[89]$/($1+1)*10/er;$_="IT IS half ten
quarter tw
five minutes to
past 2two 3three
1one 4four 5five
6six 7seven 8eight
9nine 10ten 11eleven
12twelve oc";if($m>30){s/to/TO/;$h++;$m=60-$m}elsif($m){s/past/PAST/}$h=$h%12||12;$m!=30?$m%15?s/m\w+/uc$&/e:$m?s/q\w+/uc$&/e:s/oc/O'CLOCK/:s/half/HALF/;$m%10&&!/Q/&&s/five/FIVE/;$m>15&&$m<30?s/tw/TWENTY/:$m==10&&s/ten/TEN/;s/\b$h\w+/uc$&/es;y/a-z0-9/ /;say

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

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