Undurchschnittliche Temperaturen!

21

In TNB wurde einmal über die beste Temperaturskala diskutiert, und wir waren uns einig: Nehmen Sie den Durchschnitt aller vier Haupttemperaturskalen! Das heißt, Celsius , Kelvin , Fahrenheit und Rankine (Sorry Réaumur).

Jetzt ist das Problem, dass die meisten Leute dieses System nicht benutzen. Also, ich brauche ein Programm, um von diesem Durchschnitt zurück zu konvertieren!

Herausforderung

Ausgehend vom Durchschnitt der Celsius-, Fahrenheit-, Kelvin- und Rankine-Darstellungen einer bestimmten Temperatur werden die einzelnen Standarddarstellungen in einer vorgegebenen und konsistenten Reihenfolge ausgegeben. Anhand meiner Whiteboard-Berechnungen hat sich herausgestellt, dass dies möglich ist. Die Eingabe ist ein einzelner Gleitkommawert in dem Bereich, den Ihre Sprache verarbeiten kann, und die Ausgabe erfolgt in vier Gleitkommawerten in einem angemessenen Format. Sie können die Eingabe einschränken, um zu erzwingen, dass die Ausgabe im Bereich Ihrer Sprache liegt, aber Sie müssen in der Lage sein, bis zum absoluten Nullpunkt zu unterstützen (daher müssen Sie in der Lage sein, negative Zahlen zu verarbeiten).

Testfälle

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)

Diese Werte wurden mit Uriels Python-Programm generiert und ich habe überprüft, ob sie korrekt sind.

HyperNeutrino
quelle
2
Verwandte
Undichte Nonne
Ich denke, die ersten drei Testfälle sind irgendwie durcheinander, die Fahrenheit- und Kelvin-Zahlen haben den gleichen Dezimalteil und umgekehrt.
ETHproductions
Auch für den letzten Testfall bekomme ich 13092....Rankines statt13091...
Business -
7
-11,99 Kelvin ?!
Jonathan Allan
2
An negativen Kelvin-Temperaturen ist im Hypothetischen nichts von Natur aus auszusetzen. Sie sind einfach unendlich heißer als normale Temperaturen . (Hinweis: Ich bin kein Physiker, ich schaue mir nur den ganzen Tag Youtube-Videos an und tue so, als wäre ich eines im Internet).
Draco18s

Antworten:

4

Pyth , 40 37 36 Bytes

-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

Probieren Sie es online!

Technische Daten

  • Eingang: 100
  • Ausgabe: [Kelvin, Celcius]\n[Rankine, Fahrenheit]

Mathematik

kelvin = (average*5+916.025)/7
Undichte Nonne
quelle
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
quelle
Du hast Celsius in deinem Snippet falsch geschrieben :)
numbermaniac
2
@numbermaniac Bah, und nach all dem Ärger ging ich, um die Rechtschreibung von Fahrenheit zu überprüfen ...
Neil
10

Python, 63 Bytes

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

a ist der Durchschnitt, liefert ein Tupel der Ergebnisse als (celsius, fahrenheit, kelvin, rankine)

Mathematik beteiligt:

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
quelle
3

Dyalog APL, 46 40 Bytes

6 Bytes gespart dank @ Adám

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

Probieren Sie es online!

Anonyme Monade, verwendet den Dyalog Classic-Zeichensatz.

Uriel
quelle
Nein, es wird der Dyalog Classic-Zeichensatz verwendet, da dies nur für Dyalog APL funktioniert.
Adám
Speichern Sie sechs Bytes:273.15 459.67 0 0-⍨4⍴63 35÷⍨45×183.205+⊢
Adám
@Adám danke! Wenn ich nur fragen darf, warum würde das bei anderen APLs nicht funktionieren?
Uriel
Denn nur Dyalog hat beide {dfns}, und Single-Byte - Codierung. GNU APL hat dfns, verwendet aber UTF-8 und hat no , während APL2 (die Codepage, mit der Sie verlinkt haben) weder dfns noch hat .
Adám
Jetzt, da Sie einen stillschweigenden Zug benutzen, ist dies definitiv Dyalog APL, da dies nur für Dyalog APL (und J) gilt.
Adám
2

PHP, 62 Bytes

Ordnung Kelvin, Celsius, Rankine, Fahrenheit

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

Online Version

PHP, 64 Bytes

Ordnung Kelvin, Rankine, Fahrenheit, Celsius

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

Online Version

Jörg Hülsermann
quelle
2

DC, 37 38 Bytes

[Edit 1: Dritte Form hinzugefügt, laut Neils Kommentar]

Diese [ersten beiden] sind beide gleich lang :( Der erste Wert gibt Fahrenheit, Celsius, Kelvin, Rankine (von oben nach unten auf dem Stapel) und der zweite Wert gibt Fahrenheit, Rankine, Celsius, Kelvin an.

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

Beispielausgaben ( dcverwendet _, um negative Zahlen bei der Eingabe zu signalisieren): [aus den ersten beiden Formen; siehe Bearbeitung unten für die dritte Form.]

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

Wie es funktioniert

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

9kSetzt eine 9-stellige Arithmetik.
?Liest die Eingabe von stdin und belässt sie oben auf dem Stack (TOS).
183.205+addiert 183,205 zu TOS
1.4/dividiert TOS durch 1,4 oder 7/5, was Grad Kelvin ergibt.
ddupliziert TOS. (Das heißt, Duplikate von Kelvin)
1.8*rberechnet Rankine aus Kelvin und kehrt dann die ersten beiden Stapel um.
d273.15-dupliziert die TOS und subtrahiert 273,15, um Grad Celsius zu erhalten.
d1.8*32+dupliziert die TOS, multipliziert mit 9/5 und addiert 32 für Fahrenheit.
fdruckt den Inhalt des Stapels.


Edit 1, Fortsetzung:

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

Diese von Neil vorgeschlagene Form beginnt mit der Berechnung von Celsius anstelle von Kelvin. Dies erspart eine Drehung (an r), wenn Rankin aus Kelvin berechnet wird.

Es berechnet Celsius = (Durchschnitt - 199,205) * 5/7 über 199.205-1.4/, addiert 273,15, um Kelvin zu erhalten, multipliziert mit 1,8, um Rankin zu erhalten, und subtrahiert 459,67, um Fahrenheit zu erhalten. Beispielsweise:

20
-198.406428571
261.263571429
145.146428572
-128.003571428
James Waldby - jwpat7
quelle
9k?199.205-1.4/d273.15+d1.8*d459.67-fSpart 1 Byte durch Ändern der Ausgabereihenfolge.
Neil
@ Neil, danke! In Antwort bearbeitet.
James Waldby - jwpat7
1

CJam , 38 Bytes

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

Kelvin = (5*input+916.025)/7

Ausgänge als

Kelvin
Celsius
Rankine
Fahrenheit

Probieren Sie es online!

Geschäfts-Katze
quelle
0

Python 3, 67 Bytes

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

Dieser Code führt eine Algebra aus, um die Temperatur in Celcius zu ermitteln, und konvertiert sie dann in die anderen Temperatureinheiten. Die Temperaturen werden in der Liste gespeichertt .

Dat
quelle
0

Flüstern v2 , 168 Bytes

> 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

Probieren Sie es online!

Ausgänge als Kelvin\nCelsius\nRankine\nFahrenheit


quelle