অ্যাকাউন্টে লিপ সেকেন্ড গ্রহণ করে বর্তমান সময় মুদ্রণ করুন ...


9

(দ্রষ্টব্য: যদিও এর সাথে সম্পর্কিত, এই চ্যালেঞ্জ অনুরূপ এই এক কারণ এটি লিপ সেকন্ড স্বয়ংক্রিয়ভাবে নির্ধারণের বদলে তাদের বার hardcoding প্রয়োজন আছে এবং সদৃশ নয় এই এক কারণ অসুবিধা অধিকাংশ ছাড়া লিপ সেকেন্ড বিকৃতি বোসের সময় নির্ধারণের থেকে আসে , এমন কিছু যা বেশিরভাগ সময়ের এপিআই ডিফল্টরূপে করে না such

আমরা ২০১ 2016 সালের শেষের দিকে আসছি, তবে বেশিরভাগ লোকেরা প্রত্যাশার চেয়ে কিছুটা বেশি সময় নিতে পারে। সুতরাং এই বছর আমাদের অতিরিক্ত দ্বিতীয় উদযাপন এখানে একটি চ্যালেঞ্জ।

ইউটিসিতে বর্তমান সময়টিকে ঘন্টা, মিনিট, সেকেন্ড হিসাবে আউটপুট দেয়। (উদাহরণস্বরূপ, মধ্যাহ্নের জন্য বৈধ আউটপুট ফর্ম্যাটগুলি অন্তর্ভুক্ত করবে 12:00:00এবং [12,0,0]; ফর্ম্যাটটি এখানে ব্যাপকভাবে গুরুত্বপূর্ণ নয়))

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

বর্তমান সময়ের বেশিরভাগ অপারেটিং সিস্টেমের ডিফল্ট এপিআইগুলি সেগুলি থেকে অন্যথায় বিভ্রান্ত হতে পারে এমন প্রোগ্রামগুলি থেকে আড়াল করার জন্য লিপ সেকেন্ডের মধ্যে সময় কাটাবে। এই হিসাবে, এই চ্যালেঞ্জের প্রধান অসুবিধা হ'ল এটিকে পূর্বাবস্থায় ফেলার জন্য কোনও পদ্ধতি বা একটি API খুঁজে পাওয়া এবং ইউটিসি-তে প্রকৃত অশোধিত বর্তমান সময়ের কাজ করা।

তত্ত্ব অনুসারে, আপনার প্রোগ্রামটি সম্পূর্ণরূপে নির্ভুল হওয়া উচিত যদি এটি একটি অসীম দ্রুত কম্পিউটারে চলে তবে ইচ্ছাকৃতভাবে চালাতে শূন্যের বেশি সময় নেওয়া উচিত নয়। (অবশ্যই, বাস্তবে, আপনার প্রোগ্রামটি একটি অসম্পূর্ণ কম্পিউটারে চলবে, এবং তাই সম্ভবত তাত্ক্ষণিকভাবে চলবে না You ফলাফলগুলি অকার্যকর করার জন্য আপনাকে চিন্তা করতে হবে না, তবে আপনার প্রোগ্রামের সঠিকতার জন্য অবশ্যই এটির উপর নির্ভর করতে হবে না। )

আপনার টাইমজোনটি সিস্টেম ঘড়ি সেট করা নির্বিশেষে আপনার প্রোগ্রামটি অবশ্যই কাজ করবে। (তবে, এটি টাইমজোনটি কী ব্যবহৃত হচ্ছে সে সম্পর্কে অপারেটিং সিস্টেম বা পরিবেশের কাছ থেকে তথ্যের জন্য অনুরোধ করতে পারে এবং উত্তরটি সঠিক বলে ধরে নিতে পারে))

হিসেবে , সংক্ষিপ্ততম প্রোগ্রামটি জিতেছে। শুভকামনা!


উত্তর:


2

পাওয়ারশেল , 161 বাইট

