हाँ, बेशक मैं एक वयस्क हूँ!


44

मुझे लगता है कि हमने एक बच्चे के रूप में यह सब किया है: कुछ वेबसाइटों को न्यूनतम आयु 18 वर्ष की आवश्यकता होती है, इसलिए हम जन्म और वायली के वर्ष से कुछ साल घटाते हैं, हम '18+' हैं।
इसके अलावा, मनोरंजन पार्क में अधिकांश सवारी के लिए प्रवेश करने के लिए न्यूनतम ऊंचाई 1.40 मीटर है (यहां नीदरलैंड में इसे कम से कम)। बेशक यह उम्र की तुलना में कम आसानी से धोखा हो सकता है, लेकिन आप मोटी एड़ी के साथ जूते पहन सकते हैं, अपने बालों को ऊपर रख सकते हैं, टोपी पहन सकते हैं, अपने पैर की उंगलियों पर खड़े हो सकते हैं, आदि।

इनपुट:

आपका प्रोग्राम / फ़ंक्शन एक सकारात्मक पूर्णांक या दशमलव स्वीकार करता है।

आउटपुट:

  • क्या इनपुट एक पूर्णांक है >= 18? बस इनपुट प्रिंट करें।
  • क्या इनपुट एक पूर्णांक है 0-17? प्रिंट करें 18
  • क्या इनपुट एक दशमलव है >= 1.4? बस इनपुट प्रिंट करें।
  • क्या इनपुट एक दशमलव है 0.0-1.4? प्रिंट करें 1.4

चुनौती नियम:

  • मान लें कि इनपुट हमेशा की श्रेणी में होगा 0-122(सबसे पुरानी महिला कभी 122 थी) या 0.0-2.72(अब तक का सबसे लंबा आदमी 2.72 था)।
  • आपको इनपुट को एक स्ट्रिंग, ऑब्जेक्ट या अन्य किसी भी चीज़ के रूप में लेने की अनुमति है।
  • दशमलव बिंदुओं के बाद दशमलव इनपुट में कभी भी तीन से अधिक दशमलव स्थान नहीं होंगे।
  • 2या 2.दोनों के लिए वैध आउटपुट नहीं हैं 2.0। आप हालांकि आउटपुट के बजाय 2.00या 2.000इसके लिए स्वतंत्र हैं 2.0
    इनपुट की तरह ही आउटपुट में बिंदु के बाद तीन से अधिक दशमलव स्थान कभी नहीं होंगे।

सामान्य नियम:

  • यह , इसलिए बाइट्स जीत में सबसे छोटा जवाब है।
    कोड-गोल्फ भाषाओं को गैर-कोडगॉल्फिंग भाषाओं के साथ उत्तर पोस्ट करने से हतोत्साहित न करें। 'किसी भी' प्रोग्रामिंग भाषा के लिए यथासंभव कम उत्तर के साथ आने की कोशिश करें।
  • मानक नियम आपके उत्तर के लिए लागू होते हैं , इसलिए आपको उचित पैरामीटर, पूर्ण कार्यक्रमों के साथ STDIN / STDOUT, फ़ंक्शन / विधि का उपयोग करने की अनुमति है। तुम्हारा कॉल।
  • डिफ़ॉल्ट ढीले निषिद्ध हैं।
  • यदि संभव हो, तो कृपया अपने कोड के लिए एक परीक्षण के साथ एक लिंक जोड़ें।
  • इसके अलावा, यदि आवश्यक हो तो एक स्पष्टीकरण जोड़ें।

परीक्षण के मामलों:

0      ->  18
1      ->  18
2      ->  18
12     ->  18
18     ->  18
43     ->  43
115    ->  115
122    ->  122

0.0    ->  1.4
1.04   ->  1.4
1.225  ->  1.4
1.399  ->  1.4
1.4    ->  1.4
1.74   ->  1.74
2.0    ->  2.0
2.72   ->  2.72

क्या हम मान सकते हैं कि इनपुट प्रमुख शून्य से मुक्त है?
टोबी स्पाइट

@TobySpeight हाँ, कोई अग्रणी शून्य नहीं।
केविन क्रूज़सेन

2
0.0-2.72 (tallest man ever was 2.72).- 0.0जब आप पैदा होते हैं तो आप नहीं होते ...
जोहान कार्लसन ने

1
@JohanKarlsson मुझे पता है, एक न्यूनतम जोड़ने के बारे में सोचा था, लेकिन मैंने इसे शुरू करने का फैसला किया 0और 0.0। :) जोड़ा tallest man ever was 2.72और oldest woman ever was 122सिर्फ रुचि रखने वालों के लिए सूचनात्मक तथ्यों के रूप में जोड़ा गया था।
केविन क्रूज़सेन

