মাত্রা বিশ্লেষণ


15

এসআই ইউনিটের একটি পণ্য বা অনুপাত গণনা করুন।

উদাহরণস্বরূপ, kg m / s s(প্রতি বর্গক্ষেত্রে কিলোগ্রাম-মিটার) ফিরে আসা উচিত N(নিউটন)।

ইনপুট সর্বদা হয় হবে:

  • এসআই ইউনিটের প্রতীকগুলির একটি তালিকা, স্থান-বিচ্ছিন্ন (কোনও পণ্য প্রতিনিধিত্ব করে) বা
  • উপরের, /এবং উপরের (অনুপাতের প্রতিনিধিত্ব করে)।

ইনপুটটিতে কখনই অন্য কোনও অক্ষর থাকবে না (যেমন সংখ্যাসূচক বা অন্যান্য বিরামচিহ্ন)।

আপনি ধরে নিতে পারেন যে এটি সর্বদা একটি একক এসআই ইউনিটের সমান হবে।

নিম্নলিখিত চিহ্নগুলি ব্যবহার করুন:

Base quantities:
s               # second
m               # meter
kg              # kilogram
A               # ampere

Derived quantities:
N  = kg m / s s # newton
J  = N m        # joule
W  = J / s      # watt
Hz = W / J      # hertz
Pa = N / m m    # pascal
C  = s A        # coulomb
V  = J / C      # volt
F  = C / V      # farad
Ω  = V / A      # ohm      (you may use the O symbol instead, for a penalty of +3 bytes)
S  = A / V      # siemens
Wb = J / A      # weber
T  = Wb / m m   # tesla
H  = Wb / A     # henry

উদাহরণ:

m            => m
N m          => J
J / W        => s
A J / W      => C
T m m        => Wb
N / A m      => T
V s / A      => H
J S / F A    => V
s / s s      => Hz
Hz kg m Hz   => N
Hz s / Ω     => S
Wb / H       => A
V Pa S s / C => Pa
N s / m Hz   => kg
V A          => W
s / Ω        => F
J / A s A    => Ω

সংক্ষিপ্ততম কোড (বাইটে) জয়ী।


2
kg m / s sপ্রকৃতপক্ষে প্রতি সেকেন্ডে কিলোগ্রাম-মিটার-সেকেন্ড বা কিলোগ্রাম-মিটার হবে। গুণ ও বিভাগের কাজ এলটিআর। আপনি যা খুঁজছেন তা হ'ল kg m / (s s)। এটি অন্যান্য উদাহরণগুলিতেও প্রযোজ্য।
LegionMammal978

@ লেজিওন: অগত্যা নয়। স্ল্যাশের সাথে অন্তর্নিহিত গুণ এবং বিভাজন অস্পষ্ট; অর্ডার কনভেনশন উপর নির্ভর করে। এখানে অন্তর্নিহিত গুণকে বিভাগের চেয়ে উচ্চতর অগ্রাধিকার হিসাবে গ্রহণ করা হয়।
দেউসোভি

2
... যে সমস্ত গণিত সম্পর্কে ভাঙ্গা। সুস্পষ্ট এবং স্পষ্টত গুণের অর্থ হুবহু একই জিনিস।
LegionMammal978

পছন্দ করুন না 1 / 2xসত্যিই মানে x / 2?
Ypnypn

5
@ লিজিয়নম্যামাল978 - আসলে, 1 / 2x 1 / (2x) এর জন্য সাধারণ স্বরলিপি। আরও সাধারণভাবে, যেখানে এটি অস্পষ্ট নয়, স্ল্যাশকে সংখ্যক এবং ডিনোমিনেটরের মধ্যে বিভাজক রেখা হিসাবে ব্যাখ্যা করা হবে। এখানে ব্যবহৃত কনভেনশনটি ভাল - বিশেষ করে কারণ এই সম্মেলনটি ইউনিটে মানসম্পন্ন । ইউনিট হিসাবে লেখার সময় কেজি / এমএস অর্থ কেজি / (এম * গুলি)। ম্যাথসে পিএইচডি করা লোকের কাছ থেকে এটি নিন।
গ্লেন ও

উত্তর:


7

সিজেম, 184 105 98 96 বাইট

00000000: 22 73 20 6d 20 6b 67 41 20 4e 20 4a 20 57 20 48  "s m kgA N J W H     
00000010: 7a 50 61 43 20 56 20 46 20 ce a9 53 20 57 62 54  zPaC V F ..S WbT     
00000020: 20 48 22 32 2f 53 66 2d 22 d6 9c 64 c6 a1 24 a4   H"2/Sf-"..d..$.     
00000030: 4b f9 1c 4a 57 f4 61 79 31 ed 82 34 22 33 31 38  K..JW.ay1..4"318     
00000040: 62 35 62 32 66 6d 34 2f 6c 53 25 32 24 32 24 65  b5b2fm4/lS%2$2$e
00000050: 72 22 2f 22 61 2f 3a 3a 2e 2b 3a 2e 2d 61 23 3d  r"/"a/::.+:.-a#=

