আমার বডি মাস ইনডেক্স কি?


21

সমস্যা:

আপনার কাজ হ'ল একটি প্রোগ্রাম লিখুন যা ইনপুট হিসাবে উচ্চতা (মিটারে) এবং ওজন (কিলোগ্রামে) নেয় এবং সংশ্লিষ্ট বিএমআই বিভাগে আউটপুট দেয়।

BMI হ'ল আপনার উচ্চতার সাথে আপনার ওজনের অনুপাতের একটি পরিমাপ। এটি অনেক লোকের জন্য তারিখযুক্ত এবং সঠিক নয়, তবে এখানে বিষয়টি কিছু যায় আসে না!

BMI নিম্নলিখিত সমীকরণ ব্যবহার করে গণনা করা যেতে পারে:

BMI = (mass in kilograms) / (height in meters)^2

বিভাগগুলি নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হবে:

  • BMI <18.5: "কম ওজন"

  • 18.5 <= BMI <25: "সাধারণ"

  • 25 <= বিএমআই: "অতিরিক্ত ওজন"

চ্যালেঞ্জের স্বার্থে, আমি সমস্ত "চরম" বিভাগগুলিকে উপেক্ষা করছি। এছাড়াও, "25" এর মতো কিছু নম্বর 2 বিভাগের মধ্যে বসার কারণে আমি সীমানা সামান্য সামঞ্জস্য করেছি যাতে একটি নির্দিষ্ট উত্তর পাওয়া যায়।

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

ইনপুট:

ইনপুট যে কোনও যুক্তিসঙ্গত আকারে থাকতে পারে। দুটি সংখ্যা (বা স্ট্রিং) হয় 2 টি পৃথক যুক্তি হিসাবে বা একক স্ট্রিং হিসাবে। 2 সংখ্যার একটি অ্যারে / তালিকা, "ওজন" এবং "উচ্চতা" কী সহ একটি অভিধান ... দশমিক মানগুলি সমর্থন করা উচিত। আপনি ধরে নিতে পারেন ইনপুটটি সর্বদা বৈধ হবে (কোনও নেতিবাচক মান নেই এবং উচ্চতা কখনই 0 হবে না)।

আউটপুট:

আউটপুট কেস-সংবেদনশীল বিভাগের নাম সম্বলিত একটি স্ট্রিং হবে । স্ট্রিংগুলিকে ক্ষেত্রে উপেক্ষা করে উপরের মত যথাযথ নামের সাথে অবশ্যই মিল করতে হবে। এটি স্টাডআউটে আউটপুট হতে পারে, ফেরত (কোনও ফাংশনের ক্ষেত্রে), অথবা ফাইল লিখিত হতে পারে।

পরীক্ষার কেস (ওজন, উচ্চতা => ফলাফল):

80, 1 =>   "Overweight"
80, 2 =>   "Normal"
80, 3 =>   "Underweight"

50, 1 =>   "Overweight"
50, 1.5 => "Normal"
50, 2 =>   "Underweight"

Edge Cases:

41, 1.5 => "Underweight" (18.2 BMI)
42, 1.5 => "Normal" (18.667 BMI)

56, 1.5 => "Normal" (24.889 BMI)
57, 1.5 => "Overweight" (25.3 BMI)

73, 2 =>   "Underweight" (18.25 BMI)
74, 2 =>   "Normal" (18.5 BMI)

99, 2 =>  "Normal" (24.75 BMI)
100, 2 => "Overweight" (25 BMI)

এখানে কয়েকটি সিউডোকোড যা একটি উদাহরণ বাস্তবায়ন দেখায়:

function bmi_category(weight, height):
    var bmi = (weight / (height**2))

    if (bmi < 18.5):
        return "Underweight"

    if (18.5 <= bmi < 25):
        return "Normal"

    if (25 <= bmi):
        return "Overweight"

এটি কোড-গল্ফ, তাই বাইটের সংখ্যা সবচেয়ে কম।

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


বিঃদ্রঃ! আমি এই চ্যালেঞ্জটি পোস্ট করার এক ঘন্টা পরে, মন্তব্যগুলিতে নির্দেশিত হিসাবে রেঞ্জগুলির "গর্ত" থাকার কারণে আমাকে রেঞ্জগুলি কিছুটা সংশোধন করতে হয়েছিল। দয়া করে নতুন ব্যাপ্তিগুলি দেখুন।

উত্তর:


9

জেলি , 24 বাইট

