อุณหภูมิไม่ได้เฉลี่ย!


21

มีการอภิปรายเกิดขึ้นในไตรวิวหนึ่งครั้งเกี่ยวกับระดับอุณหภูมิที่ดีที่สุดและเราตกลงกันบางสิ่ง: ใช้ค่าเฉลี่ยของมาตรวัดอุณหภูมิหลักทั้งสี่! นั่นคือเซลเซียส , เคลวิน , ฟาเรนไฮต์และแร (ขออภัยRéaumur)

ดังนั้นตอนนี้ปัญหาคือคนส่วนใหญ่ไม่ได้ใช้ระบบนี้ ดังนั้นฉันต้องการโปรแกรมเพื่อแปลงกลับจากค่าเฉลี่ยนี้!

ท้าทาย

เมื่อพิจารณาจากค่าเฉลี่ยของเซลเซียสเซลเซียสฟาเรนไฮต์เคลวินและแรนคินในการเป็นตัวแทนของอุณหภูมิที่กำหนดเอาท์พุทการเป็นตัวแทนแต่ละมาตรฐานตามลำดับที่กำหนดล่วงหน้าและสม่ำเสมอ ปรากฎว่าสิ่งนี้เป็นไปได้ขึ้นอยู่กับการคำนวณไวท์บอร์ดของฉัน การป้อนข้อมูลจะเป็นค่าเลขทศนิยมในช่วงใดก็ตามที่ภาษาของคุณสามารถจัดการได้และเอาต์พุตจะเป็นค่าทศนิยมสี่ค่าในรูปแบบที่เหมาะสม คุณสามารถ จำกัด การป้อนข้อมูลเพื่อบังคับให้เอาต์พุตอยู่ในช่วงของภาษาของคุณ แต่คุณต้องสามารถรองรับลงไปที่ Absolute Zero (ดังนั้นคุณจะต้องสามารถจัดการกับจำนวนลบได้)

กรณีทดสอบ

input -> (Celsius, Fahrenheit, Kelvin, Rankine)
100 -> (-70.86071428571424, -95.54928571428565, 202.28928571428574, 364.12071428571437)
20 -> (-128.0035714285714, -198.4064285714286, 145.14642857142857, 261.2635714285714)
-10 -> (-149.43214285714282, -236.97785714285715, 123.71785714285716, 222.69214285714287)
10000 -> (7000.567857142858, 12633.022142857144, 7273.717857142858, 13092.692142857144)

ค่าเหล่านี้ถูกสร้างขึ้นด้วยโปรแกรม Python ของ Urielและฉันตรวจสอบแล้วว่าถูกต้อง



ฉันคิดว่ากรณีทดสอบสามกรณีแรกเกิดความสับสนอย่างใดอย่างหนึ่งตัวเลขฟาเรนไฮต์และเคลวินมีส่วนทศนิยมเท่ากันและในทางกลับกัน
ETHproductions

นอกจากนี้สำหรับกรณีทดสอบครั้งสุดท้ายฉันได้รับ13092....Rankines แทน13091...
Business Cat

7
-11.99เคลวิน!
Jonathan Allan

2
ไม่มีอะไรที่โดยเนื้อแท้ผิดปกติกับอุณหภูมิเคลวินเชิงลบในสมมุติ พวกมันร้อนกว่าอุณหภูมิปกติอย่างไม่ จำกัด (หมายเหตุ: ฉันไม่ใช่นักฟิสิกส์ฉันเพิ่งดูวิดีโอ Youtube ทุกวันและแกล้งทำเป็นหนึ่งในอินเทอร์เน็ต)
Draco18s

คำตอบ:



10

JavaScript (ES6), 49 ไบต์

f=
a=>[a=(a-199.205)/1.4,a+=273.15,a*=1.8,a-=459.67]
<input oninput=f(this.value).map(function(x,i){o.rows[i].cells[1].textContent=x})>
<table id=o>
<tr><th>Celsius:</th><td></td></tr>
<tr><th>Kelvin:</th><td></td></tr>
<tr><th>Rankine:</th><td></td></tr>
<tr><th>Fahrenheit:</th><td></td></tr>
</table>


คุณสะกด Celsius ผิดในตัวอย่างของคุณ :)
numbermaniac

2
@numbermaniac Bah และหลังจากทุกปัญหาผมไปเพื่อตรวจสอบการสะกดของฟาเรนไฮต์เกินไป ...
นีล

10

Python ขนาด 63 ไบต์

def f(a):x=(a+183.205)*5/7;m=x*9/5;return x-273.15,m-459.67,x,m

a คือค่าเฉลี่ยส่งคืน tuple ของผลลัพธ์เป็น (celsius, fahrenheit, kelvin, rankine)

คณิตศาสตร์ที่เกี่ยวข้อง:

kelvin = x
celsius = x - 273.15
fahrenheit = x * 9/5 - 459.67
rankine = x * 9/5

a = (x + x - 273.15 + x * 9/5 - 459.67 + x * 9/5) / 4 = x * 7/5 - 183.205
x = (a + 183.205) * 5/7

3

Dyalog APL, 46 40 ไบต์

บันทึก 6 ไบต์ด้วย @ Adám

273.15 459.67 0 0-⍨4⍴63 35÷⍨45×183.205+⊢

ลองออนไลน์!

Monad นิรนามใช้ชุดอักขระ Dyalog Classic


ไม่มันใช้ชุดอักขระ Dyalog Classic เนื่องจากจะใช้งานได้เฉพาะบน Dyalog APL
Adám

บันทึกหกไบต์:273.15 459.67 0 0-⍨4⍴63 35÷⍨45×183.205+⊢
อดัม