(('{0:H:m:s}','23:59:60')[(($d=[datetime]::UtcNow).Ticks-6114960*98e9)/1e8-in((irm ietf.org/timezones/data/leap-seconds.list)-split'[^@]	|
'-match'^\d{9}')])-f$d

এটি অনলাইন চেষ্টা করুন! (এখানে কাজ করে না, মনে হচ্ছে টিআইও স্বীকৃতি দেয় না irmএবং iwrসম্ভবত এটি কোনও সুরক্ষা বৈশিষ্ট্য?)

লজিক পরীক্ষা (হার্ডকোডড তারিখ):

(('{0:H:m:s}','23:59:60')[(($d=[datetime]'1/1/2017 00:00:00').Ticks-6114960*98e9)/1e8-in((irm ietf.org/timezones/data/leap-seconds.list)-split'[^@]	|
'-match'^\d{9}')])-f$d

মন্তব্য

রেজেক্স স্ট্রিংটিতে একটি আক্ষরিক TABএবং একটি আক্ষরিক লাইনব্রেক ( 0xA) রয়েছে, যাতে আমাকে তাদের এড়াতে হবে না (প্রতিটি বাট প্রতি 1 টি সংরক্ষণ করা হয়েছে)।

ব্যাখ্যা

আইটিএফ ফাইলে প্রদত্ত সময় (লিপ সেকেন্ডের) এনটিপি যুগের সময় থেকে সেকেন্ডে হয় 1/1/1900 00:00:00। উইন্ডোজে, একটি "টিক" হ'ল একটি সেকেন্ডের 10,000 মিলিয়ন তম (10,000,000 টিক্স / সেকেন্ড)।

আপনি যদি কোনও পূর্ণসংখ্যার সাথে [datetime]এটি যোগ করে এটি পূর্ণসংখ্যার মানটিকে টিক হিসাবে গণ্য করে, তাই আমি এনটিপি যুগের হার্ডকোডযুক্ত টিক মানটি ব্যবহার করছি, তবে এটি বর্তমান ইউটিসি সময়ের টিক মান থেকে বিয়োগ করে (যার মূল মানটি একই সাথে নির্ধারিত হচ্ছে থেকে $d)।

সেই হার্ডকোডযুক্ত টিক মানটি আরও ছোট করার জন্য, আমি কিছু শূন্য নিয়েছি (এর মধ্যে 9 টি) এবং 98 দ্বারা বিভক্ত হয়েছে, তারপরে 98e9(98 * 10 9 ) দিয়ে গুণ করুন।

এই বিয়োগের ফলাফলটি এনটিপি যুগের পর থেকে টিক্সের মান। এটি এনটিপি যুগের পর থেকে সেকেন্ডে (সাজানোর) মান পাওয়ার জন্য 1e8(নয় 1e9, এক মুহুর্তের মধ্যে পরিষ্কার হয়ে যাবে) কারণে ভাগ হয়ে যায় । এটি 10 ​​এর ফ্যাক্টর দ্বারা ছোট হবে actually

আইইটিএফ থেকে নথিটি পুনরুদ্ধার করা, প্রথমে এটি লাইনে ভাগ করার পরিবর্তে টাইমস্ট্যাম্পগুলির সাহায্যে লাইনগুলি প্রসেস করা, আমি সিদ্ধান্ত নিয়েছি উভয় লাইন ব্রেক এবং TABচরিত্রগুলিতে বিভক্ত হওয়ার, যেহেতু টাইমস্ট্যাম্পের পরে এটিই আসে। ফাইলটিতে একক ত্রুটিযুক্ত রেখার কারণে, এটি কেবলমাত্র আমরা চাই না এমন একটি অতিরিক্ত টাইমস্ট্যাম্প অন্তর্ভুক্ত করবে। লাইনটি দেখতে এমন দেখাচ্ছে:

#@	3707596800

সুতরাং আমি রেজেক্সকে বিভক্ত হয়ে গেল [^@]\t(যে কোনও চরিত্র যা এর @পরে নেই TAB) যা সেই লাইনটি বাদ দিতে কাজ করে, তবে 0প্রতিটি টাইমস্ট্যাম্পের সর্বশেষটি গ্রাস করে ।

এই কারণেই আমি নিখোঁজদের অ্যাকাউন্টে ভাগ করে নেব 1e8না ।1e90

নিউট্রেড লিপ দ্বিতীয় টাইমস্ট্যাম্পগুলির তালিকার ভিতরে এটি বিদ্যমান রয়েছে তা দেখতে বর্তমান টাইমস্ট্যাম্পটি পরীক্ষা করা হয়। আমি বর্ণিত এই পুরো প্রক্রিয়াটি অ্যারে অ্যাকসেসরের ভিতরে রয়েছে [], ফলে ফলাফলটি [bool]একটি 0( $false) বা 1( $true) এর সাথে মিলিত হয় । আমরা যে অ্যারেটিকে সূচিত করছি তাতে দুটি উপাদান রয়েছে: সময় প্রদর্শনের জন্য একটি ফর্ম্যাট স্ট্রিং এবং একটি হার্ডকোডযুক্ত 23:59:60। পূর্বোক্ত তুলনার সত্যতা নির্ধারণ করে যে কোনটি বেছে নেওয়া হবে এবং -fএটি পূর্ববর্তী নির্ধারিত বর্তমান তারিখটিকে $dতার প্যারামিটার হিসাবে ফর্ম্যাট অপারেটারে খাওয়ানো হয় ।


এই লিপ সেকেন্ডের পরে দ্বিতীয়টি কী মুদ্রণ করে? আমি লিপকে লিপ সেকেন্ডের জন্য অনুসরণ করতে পারি, তবে নিশ্চিত নই যে আমি উভয় পক্ষের পক্ষে লজিকটি অনুসরণ করতে পারি। (উইন্ডোজ কি স্বাভাবিকভাবেই একটি লিপ সেকেন্ড এবং নিম্নলিখিত দ্বিতীয়টি 00:00:00 হিসাবে প্রদর্শন করে?)

@ ais523 এটি সিস্টেমের সময় যা হ'ল লিপ সেকেন্ডের পরে দ্বিতীয়টি প্রদর্শিত করবে। উইন্ডোজ লিপ সেকেন্ড সম্পর্কে জানে না, তাই কোনও সিঙ্ক বা ম্যানুয়াল সেটিং দ্বারা সংশোধন না করা পর্যন্ত ঘড়িটি 1 সেকেন্ড দ্রুত হবে। প্রয়োজনীয়তাগুলি দিয়েছি আমি এটির জন্য সত্যই সামঞ্জস্য করতে পারি না, যেহেতু নিষিদ্ধ, কোনও বাহ্যিক সময় উত্স ব্যবহার না করেই সিস্টেমের সময়টি সঠিক কিনা তা নির্ধারণ করা সম্ভব নয়। আমি যা করতে পারি তার মধ্যে সবচেয়ে ভাল কোডটি যুক্ত করা যা এনটিপি সিঙ্ককে সময় প্রিন্ট করার পরে জোর করে, কোনটি অবশ্যই ব্যর্থ হতে পারে (নেটওয়ার্ক ত্রুটি, কোনও সময় উত্স সেট, ইত্যাদি), এমনকি যদি অনুমতি দেওয়া হয়।
ব্রিটিশবাদী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.