रेटिना या कचरा?


47

हम प्रौद्योगिकी के एक अद्भुत युग में रहते हैं, जहां हम अपने टीवी पर खूबसूरती से विस्तृत 8K स्क्रीन और यहां तक ​​कि अपने मोबाइल ब्राउज़िंग सुख के लिए अपने फोन पर 2K डिस्प्ले भी कर सकते हैं। हमने स्क्रीन प्रौद्योगिकी के मामले में हाल के वर्षों में एक लंबा सफर तय किया है।

इनमें से एक उत्पाद एक शब्द है जिसे Apple, रेटिना द्वारा लोकप्रिय बनाया गया था । यह विचाराधीन डिस्प्ले के पिक्सेल घनत्व के इतने अधिक होने की बात कर रहा है, कि 10-12 इंच की दूरी पर, अलग-अलग पिक्सेल आसानी से नहीं निकाले जा सकते।

स्टीव जॉब्स ने कहा कि पिक्सेल घनत्व जहां ऐसा होता है, वह लगभग 300 पिक्सेल प्रति इंच है , और उन्होंने विज्ञापन के लिए उपयोग किए जाने वाले रेटिना के साथ अपने उपकरणों पर इस रेंज में पिक्सेल घनत्व को रोजगार देना शुरू कर दिया ।

पिक्सेल घनत्व की गणना निम्न सूत्र द्वारा की जा सकती है:

डी = sqrt (डब्ल्यू ^ 2 + ज ^ 2) / घ

dइंच में स्क्रीन का विकर्ण कहाँ है, wक्षैतिज अक्ष पर पिक्सेल की संख्या है, और hऊर्ध्वाधर अक्ष पर पिक्सेल की संख्या है।

आपका कार्य

इस कार्य के लिए, आप यह तय करने के लिए रेटिना मानक का उपयोग करेंगे कि कौन से उत्पाद खरीदने लायक हैं। आधुनिक उपभोक्ता होने के नाते, जब आप उपकरणों के लिए खरीदारी करते हैं, तो आप यह सुनिश्चित करना चाहते हैं कि आपको 90 के दशक से कुछ डिवाइस नहीं, एक अच्छा उत्पाद मिल रहा है! जैसे, आप एक प्रोग्राम या फ़ंक्शन बनाना चाहते हैं जो इनपुट या फ़ंक्शन मापदंडों के रूप में स्क्रीन की चौड़ाई, ऊँचाई और विकर्ण लंबाई लेता है , और आपको बताता है कि स्क्रीन प्रिंटD > 300 करके या वापस लौटकर विशेष स्क्रीन रेटिना स्क्रीन ( ) के रूप में योग्य है या नहीं

गैर-रेटिना उपकरणों के लिए आपकी अवमानना ​​के कारण, आपका कार्यक्रम या फ़ंक्शन आउटपुट होगा Retina!जब डिवाइस योग्य होगा, और Trash!जब यह नहीं होगा।

आप मान सकते हैं कि सभी संख्याएँ 0. से अधिक होंगी। चौड़ाई और ऊँचाई के लिए पिक्सेल मान हमेशा पूर्ण संख्याएँ होंगी। स्क्रीन आकार की व्याख्या किसी भी तरह से की जा सकती है, जब तक यह दशमलव का समर्थन करता है। इनपुट आपके द्वारा चुने गए किसी भी क्रम में हो सकता है, और 3 अलग-अलग लाइनों पर भी हो सकता है।

उदाहरण I / O

1920 1080 4.95   -> Retina!
2560 1440 5.96   -> Retina!
1920 1080 10.5   -> Trash!
10 10 0.04       -> Retina!
4096 2160 19(.0) -> Trash!
8192 4320 100.00 -> Trash!
3000 1500 11.18  -> Retina!
180 240 1(.0)    -> Trash!

यह , इसलिए सबसे कम संख्या में बाइट्स जीतती हैं।


यहाँ एक अटक समाधान है, एक स्टैक आधारित प्रोग्रामिंग भाषा जो मैं बना रहा हूँ:

