হ্যাঁ, অবশ্যই আমি একজন প্রাপ্তবয়স্ক!


44

আমি মনে করি আমরা সকলেই একটি শিশু হিসাবে এটি করেছি: কিছু ওয়েবসাইটের সর্বনিম্ন 18 বছর বয়স প্রয়োজন, তাই আমরা জন্মের বছর এবং ভয়েলি থেকে কয়েক বছর বিয়োগ করি, আমরা '18+'।
এছাড়াও, বিনোদন পার্কে সর্বাধিক চড়ার জন্য প্রবেশের নূন্যতম উচ্চতা 1.40 মিটার (এখানে নেদারল্যান্ডসে এটি কমপক্ষে হিসাবে) is অবশ্যই এটি বয়সের তুলনায় খুব কম প্রতারিত হতে পারে তবে আপনি পুরু হিলের জুতো পরতে পারেন, চুল উপরে রাখতে পারেন, টুপি পরেছিলেন, আপনার পায়ের আঙ্গুলের উপর দাঁড়িয়ে থাকতে পারেন etc.

ইনপুট:

আপনার প্রোগ্রাম / ফাংশন একটি ধনাত্মক পূর্ণসংখ্যা বা দশমিক গ্রহণ করে।

আউটপুট:

  • ইনপুটটি কি পূর্ণসংখ্যা হয় >= 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

আমরা কি ধরে নিতে পারি যে ইনপুটটি নেতৃস্থানীয় শূন্য থেকে মুক্ত?
টবি স্পিড

@ টবিস্পাইট হ্যাঁ, কোনও শীর্ষ জিরো নেই।
কেভিন ক্রুইজসেন

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 ব্যবহার করি । আমি যে কোনও পাইথন উত্তর পোস্ট করেছি সেটির উত্তর দেখুন এবং সম্ভবত এটির একটির সাথে একটি লিঙ্ক রয়েছে has
mbomb007

1
কিছু নয়, বুঝেছি সুতরাং মূলত সত্য বা মিথ্যা মানচিত্র যে অ্যারে 0 বা 1 সূচক এবং তারপর দুটি সংখ্যার উপর সর্বোচ্চ প্রয়োগ।
আলেকজান্দ্রু পুপসা

15

জাভাস্ক্রিপ্ট (ES6), 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এটি একই সংখ্যার জন্য request সুতরাং সংখ্যা হিসাবে ইনপুট পাওয়া সম্ভব নয়


2
ফলাফল 2.0হওয়া উচিত 2.0, না হওয়া উচিত 18
নীল

প্রকৃতপক্ষে. 2.0%1এবং 1.0%10 পরিণাম ডেকে আনবে
aross

4
'জাভাস্ক্রিপ্ট (এস)) ভার্জোজ', আপনি কেবল কোডগল্ফে দেখতে পাবেন
ডওয়ানা

@ নীল দ্বিতীয় বার ভেবেছিল আপনি সম্ভবত ঠিক আছেন
edc65

3
1/(x+x)- এখন এটা কল্পনাপ্রসূত!
নীল

13

05 এ বি 1 ই , 13 11 বাইট

ব্যবহার সিপি-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 মিনিট সময় নিয়েছে। ; পি (পড়ুন: জঘন্য, এটি দ্রুত ছিল)) এটি অবশ্যই খুব সোজা ward
কেভিন ক্রুইজসেন

2
@ কেভিন ক্রুইজসেন: হ্যাঁ, বাস্তবায়ন খুব দ্রুত এমন একটি ল্যাং-এ রয়েছে যাতে অনেকগুলি কী-প্রেসের প্রয়োজন হয় না: পি
এমিগেনা

