เครื่องแปลงอุณหภูมิ


38

นี่คือความท้าทายขนาดไบต์ที่คุณต้องแปลงอุณหภูมิอินพุตในหนึ่งในสามหน่วย (เซลเซียสเคลวินและฟาเรนไฮต์) เป็นอีกสอง

อินพุต

คุณจะได้รับอุณหภูมิเป็นตัวเลขตามด้วยหน่วย (คั่นด้วยช่องว่าง) อุณหภูมิสามารถเป็นจำนวนเต็มหรือเลขทศนิยม (23 vs 23.0 หรือ 23.678)

คุณสามารถส่งฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบที่อ่านสตริงที่คั่นด้วยช่องว่างจากอาร์กิวเมนต์ STDIN / ARGV / ฟังก์ชั่นหรือเทียบเท่าที่ใกล้เคียงที่สุดและพิมพ์ผลลัพธ์ไปยัง STDOUT หรือเทียบเท่าที่ใกล้เคียงที่สุด

เอาท์พุต

เอาต์พุตของคุณควรเป็นอุณหภูมิที่แปลงเป็นอีกสองรูปแบบโดยคั่นด้วยบรรทัดใหม่และตามด้วยอักขระหน่วยที่สอดคล้องกันในแต่ละบรรทัด (คั่นด้วยทางเลือกด้วยช่องว่าง) คำสั่งของทั้งสองหน่วยไม่สำคัญ

ความแม่นยำเอาต์พุต

  • ตัวเลขที่แปลงควรมีความแม่นยำถึงทศนิยมอย่างน้อย 4 ตำแหน่งโดยไม่ปัดเศษ
  • เลขศูนย์ต่อท้ายหรือจุดทศนิยมจะเป็นตัวเลือกตราบเท่าที่ตำแหน่งทศนิยม 4 ตำแหน่งแรก (ไม่ปัดเศษ) มีความแม่นยำ นอกจากนี้คุณยังสามารถข้ามศูนย์ 4 และ / หรือจุดทศนิยมในกรณีที่คำตอบที่แท้จริงมี 4 ศูนย์หลังจุดทศนิยม
  • ไม่ควรมีศูนย์นำหน้า
  • รูปแบบตัวเลขใด ๆ ที่ยอมรับได้ตราบเท่าที่เป็นไปตามข้อกำหนดสามข้อข้างต้น

ตัวแทนหน่วย

หน่วยของอุณหภูมิสามารถเป็นหนึ่งในสิ่งต่อไปนี้:

  • C สำหรับเซลเซียส
  • K สำหรับเคลวิน
  • F สำหรับฟาเรนไฮต์

ตัวอย่าง

การป้อนข้อมูล:

23 C

เอาท์พุท:

73.4 F
296.15 K

การป้อนข้อมูล:

86.987 F

เอาท์พุท:

303.6983 K
30.5483 C

การป้อนข้อมูล:

56.99999999 K

เอาท์พุท:

-216.1500 C
-357.0700 F

นี่เป็นสั้นที่สุดที่จะชนะ! มีความสุขในการเล่นกอล์ฟ!

ลีดเดอร์บอร์ด

<script>site = 'meta.codegolf',postID = 5314,isAnswer = true,QUESTION_ID = 50740</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)<\\/code><\/pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>


ฉันถือว่าผลลัพธ์สามารถอยู่ในลำดับใดก็ได้ มันเป็นที่ยอมรับสำหรับทั้งสามรูปแบบที่จะส่งออกตัวอย่างเช่น23C\n73.4F\n296.15K ? หรือต้องยกเลิกรูปแบบอินพุตหรือไม่
ระดับแม่น้ำเซนต์

@stververill บิตคำสั่งที่กล่าวถึงในส่วนเอาท์พุท คุณต้องแสดงผลอีกสองรูปแบบเท่านั้น
เครื่องมือเพิ่มประสิทธิภาพ

เกี่ยวกับความแม่นยำของเอาต์พุต: 2/3=> 0.666666666666ถูกต้องถึงตัวเลขที่ 4? (ฉันพูดว่าใช่) หรือควรจะเป็น0.6667?
edc65

