নিকটতম ঘড়ির হাতগুলি সন্ধান করুন


15

চ্যালেঞ্জ

মধ্যরাত পেরিয়ে বেশ কয়েক সেকেন্ডের জন্য, যতটা সম্ভব কয়েকটি বাইট ব্যবহার করে একটি ঘড়ির মুখের উপর দুটি হাতের মধ্যে সবচেয়ে ছোট কোণটি আউটপুট দিন।

আপনি ধরে নিতে পারেন যে সেকেন্ডের সংখ্যা সর্বদা 86400 এর চেয়ে কম থাকে Ang কোণগুলি ডিগ্রি বা রেডিয়ানে উপস্থাপিত হতে পারে।

একটি রেফারেন্স সমাধানটি এখানে: http://ideone.com/eVdgC0

পরীক্ষার কেস (ডিগ্রিতে ফলাফল)

0 -> 0
60 -> 0.5
600 -> 5
3600 -> 0
5400 -> 45
6930 -> 84.75
50000 -> 63.333

Clarificarions

  • ঘড়ির 3 হাত রয়েছে: ঘন্টা, মিনিট এবং সেকেন্ড।
  • সমস্ত হাত অবিচ্ছিন্নভাবে সরানো হয়, এইভাবে ঘন্টার মুখে স্নাতকের মধ্যে ঘন্টা এবং মিনিটের হাতগুলি পাওয়া যায়।

সম্পর্কিত চ্যালেঞ্জ (মিনিট এবং ঘন্টা কেবলমাত্র হাতে, ডিগ্রিতে)
Sp3000

1
আপনার সম্ভবত নির্দিষ্ট হওয়া উচিত যে ঘড়িতে দ্বিতীয় হাত রয়েছে is
isaacg

আপনি কিছু পরীক্ষার কেস যুক্ত করতে পারেন?
বিটা ক্ষয়

1
কিছু ঘড়িতে, যখন দ্বিতীয় হাত শীর্ষে পৌঁছে যায় তখন মিনিটের হাত পরের মিনিটে যায় umps অন্যদের উপর, এটি অবিচ্ছিন্নভাবে চলতে থাকে। আমি বুঝতে পারি এটি এমন একটি ঘড়ি যেখানে এটি অবিচ্ছিন্নভাবে চলে? এছাড়াও, আপনি একবার সাবধানে পড়ার পরে এটি স্পষ্ট হয়ে গেলে, আমি প্রথমদিকে "সেকেন্ড হ্যান্ড" অস্পষ্ট দেখতে পেয়েছিলাম, কারণ বেশিরভাগ ঘড়ির কমপক্ষে কমপক্ষে দুটি হাত রয়েছে, সুতরাং "দ্বিতীয় হাত" যুক্ত করা সত্যিই তৃতীয় হাত যুক্ত করে।
রেটো কোরাাদি

1
@ বেটাডেকে অবশ্যই আমি হয়ত এরকম কিছু বলেছি: "ঘড়ির তিনটি হাত রয়েছে: ঘন্টা, মিনিট এবং সেকেন্ড" "
রেটো কোরাাদি

উত্তর:


10

সিজেম, 36 35 34 32 30 বাইট

riP*30/_60/_C/]2m*::-:mc:mC$3=

আউটপুট রেডিয়ানগুলিতে। আমি সমস্ত 86400 সম্ভাব্য ইনপুটগুলির জন্য সমাধানগুলি যাচাই করেছি।

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

ধারণা

যেহেতু রেডিয়েনগুলি সম্পূর্ণ ল্যাপ, তাই ঘড়ির প্রতিটি মিনিট / সেকেন্ড অন্তর 2π / 60 = π / 30 রেডিয়ান প্রশস্ত।

সুতরাং, সেকেন্ডের সংখ্যাকে π / 30 দ্বারা ভাগ করা দ্বিতীয় হাতের অবস্থান দেয়।

মিনিট হাতটি দ্বিতীয় হাতের গতির এক ষষ্ঠীতে সরে যায়, সুতরাং ফলকে উপরের থেকে 60 দ্বারা ভাগ করে মিনিট হাতের অবস্থানটি পাওয়া যায়।