উপরেরটি হেক্সডাম্প; এটি বিপরীত হতে পারে xxd -r

সিজেএম ইন্টারপ্রেটারে একবারে সমস্ত পরীক্ষার কেস যাচাই করুন । 1

টেস্ট রান

$ LANG=en_US
$ cjam si.cjam <<< 'Hz s / Ω'; echo
S
$ cjam si.cjam <<< 'J / A s A'; echo
Ω

ধারণা

আমরা এনকোড করতে প্রতিটি ইউনিট তোমার দর্শন লগ করা = গুলি একটি মিটার কেজি একজন বাহক হিসেবে টি U = (ক + C - D, B, C, ঘ)2

এইভাবে, ইনপুটটির জন্য ইউ 1 … ইউ এন / ভি 1 … ভি এম , আমাদের কেবল গণনা করতে হবে (টি ইউ 1 +… + টি ইউ এন ) - (টি ভি 1 +… + টি ভি এম ) এবং কোন ইউনিটটি পরীক্ষা করতে হবে এটি অনুরূপ।

কোড

"s m kgA N J W HzPaC V F ΩS WbT H"

2/     e# Split the string into chunks of length 2.
Sf-    e# Remove all spaces (if any) from each chunk.

"ÖdÆ¡$¤KùJWôay1í4"

318b   e# Convert from base 318 to integer.
5b     e# Convert from integer to base 5.
2fm    e# Subtract 2 from each base-5 digit.
4/     e# Split into chunks of length 4.
lS%    e# Read one line of input sand split it at spaces.
2$2$   e# Copy the unit names and the vector table.
er     e# Perform transliteration.
"/"a/  e# Split at "/".
::.+   e# Add the vectors of numerator and denominator (if any).
:.-    e# Subtract the resulting sums (or leave a single sum untouched).
a#     e# Find the index of the resulting vector in the vector table.
=      e# Retrieve the corresponding unit.

1 দ্রষ্টব্য, অনলাইন দোভাষী দের সীমাবদ্ধতার কারণে আমি উত্স কোড এবং I / O এর জন্য আলাদা এনকোডিং ব্যবহার করতে পারি না। সুতরাং, প্রতীক its এটির ইউটিএফ -8 এনকোডিং (Î ©) হিসাবে প্রদর্শিত হবে। সরকারী জাভা দোভাষী এই সীমাবদ্ধতা ভাগ করে না।
2 এটি (ক, খ, সি, ডি) এ সরল ম্যাপিংয়ের তুলনায় কয়েকটি বাইট সাশ্রয় করে , কারণ এটি প্রথম স্থানাঙ্কের পরিসরকে ছোট করে।


6

জিএনইউ সেড, 1118

পথ অনেক দীর্ঘ তবে কাজটি হয়ে যায়।

-rস্কোরটিতে সিড করার বিকল্পের জন্য +1 অন্তর্ভুক্ত রয়েছে । যেন এটি এখানে গুরুত্বপূর্ণ। স্কোর মন্তব্যগুলি বাদ দেয়।

### convert 2-letter units to 1-letter substitutes
s/kg/k/g
s/Hz/z/g
s/Pa/P/g
s/Wb/b/g
### remove spaces
s/ //g
### start label for main loop to render all in terms of base units
:
### convert N in denominator to s s / kg m
s|/(.*)N|ss/\1km|;t
### convert N in numerator to kg m / ss
s|N(.*)/|\1km/ss|;t
### convert N in non-rational to kg m / ss
s|N(.*)|\1km/ss|;t
### ... etc for all other derived units
s|/(.*)J|ss/\1kmm|;t
s|J(.*)/|\1kmm/ss|;t
s|J(.*)|\1kmm/ss|;t
s|/(.*)W|sss/\1kmm|;t
s|W(.*)/|\1kmm/sss|;t
s|W(.*)|\1kmm/sss|;t
s|/(.*)z|s/\1|;t
s|z(.*)/|\1/s|;t
s|z(.*)|\1/s|;t
s|/(.*)P|mss/\1k|;t
s|P(.*)/|\1k/mss|;t
s|P(.*)|\1k/mss|;t
s|C|sA|;t
s|/(.*)V|sssA/\1kmm|;t
s|V(.*)/|\1kmm/sssA|;t
s|V(.*)|\1kmm/sssA|;t
s|/(.*)F|kmm/\1ssssAA|;t
s|F(.*)/|\1ssssAA/kmm|;t
s|F(.*)|\1ssssAA/kmm|;t
s|/(.*)Ω|sssAA/\1kmm|;t
s|Ω(.*)/|\1kmm/sssAA|;t
s|Ω(.*)|\1kmm/sssAA|;t
s|/(.*)S|kmm/\1sssAA|;t
s|S(.*)/|\1sssAA/kmm|;t
s|S(.*)|\1sssAA/kmm|;t
s|/(.*)b|ssA/\1kmm|;t
s|b(.*)/|\1kmm/ssA|;t
s|b(.*)|\1kmm/ssA|;t
s|/(.*)T|ssA/\1k|;t
s|T(.*)/|\1k/ssA|;t
s|T(.*)|\1k/ssA|;t
s|/(.*)H|ssAA/\1kmm|;t
s|H(.*)/|\1kmm/ssAA|;t
s|H(.*)|\1kmm/ssAA|;t
### cancel out any units appearing in both numerator and denominator
s|(.)(.*/.*)\1|\2|;t
### remove trailing slash when rational cancels down to non-rational
s|/$||
### sort numerator and denominator kg > m > s > A
:A;s|([^/A])A|A\1|;tA
:s;s|([^/s])s|s\1|;ts
:m;s|([^/m])m|m\1|;tm
:k;s|([^/k])k|k\1|;tk
### Final replacements back to derived units
s|kmm/sssAA|Ω|
s|kmm/sssA|V|
s|kmm/sss|W|
s|kmm/ssAA|H|
s|kmm/ssA|Wb|
s|kmm/ss|J|
s|km/ss|N|
s|k/mss|Pa|
s|k/ssA|T|
s|/s|Hz|
s|ssssAA/kmm|F|
s|sssAA/kmm|S|
s|sA|C|
s/k/kg/

