Nhiệt độ không trung bình!


21

Có một cuộc thảo luận đã diễn ra ở TNB một lần về thang đo nhiệt độ tốt nhất và chúng tôi đã đồng ý về một điều: Lấy trung bình của cả bốn thang đo nhiệt độ chính! Đó là, Celsius , Kelvin , FahrenheitRankine (Xin lỗi Réaumur).

Vì vậy, bây giờ vấn đề là, hầu hết mọi người không sử dụng hệ thống này. Vì vậy, tôi cần một chương trình để chuyển đổi trở lại từ mức trung bình này!

Thử thách

Với mức trung bình của các đại diện Celsius, Fahrenheit, Kelvin và Rankine ở một nhiệt độ nhất định, đưa ra các đại diện tiêu chuẩn riêng lẻ, theo bất kỳ thứ tự nhất định và nhất quán nào. Nó chỉ ra rằng điều này là có thể, dựa trên tính toán bảng trắng của tôi. Đầu vào sẽ là một giá trị dấu phẩy động đơn trong bất kỳ phạm vi nào mà ngôn ngữ của bạn có thể xử lý và đầu ra sẽ là bốn giá trị dấu phẩy động ở bất kỳ định dạng hợp lý nào. Bạn có thể hạn chế đầu vào để buộc đầu ra nằm trong phạm vi ngôn ngữ của bạn, nhưng bạn phải có khả năng hỗ trợ xuống Tuyệt đối số không (do đó, bạn cần có khả năng xử lý các số âm).

Các trường hợp thử nghiệm

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)

Các giá trị này được tạo bằng chương trình Python của Uriel và tôi đã xác minh rằng chúng là chính xác.



Tôi nghĩ rằng ba trường hợp thử nghiệm đầu tiên bị rối tung bằng cách nào đó, các số Fahrenheit và Kelvin có cùng một phần thập phân và ngược lại.
Sản phẩm ETH

Ngoài ra, đối với trường hợp thử nghiệm cuối cùng, tôi nhận được 13092....Xếp hạng thay vì13091...
Business Cat

7
-11,99 Kelvin?!
Jonathan Allan

2
Không có gì vốn đã xảy ra với nhiệt độ Kelvin tiêu cực trong giả thuyết. Chúng chỉ nóng hơn vô hạn so với nhiệt độ thông thường . (Lưu ý: Tôi không phải là nhà vật lý, tôi chỉ xem video Youtube cả ngày và giả vờ là một người trên internet).
Draco18

Câu trả lời:


4

Pyth , 40 37 36 byte

-BJ + c36641 280c * 5Q7 273,15-B * J1.8 459,67 
-BJc + 916.025 * 5Q7 273,15-B * J1.8 459,67
-BJc + 916.025 * 5Q7 273,15-B * 1,8J459,67

Hãy thử trực tuyến!

Thông số kỹ thuật

  • Đầu vào: 100
  • Đầu ra: [Kelvin, Celcius]\n[Rankine, Fahrenheit]

môn Toán

kelvin = (average*5+916.025)/7

10

JavaScript (ES6), 49 byte

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>


Bạn đánh vần sai Celsius trong đoạn trích của bạn :)
numbermaniac

2
@numbermaniac Bah, và sau tất cả những rắc rối tôi đã đi kiểm tra lại chính tả của Fahrenheit ...
Neil

10

Python, 63 byte

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

a là trung bình, trả về một tuple của kết quả là (celsius, fahrenheit, kelvin, rankine)

Toán liên quan:

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

APL Dyalog, 46 40 byte

6 byte được lưu nhờ vào @ Adám

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

Hãy thử trực tuyến!

Đơn nguyên ẩn danh, sử dụng bộ ký tự Dyalog Classic.


Không, nó sử dụng bộ ký tự Dyalog Classic, vì nó sẽ chỉ hoạt động trên Dyalog APL.
Adám


@ Adám cảm ơn! Nếu tôi chỉ có thể hỏi, tại sao điều này không hoạt động trên các APL khác?
Uriel

Bởi vì chỉ có Dyalog có cả {dfns}, và mã hóa byte đơn. GNU APL có dfns, nhưng sử dụng UTF-8 và không có , trong khi APL2 (là bản mã mà bạn liên kết đến) không có dfns cũng không .
Adám

Bây giờ bạn đang sử dụng một tàu ngầm, nó chắc chắn là Dyalog APL, vì đây là duy nhất cho Dyalog APL (và J).
Adám


2

dc, 37 38 byte

[Chỉnh sửa 1: Đã thêm mẫu thứ ba, theo nhận xét của Neil]

Cả hai [đầu tiên] đều có cùng độ dài :( Cái thứ nhất tạo ra Fahrenheit, Celsius, Kelvin, Rankine (từ trên xuống dưới trên ngăn xếp) và cái thứ hai tạo ra Fahrenheit, Rankine, Celsius, Kelvin.

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

Các đầu ra ví dụ ( dcsử dụng _ để báo hiệu các số âm trên đầu vào): [từ hai dạng đầu tiên; xem chỉnh sửa dưới đây cho mẫu thứ ba.]

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

Làm thế nào nó hoạt động

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

9kbộ số học 9 vị trí.
?đọc đầu vào từ stdin, để nó ở đầu ngăn xếp (TOS).
183.205+thêm 183.205 vào TOS
1.4/chia cho Tosh bằng 1,4 hoặc 7/5, cho độ Kelvin.
dtrùng lặp ĐKDV. (Tức là, nhân đôi độ Kelvin)
1.8*rtính toán Rankine từ Kelvin, sau đó đảo ngược hai đỉnh của ngăn xếp.
d273.15-nhân đôi ĐKDV và trừ đi 273,15 để lấy độ C.
d1.8*32+nhân đôi ĐKDV, nhân với 9/5 và thêm 32, cho Fahrenheit.
fin nội dung của ngăn xếp.


Chỉnh sửa 1, tiếp tục:

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

Hình thức này, được đề xuất bởi Neil, bắt đầu bằng cách tính toán Celsius thay vì Kelvin. Điều này giúp tiết kiệm một vòng quay (an r) khi tính toán Rankin từ Kelvin.

Nó tính toán Celsius = (Trung bình - 199,20) * 5/7 thông qua 199.205-1.4/, thêm 273,15 để có được Kelvin, nhân với 1,8 để có được Rankin và trừ 459,67 để có Fahrenheit. Ví dụ:

20
-198.406428571
261.263571429
145.146428572
-128.003571428

9k?199.205-1.4/d273.15+d1.8*d459.67-ftiết kiệm 1 byte bằng cách thay đổi thứ tự đầu ra.
Neil

@Neil, cảm ơn! Chỉnh sửa thành câu trả lời.
James Waldby - jwpat7


0

Python 3, 67 byte

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

Mã này thực hiện một số đại số để có được nhiệt độ trong Celcius, sau đó tôi chuyển đổi nó sang các đơn vị nhiệt độ khác. Nhiệt độ được lưu trữ trong danh sách t.


0

Thì thầm v2 , 168 byte

> 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

Hãy thử trực tuyến!

Đầu ra như Kelvin\nCelsius\nRankine\nFahrenheit

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.