9
"[...] इसलिए हम जन्म के वर्ष में कुछ वर्ष जोड़ते हैं [...]" क्या आपको जन्म के वर्ष से कुछ वर्ष घटाना नहीं चाहिए ?
विथगोरस

जवाबों:



45

पायथन 2.7, 34 बाइट्स

lambda x:max(x,[18,1.4]['.'in`x`])

2.0 के लिए यह क्या लौटाता है?
एडम सिप

2
@ आदामmax(2.0,[18,1.4][True]) == max(2.0,1.4) == 2.0
लिन

3
नहीं, यह नहीं है। आप इसे स्वयं क्यों नहीं आजमाते? :)
लिन

5
@ एडम मैं अजगर के लिए repl.it या ideone.com का उपयोग करता हूं । मेरे द्वारा पोस्ट किए गए किसी भी पायथन उत्तर को देखें, और संभवत: उन दोनों में से किसी एक का लिंक है।
mbomb007

1
कोई बात नहीं, मिल गया। तो मूल रूप से उस सरणी में 0 या 1 इंडेक्स के सच्चे या झूठे नक्शे और फिर दो नंबरों पर अधिकतम लागू होते हैं।
एलेक्जेंड्रू पुप्सा

15

जावास्क्रिप्ट (ईएस 6), 27 31

एक स्ट्रिंग के रूप में लिया गया इनपुट। यह जांचने के लिए कि इनपुट मान में दशमलव है, यह स्वयं संलग्न है: यदि कोई दशमलव बिंदु नहीं है, तो परिणाम अभी भी एक वैध संख्या है, अन्यथा यह नहीं है। एक मान्य संख्या (0 सहित) को पहचानने के लिए, मैं विभाजन का उपयोग करता हूं क्योंकि जावास्क्रिप्ट 1/nसंख्यात्मक है और किसी भी संख्यात्मक के लिए 0 नहीं है n (अंततः मूल्य इसके Infinityलिए है n==0), अन्यथाNaN

x=>x<(y=1/(x+x)?18:1.4)?y:x

परीक्षा

f=    
x=>x<(y=1/(x+x)?18:1.4)?y:x

;[
 ['0', '18' ],['1', '18' ],['2', '18' ],['12', '18' ],['18', '18' ],['43', '43' ],['115', '115'], ['122', '122' ]
,['0.0', '1.4'],['1.0', '1.4'],['1.04', '1.4'],['1.225', '1.4'],['1.399', '1.4'],['1.4', '1.4'],['1.74', '1.74'],['2.0', '2.0'],['2.72', '2.72']
].forEach(t=>{
  var i=t[0],k=t[1],r=f(i)
  console.log(i,k,r,k==r?'OK':'KO')
})

मेरा प्रचलित (गलत) समाधान:

इनपुट को एक संख्या के रूप में लेते हुए, %यदि संख्या पूर्णांक है , तो आप शेष संचालक का उपयोग कर सकते हैं ।

x=>x<(y=x%1?1.4:18)?y:x

या

x=>Math.max(x,x%1?1.4:18)

लेकिन यह चुनौती देने के अनुरोध के रूप में काम नहीं करता है, यह कहना, 2और 2.0यह एक ही संख्या है। तो यह एक नंबर के रूप में इनपुट प्राप्त करने के लिए कमजोर नहीं है


2
के लिए परिणाम 2.0होना चाहिए 2.0, नहीं 18
नील

वास्तव में। 2.0%1और 1.0%1परिणाम होगा 0
सकल

4
'जावास्क्रिप्ट (es6) क्रिया है', आप केवल यह देखते हैं कि कोडगॉल्फ में
dwana

@ दूसरी बार सोचा कि आप शायद सही हैं
edc65

3
1/(x+x)- अब यह कल्पनाशील है!
नील

13

05AB1E , 13 11 बाइट्स

CP-1252 एन्कोडिंग का उपयोग करता है ।

ÐîQ18*14T/M

व्याख्या

Ð             # triplicate input
 î            # round up
  Q           # check for equality
   18*        # multiply 18 by this (18 if input is int, else 0)
      14T/    # push 14 / 10
          M   # take max of stack (input and 1.4 or 18)

इसे ऑनलाइन आज़माएं


2
तुम थोड़े धीमे हो। फिर भी आपको 1.5 मिनट लगे। ; पी (पढ़ें: धिक्कार है, यह तेज था।) यह बिल्कुल सीधा है।
केविन क्रूजसेन