@ এরিকথগল্ফার: আরও ভাল? নির্দ্বিধায় এটি সম্পাদনা করুন। আমি ফর্ম্যাটিংয়ের কয়েকটি ভিন্ন পদ্ধতি নিয়ে পরীক্ষা-নিরীক্ষা করেছি এবং কঠোরভাবে সেরাটির সিদ্ধান্ত নিই নি। পরামর্শ স্বাগত জানাই।
এমিগানা

@ এমিগনা আমি সবেমাত্র দু'টি অনুপস্থিত গুরুত্বপূর্ণ জায়গাগুলি যুক্ত করেছি।
এরিক আউটগল্ফার


8

জাভা 8, 90 61 57 বাইট

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

-4 বাইট Objectপরিবর্তে ফিরে String; এবং কিছু অতিরিক্ত 8. জাভা 7 রূপান্তর বাইট
-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

পিএইচপি, 40 বাইট

@ user59178 দ্বারা পরিবর্তিত ধন্যবাদ আপনাকে ধন্যবাদ

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

পিএইচপি, 42 বাইটের প্রথম সংস্করণ

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

is_int($i=$argv[1]+0)2 বাইটের চেয়ে কম strpos($i=$argv[1],".")এবং এটি একই উদ্দেশ্যে পরিবেশন করতে পারে যদি আপনি 1.4এবং18
ব্যবহারকারী 59178

@ ব্যবহারকারী59178 আমি is_numericএকটি স্ট্রিংয়ে ব্যবহার করতে পারলাম কিন্তু নাis_int
জার্গ হালসারম্যান

এ কারণেই +0এটি একটি সংখ্যার ধরণের রূপান্তরিত করার জন্য।
ব্যবহারকারী59178

1
এটি আমার জন্য সঠিকভাবে কাজ করে (উইন্ডোতে পিএইচপি 5.5 এবং 7.0 উভয় চেষ্টা করে)। নোট করুন যে এটির strpos($i=$argv[1],".")সংস্করণটির বিপরীতে সত্য / মিথ্যা শর্ত রয়েছে , আপনি কি বার্ষিকীর আউটপুটগুলি অদলবদল করতে ভুলে গেছেন?
ব্যবহারকারী59178

1
প্রকৃতপক্ষে, কাছাকাছি পড়ার সময়, ২.০ দেওয়া হলে আউটপুট 2 এড়ানোর <?=max(is_int(0+$i=$argv[1])?18:1.4,$i);চেয়ে এটি হওয়া উচিত <?=max(is_int($i=$argv[1]+0)?18:1.4,$i);
ব্যবহারকারী59178

6

এক্সেল: 26 31 29 বাইট

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

সূত্রটি এ 1, ইনপুট সেল বাদে যে কোনও জায়গায় যেতে পারে।

স্থির ত্রুটি, এবং এমিগিনার পরামর্শ দিয়ে প্রতিস্থাপন।

সত্য ব্যবহার করে কিছু বাইট সংরক্ষণ করার জন্য আলেকজান্দ্রুকে ধন্যবাদ


1
এছাড়াও, nইনপুট সেলটির জন্য কোনও নাম নির্ধারণ করা ভাল না ? এটি নথিতে তখন যে কোনও জায়গায় থাকতে পারে এবং এটি 2 বাইটও কম হয়।
এমিগিনা

@ এমিগনা আমি পারলাম , তবে এই মুহুর্তে এটি আমার কিছুটা প্রতারণা হয়ে যায়। নাম অনুসারে 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 সেড, 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/

আমরা ইনপুটটিতে সীমাবদ্ধতার সুযোগ নিয়ে থাকি, সুতরাং যখন আমরা '১' দেখি তখন স্ট্রিংয়ের শুরুটি পরীক্ষা করতে হবে না ' - আমরা জানি দশমিক বিন্দুর আগে মাত্র একটি অঙ্ক আছে।

পরীক্ষার ফলাফল:

$ ./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
কিউবিক