r;`;/300>"Retina!""Trash!"?

34
कोई, कृपया, रेटिना उत्तर दें
डिजिटल ट्रामा

2
@DigitalTrauma लेकिन तैरता है।
Sp3000

7
@ Sp3000 pfft, बहाने !. रेटिना में अपने खुद के फ्लोटिंग पार्सिंग रेगेक्स का निर्माण करें!
ऑप्टिमाइज़र

46
@ Sp3000 ठीक है, दांव को बढ़ाने देता है। मैं इस कम से कम कानूनी (सामुदायिक आम सहमति) रेटिना पर एक बड़े रसदार 500 पीटी इनाम को थप्पड़ मारने का वादा करता हूं, इस सवाल का जवाब एक सप्ताह इस पोस्टिंग टाइमस्टैम्प से मिलता है।
डिजिटल ट्रामा

2
हम्म, चुनी गई सीमा काफी हद तक ऐप्पल के विपणन से मेल नहीं खाती, उदाहरण के लिए रेटिना आईमैक: 5120 2880 27
एड एविस

जवाबों:


5

पायथ - 27 बाइट्स

टर्नेरी ऑपरेटर का उपयोग करता है और absपाइथोगोरियन की गणना करने के लिए।

?>c.avzQ300"Retina!""Trash!

दो लाइनों में इनपुट लेता है, पहली पंक्ति width, height, दूसरी पंक्ति diag

नियमों में ढील दी गई थी।

इसे यहाँ ऑनलाइन आज़माएँ


115

रेटिना , 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#

यह d1111 द्वारा विकसित किए गए एक ट्रिक का उपयोग करके यूनरी में रूपांतरण है । अनिवार्य रूप से मैं प्रत्येक अंक को स्वयं के पुन: अंकों में अनुवाद कर रहा हूं, जबकि मौजूदा अंकों को 10 से गुणा करना ( #प्रक्रिया में मार्कर को दाईं ओर ले जाना)। यह द्विआधारी प्रतिनिधित्व विभिन्न अंकों का एक गड़बड़ी होगा, लेकिन कुल संख्या मूल पूर्णांक के मूल्य के बराबर होगी। \wअंत में ध्यान दें - आम तौर पर यह सिर्फ होता है 0, लेकिन हम _शून्य के रूप में भी इलाज करना चाहते हैं (जिसे रेगेक्स में एक शब्द चरित्र माना जाता है)।

\d
11

हम प्रत्येक अंक को दो 1s में बदल देते हैं , जिससे a) यह सुनिश्चित करना कि सभी अंक समान हैं (जो बाद में आवश्यक होंगे) और b) प्रत्येक संख्या को दोगुना करना।

(?=(1*)\1)[^.]
$1

यह दो काम करता है: यह सभी संख्याओं (या प्रत्येक संख्या के आधे हिस्से पर एक राशि की गणना करके 2n) को बढ़ाता है, और चौड़ाई और ऊंचाई के परिणामस्वरूप वर्गों को जोड़ता है। सूचना जो s, मार्कर और रिक्त स्थान से [^.]मेल खाती है । यदि यह एक या एक स्थान है, तो लुकहेड कुछ भी कैप्चर नहीं करेगा, जिसका अर्थ है कि उन सभी को बस हटा दिया जाता है, अर्थात चौड़ाई और ऊंचाई के परिणाम संक्षिप्त / जोड़े जाते हैं। दशमलव बिंदु उन लोगों के लिए परिणाम को अलग करने के लिए रहता है । यदि इसके बजाय मेल खाता है , तो लुकहेड यह सुनिश्चित करता है कि हम समूह में इसके बाद आधे हिस्से पर कब्जा कर लें । यह मेरे द्वारा ऊपर उल्लिखित योग की गणना करता है, जो तब मूल संख्या के वर्ग का उत्पादन करेगा।1##.d[^.]111

^(1+)\.\1{90000}1+
Retina!

स्ट्रिंग अब (एकात्मक में) है, फिर , तब (एकात्मक में)। हम जानना चाहते हैं कि क्या पहली यूनरी संख्या बार दूसरी से छोटी है। हम एक कैप्चरिंग समूह और पुनरावृत्ति सिंटैक्स का उपयोग करके इस गुणन को आसानी से कर सकते हैं । हम यह सुनिश्चित करने के लिए ( बाद में ) का उपयोग करते हैं कि दूसरी संख्या वास्तव में उससे अधिक है और न के बराबर है। यदि हां, तो हम उस सब को बदल देते हैं ।d2.w2 + h290000{n}1+1*Retina!

1.+
Trash!

यदि दूसरा नंबर पर्याप्त बड़ा नहीं था, तो पिछले चरण में कुछ भी नहीं बदला है और स्ट्रिंग अभी भी एक के साथ शुरू होगी 1। अगर ऐसा है, तो हम पूरे स्ट्रिंग को बदल देते Trash!हैं और कर देते हैं।


24
खैर, यह हुआ। अब हम सभी खुश मर सकते हैं।
एलेक्स ए।

94
एक साइड नोट के रूप में, क्योंकि यह रेटिना है, जो अन्य सभी उत्तरों को कचरा बना देता है?
एलेक्स ए।

5
हमारे भगवान आ गए!
केड

7
ठीक है, इसलिए मेरा इनाम का वादा अभी भी खड़ा है, लेकिन मैं पूरी तरह से स्पष्टीकरण देखना चाहता हूं (वैचारिक रूप से मुझे लगता है कि मुझे पता है कि यह कैसे किया गया है, लेकिन विवरण देखना चाहते हैं)। इसके अलावा, मैं इनाम को कम से कम कानूनी रेटिना के जवाब के लिए दूंगा, इसलिए, दोस्तों, इनाम अभी भी छोटे रेटिना के जवाबों के लिए खुला है!
डिजिटल ट्रामा

2
@AlexA। नहीं, क्योंकि वहाँ एक और रेटिना जवाब है।
इस्माइल मिगुएल

38

अजगर, ४ ९

lambda w,h,d:"RTertaisnha!!"[w*w+h*h<=9e4*d*d::2]

स्ट्रिंग इंटरलेइंग का उपयोग करता है।

यह जटिल मानदंड का उपयोग करने की तुलना में दोनों पक्षों को छोटा करता है।

w*w+h*h<=9e4*d*d
abs(w+1j*h)<=300*d

18
हम Retina!या तो छापने वाले थे या Trash!! रीट्वीट नहीं @ertaisnha !!
ऑप्टिमाइज़र


2
@ कुछ और विपरीत है;)
ऑप्टिमाइज़र

अच्छा, मैंने अभी तक नहीं देखा है कि (ab) एक या दूसरे स्ट्रिंग को प्रिंट करने के लिए उपयोग करते हैं
निक टी

15

रेटिना , 312 बाइट्स

(\d+) (\d+) (\d+)(?:\.(\d+))?
a$1bc$2dj300ke$3fg$4h9iiiiiiiii8iiiiiiii7iiiiiii6iiiiii5iiiii4iiii3iii2ii1i0
+`(b.*)(d.*)fg(\d)
0$10$2$4fg
+`(a|c|e|j)(\d)(\d*)(i*)((?:b|d|f|k).*h.*\2(i*))
$1$3$4$4$4$4$4$4$4$4$4$4$6$5
g`(i+)
Q$1R$1
+`Q(i+)Ri
$1Q$1R
+`(j(i*).*e)i(.*f)
$1$3$2
a(i*).*c(i*).*f\1\2.*
Trash!
.*0
Retina!