2
@ केविनक्रूजसेन: हाँ, कार्यान्वयन में बहुत तेज़ी है, जिसमें कई की-प्रेस की आवश्यकता नहीं है: P
Emigna

@EriktheGolfer: बेहतर है? अगर इसे संपादित करने के लिए स्वतंत्र महसूस नहीं हो रहा है। मैं स्वरूपण के कुछ अलग तरीकों के साथ प्रयोग कर रहा हूं और कड़ाई से सर्वश्रेष्ठ पर निर्णय नहीं लिया है। सुझाव का स्वागत करते हैं।
13

@Emigna मैंने अभी दो लापता महत्वपूर्ण स्थान जोड़े हैं।
आउटगॉल्फ

2
@FrancescoCasula: मुझे एक छोटा सा समाधान मिला, जो TIO पर काम करता है :)
एमिग्ना

8

जावा 8, 90 61 57 बाइट्स

i->(i+"").contains(".")?(float)i<1.4?1.4:i:(int)i<18?18:i

-4 बाइट्स के Objectबजाय वापस लौटना String; और कुछ अतिरिक्त बाइट्स जावा 7 को 8.
-4 बाइट में परिवर्तित Objectकरने के Stringसाथ-साथ इनपुट भी लेते हैं ।

स्पष्टीकरण:

इसे यहाँ आज़माएँ।

i->                      // Method with Object as both parameter and return-type
  (i+"").contains(".")?  //  If the input as String contains a dot:
   (float)i<1.4?         //   If the input is a float below 1.4:
    1.4                  //    Return double 1.4
   :                     //   Else:
    i                    //    Return the input-float as is
  :(int)i<18?            //  Else if the input is an integer below 18:
   18                    //   Return integer 18
  :                      //  Else:
   i                     //   Return the input-integer as is

क्या यह आवश्यक है कि यदि / और ऑपरेटर के आसपास कोष्ठक लगाए जाएं?
रोमन ग्रैफ़

1
@ रोमनग्राफ हां; त्रिगुट की तुलना में कम पूर्वता है +, जिसका अर्थ है कि यदि आप कोष्ठक को हटाते हैं, तो यह बदल जाएगा(""+i.contains(...)) ?
निक हार्टले


7

PHP, 40 बाइट्स

@ user59178 द्वारा संशोधित धन्यवाद

<?=max(is_int(0+$i=$argv[1])?18:1.4,$i);

PHP, 42 बाइट्स पहला संस्करण

<?=max(strpos($i=$argv[1],".")?1.4:18,$i);

is_int($i=$argv[1]+0)2 बाइट्स से छोटा है strpos($i=$argv[1],".")और यदि आप स्वैप करते हैं तो आप इसी उद्देश्य को पूरा कर सकते हैं1.418
user59178

@ user59178 मैं is_numericएक तार पर उपयोग कर सकता है लेकिन नहींis_int
Jörg Hülsermann

इसीलिए +0इसे संख्यात्मक प्रकार में परिवर्तित करना है।
user59178

1
यह मेरे लिए सही तरीके से काम करता है (विंडोज़ पर php 5.5 और 7.0 दोनों की कोशिश की गई है)। ध्यान दें कि strpos($i=$argv[1],".")संस्करण के लिए विपरीत / गलत स्थितियां हैं , क्या आपको टर्नरी के आउटपुट को स्वैप करना याद है?
user59178

1
दरअसल, करीब पढ़ने पर, 2.0 दिए जाने पर आउटपुट 2 से बचने के <?=max(is_int(0+$i=$argv[1])?18:1.4,$i);बजाय इसे करने की आवश्यकता होती है <?=max(is_int($i=$argv[1]+0)?18:1.4,$i);
user59178

6

EXCEL: 26 31 29 बाइट्स

=MAX(A1;IF(MOD(A1;1);1,4;18))

A1, इनपुट सेल को छोड़कर फॉर्मूला कहीं भी जा सकता है।

फिक्स्ड त्रुटियाँ, और एमिग्ना के सुझाव के साथ प्रतिस्थापित।

मुझे सच्चाई का उपयोग करके कुछ बाइट्स बचाने के लिए अलेक्जेंड्रू के लिए धन्यवाद


1
इसके अलावा, nइनपुट सेल के लिए एक नाम को परिभाषित करना बेहतर नहीं है ? यह दस्तावेज़ में कहीं भी हो सकता है और यह 2 बाइट्स छोटा होता है।
14