÷÷⁹Ḥ“%2‘>Sị“$⁽¿“;ṅẒ“&ċ)»

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

বিএমআই গণনা করে, এটি দ্বিগুণ করে, তুলনা করে যে অপারেটরের চেয়ে বৃহত অপারেটরের সাথে প্রতিটি সংখ্যার 37 এবং 50 (18.5 এবং 25 দ্বিগুণ) হয়, ফলাফলগুলি এবং শূন্যগুলি যোগ করে (1, 2, বা 0 সাধারণ, কম ওজন এবং ওজনের জন্য উত্পাদিত হয়) যথাক্রমে) এবং স্ট্রিংগুলির তালিকায় সূচীগুলি ["Normal","Underweight","Overweight"]

÷÷⁹Ḥ“%2‘>Sị“$⁽¿“;ṅẒ“&ċ)» - Main link: weight, height
÷                        - weight ÷ height
  ⁹                      - right argument, height
 ÷                       - ÷ by height again to get the BMI
   Ḥ                     - double the BMI
    “%2‘                 - list of code page indexes [37,50]
        >                - greater than? (vectorises) - i.e [18.5>bmi, 25>bmi]
         S               - sum -- both:=2 (Underweight), just 50:=1 (Normal) or neither:=0 (Overweight)
          ị              - index into (1-based)
           “$⁽¿“;ṅẒ“&ċ)» - compressed list of strings ["Normal","Underweight","Overweight"]
                         - implicit print

1
কি দারুন. অস্পষ্টতা সম্পর্কে কথা বলুন। যদি এটি গল্ফ হয় তবে আমার মনে হয় আপনি একটির মধ্যে একটি ছিদ্র পেয়েছেন! বা 24 ...
কুল্লব

2
@ কুলুব এটি 24 টি অক্ষর এবং 24 বাইট - জেলি শিরোনামে "বাইটস" শব্দটির সাথে লিঙ্কযুক্ত নিজস্ব কোড-পৃষ্ঠা ব্যবহার করে, মোটেরেফ.ইনিকে আমি বিশ্বাস করি ইউনিকোড গণনা করছি।
জোনাথন অ্যালান

1
@TheBitByte, হ্যাঁ, কটাক্ষপাত করা Tio লিংক কাউন্টার "24 অক্ষর, 24 বাইট (SBCS)" বা কোড-পৃষ্ঠার দ্বারা লিঙ্ক ব্যবহার হাত দ্বারা এটি গণনা বাইট শিরোনাম হবে।
জোনাথন অ্যালান

হেক্স হিসাবে:1C 1C 89 AF FE 25 32 FC 3E 53 D8 FE 24 8D 0B FE 3B F0 BD FE 26 E8 29 FB
জোনাথন অ্যালান


10

টিআই-বেসিক, 58 54 বাইট

Input 
X/Y²→C
"NORMAL
If 2C≤37
"UNDERWEIGHT
If C≥26
"OVERWEIGHT

এছাড়াও, মজাদার জন্য, এখানে আরও একটি কমপ্যাক্ট সংস্করণ যা আরও বাইট:

Prompt A,B
sub("UNDERWEIGHTNORMAL      OVERWEIGHT ",sum(A/B²≥{18.5,25})11+1,11

আমি যা বলতে পারি তা হল, এই কেসটিকে সংবেদনশীল করার জন্য আপনাকে ধন্যবাদ;)

পিএস Inputগ্রাফ ইনপুট নেয় Xএবং এর YঅনুরূপPrompt X,Y


এছাড়াও, আমি এই একাধিকবার দেখেছি এবং আমি মনে করি না বাইটগুলি সংরক্ষণ করার কোনও উপায় নেই যদিও শেষ দু'জন স্ট্রিং ভাগ করে নিয়েছেERWEIGHT
টিমটেক

কৌতূহলের বাইরে, যদি আমি মামলা-সংবেদনশীলতা প্রয়োগ করি তবে কীভাবে এটি আপনার উত্তরটি পরিবর্তন করতে পারে?
কারসিজেনেট

1
@ কারসিজেনিকেট টিআই-বেসিকে, ছোট হাতের অক্ষর দুটি করে বাইট হয়। সুতরাং, এটি বাইট গণনাটি অনেকটা বাড়িয়ে দিত।
টিমটেক

1
আহ আমি দেখি. অদ্ভুত জিনিস.
কারসিজিনিট