তেমনিভাবে, 12 টি দ্বারা শেষ ফলাফল ভাগ করে নেওয়া হ'ল ঘন্টাের অবস্থানের ফলন দেয়।

নোট করুন যে উপরে থেকে আমাদের তিনটি ভাগফল অবশ্যই [0,2π) এর মধ্যে নেই।

হাতের কোণগুলির সমস্ত নয়টি সম্ভাব্য পার্থক্য গণনা করে আমরা তিনটি 0 টি (একটি হাত এবং নিজের মধ্যে কৌণিক দূরত্ব) এবং বিভিন্ন হাতের মধ্যে ছয়টি দূরত্ব পেতে পারি।

নিকটতম হাতগুলি যদি অর্ধে থাকে যা 12 টি অন্তর্ভুক্ত করে না তবে উপরের পার্থক্যগুলির মধ্যে একটি হ'ল পছন্দসই আউটপুট (মোড )।

তবে, 01:55:30 এ (উদাহরণস্বরূপ), ঘন্টা হাতটি 12 থেকে 5.812 র‌্যাড (333.00 ডিগ্রি) এর কোণে 1.008 র‌্যাড (57.75 ডিগ্রি) এবং মিনিট হাতটি 4.804 র‌্যাডের পার্থক্য দেয় (275.25 ডিগ্রি)। এই ফলটিকে একটি সম্পূর্ণ ল্যাপ থেকে বিয়োগ করে আমরা "অন্য দিকে" পরিমাপ করা কোণটি পাই, যা 1.479 রেড (84.75 রেড) এর সমান।

এখন, বরং প্রতিটি কোণ ম্যাপিং চেয়ে θ মধ্যে [0,2π) এবং শর্তসাপেক্ষে থেকে ফলাফলের বিয়োগ π , আমরা করতে পারেন কেবল ক্যালকুলেট arccos (কোসাইন্ (θ)) , যেহেতু কোসাইন্ উভয় পর্যায় এবং এমনকি, এবং arccos সবসময় একটি মান উৎপাদ [ 0, π)

তিনটি ক্ষুদ্রতর ফলাফল (সমস্ত শূন্য) এড়িয়ে চতুর্থতম ক্ষুদ্রতম কাঙ্ক্ষিত আউটপুট হবে।

কোড

ri                             e# Read an integer from STDIN.
  P*30/                        e# Multiply by π and divide by 30.
       _60/                    e# Divide a copy by 60.
           _C/                 e# Divide a copy by 12.
              ]2m*             e# Push the array of all pairs of quotients.
                  ::-          e# Replace each pair by its difference.
                     :mc       e# Apply cosine to each difference.
                        :mC    e# Apply arccosine to each cosine.
                           $3= e# Sort and select the fourth smallest element.

বিকল্প সংস্করণ (34 বাইট)

rd6*_60/_C/]360f%2m*::m360X$f-+$6=

আউটপুট ডিগ্রিতে রয়েছে এবং কোনও ত্রিকোণমিতিক ফাংশন ব্যবহার করা হয় না।

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।


9

গণিত, 40 বাইট

