Nietypowe temperatury!

21

W TNB odbyła się dyskusja na temat najlepszej skali temperatur i uzgodniliśmy coś: weźcie średnią ze wszystkich czterech głównych skal temperatur! To znaczy, Celsjusz , Kelvin , Fahrenheit i Rankine (Przepraszamy Réaumur).

Problem polega na tym, że większość ludzi nie korzysta z tego systemu. Potrzebuję więc programu do konwersji z tej średniej!

Wyzwanie

Biorąc pod uwagę średnią reprezentację Celsjusza, Fahrenheita, Kelvina i Rankine'a dla określonej temperatury, wyprowadzaj poszczególne standardowe reprezentacje, w dowolnej z góry określonej i spójnej kolejności. Okazuje się, że jest to możliwe na podstawie moich obliczeń na tablicy. Dane wejściowe będą pojedynczymi wartościami zmiennoprzecinkowymi w dowolnym zakresie obsługiwanym przez Twój język, a dane wyjściowe będą czterema wartościami zmiennoprzecinkowymi w dowolnym rozsądnym formacie. Możesz ograniczyć wprowadzanie, aby wymusić, aby wynik był w zakresie twojego języka, ale musisz być w stanie obsługiwać do Absolute Zero (dlatego musisz być w stanie obsługiwać liczby ujemne).

Przypadki testowe

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)

Wartości te zostały wygenerowane za pomocą programu Uriel w języku Python , a ja zweryfikowałem, że są poprawne.

HyperNeutrino
źródło
2
powiązane
Leaky Nun
Myślę, że pierwsze trzy przypadki testowe są w jakiś sposób pomieszane, liczby Fahrenheita i Kelvina mają tę samą część dziesiętną i odwrotnie.
ETHprodukcje
Również dla ostatniego przypadku testowego dostaję 13092....Rankines zamiast13091...
Business Cat
7
-11,99 Kelvin ?!
Jonathan Allan,
2
Nie ma nic z natury złego ujemnych temperaturach Kelvina w hipotetycznej. Są po prostu nieskończenie cieplejsze niż normalne temperatury . (Uwaga: nie jestem fizykiem, po prostu oglądam filmy z Youtube przez cały dzień i udaję, że jestem jednym z nich w Internecie).
Draco18s,

Odpowiedzi:

4

Pyth , 40 37 36 bajtów

-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

Wypróbuj online!

Okular

  • Wkład: 100
  • Wydajność: [Kelvin, Celcius]\n[Rankine, Fahrenheit]

Matematyka

kelvin = (average*5+916.025)/7
Leaky Nun
źródło
10

JavaScript (ES6), 49 bajtów

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
źródło
Źle przeliterowałeś Celsjusza w swoim fragmencie :)
numbermaniac
2
@numbermaniac Bah, a po tych wszystkich kłopotach poszedłem też dwukrotnie sprawdzić pisownię Fahrenheita ...
Neil
10

Python, 63 bajty

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

a jest średnią, zwraca krotkę wyników jako (celsius, fahrenheit, kelvin, rankine)

Wymagana matematyka:

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
źródło
3

Dyalog APL, 46 40 bajtów

6 bajtów zapisanych dzięki @ Adám

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

Wypróbuj online!

Anonimowa monada, używa zestawu znaków Dyalog Classic.

Uriel
źródło
Nie, używa zestawu znaków Dyalog Classic, ponieważ będzie to działać tylko w APL Dyalog.
Adám
Zaoszczędź sześć bajtów:273.15 459.67 0 0-⍨4⍴63 35÷⍨45×183.205+⊢
Adám
@ Adám dzięki! jeśli mogę tylko zapytać, dlaczego to nie zadziała na innych APL-ach?
Uriel
Ponieważ tylko Dyalog ma i {dfns}, sposób kodowania jednego bajtu. GNU APL ma dfns, ale używa UTF-8 i nie ma go , podczas gdy APL2 (który był stroną kodową, do której prowadzisz link) nie ma ani dfns, ani .
Adám
Teraz, gdy używasz milczącego pociągu, jest to zdecydowanie Dyalog APL, ponieważ jest to unikatowe dla Dyalog APL (i J).
Adám
2

PHP, 62 bajty

Zamów Kelvina, Celsjusza, Rankine'a, Fahrenheita

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

Wersja online

PHP, 64 bajty

Zamów Kelvina, Rankine'a, Fahrenheita, Celsjusza

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

Wersja online

Jörg Hülsermann
źródło
2

dc, 37 38 bajtów

[Edycja 1: Dodano trzeci formularz, według komentarza Neila]

Te [pierwsze dwa] mają tę samą długość :( Pierwszy produkuje Fahrenheita, Celsjusza, Kelvina, Rankine'a (od góry do dołu na stosie), a drugi produkuje Fahrenheita, Rankine'a, Celsjusza, Kelvina.

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

Przykładowe dane wyjściowe ( dcużywa _ do sygnalizowania liczb ujemnych na wejściu): [z pierwszych dwóch form; zobacz edycję poniżej dla trzeciego formularza.]

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

Jak to działa

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

9kustawia arytmetykę na 9 miejsc.
?odczytuje dane wejściowe ze standardowego wejścia, pozostawiając je na górze stosu (TOS).
183.205+dodaje 183,205 do TOS
1.4/dzieli TOS przez 1,4 lub 7/5, dając stopnie Kelvina.
dpowiela TOS. (To znaczy, powiela stopnie Kelvina)
1.8*roblicza Rankine'a na podstawie Kelvina, a następnie odwraca górne dwa stosu.
d273.15-powiela TOS i odejmuje 273,15, aby uzyskać stopnie Celsjusza.
d1.8*32+powiela TOS, mnoży przez 9/5 i dodaje 32 dla Fahrenheita.
fdrukuje zawartość stosu.


Edycja 1, ciąg dalszy:

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

Ta forma, sugerowana przez Neila, zaczyna się od obliczenia Celsjusza zamiast Kelvina. To oszczędza rotate (an r) podczas obliczania Rankin z Kelvina.

Oblicza Celsjusza = (Średnia - 199,205) * 5/7 przez 199.205-1.4/, dodaje 273,15, aby uzyskać Kelvina, mnoży przez 1,8, aby uzyskać Rankina, i odejmuje 459,67, aby uzyskać Fahrenheita. Na przykład:

20
-198.406428571
261.263571429
145.146428572
-128.003571428
James Waldby - jwpat7
źródło
9k?199.205-1.4/d273.15+d1.8*d459.67-foszczędza 1 bajt, zmieniając kolejność wyjściową.
Neil,
@Neil, dzięki! Edytowane w odpowiedzi.
James Waldby - jwpat7
1

CJam , 38 bajtów

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

Kelwiny = (5*input+916.025)/7

Wyjścia jak

Kelvin
Celsius
Rankine
Fahrenheit

Wypróbuj online!

Business Cat
źródło
0

Python 3, 67 bajtów

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

Ten kod wykonuje algebrę, aby uzyskać temperaturę w stopniach Celsjusza, a następnie przekonwertowałem ją na inne jednostki temperatury. Temperatury są przechowywane na liście t.

Dat
źródło
0

Whispers v2 , 168 bajtów

> 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

Wypróbuj online!

Wyjścia jak Kelvin\nCelsius\nRankine\nFahrenheit


źródło