@ edc65 0.666666666666ถูกต้อง ฉันบังคับใช้ความแม่นยำที่ไม่มีการปัดเศษ เพื่อ0.6666เป็นทางเลือก
เครื่องมือเพิ่มประสิทธิภาพ

1
@Dennis ในผลลัพธ์ไม่มีกฎในการพิมพ์ช่องว่างหรือไม่ แต่มันจะปรากฏในอินพุต
เครื่องมือเพิ่มประสิทธิภาพ

คำตอบ:


13

CJam, 77 65 60 59 55 54 52 ไบต์

l~2|"459.67+1.8/'K 273.15-'C 1.8*32+'F"S/m<{~N2$}%6<

ลองใช้ออนไลน์ในล่าม CJam

มันทำงานอย่างไร

l~    e# Read and evaluate the input: F, K, C -> 15, 20, 12
2|    e# Bitwise OR with 2: F, K, C -> 15, 22, 14 = 0, 1, 2 (mod 3)

"459.67+1.8/'K 273.15-'C 1.8*32+'F"S/

      e# Push ["459.67+1.8/K" "273.15-C" "1.8*32+F"].
      e# These commands convert from F to K, K to C and C to F.

m<    e# Rotate the array of commands by 15, 22 or 14 units to the left.
{     e# For each command:
  ~   e#     Execute it.
  N   e#     Push a linefeed.
  2$  e#     Copy the temperature for the next iteration.
}%    e# Collect all results in an array.
6<    e# Keep only the first 8 elements.

32

Python 3, 118 116 ไบต์

I=input()
t=eval(I[:-1])
u=ord(I[-1])%7
exec("u=-~u%3;t=[t*1.8-459.67,(t-32)/1.8,t+273.15][u];print(t,'FCK'[u]);"*2)

ทำการแปลงในลำดับแบบหมุนK -> F -> C -> Kสองครั้ง


43
'FCK'[u]ต้องรัก
Alex A.

11
ฮ่าฮ่าห่าอะไรนะ โหวตคำถามและคำตอบไม่ใช่ความคิดเห็นที่เป็นใบ้ของฉัน : P
Alex A.

10

JavaScript ( ES6 ), 127 130 132ไบต์

รอคำตอบที่น่าอัศจรรย์บางอย่างฉันไม่ได้ไปเล่นกอล์ฟที่นี่มากนัก

การใช้สตริงแม่แบบบรรทัดใหม่ 3 รายการมีความสำคัญและนับ

เรียกใช้ส่วนย่อยใน Firefox เพื่อทดสอบ

F=x=>([t,u]=x.split(' '),z=273.15,y=9/5,u<'F'?`${t*y+32} F
${+t+z} K`:u<'K'?`${t=(t-32)/y} C
${t+z} K`:`${t-=z} C
${t*y+32} F`)

// Predefined tests

;['23 C','86.987 F','56.99999999 K']
.forEach(v=>O.innerHTML += v+' ->\n'+F(v)+'\n\n')
<input id=I><button onclick='O.innerHTML=F(I.value)'>-></button><br>
<pre id=O></pre>


7

Pip, 58 57 ไบต์

Ft"CFK"RMbP(a-(o:[32i273.15]Ab%7))*$/95@A[tb]+(oAt%7).s.t

รับอินพุตจากอาร์กิวเมนต์บรรทัดรับคำสั่ง

ฟอร์แมตและไม่อัปโหลดเล็กน้อย:

o:[32 0 273.15]
F t ("CFK" RM b)
  P (a - o@(Ab % 7))
    * "95"@At / "95"@Ab
    + o@(At%7)
    . s . t

คำอธิบาย:

สูตรการแปลงทั่วไประหว่างหน่วยที่ 1 และ 2 temp2 = (temp1 - offset1) * mult2 / mult1 + offset2หน่วยคือ ออฟเซ็ตอาจเป็นศูนย์สัมบูรณ์หรืออุณหภูมิที่สะดวกสบายอื่น ๆ ลองใช้ 0 ° C

หน่วยมัลติออฟเซ็ต
C 5 0     
K 5 273.15
F 9 32    