इसे चलाने में काफी समय लगता है, लेकिन यह काम करने लगता है।

शायद बहुत अधिक गोल्फ हो सकता है ...

स्पष्टीकरण:

(\d+) (\d+) (\d+)(?:\.(\d+))?
a$1bc$2dj300ke$3fg$4h9iiiiiiiii8iiiiiiii7iiiiiii6iiiiii5iiiii4iiii3iii2ii1i0

स्ट्रिंग को पार्स करने के लिए और अधिक सुविधाजनक बनाने के लिए टैग जोड़ें, और कुछ जंक को आधार 1 में बदलने के लिए आसान बनाने के लिए जोड़ें, और बाद में गुणा करने के लिए 300 जोड़ें

+`(b.*)(d.*)fg(\d)
0$10$2$4fg

0विकर्ण के दशमलव भाग को पूर्णांक वाले भाग में जोड़ते हुए, चौड़ाई और ऊँचाई पर जोड़ दें । जब यह किया जाता है, तो विकर्ण एक पूर्णांक होगा, और चौड़ाई और ऊंचाई को गुणा किया जाएगा हालांकि कई 10एस आवश्यक थे।

+`(a|c|e|j)(\d)(\d*)(i*)((?:b|d|f|k).*h.*\2(i*))
$1$3$4$4$4$4$4$4$4$4$4$4$6$5

पहले चरण में संलग्न लुक-टेबल का उपयोग करके सभी नंबरों को आधार 1 में बदलें

g`(i+)
Q$1R$1

सभी संख्याओं को वर्गाकार करने की तैयारी करें

+`Q(i+)Ri
$1Q$1R

प्रत्येक संख्या को स्क्वायर करें