1
@ কারসিজেনিকেট এটি মনে রাখা গুরুত্বপূর্ণ যে টিআই-বেসিকের এই সংস্করণটি ১৯৯০ সালে একটি ক্যালকুলেটর ভাষা হিসাবে চালু হয়েছিল ... কেউ জানত না যে আমি ২ 27 বছর পরে এটি গল্ফ করব
টিমটেক

6

গণিত, 67 বাইট

"Normal"["Underweight","Overweight"][[Sign@⌊(2#/#2^2-37)/13⌋]]&

সত্য যে ব্যবহার a[b,c][[Sign@d]]আয় aযদি d0 সমান, আয় bযদি dইতিবাচক হয়, এবং আয় cযদি dনেতিবাচক। ⌊...⌋ম্যাথামেটিকাল কারো নির্দেশ চলে না Floorতিন বাইট অক্ষর U + এ 230A এবং U + এ 230B ব্যবহার ফাংশন। weightদু'বার ব্যবহারের চেয়ে কীভাবে আরও ভাল করা যায় তা বুঝতে পারেনি ।


3
আশ্চর্য ম্যাথমেটিকার কোনও বিল্ট-ইন নেই
ড্যানিয়েল

1
আপনাকে তার জন্য ফ্যান ফিকশনে যেতে হবে ;)
গ্রেগ মার্টিন

5

রুবি, 91 77 74 67 বাইট

প্রথম নিষ্পাপ চেষ্টা:

->(w,h){case w/h/h
when 0..18.5
'underweight'
when 18.5..25
'normal'
else
'overweight'
end}

পূর্ববর্তী উত্তরগুলি থেকে "অনুপ্রেরণা" দিয়ে দ্বিতীয় চেষ্টা করুন:

->w,h{["#{(w/=h*h)<18.5?'und':'ov'}erweight",'normal'][(18.5..25)===(w)?1:0]}

তৃতীয় চেষ্টা:

->w,h{["#{(w/=h*h)<18.5?'und':'ov'}erweight",'normal'][w>=18.5&&w<25?1:0]}

চতুর্থ চেষ্টা:

->w,h{18.5<=(w/=h*h)&&w<25?'normal':"#{w<18.5?'und':'ov'}erweight"}

এটি অনলাইন চেষ্টা করুন!


হোমব্রিউ-ক্যাস্ক থেকে রিটারমার্কাস ?! ওহ, তোমাকে এখানে দেখার আশা করিনি! : o
নম্বরমানিয়াক

1
@ সংখ্যামারাক, হা, হ্যাঁ, আমি! 😂
পুনরায়বারক

5

জাভাস্ক্রিপ্ট (ES6), 70 67 64 63 বাইট

আরনাউল্ডকে 4 বি ধন্যবাদ সংরক্ষণ করা হয়েছে

a=>b=>(a/=b*b)<25&a>=18.5?"Normal":(a<19?"Und":"Ov")+"erweight"

ব্যবহার

f=a=>b=>(a/=b*b)<25&a>=18.5?"Normal":(a<19?"Und":"Ov")+"erweight"
f(80)(1)

আউটপুট

"Overweight"

ব্যাখ্যা

এই উত্তরটি বেশ তুচ্ছ, যদিও একটি চতুর কৌশল আছে: Underweightএবং Overweightউভয়ই শেষ হয়ে গেছে erweight, সুতরাং আমাদের কেবল এই চরিত্রগুলি পরিবর্তন করতে হবে।

আমি ধরে নিয়েছি এর Normalঅর্থ একটি বিএমআই মানে 25 (একচেটিয়া) এবং 18.5 (সমেত) এর মধ্যে। Underweightএর অর্থ একটি বিএমআই 18.5 এর চেয়ে কম, এবং এর Overweightঅর্থ একটি BMI 25 বা এর চেয়ে বড়।


1
এখন উত্তরের কোনও ES7 বৈশিষ্ট্য নেই ;-)
ETH প্রোডাকশনগুলি

4

সি, 81 বাইট

f(float m,float h){m/=h*h;puts(m<26?m<18.6?"Underweight":"Normal":"Overweight");}


4

কিউবিআইসি , 61 58 বাইট

::m=a/b^2~m<18.5|?@Und`+@erweight`\~m>=25|?@Ov`+B\?@Normal

@ লুক ফোর্সটি ব্যবহার করেছে এবং দুটি বাইট কেটে ফেলেছে। ধন্যবাদ!

নিয়ম পরিবর্তন অন্য একটি বাইট সংরক্ষণ।

ব্যাখ্যা:

::          gets weight and height as a and b
m=a/b^2     Calculates BMI
~m<18.5|    If BMI < 18.5 then
?@Und`      Print the string literal 'Und' (which is now A$)
+@erweight` and the string literal 'erweight'  (which is now B$)
\~m>=25|    else if the BMI is greater than or equal to 25
?@Ov`+B     Print 'Ov' and B$ ('erweight')
\?@Normal   Else, if we're here, BMI is normal.

3

পাইথন 2 , 72 বাইট

lambda a,b:"UNOnovdreemrrawwlee ii gg hh tt"[(18.6<a/b/b)+(a/b/b>25)::3]

এটি অনলাইন চেষ্টা করুন!


পাইথনের রঙগুলি কীভাবে পাবেন? আমি এটা কখনই বের করে ফেলিনি।

@ জ্যাকবেটস এটি কেবলমাত্র <!-- language-all: lang-python -->টিআইও আমার জন্য স্বয়ংক্রিয়ভাবে প্রবেশ করিয়েছে।
ডিজেএমসিএমহেম

3

পাইথন 3, 97 95 বাইট

a,b=map(int,input().split())
a/=b*b*5
print(["UOnvd"[a>93::2]+"erweight","Normal"][93<=a<=125])

পুরো প্রোগ্রাম।

বাইট সংরক্ষণ করতে পাঁচটি দিয়ে গুণ করুন। ধন্যবাদ জোনাথন অ্যালান

লাইনে লাইন:

  1. দুটি স্থান পৃথক পৃথক ব্যবহারকারী ইনপুট নম্বরগুলি ম্যাপ করুন। আনপ্যাক এ এবং খ।

  2. হিসাব

  3. বিএমআই যদি ১৮..6 থেকে 25 এর মধ্যে থাকে তবে ডানদিকে প্রকাশটি সত্য হিসাবে মূল্যায়ন করবে। বুলিয়ানগুলি 0 বা 1 হতে পারে যখন তালিকা সূচক হিসাবে ব্যবহৃত হয়, তাই আমরা শূন্য সূচীতে "নরমাল" বা নির্মিত স্ট্রিংটি পাই। "ইরওয়েট" বাকী দুটি বিকল্পের জন্য একটি ভাগ করা প্রত্যয়, সুতরাং এটির পুনরাবৃত্তি করার দরকার নেই। তারপরে আমরা পাইথন তালিকার [শুরু: স্টপ: পদক্ষেপ] প্যাটার্নটি ব্যবহার করি / স্ট্রিং স্লাইসিং। c> 18.6 0 বা 1 (মিথ্যা বা সত্য) এর মূল্যায়ন করবে এবং আমাদের সূচনা হবে। থামার নির্দেশিত নয় তাই আমরা আক্ষরিক শেষে যাই। পদক্ষেপটি 2 তাই আমরা প্রতিটি দ্বিতীয় সূচী গ্রহণ করি। যদি 1 টিতে মূল্যায়ন শুরু হয়, আমরা "ওভ" পাই, অন্যথায় আমরা "আনড" পাই। যেভাবেই হোক না কেন, আমরা যা পেয়েছি তার সাথে "এরওয়েট" যুক্ত করি এবং আমাদের চূড়ান্ত আউটপুট থাকে।


1
এটি 79 হিসাবে ফাংশন হিসাবে লিখুন:def f(h,w):c=h/w/w;print(["UOnvd"[c>18.6::2]+"erweight","Normal"][18.6<=c<=25])
জোনাথন অ্যালান

আপনি যদি প্রথমে পাঁচ দ্বারা গুণিত হন তবে আপনি 93এবং এর সাথে তুলনা করে একটি বাইট সংরক্ষণ করতে পারেন 125। যদি আপনি একটি ল্যাম্বডা ব্যবহার করেন তবে আপনাকে cউভয় জায়গাতেই গণনা করতে হবে তবে ফাংশনটির নাম বা ব্যবহারের প্রয়োজন নেই print(), তাই lambda h,w:["UOnvd"[h/w/w*5>93::2]+"erweight","Normal"][93<=h/w/w*5<=125]
জোনাথন অ্যালান

... আসলে যেহেতু আপনি cল্যাম্বডায় যে পরিমাণ সাশ্রয় করেছেন তার চেয়ে 5 বারের চেয়ে দ্বিগুণ গুণতে যাবেন , ঠিক তাই lambda h,w:["UOnvd"[h/w/w>18.6::2]+"erweight","Normal"][18.6<=h/w/w<=25]72 এর জন্য
জোনাথন অ্যালান

জোনাথন অ্যালান কেউ ইতিমধ্যে এটি কেবল একটি ফাংশন হিসাবে করেছেন।
mypetlion

ঠিক আছে, আপনার পথটি তাদের গল্ফ করে দেবে: ডি
জোনাথন অ্যালান

3

আর, 89 84 80 74 বাইট

f=pryr::f(c('Overweight','Normal','Underweight')[sum(w/h^2<c(18.5,25),1)])

স্টিভিগ্রিফিনের অক্টাভ উত্তরের নোটিশ দিয়ে স্ট্রিংয়ের একটি অ্যারে তৈরি করে, তার ফলাফলের যোগফল BMI < c(18.5,25)এবং +1 এ অ্যারে রেফারেন্স দেয়।

প্রথম যুক্তিটির উচ্চতা, তারপরে ওজন হওয়া দরকার; যদি এটি অনুমোদিত না হয়, তবে

f=pryr::f(w,h,c('Overweight','Normal','Underweight')[sum(w/h^2<c(18.5,25),1)])

আরও 4 বাইট জন্য কাজ করে।


2

Clojure, 63 বাইট

#(condp <(/ %(* %2 %2))25"Overweight"18.5"Normal""Underweight")

অভিশাপ। সর্বদা হিসাবে, আমি যা ভাবছিলাম তার এটি একটি সংক্ষিপ্ত সংস্করণ।
কারসিজিনিট

2

ডিসি , 58 বাইট

Fk[Ov]?2^/d[[Normal]pq][[Und]26]sasb18.5>a25>bn[erweight]p

বিন্যাসে 2 স্থান বিভাজিত সংখ্যা হিসাবে ইনপুট নেয় <mass> <height>। একটি পৃথক লাইনে একটি স্ট্রিং আউটপুট দেয়।

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

এই ব্যাখ্যার উদ্দেশ্যে, ইনপুটটি হ'ল 80 1

Fk                                                         # Set decimal precision to `16`.
  [Ov]                                                     # Push the string "Ov" onto the main stack.
                                                           # Main Stack: [[Ov]]
      ?2^/d                                                # Take and evaluate input, squaring the 2nd one, and the dividing by the first one by the 2nd. Then duplicate the result.
                                                           # Main Stack: [[Ov],80.000000000000000,80.000000000000000]
           [[Normal]pq][[Und]26]sasb                       # Push and store the executable macros "[Normal]pq" and "[Und]26" on registers "a" and "b", respectively.
                                                           # Main Stack: [[Ov],80.000000000000000,80.000000000000000], reg. a: [[[Normal]pq]], reg. b: [[[Und]26]]
                                    18.5>a25>b             # Push, "18.5" onto stack, and then pop top 2 values. If "18.5 > (top of stack)", then execute the macro on top of reg. "a", which in turn pushes the string "Und" onto the main stack followed by the number 26.
                                                           # The "26" will automatically prompt the next comparison to not execute the macro on top of reg. "b", regardless of the value on top of the main stack.
                                                           # Otherwise, if "18.5 <= (top of stack) < 25", then execute "b"s macro, which in turn pushes the string "Normal" onto the main stack, outputs it, then quits the program.
                                                           # In this case, Main stack: [[Ov]], reg. a: [[[Normal]pq]], reg. b: [[[Und]26]]
                                              n[erweight]p # If "Normal" has not been output, only then will the program get to this point. Here, it will output whatever string, either "Und" or "Ov", on top of the main stack, followed by "erweight" and a new line.

2

অক্টাভা, 64 বাইট

@(w,h){'Underweight','Normal','Overweight'}{3-sum(2*w/h^2<'%2')}

এটি অনলাইনে চেষ্টা করুন

এটি একটি অনামী ফাংশন যা দুটি ইনপুট আর্গুমেন্ট, h(উচ্চতা) এবং w(ওজন) নেয় takes

ফাংশনটি একটি সেল অ্যারে তৈরি করে যেখানে স্ট্রিংগুলি থাকে 'Underweight','Normal','Overweight'এবং স্ট্রিং নম্বর আউটপুট করে 3-sum(2*w/h^2<'%2')

হ্যাঁ, এটিকে কিছুটা অদ্ভুত লাগছে। আমরা প্রথম স্ট্রিংটি চাই, যদি w/h^2<=18.5দ্বিতীয় স্ট্রিংটি if (w/h^2 > 18.5) & (w/h^2 < 25)এবং তৃতীয় স্ট্রিং যদি উপরের শর্তগুলির মধ্যে কোনওটি সত্য না হয়। গুচ্ছ তুলনা তৈরি করার পরিবর্তে, আমরা কেবল স্ট্রিংটির সাথে তুলনা করতে পারলাম: w/h^2 < [18.5, 25]যা নিম্নলিখিত অ্যারেগুলির মধ্যে একটি ফেরত দেবে[1 1], [0 1], [0,0] যথাক্রমে আন্ডারওয়েট, সাধারণ এবং অতিরিক্ত ওজনের জন্য ।

[18.5,25]9 বাইট লাগে, যা অনেক বেশি। পরিবর্তে আমরা যা করি তা হ'ল বিএমআইকে 2 দিয়ে গুণ করে এবং ফলাফলটির সাথে [37, 50]বা '%2'এএসসিআইআইতে তুলনা করে । এটি তিনটি বাইট সংরক্ষণ করে।


2

পার্ল 6 , 59 বাইট

{<Overweight Normal Underweight>[sum 18.5,25 X>$^a/$^b**2]}

কিভাবে এটা কাজ করে

{                                                         }  # A lambda.
                                               $^a/$^b**2    # Compute BMI from arguments.
                                     18.5,25 X>              # Compare against endpoints.
                                 sum                         # Add the two booleans together.
 <Overweight Normal Underweight>[                        ]   # Index into hard-coded list.

খুব খারাপ স্ট্রিংটি erweightপুনরাবৃত্তি করতে হবে, তবে সামগ্রিক বাইট গণনা বৃদ্ধি না হওয়া পর্যন্ত এড়াতে আমি চেষ্টা করেছি সমস্ত প্রকারভেদ:

  • স্ট্রিং প্রতিস্থাপনের সাথে, 62 বাইট:

    {<Ov_ Normal Und_>[sum 18.5,25 X>$^a/$^b**2].&{S/_/erweight/}}
  • স্ট্রিং ইন্টারপোলেশন সহ, 67 বাইট:

    {$_='erweight';("Ov$_","Normal","Und$_")[sum 18.5,25 X>$^a/$^b**2]}
  • এক্সনোর পাইথন দ্রবণটির রুক্ষ অনুবাদ , 65 বাইট:

    {$_=$^a/$^b**2;25>$_>=18.5??"Normal"!!<Und Ov>[$_>19]~"erweight"}

2

পাওয়ারশেল , 81 বাইট

param($m,$h)('Underweight','Normal','Overweight')[(18.5,25-lt($m/($h*$h))).Count]

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

মূল বিট যা ব্যাখ্যা করা দরকার তা হ'ল 18.5,25 -lt $b(যেখানে আমি বিএমআইয়ের $bজন্য প্রতিস্থাপন করছি যা কোডের স্থলে গণনা করা হয়)। পাওয়ারশেলের বেশিরভাগ অপারেটর, যখন বাম দিকে কোনও অ্যারে দেওয়া হয়, তখন বুলিয়ান মানটি ফেরত না দিয়ে পরীক্ষাগুলি পূরণ করে এমন আইটেমের একটি অ্যারে ফেরত দেয়। সুতরাং এটি একটি শূন্য অ্যারেটি $b18.5 এর চেয়ে ছোট হলে ফিরে আসবে , এটির মাঝখানে থাকলে কেবলমাত্র 18.5 রয়েছে এবং এটি 25 এর চেয়ে বড় হলে 18.5 এবং 25 উভয়ই থাকে ray

আমি স্ট্রিংগুলির একটি অ্যারেতে সূচি হিসাবে উপাদানগুলির গণনাটি ব্যবহার করি, সুতরাং গণনাটি 0উপাদান পায় 0যা হয় 'Underweight'ইত্যাদি



2

পাইথন, 75 74 বাইট

lambda h,w:18.5<=w/h/h<=25and"normal"or["ov","und"][25>w/h/h]+"erwe‌​ight"

এটি অনলাইন চেষ্টা করুন!

মোটামুটি মৌলিক সমাধান যা এটি সমাধান করার জন্য অন্যান্য ব্যক্তির কৌশলগুলির সুবিধা নেয়।

বাইট বাঁচানোর জন্য @ ওভসকে ধন্যবাদ।

বিকল্প

1. 73 বাইট

lambda h,w:"normal"if 18.5<=w/h/h<=25 else"uonvd"[25<w/h/h::2]+"erweight"

আমি এটিকে প্রত্যাখ্যান করেছি কারণ এটি আমি দেখেছি এমন অন্য উত্তরটির সাথে খুব মিল similar

2. 71 বাইট

lambda h,w:"normal"if 18.5<w/h/h<25 else"uonvd"[25<w/h/h::2]+"erweight"

আমি এই কারণ প্রত্যাখ্যাত, প্রশ্নে সমস্ত পরীক্ষার কাজ সত্ত্বেও, কিছু সংখ্যার এটা যেমন অনুপস্থিত উপর ব্যর্থ হতে পারে হয় =মধ্যে <=


আপনার 25এবং else- এর মধ্যে স্থানের দরকার নেই তবে যাইহোক, শর্ট সার্কিট ব্যবহার করে and/or(যেমন @ মন্তব্য করা হয়েছে) সংক্ষিপ্ত।
ফ্লিপট্যাক

@FlipTack: মধ্যে স্থান সংক্রান্ত 25এবং else, আপনি স্পষ্টভাবে না প্রয়োজন কিছু (? সবচেয়ে) (CPython, IIRC সহ) দোভাষীর সঙ্গে। আপনি যেমন লেখেন, তাহলে 25else, 25eশুরু হিসেবে ব্যাখ্যা করা হয় একটি বৈজ্ঞানিক-স্বরলিপি সাংখ্যিক আক্ষরিক এবং অনুবাদক তারপর baulks যখন কোনো নিম্নলিখিত ডিজিটের হয়।
ম্যাক

2

সি #, 63 62 61 বাইট

TheLethalCoder ধন্যবাদ আরো 1 বাইট সংরক্ষণ করা

বেনামে ব্যবহারকারীর জন্য 1 বাইট সংরক্ষণ করা হয়েছে।

w=>h=>w/h/h<18.5?"Underweight":w/h/h<25?"Normal":"Overweight";

একটি দুর্দান্ত সোজা বেনাম ফাংশন। পুরো কৌশলটি ফিরে আসার জন্য টের্নারি অপারেটরটি ব্যবহার করছে (এইভাবে বাদ দিয়েreturn কীওয়ার্ড, কোঁকড়া ধনুর্বন্ধনী একজোড়া এবং একটি ভেরিয়েবল ডিক্লেয়ারেশন এবং অ্যাসাইনমেন্ট) দেওয়া)।

