Suhu tidak rata-rata!

21

Ada diskusi yang terjadi di TNB sekali tentang skala suhu terbaik, dan kami sepakat sesuatu: Ambil rata-rata dari keempat skala suhu utama! Yaitu, Celsius , Kelvin , Fahrenheit , dan Rankine (Maaf Réaumur).

Jadi, sekarang masalahnya adalah, kebanyakan orang tidak menggunakan sistem ini. Jadi, saya butuh program untuk mengkonversi kembali dari rata-rata ini!

Tantangan

Mengingat rata-rata representasi Celsius, Fahrenheit, Kelvin, dan Rankine pada suhu tertentu, mengeluarkan representasi standar individu, dalam urutan yang telah ditentukan sebelumnya dan konsisten. Ternyata ini mungkin, berdasarkan perhitungan papan tulis saya. Input akan menjadi nilai titik-mengambang tunggal dalam rentang apa pun yang bahasa Anda bisa tangani, dan output akan menjadi empat nilai titik-mengambang dalam format apa pun yang masuk akal. Anda dapat membatasi input untuk memaksa output berada dalam kisaran bahasa Anda, tetapi Anda harus dapat mendukung hingga Absolute Zero (dengan demikian, Anda harus dapat menangani angka negatif).

Uji Kasus

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)

Nilai-nilai ini dihasilkan dengan program Python Uriel , dan saya memverifikasi bahwa mereka benar.

HyperNeutrino
sumber
2
terkait
Leaky Nun
Saya pikir tiga kasus uji pertama berantakan entah bagaimana, angka Fahrenheit dan Kelvin memiliki bagian desimal yang sama, dan sebaliknya.
ETHproductions
Juga untuk test case terakhir saya mendapatkan 13092....Rankines alih-alih13091...
Business Cat
7
-11,99 Kelvin ?!
Jonathan Allan
2
Tidak ada yang salah dengan suhu Kelvin negatif dalam hipotesis. Mereka hanya jauh lebih panas daripada suhu biasa . (Catatan: Saya bukan seorang fisikawan, saya hanya menonton video Youtube sepanjang hari dan berpura-pura menjadi satu di internet).
Draco18s

Jawaban:

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

Cobalah online!

Spesifikasi

  • Memasukkan: 100
  • Keluaran: [Kelvin, Celcius]\n[Rankine, Fahrenheit]

Matematika

kelvin = (average*5+916.025)/7
Biarawati Bocor
sumber
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>

Neil
sumber
Anda salah mengeja Celcius dalam cuplikan Anda :)
numbermaniac
2
@numbermaniac Bah, dan setelah semua masalah saya pergi untuk memeriksa ejaan Fahrenheit juga ...
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 adalah rata-rata, mengembalikan tuple hasil sebagai (celsius, fahrenheit, kelvin, rankine)

Matematika yang terlibat:

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
Uriel
sumber
3

Dyalog APL, 46 40 byte

6 byte disimpan berkat @ Adám

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

Cobalah online!

Monad anonim, menggunakan set karakter Dyalog Classic.

Uriel
sumber
Tidak, ini menggunakan set karakter Dyalog Classic, karena ini hanya akan bekerja pada Dyalog APL.
Adám
@ Adam terima kasih! jika saya hanya bertanya, mengapa ini tidak berhasil pada APL lain?
Uriel
Karena hanya Dyalog memiliki kedua {dfns}, dan single-byte encoding. GNU APL memiliki dfns, tetapi menggunakan UTF-8 dan tidak , sedangkan APL2 (yang merupakan codepage yang Anda tautkan) tidak memiliki dfns juga .
Adám
Sekarang Anda menggunakan kereta diam-diam, sudah pasti Dyalog APL, karena ini unik untuk Dyalog APL (dan J).
Adám
2

PHP, 62 Bytes

Pesan Kelvin, Celsius, Rankine, Fahrenheit

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

Versi Online

PHP, 64 Bytes

Pesan Kelvin, Rankine, Fahrenheit, Celsius

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

Versi Online

Jörg Hülsermann
sumber
2

dc, 37 38 byte

[Sunting 1: Menambahkan formulir ketiga, per komentar Neil]

Kedua [yang pertama] ini memiliki panjang yang sama :( Yang pertama menghasilkan Fahrenheit, Celcius, Kelvin, Rankine (atas ke bawah pada tumpukan), dan yang kedua menghasilkan Fahrenheit, Rankine, Celcius, 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

Contoh output ( dcmenggunakan _ untuk memberi sinyal angka negatif pada input): [dari dua bentuk pertama; lihat edit di bawah untuk formulir ketiga.]

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

Bagaimana itu bekerja

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

9kmenetapkan aritmatika 9-tempat.
?membaca input dari stdin, meninggalkannya di atas tumpukan (TOS).
183.205+menambahkan 183,205 ke TOS
1.4/membagi TOS dengan 1,4 atau 7/5, memberikan derajat Kelvin.
dduplikat TOS. (Yaitu, duplikat derajat Kelvin)
1.8*rmenghitung Rankine dari Kelvin, lalu membalikkan dua tumpukan teratas.
d273.15-duplikat TOS dan kurangi 273,15 untuk mendapatkan derajat Celcius.
d1.8*32+duplikat TOS, kalikan dengan 9/5, dan tambahkan 32, untuk Fahrenheit.
fmencetak isi tumpukan.


Sunting 1, dilanjutkan:

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

Bentuk ini, disarankan oleh Neil, dimulai dengan menghitung Celcius alih-alih Kelvin. Ini menghemat rotasi (an r) saat menghitung Rankin dari Kelvin.

Ini menghitung Celsius = (Rata-rata - 199.205) * 5/7 via 199.205-1.4/, menambah 273,15 untuk mendapatkan Kelvin, mengalikan 1,8 untuk mendapatkan Rankin, dan kurangi 459,67 untuk mendapatkan Fahrenheit. Sebagai contoh:

20
-198.406428571
261.263571429
145.146428572
-128.003571428
James Waldby - jwpat7
sumber
9k?199.205-1.4/d273.15+d1.8*d459.67-fmenghemat 1 byte dengan mengubah urutan output.
Neil
@ Neil, terima kasih! Diedit menjadi jawaban.
James Waldby - jwpat7
1

CJam , 38 byte

rd5*916.025+7/_p_273.15-p1.8*_p459.67-

Kelvin = (5*input+916.025)/7

Output sebagai

Kelvin
Celsius
Rankine
Fahrenheit

Cobalah online!

Kucing Bisnis
sumber
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]

Kode ini melakukan beberapa aljabar untuk mendapatkan suhu dalam Celcius, kemudian saya mengubahnya ke unit suhu lainnya. Temperatur disimpan dalam daftar t.

Dat
sumber
0

Bisikan 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

Cobalah online!

Output sebagai Kelvin\nCelsius\nRankine\nFahrenheit


sumber