+`(j(i*).*e)i(.*f)
$1$3$2

300 के वर्ग द्वारा विकर्ण के वर्ग को पहले चरण में सम्मिलित करें

a(i*).*c(i*).*f\1\2.*
Trash!

यदि हमारे द्वारा गणना किए गए उत्पाद में ऊँचाई से जुड़ी चौड़ाई फिट है, तो पिक्सेल घनत्व बहुत कम है, और यह कचरा है!

.*0
Retina!

अन्यथा, यह रेटिना है!



9

एपीएल, 40 36 बाइट्स

डेनिस के लिए धन्यवाद 4 बाइट्स बचा लिया!

{(9E4×⍵*2)<+/⍺*2:'Retina!''Trash!'}

यह एक अनाम डायैडिक फ़ंक्शन बनाता है जो पहले दो तर्क बाईं ओर और तीसरा दाईं ओर ले जाता है। यह जांचता है कि क्या बाएं मानों के वर्गों का योग दाएं वाले वर्ग के 300 ^ 2 गुना से अधिक है। तदनुसार उत्पादन मुद्रित किया जाता है।

आप इसे ऑनलाइन आज़मा सकते हैं !


पोस्ट करने से पहले ताज़ा होना चाहिए ... आप बाईं ओर पहले दो तर्कों को लेते हुए कुछ बाइट्स बाइट बचा सकते हैं।
डेनिस

@ डेनिस आपकी मदद के लिए धन्यवाद! जब मैंने तुम्हारा देखा तो मैंने अपना उत्तर हटाना उचित समझा क्योंकि तुम्हारा बेहतर था। : पी
एलेक्स ए।

9

टीआई-बेसिक, 43

दो-तत्व सूची के रूप में होमस्क्रीन के माध्यम से चौड़ाई और ऊंचाई, और इनपुट के माध्यम से विकर्ण लेता है।

Input D
If 300D>√(sum(Ans²
Then
Disp "Retina!
Else
"Trash!

TI-BASIC के दो-बाइट लोअरकेस अक्षर 7 बाइट्स जोड़ते हैं ( i, काल्पनिक इकाई होने के नाते, एक बाइट है), क्योंकि यह काफी अप्रतिस्पर्धी है। शुक्र है, !यह भी एक बाइट है क्योंकि यह फैक्टोरियल फ़ंक्शन का प्रतिनिधित्व करता है।


9

जावास्क्रिप्ट ईएस 6, 49 बाइट्स

(w,h,d)=>Math.hypot(w,h)/d>300?'Retina!':'Trash!'

मुझे नफरत है कि जावास्क्रिप्ट में इतने लंबे गणित ऑपरेटर हैं। लेकिन अगर ऐसा Math.pythagoreanहोता तो भी यह कम होता।


किसी के मन की व्याख्या करना?
डाउनगेट

शायद बहुत लंबा होने के लिए।
lirtosiast

1
@ThomasKwa Python सिर्फ 1 बाइट छोटी है
ऑप्टिमाइज़र

5
वर्गमूल की गणना करने के बजाय, यदि आप मानों के वर्गों की तुलना करते हैं तो यह कम हो सकता है।
रेटो कोराडी

4
@RetoKoradi हाँ, यह छोटा है:(w,h,d)=>w*w+h*h>9e4*d*d?'Retina!':'Trash!'
pepkin88

8

एक्सेल, 44 बाइट्स

इन सेल में अपने इनपुट टाइप करें।

  • A1 = पिक्सल में चौड़ाई
  • B1 = पिक्सेल में ऊँचाई
  • C1 = इंच में विकर्ण

और यह सूत्र आपका परिणाम देता है:

=IF((300*C1)^2<A1^2+B1^2,"Retina!","Trash!")

4
मैंने 2 बाइट्स को गोल्फ से करने का प्रयास किया, 9E4*C1^2इसके बजाय टाइप करके (300*C1)^2... यह 42 की लंबाई देता है। हालांकि, 9E4एक्सेल में एक सूत्र में टाइप 90000करते ही, जैसे ही आप एंटर करेंगे , इसे बदल दिया जाएगा । :(
रोस प्रेसर

7

प्रोलॉग, 51 बाइट्स

a(W,H,D,R):-9e4*D*D<W*W+H*H,R="Retina!";R="Trash!".

रनिंग a(8192,4320,100.0,R).आउटपुट:R = "Trash!" .

संपादित करें: एक बढ़त मामले को सुधारने और एक बाइट को गोल करने के लिए @PaulButcher को धन्यवाद।


यह "रेटिना!" लौटाता है, जब घनत्व उदाहरण 180 240 1 -> Trash!से 300 (जैसे ) है। सौभाग्य से, जब से तुम बंद दो अक्षर ई अंकन के साथ दाढ़ी कर सकते हैं, को बदलने >के लिए >=52 पर यह पत्ते:b(W,H,D,R):-9e4*D*D>=W*W+H*H,R="Trash!";R="Retina!".
पॉल कसाई

@PaBButcher 90000 के बजाय 9e4 का उपयोग करना वास्तव में 2 पात्रों को बंद कर देता है, एक को नहीं। तो आपने इस किनारे मामले को सही करने के साथ ही एक-एक बाइट द्वारा मेरे जवाब को प्रभावी ढंग से छोटा कर दिया, धन्यवाद।
घातक

1
बहुत बढ़िया! यह एक यथोचित छोटे प्रोलॉग उदाहरण को देखने के लिए अच्छा है।
पॉल बुचर

@PaBButcher ने एक के बाद एक दो बाइट का इस्तेमाल <किया >=और दो स्ट्रिंग परिणामों की अदला
बदली करके

5

जावास्क्रिप्ट (ईएस 6), 45 बाइट्स

f=(w,h,d)=>w*w+h*h>d*d*9e4?'Retina!':'Trash!'

कॉफ़ीस्क्रिप्ट, 47 बाइट्स

कोई टर्नरी ऑपरेटर नहीं है, लेकिन एक्सपेंसेशन है (जो नवीनतम प्रयास में मदद नहीं करता है)।

f=(w,h,d)->w*w+h*h>d*d*9e4&&'Retina!'||'Trash!'

# Previous attempt
f=(w,h,d)->(w*w+h*h)**.5/d>300&&'Retina!'||'Trash!'

1
कल्पना के अनुसार, फ़ंक्शन का नाम ( f=) होना आवश्यक नहीं है । आप सभी संस्करणों में 2 बाइट्स काट सकते हैं।
Kroltan


5

शुद्ध बैश (कोई बीसी / अन्य बाहरी कमांड), 138 136 135 82 83 बाइट्स

a=${3#*.}
d=${a//?/0}
r=(Trash Retina)
echo ${r[$1$d**2+$2$d**2>90000*${3/./}**2]}!

मैंने इसे शुद्ध बैश में करने की कोशिश करने का फैसला किया। मैंने शायद कुछ स्पष्ट अक्षमताएं की हैं क्योंकि यह मेरा पहली बार का कोड गोल्फिंग है, लेकिन मैं बहुत जल्दबाज़ी से परिचित हूं और अतीत में मज़ेदार बातें लिखी हैं जो किसी भी बाहरी कमांड (यानी शुद्ध बैश) का उपयोग नहीं करते हैं।

प्रिंटफ स्टेटमेंट सबसे कष्टप्रद है। किसी को भी शून्य के साथ संख्याओं को भरने के लिए कोई बेहतर विचार मिला?

संपादित करें: दो बाइट्स सहेजे, प्रिंट आउट शून्य के लिए एक खाली तर्क लेगा। एक अन्य बाइट को सहेजा गया, पता चला कि मैं पहले से गलत था और बस एक चर को प्रिंटफ का उत्पादन असाइन करना -v का उपयोग करने से छोटा है।

EDIT2: टिप्पणियों में डिजिटल ट्रामा के लिए धन्यवाद, यह अब बहुत अधिक नीचे है। ट्रिक्स: बैश के रीजैक्स समर्थन का उपयोग करके अंकों की स्ट्रिंग को शून्य के साथ बदलने के बजाय इसे गिनने के लिए फिर उस शून्य की संख्या को प्रिंट करना (ऐसा लगता है कि जब मैं इसे लगाता हूं ...) स्पष्ट रूप से, एक गूंज बचाने के लिए बैश सरणी में तारों को संग्रहीत करना, और नियमों में एक मामूली बदलाव को ध्यान में रखते हुए इसका मतलब है कि आप .0 में सभी इनपुट संख्याओं को समाप्त कर सकते हैं।

EDIT3: डिजिटल ट्रॉमा के सुझाए गए संशोधन द्वारा शुरू की गई बग को ठीक करने के लिए एक बाइट जोड़ा गया।


102 के स्कोर के लिए कुछ इस तरह: a=${3#*.};d=${a/./0};((${#a}-${#3}))||d=;r=(Trash Retina);echo ${r[$1$d**2+$2$d**2>90000*${3/./}**2]}! (आप ;नई कहानियों के साथ बदल सकते हैं - मैं इसे टिप्पणी में प्राप्त करने की कोशिश कर रहा था)।
डिजिटल ट्रॉमा

और यदि आप मान लेते हैं कि घनत्व पूर्ण-संख्या में समाप्त हो जाएगा .0(ठीक है, मुझे लगता है) तो आप 82 का स्कोर कर सकते हैं:a=${3#*.};d=${a/./0};r=(Trash Retina);echo ${r[$1$d**2+$2$d**2>90000*${3/./}**2]}!
डिजिटल ट्रॉमा

मूल उदाहरण में कुछ था जो .0 के साथ समाप्त नहीं हुआ था, लेकिन मुझे लगता है कि प्रश्न को अब संशोधित कर दिया गया है, इसलिए यह थोड़ा सा बचा लेगा। विचारों के लिए धन्यवाद! मैं विशेष रूप से दो इको स्टेटमेंट्स को काटने के लिए आपके विचार को पसंद करता हूं; मैं यह कैसे काम करना चाह रहा था, किसी कारण से यह मेरे लिए एक सरणी का उपयोग करने के लिए नहीं हुआ था! किसी कारण से, यह भी कभी नहीं हुआ कि आप ** का उपयोग कर सकते हैं ... मैं कोशिश करूंगा और आपके उत्तर को सत्यापित करूंगा, मैं थोड़ा भ्रमित हूं कि $ d यहां कैसे काम कर रहा है, लेकिन मैं इसका पता लगाऊंगा।
मुज़ेर

$dबहुत मुश्किल नहीं है। aदशमलव बिंदु के बाद घनत्व के अंक शामिल हैं। d=${a/./0}बस उन सभी अंकों को शून्य के साथ बदल देता है। इस प्रकार हम उन शून्य को अंत तक wऔर hदस की समान शक्ति से गुणा कर सकते हैं जो दशमलव बिंदु को हटाकर प्राप्त किया जाता है d
डिजिटल ट्रॉमा

1
चीयर्स, मुझे लगा कि मैं एक मिनट के लिए पागल हो रहा था!
मुजेर

4

डीसी, 41 बाइट्स

[[Retina!]pq]sr?d*rd*+vr/300<r[Trash!]p

d, w, hआदेश में इनपुट होने के लिए आर्ग की आवश्यकता है - मुझे आशा है कि यह ठीक है।

परीक्षण उत्पादन:

$ for t in \
> "4.95 1920 1080" \
> "5.96 2560 1440" \
> "10.5 1920 1080" \
> "0.04 10 10" \
> "19 4096 2160" \
> "100.00 8192 4320" \
> "11.18 3000 1500" ; do \
> echo $t | dc -e'9k[[Retina!]pq]sr?d*rd*+vr/300<r[Trash!]p'
> done
Retina!
Retina!
Trash!
Retina!
Trash!
Trash!
Retina!
$ 

3

जूलिया, 46 45 42 बाइट्स

f(w,h,d)=w^2+h^2>9e4d^2?"Retina!":"Trash!"

यह एक फ़ंक्शन बनाता है जो तीन संख्यात्मक मानों को स्वीकार करता है और एक स्ट्रिंग लौटाता है।

यह सूत्र का प्रत्यक्ष कार्यान्वयन है, बस थोड़ा सा पुनर्व्यवस्थित किया गया है। असमानता के दोनों पक्षों को dतब गुणा किया गया था ।


3

आर, 59 55 बाइट्स

अब एक अनाम फ़ंक्शन के रूप में

function(h,w,d)if(h^2+w^2>9e4*d^2)'Retina!'else'Trash!'

बहुत सरल कार्यान्वयन, जो सूचकांक संदर्भों की आवश्यकता को समाप्त करता है।

पिछला

cat(if((n=scan()^2)[1]+n[2]>9e4*n[3])'Retina!'else'Trash!')

काफी सरल, एक वेक्टर में स्कैन से इनपुट प्राप्त करें (सिंगल लाइन, स्पेस अलग या मल्टी-लाइन)। वेक्टर को स्क्वायर करें। गणना करें और परिणाम को कैट करें।


3

MATLAB - 49 45 बाइट्स

c={'Trash!','Retina!'};c{(w*w+h*h>9e4*d*d)+1}

मुझे पहले एक सेल ऐरे की घोषणा करनी थी, जिसमें शामिल हैं Trash!और Retina!जो सेल एरे में 1 और 2 के स्थानों में संग्रहीत हैं। अगला, मैं समीकरण को पुनर्व्यवस्थित करने के लिए कई द्वारा देखे गए अवलोकन का उपयोग करता हूं ताकि आप केवल पूर्णांक अंकगणित का उपयोग करके स्थिति की जांच कर रहे हों। मैंने 9e4कुछ बाइट्स बचाने के लिए 90000 का प्रतिनिधित्व किया । यदि यह स्थिति सत्य है, तो हम 1 का उत्पादन करते हैं, अन्यथा हम एक 0. आउटपुट करते हैं। मैं इस आउटपुट का उपयोग सीधे सेल एरे में करता हूं। क्योंकि MATLAB 1 पर अनुक्रमण शुरू करता है, मुझे अनुक्रमण पूरा करने के लिए 1 भी जोड़ना पड़ा। क्या अच्छा है कि true1 के साथ जोड़ने पर 2 मिलता है, जबकि false1 के साथ जोड़कर 1 देता है। यह Trash!या तो Retina!MATLAB कमांड प्रॉम्प्ट में आउटपुट करेगा ।

उदाहरण

>> w=1920;h=1080;d=4.95;
>> c={'Trash!','Retina!'};c{(w*w+h*h>9e4*d*d)+1}

ans =

Retina!

आपको जरूरत नहीं है int8, सच + 1 एक डबल (2) है।
जोनास

@ जोनास मैंने वह कोशिश की। यह MATLAB R2013a पर 2 में नहीं बदलेगा ... अजीब।
रायरेंग -

@ जोनास - मुझे logicalइसे काम करने के लिए कोष्ठक में अभिव्यक्ति को संक्षिप्त करना पड़ा । संचालन का क्रम ... डीओएच। पारितोषिक के लिए धन्यवाद!
रायरेंग - मोनिका जूल 24'15

अच्छा तरीका! (मैंने कोशिश की hypotलेकिन आपकी w*w+h*h>9e4*d*dउम्र कम है)। हालाँकि, क्या यह प्रश्न आवश्यकताओं को पूरा करता है? यह एक कार्यक्रम है, एक समारोह नहीं है। इसलिए इसे लेना चाहिए w, hऔर dइनपुट के रूप में। मुझे लगता है कि कोड चुनौती में हमेशा की तरह, स्टैड का मतलब है
लुइस मेंडो

@LuisMendo आह मुझे इसे बदलना होगा! धन्यवाद
rayryeng - को पुनः स्थापित मोनिका

3

XSLT, 400 बाइट्स

यह पीपीसीजी पर पहले कभी नहीं देखी गई भाषा का डेब्यू है, और मुझे उम्मीद है कि भविष्य में इसका अधिक उपयोग करूंगा क्योंकि मुझे और भी बहुत कुछ पता चल गया है।

कोड:

<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="input"><xsl:variable name="n" select="for $i in tokenize(.,'[^\d\.]+')return number($i)" /><xsl:choose><xsl:when test="$n[1]*$n[1]+$n[2]*$n[2]>90000*$n[3]*$n[3]">Retina!</xsl:when><xsl:otherwise>Trash!</xsl:otherwise></xsl:choose></xsl:template></xsl:stylesheet>

सुंदर छपा हुआ

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="input">
        <xsl:variable name="n" select="for $i in tokenize(.,'[^\d\.]+')return number($i)" />
        <xsl:choose>
            <xsl:when test="$n[1]*$n[1]+$n[2]*$n[2]>90000*$n[3]*$n[3]">
                Retina!
            </xsl:when>
            <xsl:otherwise>
                Trash!
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

टिप्पणियाँ:

चूंकि XSLT में STDIN के माध्यम से इनपुट लेने का कोई तरीका नहीं है, इसलिए हमें दो <input>टैग्स के बीच इनपुट के साथ XML फ़ाइल का उपयोग करना होगा । बेशक, इस पद्धति की अपनी सीमाएं हैं लेकिन यह अधिकांश चुनौतियों के लिए पूरी तरह से काम करेगा।

उदाहरण I / O

इनपुट फ़ाइल:

<?xml version="1.0" encoding="ISO-8859-1"?>
<input>3000 1500 11.18</input> 

आउटपुट फाइल:

<?xml version="1.0" encoding="UTF-8"?>Retina!

इनपुट फ़ाइल:

<?xml version="1.0" encoding="ISO-8859-1"?>
<input>1920 1080 10.5</input>

आउटपुट फाइल:

<?xml version="1.0" encoding="UTF-8"?>Trash!

2

C # (81)

string D(int w,int h,double d){return Math.Sqrt(w*w+h*h)/d>300?"Retina":"Trash";}

Ungolfed:

string Density(int width, int height, double diagonal)
{
    return Math.Sqrt(width * width + height * height) / diagonal > 300 ? "Retina" : "Trash";
}

आप इसे 73 तक छोटा कर सकते हैं, इस ट्रिक के साथ कई अन्य लोगों ने सूत्र को फिर से लिखने और sqrt ऑपरेशन को हटाने के लिए उपयोग किया है string D(int w,int h,double d){return w*w+h*h>9e4*d*d?"Retina":"Trash";}:। लेकिन आपको !प्रत्येक स्ट्रिंग में जोड़ने की भी आवश्यकता है ताकि 75 से वापस आ जाए।
15

2

स्विफ्ट, 77 बाइट्स

फंक्शन पैरामीटर डिक्लेरेशन का मतलब है कि इससे अधिक कैरेक्टर होने चाहिए:

func r(w:Float,h:Float,d:Float){print((w*w+h*h)>9e4*d*d ?"Retina!":"Trash!")}


2

स्विफ्ट, 56 बाइट्स

let r={print($0*$0+$1*$1>9e4*$2*$2 ?"Retina!":"Trash!")}

मूल रूप से GoatInTheMachine के रूप में ही है लेकिन अंतर्निहित बंद मापदंडों के साथ

जब स्विफ्ट के साथ कोड गोल्फिंग, हमेशा इस तरह से तरीकों की घोषणा करता है, तो यह बहुत कम होता है


2

हास्केल, 46

f w h d|w^2+h^2>d^2*9e4="Retina!"|0<1="Trash!"

हास्केल प्रणाली का क्या उपयोग किया जाना चाहिए? यह मेरे द्वारा दिए गए ghci के संस्करण के साथ काम नहीं करता है <interactive>:2:8: parse error on input '|'
एड एविस

@EdAvis: जीएचसीआई कार्यक्रम नहीं चलाता है; वहाँ इसे आज़माने के लिए, आपको चाहिए let f w h d|…
Ry-

2

सी ++ 72 70 बाइट

void F(int w,int h,float d){cout<<w*w+h*h>9e4*d*d?"Retina!":"Trash!";}

अन्य समाधानों के अनुरूप, अपने आप को कोड गोल्फ के साथ गर्म करने के लिए तैयार किया।


1
आप लिख कर एक जोड़ी दाढ़ी कर सकते हैं 90000के रूप में9e4
टोबी स्पीट

2

इस समस्या के लिए यहां मेरा योगदान है

रूबी, 67 बाइट्स स्टड से पढ़ना

w,h,d=ARGV.map{|v|Float(v)}
puts w*w+h*h>d*d*9e4?"Retina!":"Trash!"

रूबी, एक समारोह में 56 बाइट्स

थोड़ा छोटा

def r(w,h,d)
puts w*w+h*h>d*d*9e4?"Retina!":"Trash!"
end

9e4 के लिए पिछले योगदानकर्ताओं के लिए धन्यवाद!


2

बैश, 85 बाइट्स

if [ $(echo "sqrt($1^2+$2^2)/$3"|bc) -gt 300 ];then
echo Retina!
else
echo Trash!
fi

1
यह "3000 1500 11.18" के लिए काम नहीं करता है। डिफ़ॉल्ट रूप से, bcपरिशुद्धता 0 दशमलव स्थान है। आपको सेट करने की आवश्यकता होगी scale, या आप संभवत: दूर हो सकते हैं bc -lजिसके साथ स्पष्ट रूप से 20 तक स्केल सेट होता है
डिजिटल ट्रॉमा

ओह ठीक है, मैंने अपना उत्तर अपडेट कर दिया। धन्यवाद!
Addison

1
ओह, और codegolf.stackexchange.com/questions/15279/… देखें । उदाहरण के लिए((`bc<<<"sqrt($1^2+$2^2)/$3"`>300))&&echo Retina!||echo Trash!
डिजिटल ट्रॉमा

2

PHP, 47,43,40 38 बाइट्स

<?=sqrt($w*$w+$h*$h)/$d>300?'Retina':'Trash'?>!
<?=sqrt($w*$w+$h*$h)/$d>300?Retina:Trash?>!
<?=$w*$w+$h*$h>9e4*$d*$d?Retina:Trash?>!

<?=hypot($w,$h)/$d>300?Retina:Trash?>!

आवश्यकता होती है register_globals==true(जो कि यह कभी नहीं होनी चाहिए!), G मानों के साथ w, h, d
- स्ट्रिंग के चारों ओर के उद्धरण हटाकर 4 बाइट्स बचाती है। खराब कोडिंग, लेकिन यह काम करता है।
- समारोह को dबचाने के समीकरण के दूसरी तरफ ले जाया गया और वर्गमूल - स्विच करने के लिए 2 बाइट्स सहेजे गए (धन्यवाद, आप को याद करते हैं )sqrt()
hypot()


आपको बस यह कहना चाहिए कि यह PHP4.1 उत्तर है और आपको register_globalsसेट होने के लिए निर्देश की आवश्यकता नहीं है ।
इस्माइल मिगुएल

2
किसी भी विकल्प के रूप में बस बुरा हाहा है
मार्टीजन

2

सी # 6, 67 बाइट्स

string D(int w,int h,double d)=>w*w+h*h>9e4*d*d?"Retina!":"Trash!";

यह उत्तर वोल्फशेड्स उत्तर पर आधारित है। मैंने C # 6 की एक नई सुविधा का उपयोग करके इसे 8 बाइट्स छोटा कर दिया।


2

जावास्क्रिप्ट (ईएस 6) 58 54 43 बाइट्स

43 बाइट्स

निकाले गए फ़ंक्शन असाइनमेंट (पीपीसीजी नियमों के अनुसार) (-2), साथ ही वर्गमूल को हटा दें और 900 (300 ^ 2) (-12) की तुलना करें

(w,h,d)=>w*w+h*h/d*d>300?"Retina!":"Trash!"

५४ बाइट्स

अनुपस्थित कोष्ठकों से छुटकारा (-4 बाइट्स)

a=(w,h,d)=>Math.sqrt(w*w+h*h)/d>300?"Retina!":"Trash!"

58 बाइट्स

a=(w,h,d)=>Math.sqrt((w*w)+(h*h))/d>300?"Retina!":"Trash!"

यहाँ स्पष्टीकरण:

a =                           // The function is a
 (w,h,d) =>                   // Accepts the three arguments
   Math.sqrt((w*w)+(h*h))/d   // Calculate pixel density
   > 300                      // Above the threshold
   ? "Retina!"                // If so, return "Retina!"
   : "Trash!"                 // Otherwise return "Trash!"

यह तीक्ष्ण परिचालकों के घनत्व का परीक्षण करने के लिए और तीर के कार्यों का उपयोग करके बाइट्स के एक जोड़े को मारता है


1
आप वर्गमूल से बचकर, और इसके बजाय मानों के वर्गों की तुलना करके इसे छोटा बना सकते हैं।
रेटो कोराडी जूल

1

जावा, 82 74 बाइट्स

String g(int w,int h,double d){return 9e4*d*d>w*w+h*h?"Trash!":"Retina!";}

इसके साथ बुलाओ g(width,height,diagonal)


1
आप महंगे doubleसरणी से छुटकारा पाकर इसे काट सकते हैं जैसे: String g(int w,int h,double x){return 9e4*x*x>w*w+h*h?"Trash!":"Retina!";}कभी-कभी सबसे सरल सबसे अच्छा है :)
Geobits

@Geobits धन्यवाद, मैंने दो दृष्टिकोण पर बाइट्स को बजट करने के लिए समय नहीं लिया था, मुझे खुशी है कि आपने इसे पकड़ लिया है!
डेडचेक्स

1

क्लोजर, 58 बाइट्स

#(if(>(+(* %1%1)(* %2%2))(* %3%3 90000))"Retina!""Trash!")

इसको छोटा करने के लिए @ Kroltan के फैंसी गणित का उपयोग किया। (W, h, d) के क्रम में पारित निहित तर्क का उपयोग करता है।

पहला क्लोजर गोल्फ ... मुझे आश्चर्य हुआ कि मुझे कितने व्हॉट्सएप छोड़ने की अनुमति है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.