चुनौती
ओरिगामी (फोल्डिंग पेपर) कला का एक रचनात्मक रूप है। जहाँ तक मुझे पता है, ओरिगेमी का मास्टर वर्ग पेपर पसंद करता है। आइए शुरुआत से शुरू करें - एक आयताकार कागज को एक वर्ग एक में बदलें।
इसलिए कागज को वर्गों में विभाजित किया गया है। हम सबसे बड़े वर्ग को हटाते हैं जो मौजूदा आकार के साथ एक छोटा किनारा साझा करता है, चरण दर चरण (नीचे दी गई तस्वीर देखें)। और अगर एक चरण के बाद शेष भाग कम या बराबर है 0.001 * (area of the original paper), तो कागज को आगे विभाजित नहीं किया जा सकता है। यह संभव है कि कुछ भी आखिरी नहीं रहे।
आपका कार्य यह गणना करना है कि प्रक्रिया के दौरान कितने वर्ग बने हैं। अंतिम चरण में वर्ग जो कागज को विभाजित करने में असमर्थ बनाता है, को आउटपुट में गिना जाता है।
उदाहरण ( 1.350चौड़ाई / ऊंचाई का एक कागज ), आउटपुट 10 है:
इनपुट और आउटपुट
इनपुट: आयताकार कागज के लिए चौड़ाई / ऊंचाई अनुपात, से एक दशमलव (या डॉट के बिना एक पूर्णांक) 1.002करने के लिए 1.999का एक न्यूनतम कदम के साथ 0.001। आप अनुपात का वर्णन करने वाले किसी अन्य उचित प्रारूप का भी उपयोग कर सकते हैं। बस अपने उत्तर में इसका उल्लेख करें।
आउटपुट: वर्ग गणना, एक पूर्णांक।
उदाहरण I / O
पृष्ठ को व्यवस्थित रखने के लिए मैपिंग प्रारूप का उपयोग किया जाता है, जबकि आपके कोड को सूची इनपुट का समर्थन करने की आवश्यकता नहीं होती है और न ही मैपिंग फ़ंक्शन की आवश्यकता होती है।
1.002 => 251
1.003 => 223
1.004 => 189
1.005 => 161
1.006 => 140
1.007 => 124
1.008 => 111
1.009 => 100
@LuisMendo के लिए धन्यवाद, यहां उत्तरों का ग्राफ है।
टिप्पणियों
- यह एक कोड-गोल्फ है इसलिए सबसे छोटा कोड जीतता है
- मानक खामियों पर ध्यान दें
- यह तय करने की आपकी स्वतंत्रता है कि इनपुट और आउटपुट से कैसे निपटें लेकिन उन्हें मानक प्रतिबंधों का पालन करना चाहिए।
वैसे...
- चुनौती के बारे में कुछ भी स्पष्ट न होने पर टिप्पणी करें
- व्यक्तिगत रूप से मेरा सुझाव है कि यदि आप एक गोल्फ भाषा का उपयोग कर रहे हैं तो आपके उत्तर में एक स्पष्टीकरण होगा
- @GregMartin के लिए धन्यवाद, चुनौती के लिए एक अच्छे गणितीय स्पष्टीकरण के लिए उसका उत्तर पढ़ें।
उदाहरण कोड
यहाँ C ++ कोड का एक ungolfed संस्करण है:
#include <iostream>
#include <utility>
int f (double m)
{
double n = 1, k = 0.001;
int cnt = 0;
k *= m; // the target minimum size
while(m*n >= k)
{
m -= n; // extract a square
if(n > m)
std::swap(n, m); // keep m > n
++ cnt;
}
return cnt;
}
int main()
{
double p;
std::cin >> p;
std::cout << f(p);
return 0;
}
उदाहरण कोड में संबंधित सभी गणनाओं को 6 दशमलव अंकों की सटीकता की आवश्यकता होती है, जो इसमें शामिल है float।

