非平均気温!


21

TNBで最高の温度スケールについて一度議論が行われましたが、私たちは何かに同意しました。4つの主要な温度スケールすべての平均を取ることです。つまり、摂氏ケルビン華氏ランキン(SorryRéaumur)です。

だから、問題は、ほとんどの人がこのシステムを使用しないことです。そのため、この平均から元に戻すプログラムが必要です!

チャレンジ

特定の温度の摂氏、華氏、ケルビン、およびランキン表現の平均が与えられると、事前に指定された一貫した順序で個々の標準表現を出力します。ホワイトボードの計算に基づいて、これが可能であることがわかりました。入力は、言語が処理できる範囲内の単一の浮動小数点値になり、出力は任意の妥当な形式の4つの浮動小数点値になります。入力を制限して、出力を言語の範囲内に強制することができますが、絶対ゼロまでサポートできる必要があります(したがって、負の数を処理できる必要があります)。

テストケース

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)

これらの値はUrielのPythonプログラムで生成されたもので、正しいことを確認しました。



最初の3つのテストケースは何らかの形で台無しになっていると思います。華氏とケルビンの数値は同じ小数部分を持ち、逆も同様です。
-ETHproductions

また、最後のテストケースでは、13092....代わりにランキンを取得します13091...
Business Cat

7
-11.99ケルビン?!
ジョナサンアラン

2
仮説では、負のケルビン温度には本質的に問題はありません。それらは通常の温度より無限に暑いだけです。(注:私は物理学者ではありません。YouTubeの動画を1日中見ているだけで、インターネット上でのふりをしています)。
Draco18s

回答:



10

JavaScript(ES6)、49バイト

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>


スニペットで摂氏のスペルを間違えました:)
numbermaniac

2
@numbermaniac Bah、そしてすべてのトラブルの後、私は華氏のスペルも再確認しに行きました...-
ニール

10

Python、63バイト

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

a は平均で、結果のタプルを次のように返します (celsius, fahrenheit, kelvin, rankine)

関係する数学:

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バイト

@Adámのおかげで6バイト節約

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

オンラインでお試しください!

匿名モナド、Dyalog Classic文字セットを使用します。


いいえ、これは Dyalog APLでのみ機能するため、Dyalog Classic文字セットを使用します。
アダム


@Adámありがとう!私が尋ねるだけなら、なぜこれが他のAPLで機能しないのですか?
ウリエル

唯一Dyalogの両方を持っているので{dfns}、およびシングルバイトエンコーディング。GNU APLにはdfnsがありますが、UTF-8を使用しますが、APL2(リンク先のコードページ)にはdfnsもありません
アダム

暗黙の列車を使用しているので、これは間違いなくDyalog APLです。これはDyalog APL(およびJ)に固有のものです。
アダム


2

dc、37 38バイト

[編集1:ニールのコメントごとに3番目のフォームを追加]

これらの[最初の2つ]は両方とも同じ長さです:(最初の1つは華氏、摂氏、ケルビン、ランキン(スタックの一番上から下へ)を生成し、2番目は華氏、ランキン、摂氏、ケルビンを生成します。

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

出力例(dc_を使用して入力で負の数を通知します): [最初の2つの形式から。3番目のフォームについては、以下の編集を参照してください。]

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

使い方

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

9k9桁の算術演算を設定します。
?stdinから入力を読み取り、スタックの先頭(TOS)のままにします。
183.205+TOSに183.205を追加して、
1.4/TOSを1.4または7/5で除算し、ケルビン度を与えます。
dTOSを複製します。(つまり、ケルビン度を複製)ケルビン
1.8*rからランキンを計算し、スタックの上位2つを逆にします。
d273.15-TOSを複製し、273.15を減算して摂氏を取得します。
d1.8*32+TOSを複製し、9/5で乗算し、華氏で32を加算します。
fスタックの内容を出力します。


編集1、続き:

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

ニールが提案したこの形式は、ケルビンの代わりに摂氏を計算することから始まります。これにより、rケルビンからランキンを計算するときに回転(an )が節約されます。

摂氏=(平均-199.205)* 5/7を計算し199.205-1.4/、273.15を加算してケルビンを取得し、1.8を乗算してランキンを取得し、459.67を減算して華氏を取得します。例えば:

20
-198.406428571
261.263571429
145.146428572
-128.003571428

9k?199.205-1.4/d273.15+d1.8*d459.67-f出力順序を変更して1バイトを節約します。
ニール

@ニール、ありがとう!回答に編集されました。
ジェームズWaldby-jwpat7


0

Python 3、67バイト

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

このコードは、摂氏の温度を取得するためにいくつかの代数を実行し、それを他の温度単位に変換します。温度はリストに保存されますt


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.