@Emigna मैं कर सकता था , लेकिन उस समय यह थोड़ा धोखा-वाई मुझे लगता है। 1 बाइट प्रति नाम में कुछ भी नहीं है, और अगर मैं यह प्रारूप रखूं तो लोग आसानी से कॉपी और पेस्ट कर सकते हैं।

मैं यह नहीं देखता कि उदाहरण के लिए अजगर में एक लैम्ब्डा में 1-पत्र इनपुट चर का उपयोग करने से कैसे अलग है। लेकिन यह आपकी कॉल है :)
एमिग्ना

नमस्ते! आप बाइट्स की गणना कैसे करते हैं? फ़ाइल को डिफ़ॉल्ट नाम के साथ सूत्र में सहेजें या किसी और तरह से?
वाइटाटा

1
आप '= 0' को हटा सकते हैं और परिणाम स्विच कर सकते हैं: 1.4 पहला, 18 दूसरा इसके अलावा, जैसा कि आपके पास दशमलव विभाजक के रूप में कोमा है, यह अधिकांश लोगों के लिए काम नहीं कर सकता है।
अलेक्जेंड्रू पुप्सा


5

पर्ल, 29 27 बाइट्स

के लिए +2 शामिल है -lp

STDIN पर इनपुट दें

adult.pl <<< 1.24

adult.pl:

#!/usr/bin/perl -lp
$_>($a=/\./?1.4:18)or*_=a

यदि आप वास्तव में एक पूर्ण वयस्क थे, तो एक अतिरिक्त न्यूलाइन को बुरा मत मानना, फिर l26 बाइट्स के लिए विकल्प छोड़ना भी काम करता है


5

GNU sed, 40 + 1 = 41 बाइट्स

( -rदुभाषिया के लिए ध्वज के उपयोग के लिए स्कोर +1 )

s/^.$|^1[^9]$/18/
/^0|1\.[0-3]/s/.*/1.4/

एनोटेट:

#!/bin/sed -rf

# First, anything that's a single digit or is '1' followed by a
# digit other than '9' is replaced with '18'.
s/^.$|^1[^9]$/18/

# Now, any line beginning with '0' or containing '1.0' to '1.3' is
# replaced with '1.4'.
/^0|1\.[0-3]/s/.*/1.4/

हम इनपुट पर बाधाओं का लाभ उठाते हैं, इसलिए जब हम '1.' देखते हैं तो स्ट्रिंग की शुरुआत का परीक्षण नहीं करना पड़ता है। - हम जानते हैं कि दशमलव बिंदु से पहले केवल एक अंक है।

परीक्षा परिणाम:

$ ./94832.sed <<END
> 0
> 1
> 2
> 12
> 18
> 43
> 122
> 
> 0.0
> 1.04
> 1.225
> 1.399
> 1.4
> 1.74
> 2.0
> 2.72
> END
18
18
18
18
18
43
122

1.4
1.4
1.4
1.4
1.4
1.74
2.0
2.72

5

हास्केल, 50 बाइट्स

x#y=show$max x$read y 
f s|elem '.'s=1.4#s|1<2=18#s

प्रयोग उदाहरण: f "1.0"-> "1.6"

हास्केल के सख्त प्रकार को इनपुट और आउटपुट के रूप में स्ट्रिंग्स के उपयोग की आवश्यकता होती है। Howevers, read, maxऔर showबहुरूपी होते हैं और सभी संख्यात्मक प्रकारों को प्रबंधित।