Min@Abs@Mod[#{11,708,719}/120,360,-180]&

ব্যাখ্যা: tমধ্যরাত থেকে সেকেন্ডের সংখ্যা হওয়া যাক । প্রতিটি হাতের অবস্থান

hour: t/120 (mod 360)
min:  t/10 (mod 360)
sec:  6t (mod 360)

xডিগ্রি এবং yডিগ্রিগুলির মধ্যে পরম কৌণিক দূরত্ব গণনা করতে আমরা y - x360 দ্বারা পরিসরে পরিবর্তন করতে পারি [-180, 180]এবং তারপরে পরম মানটি নিতে পারি। (নোট সেখানে কোন সীমাবদ্ধতা যে xএবং y।) সুতরাং এই ফাংশন ঠিক pairwise পার্থক্য হিসাব t/10-t/120, 6t-t/10এবং 6t-t/120এবং যে আছে।


দুঃখিত, গাণিতিকের সাথে পরিচিত না, তবে এটি কি মধ্যরাত থেকে সেকেন্ডের সংখ্যার জন্য আসলে যুক্তি বা ভেরিয়েবল গ্রহণ করে?
উইনি 19

1
@Winny হ্যাঁ, এটা একটি বিশুদ্ধ ফাংশন (দ্বারা নির্দেশিত এর &) এবং প্রথম আর্গুমেন্ট এটা পাস হিসাবে ভিতরে উল্লেখ করা হয় #
jcai

7

পাইথন, 65

lambda n,l={720,60,1}:6*min((n/x-n/y)%60for x in l for y in{x}^l)

ঘন্টা, মিনিট এবং দ্বিতীয় হাত দিয়ে দূরত্বটি ঘুরে দেখা গেছে, বৃত্তের 1/60 টি ইউনিটে h,m,s = n/720, n/60, n/1। আমরা এই গেলিক ভাষার 60 নেওয়া থেকে বৃত্ত তার অবস্থান পেতে পারেন 0করতে 60

যদি আমরা তাদের পার্থক্যটি মড 60 গ্রহণ করি তবে আমরা এককের অপরটির সামনে থাকা এককের সংখ্যা পাই। আমরা সমস্ত ছয়টি সম্ভাব্য পার্থক্য 6নিয়েছি, মিনিটটি খুঁজে বের করি, তারপরে 360ডিগ্রীতে পুনঃব্যবস্থাপনের জন্য গুণ করে ।

দুই স্তরের তালিকাতে ধী প্রথম প্রথম হাত যেমন দ্বারা প্রতিনিধিত্ব বেছে 720, 60অথবা 1, তারপর অন্যদিকে সেট XOR মাধ্যমে মুছে প্রথম পছন্দ সঙ্গে যে সেট আউট পছন্দ করে।

আমি রেফারেন্স কোডের বিপরীতে এটিকে পুরোপুরি পরীক্ষা করেছি।


6

সি #, 163 152 বাইট

মোড়কের চারপাশে গণনা করতে এটি প্রতিটি হাত দু'বার তৈরি করে, তারপরে প্রতিটি সংমিশ্রনের মধ্য দিয়ে লুপ করে এবং হাতের মধ্যে সর্বনিম্ন কোণ খুঁজে পায়। গণনাগুলি 60 বিভাগে সঞ্চালিত হয়, তারপরে ডিগ্রি পেতে 6 দ্বারা গুণিত হয়।

স্বচ্ছতার জন্য যুক্ত

float F(int s){
    float b=60,c;
    float[]a={c=s/b/b%12*5,c+b,c=s/b%b,c+b,s%=60,s+b};
    for(s=36;s-->0;)
        b=s%6!=s/6&(c=(c=a[s%6]-a[s/6])<0?-c:c)<b?c:b;
    return b*6;
}

উদাহরণ আউটপুট:

    0 seconds, 00:00:00, smallest angle is 0°
43200 seconds, 12:00:00, smallest angle is 0°
86399 seconds, 23:59:59, smallest angle is 0.09164429°
 3330 seconds, 00:55:30, smallest angle is 54.75°
39930 seconds, 11:05:30, smallest angle is 60.25001°
21955 seconds, 06:05:55, smallest angle is 65.49998°
21305 seconds, 05:55:05, smallest angle is 59.50001°
 5455 seconds, 01:30:55, smallest angle is 75.45831°
41405 seconds, 11:30:05, smallest angle is 44.95834°

চারপাশে
মোড়কের

2

টিআই-বেসিক, 17 বাইট

min(cos⁻¹(cos(ΔList(Ans{6,.1,5!⁻¹,6

ডেনিস ব্যবহার করে arccos(cos(দূরত্ব স্বাভাবিক করতে ; তবে, সমস্ত জোড়াযুক্ত দূরত্ব গণনা করার পরিবর্তে এটি ব্যবহার করে প্রয়োজনীয় তিনটিই গণনা করে ΔList([seconds],[minutes],[hours],[seconds]

এই প্রোগ্রামটি আশা করে Degree মোডের করে এবং উত্তরগুলি ডিগ্রীতে প্রত্যাবর্তন করে।

সম্পাদনা: এর 5!চেয়ে এক বাইট কম 120

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