เราจะสร้างรายการของค่าเหล่านี้และจัดทำดัชนีตามหน่วยที่เราจัดการ Pip ไม่มีอาเรย์เชื่อมโยง / แฮช / พจนานุกรมดังนั้นเราจำเป็นต้องแปลงอักขระเป็นดัชนีจำนวนเต็ม อาจมีรูปแบบที่เป็นประโยชน์กับค่า ASCII

หน่วย Asc A% 2 Mult A% 7 A% 7% 3 Offset
C 67 1 5 4 1 0
K 75 1 5 5 2 273.15
F 70 0 9 0 0 32

สิ่งนี้ดูมีแนวโน้ม อีกหนึ่งข้อเท็จจริงที่เป็นประโยชน์เพิ่มเติม: ดัชนีใน Pip รอบ ๆ ดังนั้นเราจึงไม่จำเป็นต้องใช้%3ตราบเท่าที่เรากำลังจัดทำดัชนีเป็นอะไรที่มีความยาว 3. การกำหนดo:[32 0 273.15]และการใช้(o (Ab)%7)จะเป็นการหลอกลวง ( Aรับค่า ASCII ของอักขระ(l i)ไวยากรณ์ถูกใช้สำหรับการจัดทำดัชนีเป็น iterables รวมถึงการเรียกใช้ฟังก์ชัน)

สำหรับตัวคูณเราต้องการเพียงตัวเลขสองตัวคือ 9 และ 5 เนื่องจากตัวเลขนั้นเหมือนกันกับสตริงใน Pip และทำให้สามารถทำดัชนีได้การคูณจึงง่ายเหมือน95@Ab(โดยใช้วิธีการทำดัชนีตัว@ดำเนินการอื่น)

ด้วยการใช้คุณสมบัติการเขียนโปรแกรมอาร์เรย์ของ Pip เราสามารถบันทึกตัวละครผ่านวิธีการที่ไร้เดียงสา:

95@At/95@Ab
$/95@A[tb]    Make a list of t and b, apply 95@A(...) to each item, and fold on /

ในที่สุดเพิ่มการชดเชยสำหรับหน่วยใหม่เชื่อมต่อพื้นที่และสัญลักษณ์ของหน่วยใหม่ไปยังจุดสิ้นสุดและพิมพ์

เราทำสิ่งนี้tใน"CFK" RM bแต่ละหน่วยดังนั้นจึงแปลงเป็นหน่วยแต่ละหน่วยยกเว้นต้นฉบับ

ตัวอย่างการร้องขอ:

C:\Golf> pip.py tempConv.pip 86.987 F
30.548333333333332 C
303.6983333333333 K

(สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Pip ดูที่เก็บข้อมูล )


6

dc, 102 ไบต์

ฉันค่อนข้างมั่นใจว่านี่สามารถเล่นกอล์ฟได้มากขึ้น แต่นี่เป็นการเริ่มต้น:

4k[9*5/32+dn[ F
]n]sf[459.67+5*9/dn[ K
]n]sk[273.15-1/dn[ C
]n]sc[rlfxlkxq]sC[lkxlcxq]sF?dC=CF=Flcxlfx

dc แทบจะไม่ทำให้คะแนนในเรื่องนี้ การจัดการสตริง dc โดยเฉพาะนั้นไม่ได้ขึ้นอยู่กับงาน แต่สิ่งที่เราต้องทำคือแยกความแตกต่างระหว่าง "C", "F" และ "K" โชคดีที่แยกวิเคราะห์ "C" และ "F" เป็นเลขฐานสิบหก 12 และ 15 และสำหรับ "K" จะเหลือ 0 ในสแต็ก

เอาท์พุท:

$ dc -f tempconv.dc <<< "23 C"
73.4000 F
296.1500 K
$ dc -f tempconv.dc <<< "86.987 F"
303.6983 K
30.5483 C
$ dc -f tempconv.dc <<< "56.99999999 K"
-216.1500 C
-357.0700 F
$

5

C, 160 ไบต์

float v,f[]={1,1.8,1},d[]={0,32,273.15};u,t,j;main(){scanf("%f %c",&v,&u);for(u=u/5-13,v=(v-d[u])/f[u];j<2;)t=(++j+u)%3,printf("%f %c\n",f[t]*v+d[t],"CFK"[t]);}

