রেটিনা , 530 220 210 202 201 193 191 187 185 (184) বাইট
3 বাইট সংরক্ষণের জন্য র্যান্ডম্রা ক্রেডিট! (এবং আরও কয়েকজনের পথ প্রশস্ত করা)
+`\.(\d)(.+)( .+)
$1.$2_$3_
\b
#
+`(\d*)#((((((((((9)|8)|7)|6)|5)|4)|3)|2)|1)|\w)
$1$1$1$1$1$1$1$1$1$1$3$4$5$6$7$8$9$10$11#
\d
11
(?=(1*)\1)[^.]
$1
^(1+)\.\1{90000}1+
Retina!
1.+
Trash!
বাইট গণনা উদ্দেশ্যে, প্রতিটি লাইন একটি পৃথক ফাইলে যায় তবে -s
পতাকাটির সাহায্যে রেটিনাকে অনুরোধ করে আপনি একক ফাইল থেকে উপরের কোডটি চালাতে পারেন ।
এটি প্রথমে ঘনত্বের প্রত্যাশা করে (এটি অবশ্যই একটি দশমিক পয়েন্ট সহ থাকতে পারে, এমনকি এটি একটি অনুবর্তনযোগ্য এক হলেও), এর পরে প্রস্থ এবং উচ্চতা হয় d w h
।
এটি কিছুটা ধীর। আমি প্রদত্ত পরীক্ষাগুলির বেশিরভাগ ক্ষেত্রে চেষ্টা করব না, কারণ এটি বয়সের জন্য চলবে। তবে, আপনি পরীক্ষা করতে পারেন যে এটি পরীক্ষার ক্ষেত্রে সঠিকভাবে কাজ করে
19. 4096 2160 -> Trash!
1. 180 240 -> Trash!
1. 181 240 -> Retina!
1. 180 241 -> Retina!
0.04 10 10 -> Retina!
মূলত, ঘনত্বকে পূর্ণসংখ্যার জন্য সমস্ত সংখ্যার মাধ্যমে গুণিত করার পরে, আপনি প্রস্থ এবং উচ্চতা 4 টির বেশি সংখ্যার চান না।
যদিও এটি ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ... সমস্ত পাটিগণিত (অবিচ্ছিন্ন) পূর্ণসংখ্যা ব্যবহার করছে।
নীতিগতভাবে, আমি আরও একটি বাইট ছাঁটাই ^
করতে পারি : ক্যানটি বাদ দেওয়া যেতে পারে, তবে Trash!
অতিরিক্ত পরিমাণে ব্যাকট্র্যাকিংয়ের কারণে এটি পরীক্ষার কেসগুলিকে মারাত্মকভাবে ধীর করে দেবে।
ব্যাখ্যা
প্রথমে ভাসমান পয়েন্ট অপারেশনগুলি এড়াতে অসমতার পুনরায় সাজানো যাক:
√(w2 + h2) / d > 300
√(w2 + h2) > 300 d
w2 + h2 > 90000 d2
আমরা লক্ষ্য করতে পারে এই গুন অধীনে পরিবর্তিত হয় w
, h
এবং d
একই সংখ্যা দ্বারা x
:
w2 + h2 > 90000 d2
(x w)2 + (x h)2 > 90000 (x d)2
x2 (w2 + h2) > 90000 x2 d2
w2 + h2 > 90000 d2
অ্যানারি নম্বরকে স্কোয়ার করার বিভিন্ন উপায় রয়েছে তবে আমরা পরিচয়টি ব্যবহার করব
n2 = Σi=1..2n ⌊i/2⌋
এটি আমাদের কেবলমাত্র পূর্ণসংখ্যার গাণিতিক (অ্যানারিতে পূর্ণসংখ্যার প্রতিনিধিত্ব করে) ব্যবহার করে সমস্যার সমাধান করার একটি উপায় দেয়।
কোড মাধ্যমে যেতে দিন। প্রতিটি জোড়া লাইন একটি রেজেক্সের বিকল্প।
+`\.(\d)(.+)( .+)
$1.$2_$3_
প্রস্থ এবং উচ্চতা 10 ( x
উপরের) দ্বারা গুণিত করার সময় এটি ঘনত্বের দশমিক পয়েন্টটি বারবার ডান দিকে সরায় । এটি নিশ্চিত করা যায় যে সমস্ত সংখ্যার পূর্ণসংখ্যা হয়। _
জিরো যুক্ত করার পরিবর্তে, আমি সংযোজন করছি , যা আমি পরে শূন্য হিসাবে বিবেচনা করব। (এটি একটি গল্ফিং ট্রিক, কারণ অন্যথায় আমার ...${3}0
অস্পষ্টতা এড়াতে লেখার দরকার ছিল $30
।) +
রেজেক্সের সামনের অংশটি রেটিনাকে ফলাফল পরিবর্তন বন্ধ না হওয়া অবধি এই প্রতিস্থাপনের পুনরাবৃত্তি করতে বলে (যা প্যাটার্নটি আর মেলে না তখন) ।
\b
#
আমরা এখন অ্যানারিতে রূপান্তর করার জন্য তিনটি সংখ্যা প্রস্তুত করছি। নীতিগতভাবে, #
প্রতিটি সংখ্যার সামনে আমাদের একটি চিহ্নিতকারী (দ্য ) দরকার , তবে প্রতিটি সংখ্যার শেষে একটি যোগ করাও সংক্ষিপ্ত, যা রূপান্তর পদক্ষেপকে প্রভাবিত করবে না।
+`(\d*)#((((((((((9)|8)|7)|6)|5)|4)|3)|2)|1)|\w)
$1$1$1$1$1$1$1$1$1$1$3$4$5$6$7$8$9$10$11#
ড্যান 1111 দ্বারা বিকাশ করা একটি কৌশল ব্যবহার করে এটি অ্যানারিতে রূপান্তর । মূলত আমি প্রতিটি অঙ্কটি নিজের একটি পুনঃ-অঙ্কে অনুবাদ করছি, বিদ্যমান সংখ্যাগুলি 10 দ্বারা গুন করার সময় ( #
প্রক্রিয়াটিতে চিহ্নিতকারীকে ডানদিকে সরানো )। এই বাইনারি উপস্থাপনাটি বিভিন্ন অঙ্কের বেশ ঝাঁকুনি হবে তবে মোট সংখ্যাটি পূর্ণসংখ্যার মানের সমান হবে। \w
শেষের দিকে নোট করুন - সাধারণত এটি ঠিক 0
, তবে আমরা _
শূন্য হিসাবেও আচরণ করতে চাই (যা রেজেক্সে একটি শব্দ চরিত্র হিসাবে বিবেচিত হয়)।
\d
11
আমরা প্রতিটি 1
অঙ্ককে দুটি আকারে পরিণত করি , যার ফলে ক) সমস্ত সংখ্যা একই (যা পরবর্তী সময়ে প্রয়োজনীয় হবে) এবং খ) প্রতিটি সংখ্যার দ্বিগুণ করে তা নিশ্চিত করে।
(?=(1*)\1)[^.]
$1
এটি দুটি কাজ করে: এটি সমস্ত সংখ্যার (বা প্রতিটি সংখ্যার অর্ধেক, একটি যোগফলকে গুণে 2n
) বর্গক্ষেত্র করে এবং প্রস্থ এবং উচ্চতার ফলাফলগুলির স্কোয়ার যুক্ত করে। লক্ষ্য করুন যে গুলি, মার্কার এবং স্পেসগুলির সাথে [^.]
মেলে । যদি এটি কোনও বা কোনও স্থান হয় তবে লুকোডে কোনও কিছুই ক্যাপচার করবে না, যার অর্থ এই সমস্তগুলি কেবল সরানো হয়েছে, অর্থাৎ প্রস্থ এবং উচ্চতার ফলাফলগুলি সংযুক্ত / যুক্ত করা হবে। দশমিক বিন্দু থেকে ফলাফল পৃথক পৃথক । পরিবর্তে যদি এর সাথে মেলে , তবে লুক হেড নিশ্চিত করে দেয় যে আমরা এর পরে অর্ধেক গুলি (গ্রুপে) ক্যাপচার করব । আমি উপরে উল্লিখিত সমষ্টিটি গণনা করে যা এর পরে মূল সংখ্যার বর্গক্ষেত্র প্রদান করবে।1
#
#
.
d
[^.]
1
1
1
^(1+)\.\1{90000}1+
Retina!
স্ট্রিংটি এখন (আনারিতে), তারপরে , তারপরে (আনারিতে)। আমরা জানতে চাই যে প্রথম অবিচ্ছিন্ন সংখ্যা বার দ্বিতীয়টির চেয়ে কম হয় কিনা। ক্যাপচারিং গ্রুপ এবং পুনরাবৃত্তি সিনট্যাক্স ব্যবহার করে আমরা সহজেই এই গুণটি করতে পারি । আমরা পরে (এর পরিবর্তে ) দ্বিতীয় নম্বরটি যে এর চেয়ে বেশি এবং কেবল সমান নয় তা নিশ্চিত করতে ব্যবহার করি । যদি তা হয় তবে আমরা সেই সবগুলি প্রতিস্থাপন করব ।d2
.
w2 + h2
90000
{n}
1+
1*
Retina!
1.+
Trash!
যদি দ্বিতীয় সংখ্যাটি যথেষ্ট পরিমাণে বড় না হয় তবে পূর্বের পদক্ষেপটি কোনও পরিবর্তন করতে পারে না এবং স্ট্রিংটি এখনও একটি দিয়ে শুরু হবে 1
। যদি এটি হয় তবে আমরা পুরো স্ট্রিংটি কেবল এর সাথে প্রতিস্থাপন Trash!
করব এবং হয়ে গিয়েছি।