मैंने सोचा कि मैं चालाक हूँ और इसे बिना गार्ड के करता हूँ, लेकिन इसने इसे थोड़ा और लंबा कर दिया :( मेरा संस्करण:(#)x=map(show.max x.fst).reads;f s=head$18#s++1.4#s
Cub

@ सार्वजनिक: अच्छा उपयोग reads। एक मामूली संशोधन के साथ यह मेरी बाइट से एक छोटी है। कृपया इसे एक अलग उत्तर के रूप में पोस्ट करें। x#y=show.max x.fst<$>reads y;f s=head$18#s++1.4#s
निकमी

वास्तव में अच्छा विचार infix fmap के साथ parens को बचाने!
क्यूबिक

5

जावा, 79 70 बाइट्स

int f(int x){return x<18?18:x;}
float f(float x){return x<1.4?1.4f:x;}

ओवरलोडिंग के साथ दो तरीकों को परिभाषित करता है, जो सशर्त ऑपरेटर का उपयोग करते हैं।

ऐसा लगता है कि कॉल f(5)या f(1.4f)


1
नमस्ते। x<18?18:xऔर x<1.4f?1.4f:xकी तुलना में कम कर रहे हैं Math.max। मुझे लगता है कि आपको पढ़ने के लिए दिलचस्प जावा में गोल्फिंग के लिए सुझाव मिल सकते हैं । :)
केविन क्रूज़सेन

हां, बेशक वे हैं। मैं उन्हें कैसे भूल सकता था ...
corvus_192

मुझे यह पसंद है! जब आप संकलक को उतार सकते हैं तो तर्क को स्वयं क्यों कोड करें!
corsiKa 17


4

सी #, 69 बाइट्स

s=>s.Contains(".")?float.Parse(s)<1.4?"1.4":s:int.Parse(s)<18?"18":s;

इसे ऑनलाइन आज़माएं!

परीक्षण मामलों के साथ पूरा कार्यक्रम:

using System;

namespace YesImAnAdult
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<string,string>f= s=>s.Contains(".")?float.Parse(s)<1.4?"1.4":s:int.Parse(s)<18?"18":s;

            Console.WriteLine(f("0"));  //18
            Console.WriteLine(f("1"));  //18
            Console.WriteLine(f("2"));  //18
            Console.WriteLine(f("12")); //18
            Console.WriteLine(f("18")); //18
            Console.WriteLine(f("43")); //43
            Console.WriteLine(f("122"));    //122

            Console.WriteLine(f("0.0"));    //1.4
            Console.WriteLine(f("1.04"));   //1.4
            Console.WriteLine(f("1.225"));  //1.4
            Console.WriteLine(f("1.399"));  //1.4
            Console.WriteLine(f("1.4"));    //1.4
            Console.WriteLine(f("1.74"));   //1.74
            Console.WriteLine(f("2.0"));    //2.0
            Console.WriteLine(f("2.72"));   //2.72
        }
    }
}

एक बहुत ही सीधा हल। ध्यान दें कि कुछ सिस्टम फ्लोट करते हैं। गलत () गलत परिणाम लौट सकते हैं। दर्रा CultureInfo.InvariantCulture के अनुसार दूसरा तर्क के रूप में इस सवाल का जवाब


की कमी मुझे लगता है कि आप की जगह के साथ भाग प्राप्त कर सकते हैं को देखते हुए s.Contains(".")के साथs[1]=='.'
को पुनः स्थापित मोनिका - JustinM