สิ่งนี้อ่านจาก stdin ไม่ได้ระบุความแม่นยำเอาท์พุทจึงพิมพ์สิ่งที่printf()รู้สึกเหมือนพิมพ์ซึ่งส่วนใหญ่มากกว่า 4 หลัก

เวอร์ชันที่ไม่ถูกปรับแต่ง:

#include <stdio.h>

float v, f[] = {1.0f, 1.8f, 1.0f}, d[] = {0.0f, 32.0f, 273.15f};
char u;
int t, j;

int main() {
    scanf("%f %c", &v, &u);
    u = u / 5 - 13;
    v = (v - d[u]) / f[u];
    for( ; j < 2; ) {
        t = (++j + u) % 3;
        printf("%f %c\n", f[t] * v + d[t], "CFK"[t]);
    }

    return 0;
}

คำอธิบาย / ข้อสังเกตบางประการ:

  • สิ่งนี้ขึ้นอยู่กับตารางการค้นหาfและdที่มีปัจจัยการคูณและออฟเซ็ตเพื่อแปลงเซลเซียสเป็นหน่วยอื่น ๆ (รวมถึงเซลเซียสเองเพื่อหลีกเลี่ยงกรณีพิเศษ)
  • ถ้าuเป็นหน่วยอินพุตให้u / 5 - 13แม็พCกับ 0, F1 และK2
  • อินพุตถูกแปลงเป็นเซลเซียสเสมอ
  • วนซ้ำวนซ้ำทั้งสองหน่วยที่ไม่ใช่อินพุตและแปลงค่าเซลเซียสเป็นหน่วยนั้น
  • เวอร์ชัน golfed ใช้intตัวแปรแทนcharตัวแปรเพื่อรับscanf()อินพุต นี่เป็นรูปแบบที่ไม่ตรงกันซึ่งจะให้ผลลัพธ์ที่ถูกต้องในเครื่องเอนเดิ้ลเล็ก ๆ น้อย ๆ เท่านั้น

ลงไป float v,f[]={1,1.8,1,0,32,273.15};u;main(j){scanf("%f %c",&v,&u);for(u=u/4&3,v-=f[u+3],v/=f[u];j++<3;printf("%f %c\n",f[u]*v+f[u+3],"CFK"[u]))u++,u%=3;}152: รับบิตที่มีตัวแปรน้อยลงย้ายโค้ดไปมา สมมติฐานใหม่คือ argc = 1 (j = 1) u = u/4 & 3.
domen

4

Python 2, 168 ไบต์

ฉันเห็นโซลูชัน Python 3 เช่นเดียวกับที่ฉันกำลังโพสต์สิ่งนี้ แต่อะไรก็ตามฉันเพิ่งฝึกเล่นกอล์ฟ

s=raw_input().split();v=eval(s[0]);c,t=(v-32)/1.8,v-273.15
print[["%fC\n%fF"%(t,t*1.8+32),"%fK\n%fC"%(c+273.15,c)][s[1]=="F"],"%fK\n%fF"%(v+273.15,v*1.8+32)][s[1]=="C"]

Ungolfed:

def conv(s):
    s = s.split()
    v = float(s[0])
    if s[1]=="C":
        print "%f K\n%f F"%(v+273.15,v*1.8+32)
    elif s[1]=="F":
        v = (v-32)/1.8
        print "%f K\n%f C"%(v+274.15,v)
    else:
        c = v-273.15
        print "%f C\n%f F"%(c,c*1.8+32)


3

PHP, 161 153

function f($i){list($v,$u)=split(" ",$i);$u==C||print($v=$u==K?$v-273.15:($v-32)*5/9)."C\n";$u!=K&&print $v+273.15 ."K\n";$u!=F&&print $v*9/5+32 ."F\n";}

http://3v4l.org/CpvG7

คงจะดีถ้าหากได้เล่นกอล์ฟเพิ่มอีกสองตัวละครเพื่อให้ได้อันดับหนึ่งในสิบ ...


ในทางเทคนิคตามกฎแล้วไม่จำเป็นต้องมีช่องว่างระหว่างหน่วยและอุณหภูมิในเอาต์พุต โดยการคำนวณของฉันที่ช่วยประหยัด 3 ไบต์
Kade