3

জাভাস্ক্রিপ্ট ES6, 479 বাইট

f=(s,b="s, m, gk, A, gkm,ss gkmm,ss gkmm,sss gkmm,AAss gk,mss As, gkmm,Asss AAssss,gkmm gkmm,AAsss AAsss,gkmm gkmm,Ass gk,Ass ,s".split` `,d="s m kgA N J W H PaC V F Ω S WbT Hz",p=s.split` / `.map(i=>i.split` `.map(i=>b[d.indexOf(i)/2].split`,`).reduce((p,c)=>(p[0]+=c[0],p[1]+=c[1],p),[[],[]])))=>(p[1]&&(p[0][0]+=p[1][1],p[0][1]+=p[1][0]),[x,y]=p[0].map(i=>[...i].sort().join``),d.match(/../g)[b.indexOf([...x].reduce((p,c)=>(y==(n=y.replace(c,""))&&(p+=c),y=n,p),"")+","+y)])

Ungolfed:

f=(s,                                              // define function, accept string to calculate
                                                   // vvv derived quantities reduced to base quantities in the form of <numerator>,<denominator>
   b="s, m, gk, A, gkm,ss gkmm,ss gkmm,sss gkmm,AAss gk,mss As, gkmm,Asss AAssss,gkmm gkmm,AAsss AAsss,gkmm gkmm,Ass gk,Ass ,s".split` `,
   d="s m kgA N J W H PaC V F Ω S WbT Hz",         // symbols list
   p=s.split` / `                                  // split input into [numerator,denominator]
      .map(i=>i.split` `                           // split numerator and denominator strings into list of symbols
               .map(i=>b[d.indexOf(i)/2].split`,`) // convert symbols to their base quantities
               .reduce((p,c)=>(p[0]+=c[0],p[1]+=c[1],p),[[],[]])) // consolidate base quantities
  )=>(
    p[1]&&(p[0][0]+=p[1][1],p[0][1]+=p[1][0]),     // if input was in form of numerator / denominator, reduce to numerator / 1
    [x,y]=p[0].map(i=>[...i].sort().join``),       // sort base quantities in numerator and denominator strings
    d.match(/../g)[b.indexOf(                      // derive symbol from base quantities
        [...x].reduce((p,c)=>(y==(n=y.replace(c,""))&&(p+=c),y=n,p),"")+","+y // remove duplicate symbols from numerator and denominator
  )])

পরীক্ষা চালানো:

>> ["m","N m","J / W","A J / W","T m m","N / A m","V s / A",
    "J S / F A","s / s s","Hz kg m Hz","Hz s / Ω","Wb / H",
    "V Pa S s / C","N s / m Hz","V A","s / Ω","J / A s A"]
     .forEach(i=>console.log((i+" ".repeat(12)).slice(0,12)+"  ->  "+f(i)))

<< m             ->  m 
   N m           ->  J 
   J / W         ->  s 
   A J / W       ->  C 
   T m m         ->  Wb
   N / A m       ->  T 
   V s / A       ->  H 
   J S / F A     ->  V 
   s / s s       ->  Hz
   Hz kg m Hz    ->  N 
   Hz s / Ω      ->  S 
   Wb / H        ->  A 
   V Pa S s / C  ->  Pa
   N s / m Hz    ->  kg
   V A           ->  W 
   s / Ω         ->  F 
   J / A s A     ->  Ω 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.