हम्म एनवीएम, 0 टेस्ट केस भूल गए। बहुत करीब :(
जस्टिन

1
@Phaze: हाँ, यह IndexOutOfRangeException के साथ किसी भी 1-अंकीय इनपुट पर विफल होगा। अन्यथा आप एक बाइट को दाढ़ी बना सकते हैं s[1]==46('' में 46 का ASCII कोड है), या इससे भी अधिक आक्रामक दृष्टिकोण (यह मानते हुए कि आपके पास केवल अंक और 'सूचकांक 1 पर वर्ण है) s[1]<47:।
एड्रिअनम्प सिप

1
ओओ मुझे वह पसंद है, याद रखने की कोशिश करूंगा। मेरी
मुहावरे

4

आईबीएम / लोटस नोट्स फॉर्मूला भाषा, 58 49 बाइट्स

@If(@Like(@Text(a);"%.%");@If(a<1.4;1.4;a);@If(a<18;18;a))

परिकलित फ़ील्ड सूत्र जहाँ एक संपादन योग्य संख्यात्मक फ़ील्ड है।

संपादित करें

@If(@Like(@Text(a);"%.%");@Max(1.4;a);@Max(18;a))

वैकल्पिक @Mego से प्रेरित है


4

जेली , 16 15 13 बाइट्स

ŒṘċ”.ị1.4,18»

TryItOnline
या सभी परीक्षण मामलों को देखें, TryItOnline पर भी

कैसे?

ŒṘċ”.ị1.4,18» - Main link: n
      1.4,18 - pair literals 1.4 and 18:   [1.4,18]
     ị       - index (1-based & modular ie:^  1, 0^)
  ċ          -     count (occurrences of)
   ”.        -         string "." (present in)
ŒṘ           -         string representation of n
           » - maximum (of this and n)

2
इसके 18लिए 2.0, दुख की बात है :(
लिन

आह, जेली की जटिलता बेहतर है।
आउटगॉल्फ

@Lynn धन्यवाद, सस्ती लागत पर तय; हो सकता है कि इससे भी छोटा रास्ता हो।
जोनाथन एलन

4

सी ++, 68 बाइट्स

int A(int a){return a<18?18:a;}float A(float h){return h<1.4?1.4:h;}

यह उत्तर वास्तव में एक ही नाम के साथ 2 फ़ंक्शन हैं, और कंपाइलर मेरे लिए काम करता है जिसे कॉल करना है, इसलिए यह मेरे बिना एक इनपुट के रूप में कार्य करने और यह तय करने के लिए एक फ़ंक्शन के रूप में कार्य करता है। चूंकि फ़्लोटिंग पॉइंट पर इनपुट आउटपुट के समान सटीक होने की गारंटी है, इसलिए मैं इसे सुरक्षित रूप से या तो काटे बिना वापस कर सकता हूं।

असंगठित + परीक्षण

#include <iostream>

int A(int a)
{
   return a < 18 ? 18 : a;
}

float A(float h)
{
   return h < 1.4 ? 1.4 : h;
}

int main()
{
  std::cout << 0 << " " << A(0) << "\n";
  std::cout << 19 << " " << A(19) << "\n";
  std::cout << 1.1 << " " << A(1.1f) << "\n";
  std::cout << 2.2 << " " << A(2.2f) << "\n";
}

उपयोगकर्ता सजली स्ज़ाली ने floatएस को autoएस में बदलकर दो बाइट्स बचाने का सुझाव दिया । मैंने नीति के अनुसार संपादन को अस्वीकार कर दिया है, लेकिन यदि आपने यह पुष्टि की है कि यह काम करता है, तो इसे अपने आप में संपादित करने के लिए स्वतंत्र महसूस करें।
मार्टिन एंडर

वह सब पाठ दोहराव! आप मैक्रो के माध्यम से दो परिभाषाओं को उत्पन्न करके कई पात्रों को बचा सकते हैं।

धन्यवाद @MartinEnder उनका संपादन सभी C ++ कंपाइलरों में संकलित नहीं होता है, और सभी प्रकार के अजीब मामलों का परिचय देता है जिसमें अन्य प्रकार अचानक पारित किए जा सकते हैं, इसलिए मैं अपने उत्तर को थोड़ा और पोर्टेबल रखने के लिए अपने 2 बाइट्स को स्वीकार करने जा रहा हूं।
कोडी

@ कोडी यह आपकी कॉल है, लेकिन जहां तक ​​पीपीसीजी का संबंध है, भाषाओं को उनके कार्यान्वयन द्वारा परिभाषित किया गया है, इसलिए उत्तर पोर्टेबल या विशेष रूप से सुरक्षित होने की आवश्यकता नहीं है। जब तक एक कंपाइलर होता है जहां प्रोग्राम काम करता है (और आवश्यक इनपुट काम करते हैं, भले ही अमान्य लोग भी काम करेंगे), तो यह पूरी तरह से ठीक है।
मार्टिन एंडर

4

सी #, 58 बाइट्स

x=>x is int?(int)x>17?x:18:(float)x<1.4?"1.4":$"{x:.0##}";

सी # के लिए कोई पागल स्ट्रिंग पार्सिंग की आवश्यकता नहीं है। इनपुट एक होने की उम्मीद है intया float(दुर्भाग्य से सी # एक डाली नहीं कर सकते doubleकरने के लिए floatकरता है, तो doubleएक में है object)। आउटपुट या तो हो जाएगा intया stringएक में object

(लगभग कम से कम 1 दशमलव आवश्यकता को याद किया, अब जोड़ा गया है)

Ungolfed:

/*Func<object, object> Lambda = */ x =>
    x is int // if parameter is an int
        ? (int)x > 17 // check if x is at least 18
            ? x // at least 18 so return x
            : 18 // less than 18 so return 18
        : (float)x < 1.4 // x is float, check if at least 1.4
            ? "1.4" // less than 1.4 so return 1.4
            : $"{x:.0##"} // at least 1.4 so return x and ensure at least 1 decimal place
;

वैकल्पिक कार्यान्वयन जो 58 बाइट्स भी है।

x=>x is int?(int)x>17?x:18:$"{((float)x<1.4?1.4:x):.0##}";

4

दरअसल, 16 बाइट्स

;:.7τ9τ($'.íuIkM

इसे ऑनलाइन आज़माएं!

स्पष्टीकरण:

;:.7τ9τ($'.íuIkM
;                 dupe input
 :.7τ             1.4 (.7*2) - note that :1.4 is the same length, but an additional delimiter would be needed to separate it from the following 1
     9τ           18 (9*2)
       ($'.íu     1-based index of "." in string representation of input, 0 if not found
             I    1.4 if input contains a "." else 18
              kM  maximum of remaining values on stack 

मैंने वास्तव में पहले कभी भी प्रोग्राम नहीं किया है , लेकिन सिर्फ इसके बजाय उपयोग क्यों करें 18? मुझे पता है कि यह एक ही बाइट-काउंट है इसलिए यह वास्तव में मायने नहीं रखता, लेकिन 18अधिक पठनीय लगता है। या फिर कोई कारण है कि यह वर्तमान कार्यान्वयन / प्रोग्रामिंग भाषा में काम नहीं करेगा?
केविन क्रूज़सेन

3
@KevinCruijssen 18एक 1और एक धक्का देता है 8। शाब्दिक धक्का देने के लिए 18, आप उपयोग करेंगे :18, जो इससे अधिक लंबा है
मेगो

बेशक, स्टैक-आधारित भाषाएँ। स्पष्टीकरण के लिए धन्यवाद! +1
केविन क्रूज़सेन

4

एमएसीएस लिस्प, 37 बाइट्स

(lambda(x)(max(if(floatp x)1.4 18)x))

"डेटाटाइप" से अनुमान लगाया जाता है कि पूर्णांक या फ्लोट संस्करण का उपयोग किया जाना चाहिए या नहीं। ( floatpरिटर्न tके लिए 1.0, लेकिन नहीं करने के लिए 1.) पैरामीटर, पूर्णांक या नाव के रूप में एक संख्या है यानी यह पूरा करना चाहिए numberp


4

हास्केल, 49 बाइट्स

x#y=show.max x.fst<$>reads y;f s=head$18#s++1.4#s

असल में, यह पहली बार इनपुट को पूर्णांक के रूप में पढ़ने का प्रयास करता है और फिर विफल होने पर दोहरे के रूप में। फिर इसकी तुलना संबंधित आधारभूत आधार से करने के लिए आगे बढ़ता है।


3

डायलाग एपीएल , 14 बाइट्स आगे के विनिर्देशों द्वारा अमान्य हैं

⎕IO←0जो कई प्रणालियों पर डिफ़ॉल्ट है। तर्क के रूप में स्ट्रिंग लेता है।

⍎⌈18 1.4⊃⍨'.'∘∊

⍎⌈ मूल्यांकित तर्क की अधिकतम और

18 1.4⊃⍨ {18,1.4} द्वारा चयनित

'.'∘∊ चाहे तर्क में एक अवधि शामिल हो


3

सी #, 95 बाइट्स

golfed:

string y(string p){int a;return int.TryParse(p,out a)?a>17?p:"18":double.Parse(p)<1.4?"1.4":p;}

Ungolfed:

class YesOfCourseImAnAdult
  {
    public string y(string p)
    {
      int a;
      return int.TryParse(p, out a) ? a > 17 ? p : "18"
       : double.Parse(p) < 1.4 ? "1.4" : p;
    }
  }

परीक्षण के मामलों:

var codeGolf = new YesOfCourseImAnAdult();
Console.WriteLine(codeGolf.y("0"));
Console.WriteLine(codeGolf.y("1"));
Console.WriteLine(codeGolf.y("2"));
Console.WriteLine(codeGolf.y("12"));
Console.WriteLine(codeGolf.y("18"));
Console.WriteLine(codeGolf.y("43"));
Console.WriteLine(codeGolf.y("122"));

Console.WriteLine(codeGolf.y("0.0"));
Console.WriteLine(codeGolf.y("1.04"));
Console.WriteLine(codeGolf.y("1.225"));
Console.WriteLine(codeGolf.y("1.399"));
Console.WriteLine(codeGolf.y("1.4"));
Console.WriteLine(codeGolf.y("1.74"));
Console.WriteLine(codeGolf.y("2.0"));
Console.WriteLine(codeGolf.y("2.72"));

आउटपुट:

18
18
18
18
18
43
122

1.4
1.4
1.4
1.4
1.4
1.74
2.0
2.72

1
नमस्ते, PPCG में आपका स्वागत है! : आपके वर्तमान दृष्टिकोण इस तरह एक सा छोटा किया जा सकता है string y(string p){int a;return int.TryParse(p,out a)?a<1?"18":p:double.Parse(p)<1.4?"1.4":p;}, (हटा कोष्ठक >=1.4को <1.4स्वैप करके "1.4"और p; बदल decimalकरने के लिए doubleतो Mचला गया है इसके अलावा, किसी और सिर्फ पोस्ट की। सी # में एक अलग दृष्टिकोण है कि थोड़ा कम है तुम मिल सकती है। गोल्फ के लिए टिप्स C # के माध्यम से पढ़ने के लिए दिलचस्प। फिर से, आपका स्वागत है! :)
केविन क्रूज़सेन

नमस्ते, उपयोगी टिप्पणियों के लिए धन्यवाद! मैं पूरी तरह से उन अतिरिक्त कोष्ठक के बारे में भूल गया था जो मुझे टर्नरी-टर्नेरी ऑपरेटर से ट्रैक खोने से रोकने के लिए था! मैंने अब कुल मिलाकर 5 बाइट्स बचाए हैं।
पीट आर्डेन

आप float.Parseइसके बजाय का उपयोग करके एक बाइट बचा सकते हैं double.Parse। और यह भी कि यदि आप एक डिफ़ॉल्ट मान के साथ विधि तर्कों में घोषणा को स्थानांतरित करते हैं, तो आप अभिव्यक्ति सदस्य का उपयोग करके अपना रिटर्न स्टेटमेंट छोड़ सकते हैं। जैसे:string f(string s,int a=0)=>int.TryParse(s,out a)?a>17?s:"18":float.Parse(s)<1.4?"1.4":s;
जस्टिनएम -

3

AWK - 29 बाइट्स

($0<c=$0~/\./?1.4:18){$0=c}1

उपयोग:

awk '{c=$0~/\./?1.4:18}($0<c){$0=c}1' <<< number

परीक्षण gawkआरएचईएल 6 के साथ किया गया था। मैंने सभी परीक्षण मामलों के साथ प्रयास किया, दुर्भाग्य से मेरे पास AWKउस मशीन पर नहीं है जिसके पास इंटरनेट का उपयोग है, इसलिए कॉपी-पेस्ट संभव नहीं है।

क्या इसमें ऐसा करने के लिए अधिक कॉम्पैक्ट तरीका है AWK?


3

सी, 50 बाइट्स:

#define A(x)(x/2+(x+1)/2-x?x<1.4?1.4:x:x<18?18:x)

बाइट काउंट में मैक्रो परिभाषा के अंत में न्यूलाइन शामिल है।

परीक्षण :

#define A(x)(x/2+(x+1)/2-x?x<1.4?1.4:x:x<18?18:x)
#include <assert.h>
int main() {
  assert(A(0) == 18);
  assert(A(1) == 18);
  assert(A(2) == 18);
  assert(A(12) == 18);
  assert(A(18) == 18);
  assert(A(43) == 43);
  assert(A(115) == 115);
  assert(A(122) == 122);
  assert(A(0.0) == 1.4);
  assert(A(1.04) == 1.4);
  assert(A(1.225) == 1.4);
  assert(A(1.399) == 1.4);
  assert(A(1.4) == 1.4);
  assert(A(1.74) == 1.74);
  assert(A(2.0) == 2.0);
  assert(A(2.72) == 2.72);
}


3

C, 119 111 105 100

m;f(char*s){float atof(),l=atof(s);for(m=s;*s&&*s++!=46;);puts(*s?l<1.4?"1.4":m:atoi(m)>18?m:"18");}

के साथ परीक्षण किया गया

main(c,v)char**v;{
    f("0");
    f("1");
    f("2");
    f("12");
    f("18");
    f("44");
    f("115");
    f("122");
    f("0.0");
    f("1.04");
    f("1.225");
    f("1.339");
    f("1.4");
    f("1.74");
    f("2.0");
    f("2.72");
}

उत्पादन

18
18
18
12
18
44
115
122
1.4
1.4
1.4
1.4
1.4
1.74
2.0
2.72

यह अमान्य है ... 12 का एक इनपुट 18 उत्पादन करना चाहिए
बीटा डेके

@BetaDecay आप सही हैं। मुझे एक अतिरिक्त और चरित्र जोड़ना होगा। यह बात बताने के लिए धन्यवाद।
क्लेब्लांक

2

बैच, 102 बाइट्स

@set/ps=
@if %s:.=%==%s% (if %s% lss 18 set s=18)else if %s:~0,1%%s:~2,1% lss 14 set s=1.4
@echo %s%

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


2

PHP: 40 बाइट्स

$i=is_int($i)?$i>17?$i:18:$i>1.4?$i:1.4;

psuedocode, (नेस्टेड टर्नरी):

if (i is an integer) then 
  if (i is bigger than 17) then i=18 else i=i  
otherwise (its a decimal)   
  if (i is bigger than 1.4) then i=i else i=1.4 
end if 

1
PPCG में आपका स्वागत है! कृपया ध्यान दें कि इनपुट (डिफ़ॉल्ट रूप से) STDIN, फ़ंक्शन तर्क या पूर्ण प्रोग्राम तर्क के माध्यम से होना चाहिए।
बजे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.