@ কিউবিক: এর দুর্দান্ত ব্যবহার reads। সামান্য পরিবর্তন নিয়ে এটি আমার থেকে এক বাইট কম। এটি আলাদা উত্তর হিসাবে পোস্ট করুন। x#y=show.max x.fst<$>reads y;f s=head$18#s++1.4#s
নিমি

সত্যিই দুর্দান্ত ধারণা ইনফিক্স এফএমএপ দিয়ে প্যারেন্সগুলি সঞ্চয় করছে!
কিউবিক

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। আমি মনে করি আপনি পড়তে আকর্ষণীয় জাভাতে গল্ফ করার টিপস পেতে পারেন। :)
কেভিন ক্রুইজসেন

হ্যাঁ, অবশ্যই তারা। আমি কীভাবে তাদের ভুলে যেতে পারি ...
করভাস_192

আমি এটা ভালোবাসি! আপনি যখন সংকলকটিতে এটি অফলোড করতে পারেন তখন নিজেকে যুক্তিযুক্ত কোড কেন!
কর্সিকা


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
        }
    }
}

একটি দুর্দান্ত সোজা সমাধান। নোট করুন যে কয়েকটি সিস্টেমে ভাসা রয়েছে ars পার্স () ভুল ফলাফল দিতে পারে। এই উত্তর অনুযায়ী দ্বিতীয় যুক্তি হিসাবে সংস্কৃতিInfo.InvariantC فرهن পাস করুন ।


সীমাবদ্ধতার আমি মনে করি আপনি প্রতিস্থাপন পার পেয়ে যাবে প্রদত্ত s.Contains(".")সঙ্গেs[1]=='.'
পুনর্বহাল মনিকা - JustinM

