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.



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

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>


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

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.


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


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

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


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.


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.