@ Adámขอบคุณ! ถ้าฉันจะถามเพียง แต่ทำไมถึงไม่สามารถใช้ APL อื่น ๆ ได้
Uriel

เพราะเพียง Dyalog มีทั้ง{dfns}, และการเข้ารหัสแบบไบต์เดี่ยว GNU APL มี dfns แต่ใช้ UTF-8 และไม่เคยมีใครในขณะที่ APL2 (ซึ่งเป็นเพจที่คุณเชื่อมโยงไปยัง) มี dfns มิได้
Adám

ตอนนี้คุณกำลังใช้รถไฟโดยปริยายก็เป็น Dyalog APL อย่างแน่นอนเพราะนี่เป็นเอกลักษณ์ของ Dyalog APL (และ J)
Adám

2

PHP, 62 ไบต์

สั่งซื้อเคลวินเซลเซียสเซลเซียสแรนคินฟาเรนไฮต์

print_r([$t=($argn+183.205)/1.4,$t-273.15,$t*=1.8,$t-459.67]);

เวอร์ชั่นออนไลน์

PHP, 64 ไบต์

สั่งซื้อเคลวินแรนคินฟาเรนไฮต์เซลเซียส

print_r([$k=($argn+183.205)/1.4,$r=1.8*$k,$r-459.67,$k-273.15]);

เวอร์ชั่นออนไลน์


2

dc, 37 38ไบต์

[แก้ไข 1: เพิ่มแบบฟอร์มที่สามตามความคิดเห็นของ Neil]

(สองอันแรก)เหล่านี้มีความยาวเท่ากัน :( อันแรกสร้างฟาเรนไฮต์, เซลเซียส, เคลวิน, แรนคิน (บนลงล่างบนสแต็ค) และอีกอันที่สองสร้างฟาเรนไฮต์, แรนคิน, เซลเซียส, เคลวิน

9k?183.205+1.4/d1.8*rd273.15-d1.8*32+f
9k?183.205+1.4/d273.15-rd1.8*d459.67-f
9k?199.205-1.4/d273.15+d1.8*d459.67-f

ตัวอย่างเอาต์พุต ( dcใช้ _ เพื่อส่งสัญญาณหมายเลขติดลบที่อินพุต): [จากสองรูปแบบแรก; ดูการแก้ไขด้านล่างสำหรับรูปแบบที่สาม]

20
-198.406428572
-128.003571429
145.146428571
261.263571427

20
-198.406428573
261.263571427
145.146428571
-128.003571429

_10
-236.977857144
-149.432142858
123.717857142
222.692142855

_10
-236.977857145
222.692142855
123.717857142
-149.432142858

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

9k?183.205+1.4/d1.8*rd273.15-d1.8*32+f

9kกำหนดเลขคณิต 9 ตำแหน่ง
?อ่านอินพุตจาก stdin โดยปล่อยไว้ที่ด้านบนสุดของสแต็ก (TOS)
183.205+เพิ่ม 183.205 เพื่อ TOS
1.4/แบ่ง TOS เป็น 1.4 หรือ 7/5 โดยให้องศาเคลวิน
dTOS ซ้ำซ้อน (เช่นซ้ำองศาเคลวิน)
1.8*rคำนวณ Rankine จากเคลวินจากนั้นกลับกองสองด้านบน
d273.15-ทำซ้ำ TOS และลบ 273.15 เพื่อให้ได้องศาเซลเซียส
d1.8*32+ซ้ำ TOS คูณด้วย 9/5 และเพิ่ม 32 สำหรับฟาเรนไฮต์
fพิมพ์เนื้อหาของสแต็ก


แก้ไข 1 ดำเนินการต่อ:

9k?199.205-1.4/d273.15+d1.8*d459.67-f

แบบฟอร์มนี้แนะนำโดยนีลเริ่มต้นด้วยการคำนวณเซลเซียสแทนเคลวิน สิ่งนี้จะบันทึกการหมุน (หนึ่งr) เมื่อคำนวณ Rankin จาก Kelvin

มันคำนวณเซลเซียส = (เฉลี่ย - 199.205) * 5/7 ผ่าน199.205-1.4/เพิ่ม 273.15 เพื่อให้ได้เคลวินคูณด้วย 1.8 เพื่อรับ Rankin และลบ 459.67 เพื่อรับฟาเรนไฮต์ ตัวอย่างเช่น:

20
-198.406428571
261.263571429
145.146428572
-128.003571428

9k?199.205-1.4/d273.15+d1.8*d459.67-fบันทึก 1 ไบต์ด้วยการเปลี่ยนลำดับผลลัพธ์
Neil

@ Neil ขอบคุณ! แก้ไขเป็นคำตอบ
James Waldby - jwpat7


0

Python 3, 67 ไบต์

c=(5*float(input())-996.025)/7;t=[c,c*1.8+32,c+273.15,c*1.8+491.67]

รหัสนี้ทำพีชคณิตเพื่อให้ได้อุณหภูมิใน Celcius จากนั้นฉันแปลงเป็นหน่วยอุณหภูมิอื่น tอุณหภูมิจะถูกเก็บไว้ในรายการ


0

Whispers v2 , 168 ไบต์

> Input
> 5
> 7
> 183.205
>> 2÷3
>> 1+4
>> 6⋅5
>> 7-11
>> 7⋅12
>> 9-13
> 273.15
> 1.8
> 459.67
>> Output 7
>> Output 8
>> Output 9
>> Output 10
>> Then 14 15 16 17

ลองออนไลน์!

เป็นเอาท์พุต Kelvin\nCelsius\nRankine\nFahrenheit

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