จุดที่ดี :-) ฉันยังพบวิธีที่จะนำตัวแปรมาใช้อีกครั้งซึ่งจะช่วยประหยัดอีกจำนวนหนึ่ง
สตีเฟ่น

วิธีแก้ปัญหาแบบยาว 135 ไบต์: sandbox.onlinephpfunctions.com/code/… . โดยทั่วไป: ออก\nและเปลี่ยนเป็นบรรทัดใหม่จริงแปลงเป็นโปรแกรมเต็มรูปแบบ (ได้รับข้อมูลผ่าน GET เช่น: http://localhost/my_file.php?t=<temperature>) และแทนที่$u!=Kด้วย$u^Kและมี$u!=F $u^Fหาก$uเป็นKเช่นนั้นการรัน$u^Kจะส่งคืนสตริงว่างซึ่งเป็นค่าที่ผิดพลาด นอกจากนี้พื้นที่ของคุณภายในตัวแยกถูกแปลงเป็นC^c(เพื่อให้ดูเท่ห์)
Ismael Miguel

3

Python 2, 167

s=raw_input();i=eval(s.split()[0]);d={"C":"%f K\n%f F"%(i+273,32+i*1.8),"K":"%f C\n%f F"%(i-273,i*1.8-459.4),"F":"%f C\n%f K"%(i/1.8-17.78,i/1.8+255.2)};print d[s[-1]]`

นี่เป็นครั้งแรกที่ฉันลองใช้ CodeGolf


ยินดีต้อนรับสู่ PPCG นี่เป็นความพยายามครั้งแรกของนักกอล์ฟคนแรก! ฉันได้เพิ่มน้ำตาลลงในโพสต์ของคุณโดยแก้ไขการจัดรูปแบบและเนื้อหา
เครื่องมือเพิ่มประสิทธิภาพ

2

Pyth, 126 ไบต์

AYZczdJvY=Y*JK1.8
?%"%f F\n%f K",+32Y+J273.15qZ"C"?%"%f F\n%f C",-Y459.67-J273.15qZ"K"?%"%f C\n%f K",c-J32K*+J459.67c5 9qZ"F"

มันให้ความรู้สึกที่ยาวนานกับฉัน ...


8
มีวิธี Python ที่สั้นกว่านี้: P
orlp

@ หรือฉันรู้ฉันรู้ ...
kirbyfan64sos

2

R, 150 144 141 141 ไบต์

a=scan(,"");U=c("C","K","F");i=which(U==a[2]);Z=273.15;x=scan(t=a[1]);cat(paste(c(C<-c(x,x-Z,5*(x-32)/9)[i],C+Z,32+C*9/5)[-i],U[-i]),sep="\n")

เยื้องกับบรรทัดใหม่:

a=scan(,"")
U=c("C","K","F")
i=which(U==a[2])
Z=273.15
x=as.double(a[1])
cat(paste(c(C<-c(x,x-Z,5*(x-32)/9)[i],C+Z,32+C*9/5)[-i],
            U[-i]),
    sep="\n")

การใช้งาน:

> a=scan(,"");U=c("C","K","F");i=which(U==a[2]);Z=273.15;x=scan(t=a[1]);cat(paste(c(C<-c(x,x-Z,5*(x-32)/9)[i],C+Z,32+C*9/5)[-i],U[-i]),sep="\n")
1: 23 C
3: 
Read 2 items
Read 1 item
296.15 K
73.4 F
> a=scan(,"");U=c("C","K","F");i=which(U==a[2]);Z=273.15;x=scan(t=a[1]);cat(paste(c(C<-c(x,x-Z,5*(x-32)/9)[i],C+Z,32+C*9/5)[-i],U[-i]),sep="\n")
1: 56.9999999 K
3: 
Read 2 items
Read 1 item
-216.1500001 C
-357.07000018 F
> a=scan(,"");U=c("C","K","F");i=which(U==a[2]);Z=273.15;x=scan(t=a[1]);cat(paste(c(C<-c(x,x-Z,5*(x-32)/9)[i],C+Z,32+C*9/5)[-i],U[-i]),sep="\n")
1: 86.987 F
3: 
Read 2 items
Read 1 item
30.5483333333333 C
303.698333333333 K

ขอบคุณ @AlexA & @MickyT !


ทำได้ดีมาก คุณสามารถบันทึกไบต์ใช้มากกว่าas.double() as.numeric()
Alex A.

ฉันคิดว่าswitchคำสั่งนี้สามารถทำได้ด้วยc(x,x-273.15,5*(x-32)/9)[i]4 ตัวอักษร
MickyT

ขอบคุณ! ที่จริงก่อนหน้าเวอร์ชัน 3.0 ฉันสามารถย่อให้สั้นลงได้ด้วย as.real () แทนที่จะเป็น as.numeric () แต่ฟังก์ชั่นนี้หมดอายุแล้ว
plannapus

ประหยัดอีกจะถูกแทนที่ด้วยas.double(a[1]) scan(t=a[1])
MickyT

2

Javascript, 206 193 187 175 162 159 156

e=273.15,a=prompt(f=1.8).split(" "),b=+a[0],X=b-32,c=a[1];alert(c=="F"&&(X/f+"C\n"+(X/f+e+"K"))||(c=="C"?b*f+32+"‌​F\n"+(b+e+"K"):b*f-459.67+"F\n"+(b-e+"C")))

ขอบคุณไปที่เครื่องมือเพิ่มประสิทธิภาพและ Ismael Miguel ที่ช่วยให้ฉันกอล์ฟมันอีกเล็กน้อย


1
คุณสามารถบันทึกไม่กี่ไบต์โดยการแปลงif elseไป?:
เพิ่มประสิทธิภาพ

1
คุณสามารถประหยัดอีกไม่กี่อย่างโดยรวมif ... return; return ?:เข้ากับ areturn ?: ?:
Daniel

1
คุณสามารถบันทึก 1 ไบต์แทนที่ด้วยa=prompt().split(" "),e=273.15,f=1.8;alert([...] a=prompt(e=273.15,f=1.8).split(" "),alert([...]นอกจากนี้คุณสามารถลบช่องว่างหลังจากหน่วย นอกจากนี้การลบreturnและย้ายalertภายในฟังก์ชั่นลดลงมาก! และแทนที่จะตั้งค่าaเพียงใช้apply()วิธีการแยก แต่ที่นี่คุณไป: (function(b,c){alert(c=="F"&&((b-32)/f+"C\n"+((b-32)/f+e+"K"))||(c=="C"?b*f+32+"F\n"+(b+e+"K"):b*f-459.67+"F\n"+(b-e+"C")))}).apply(e=273.15,prompt(f=1.8).split(" "))! 166 ไบต์ ( -21ไบต์) Ping ฉันในการแชทถ้าคุณมีข้อสงสัย
Ismael Miguel

1
ฉันเพิ่งได้ลงไปที่ 162 ต่อไป
SuperJedi224

1
คุณพูดถูกฉันคิดถึงบางช่องว่าง ขอบคุณสำหรับการชี้ให้เห็นว่า
SuperJedi224

2

Mathematica, 66

หวังว่าจะแก้ไขเวลานี้

Print[1##]&@@@Reduce[F==1.8K-459.67&&C==K-273.15&&#==#2,,#2];&@@#&

ตัวอย่าง

%[37 C]   (* % represents the function above *)

310.15 K

98.6 ฟ


OP กล่าวในความคิดเห็นว่า "คุณต้องแสดงผลอีกสองรูปแบบเท่านั้น"
lirtosiast

@Thomas นั่นและปัญหาอื่น ๆ (หวังว่า) ได้รับการแก้ไข ไม่ค่อยดีนัก แต่ฉันหมดความสนใจ
Mr.Wizard

1

Excel, 239 ไบต์

=IF(RIGHT(A1,1)="C",LEFT(A1,LEN(A1)-2)+273.15&"K
"&9*LEFT(A1,LEN(A1)-2)/5+32&"F",IF(RIGHT(A1,1)="K",LEFT(A1,LEN(A1)-2)-273.15&"C
"&(LEFT(A1,LEN(A1)-2)*9/5-459.67&"F",(LEFT(A1,LEN(A1)-2)+459.67)*5/9&"K
"&(LEFT(A1,LEN(A1)-2)-32)*5/9&"C"))

112 ไบต์ใช้เพื่อแยกค่าและหน่วย ใครรู้วิธีแก้ปัญหาที่ดีกว่า?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.