পরীক্ষার কেস সহ সম্পূর্ণ প্রোগ্রাম:

using System;

class BodyMassIndex
{
    static void Main()
    {
        Func<double, Func<double, string>> f =
        w=>h=>w/h/h<18.5?"Underweight":w/h/h<25?"Normal":"Overweight";

        // test cases:
        Console.WriteLine(f(80)(1));  // "Overweight"
        Console.WriteLine(f(80)(2));  // "Normal"
        Console.WriteLine(f(80)(3));  // "Underweight"
        Console.WriteLine(f(50)(1));  // "Overweight"
        Console.WriteLine(f(50)(1.5));  // "Normal"
        Console.WriteLine(f(50)(2));  // "Underweight"
    }
}

2

কমন লিস্প, 89 87 85 84 83 বাইট

একটি অনুষ্ঠান:

(lambda(w h)(if(< #1=(/ w(* h h))18.5)'underweight(if(< #1#25)'normal'overweight)))

ব্যবহারের উদাহরণ:

((lambda(w h)(if(< #1=(/ w(* h h))18.5)'underweight(if(< #1#25)'normal'overweight)))150 2)

এটি অনলাইন চেষ্টা করুন! (আমি টিআইওতে আউটপুট দেখতে মুদ্রণ ফাংশন যুক্ত করেছি)

উন্নতির জন্য আদর্শ স্বাগত জানানো হয়।


2

এমএটিএল, 54 45 44 42 বাইট

U/E'%2'<sqt?q?'ov'}'und']'erweight'h}x17Y0

এটি matl.suever.net এ চেষ্টা করুন

BMI গণনা করে এটি দ্বিগুণ করে শুরু হয় U\E, তারপরে [37 50]স্ট্রিং আক্ষরিক '% 2' দিয়ে ভেক্টর তৈরি করে । এই ভেক্টরকে তাহলে BMI তুলনা এবং যদি বিবৃতি, উত্তর পেতে সুবিধার সুযোগ গ্রহণ করতে ব্যবহার normalএকটি পূর্বনির্ধারিত আক্ষরিক যেমন 17Y0


আপনি প্রতিস্থাপন করতে পারেন [BC]UQসঙ্গে '%2'এবং 2 বাইট সংরক্ষণ করুন।
- মনিকা

1

জাভা 8, 61 বাইট

w->h->w/h/h<18.5?"Underweight":w/h/h<25?"Normal":"Overweight"

এটিকে বরাদ্দ করুন DoubleFunction<DoubleFunction<String>>এবং এভাবে কল করুন:

bmi.apply(50).apply(1.5)

আপনি পুনঃব্যবহার পর এক বাইট অনাবশ্যক করতে পারেন w: w->h->(w/=h*h)<18.5?"Underweight":w<25?"Normal":"Overweight"
অলিভিয়ার গ্রাগোয়ার

@ অলিভিয়ার গ্রাগোয়ার নোপ :( ডাব্লু Error: local variables referenced from a lambda expression must be final or effectively final
ডেভিড কনরাড

1
ওহ ... আমি ইনলাইনড স্টাফগুলির সাথে চেক করেছিলাম int w = ... , h = ... ; System.out.println((w/=h*h)<18.5?"Underweight":w<25?"Normal":"Overweight"), দুঃখিত, :)
অলিভিয়ের

@ অলিভিয়ারগ্রোওয়ের কোন সমস্যা নেই আমি চাই জাভা এটির অনুমতি দেয়।
ডেভিড কনরাড

1

ডিসি , 64 বাইট

[erweight][[Und]PszPq]su[[Normal]Pq]sn9k?d*/d18.5>ud25>n[Ov]PszP

এটি অনলাইন চেষ্টা করুন!


ধূর! আমাকে কয়েক সেকেন্ডের মধ্যে মারবে। আমি আমার পোস্ট করতে চলেছি, যতক্ষণ না আমি এটি দেখেছি। যাইহোক, এখানে অন্য 64 বাইট এর জবাব হচ্ছে, 3k[Overweight]??2^/dsp[[Normal]][[Underweight]]sasb25>blp18.5>ap
আর কাপ,

@ আর.ক্যাপ আপনি যে কোনও প্রশ্নের চিহ্ন বাদ দিয়ে আসলে আমার চেয়ে নিজের চেয়ে আরও কম বাইট হতে পারেন।
মিচেল স্পেক্টর

হ্যাঁ, আমি ভুলে গিয়েছিলাম যে আমি এটি করতে পারি could আপনি চাইলে এটি নিজের হিসাবে পোস্ট করতে পারেন।
আর কাপ,

না, এটি ভাল - এগিয়ে যান এবং নিজে পোস্ট করুন, এটি আপনার সমাধান। (আপনি চাইলে আমাকে এক বাইটের জন্য ক্রেডিট করতে পারেন))
মিশেল স্পেক্টর

যাইহোক, আমি এটি 58 ​​বাইটে নামাতে সক্ষম হয়েছি। :)
আর কাপ,


1

সুইফট, 97 বাইট

{(w:Float,h)->String in return 18.5<=w/h/h&&w/h/h<25 ?"normal":"\(w/h/h>25 ?"ov":"und")erweight"}

1

জাপট , 46 বাইট

/=V²U<25©U¨18½?`NŽµl`:ºU<19?`U˜`:"Ov")+`€³ight

এটি অনলাইন চেষ্টা করুন!

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

ব্যাখ্যা

/=V²U<25©U¨18½?`NŽµl`:ºU<19?`U˜`:"Ov")+`€³ight  

সংকোচনের জন্য:

U=U/V**2,U<25&&U>18.5?"Normal":(U<19?"Und":"Ov")+"erweight"

জাপ্টের একটি অন্তর্নিহিত ইনপুট রয়েছে U। দ্বিতীয় ইনপুট হয় V

স্টপ সংক্ষেপণের জন্য জাপট শোক লাইব্রেরি ব্যবহার করে । ব্যাকটিকগুলি স্ট্রিংগুলি সংক্ষেপিত করতে ব্যবহৃত হয়।

ইউনিকোড শর্টকাট ব্যবহৃত:

² : **2
© : &&
¨ : >=
½ : .5
º : ((



আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.