হুঁ এনভিএম, 0 পরীক্ষার কেসটি ভুলে গেছেন। খুব কাছেও :(
জাস্টিনএম - মনিকা পুনরায় ইনস্টল করুন

1
@ ফাইজ: হ্যাঁ, এটি কোনও সূচীআউটআফরেঞ্জএক্সসেপশন সহ কোনও 1-অঙ্কের ইনপুটটিতে ব্যর্থ হবে। অন্যথায় আপনি একটি বাইট দিয়ে শেভ করতে s[1]==46, অথবা একটি এমনকি আরো আক্রমনাত্মক পদ্ধতির (সাহসী আপনি শুধুমাত্র সংখ্যা এবং সূচক 1 চরিত্র '।') (46 একজন হওয়া ASCII কোড আছে '।'): s[1]<47
অ্যাড্রিয়ান্প

1
ওও আমি এটি পছন্দ করি, মনে রাখার চেষ্টা করব। আমার
মূর্খতাটিকে

4

আইবিএম / লোটাস নোট সূত্রের ভাষা, 58 49 বাইট

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

গণিত ক্ষেত্র সূত্র যেখানে a একটি সম্পাদনযোগ্য সংখ্যাসূচক ক্ষেত্র।

সম্পাদনা

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

বিকল্প @ মেগো দ্বারা অনুপ্রাণিত


4

জেলি , 16 15 13 বাইট

ŒṘċ”.ị1.4,18»

ট্রাইআইটিঅনলাইন
অথবা সমস্ত পরীক্ষার কেস দেখুন ট্রাইআইটঅনলাইনেও

কিভাবে?

ŒṘċ”.ị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:(
লিন

আহ, জেলির জটিলতা আরও উন্নত।
এরিক আউটগল্ফার

@ লিন ধন্যবাদ, চূড়ান্ত ব্যয় নির্ধারিত; এর চেয়ে আরও ছোট একটি উপায় থাকতে পারে।
জোনাথন অ্যালান

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";
}

ব্যবহারকারী Szali Szali চালু করার মাধ্যমে দুই বাইট সংরক্ষণ প্রস্তাব floatমধ্যে গুলি autoগুলি। আমি নীতি অনুসারে সম্পাদনাটি প্রত্যাখ্যান করেছি তবে আপনি নিজেরাই এটিকে সম্পাদন করতে নির্দ্বিধায় যদি আপনি নিশ্চিত হয়ে থাকেন যে এটি কাজ করে।
মার্টিন ইন্ডার

এই সমস্ত পাঠ্য নকল! আপনি ম্যাক্রোর মাধ্যমে দুটি সংজ্ঞা তৈরি করে বেশ কয়েকটি অক্ষর সংরক্ষণ করতে পারেন।

ধন্যবাদ @ মার্টিনএেন্ডার তাদের সম্পাদনাটি সমস্ত সি ++ সংকলকগুলিতে সংকলন করে না, এবং হঠাৎ করে অন্য ধরণের পাস হওয়াতে সক্ষম হওয়ার সাথে সমস্ত ধরণের অদ্ভুত ঘটনাগুলির পরিচয় দেয়, তাই আমার উত্তরটি আরও কিছুটা বহনযোগ্য রাখার জন্য আমি আমার 2 বাইট গ্রহণ করতে চলেছি।
কোডি

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

4

সি #, 58 বাইট

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

সি # এর জন্য কোনও ক্রেজি স্ট্রিং পার্সিংয়ের প্রয়োজন নেই। ইনপুট হল একটি হবে বলে আশা করা হয় intবা float(দুর্ভাগ্যবশত C # এর একটি নিক্ষেপ করতে পারবে না 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.) প্যারামিটার হয়, পূর্ণসংখ্যা বা float হিসাবে একটি সংখ্যা অর্থাৎ সন্তুষ্ট উচিত 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
হাই, পিপিসিজিতে আপনাকে স্বাগতম! : আপনার বর্তমান পদ্ধতির এই মত একটি বিট সংক্ষিপ্ত করা যেতে পারে 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সর্বস্বান্ত হয় এছাড়াও, অন্য কারো শুধু পোস্ট করা হয়েছে। সি # একটি ভিন্ন পদ্ধতির যে সামান্য খাটো আপনি হতে পারে। Golfing জন্য টিপস সি # তে পড়তে আকর্ষণীয়। আবারও স্বাগতম! :)
কেভিন ক্রুইজসেন

হাই, সহায়ক মন্তব্যের জন্য ধন্যবাদ! টার্নারি-টার্নারি অপারেটর থেকে ট্র্যাক হারিয়ে নিজেকে আটকাতে আমার যে অতিরিক্ত বন্ধনী ছিল সেগুলি সম্পর্কে আমি সম্পূর্ণরূপে ভুলে গেছি! আমি এখন সামগ্রিকভাবে 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

এডাব্লুকে - 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

সি, 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
বিটা ক্ষয়

@ বেটাডেক আপনি ঠিক বলেছেন আমার একটি অতিরিক্ত & চরিত্র যুক্ত করতে হবে। যে ইশারা জন্য ধন্যবাদ।
ক্লাব্ল্যাঙ্ক

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%

প্রথমে ইনপুটটি পূর্ণসংখ্যা কিনা তা পরীক্ষা করে নির্ধারণ করে যে সমস্তগুলি মুছলে .স্ট্রিংয়ের কোনও প্রভাব আছে কিনা । যদি এটি হয় তবে মানটি সহজেই 18 এর সাথে তুলনা করা হয়, অন্যথায় প্রথম এবং তৃতীয় অক্ষর একটি সংখ্যায় একত্রিত হয় যা 14 এর সাথে তুলনা করা হয়।


2

পিএইচপি: 40 বাইট

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

স্যুইচোকড, (নেস্টেড টার্নারি):

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
পিপিসিজিতে আপনাকে স্বাগতম! দয়া করে নোট করুন যে ইনপুট (ডিফল্টরূপে) STDIN, ফাংশন আর্গুমেন্ট বা সম্পূর্ণ প্রোগ্রাম আর্গুমেন্টের মাধ্যমে হতে হবে।
aross
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.