温度不均!


21

TNB曾经就最佳温度范围进行过一次讨论,我们达成了共识:取所有四个主要温度范围的平均值!也就是说,摄氏开尔文华氏,和(对不起列氏)。

因此,现在的问题是,大多数人不使用此系统。所以,我需要一个程序从这个平均值转换回来!

挑战

给定特定温度的摄氏,华氏度,开尔文和兰金表示的平均值,请以任何预定且一致的顺序输出各个标准表示。事实证明,根据我的白板计算,这是可能的。输入将是您的语言可以处理的任何范围内的单个浮点值,而输出将是任何合理格式的四个浮点值。您可以限制输入以强制输出在您的语言范围内,但是您必须能够支持到绝对零(因此,您需要能够处理负数)。

测试用例

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程序生成,我验证了它们的正确性。



我认为前三个测试用例有些混乱,华氏温度和开尔文数字具有相同的小数部分,反之亦然。
ETHproductions'Apr 24'17

同样对于最后一个测试用例,我得到的13092....不是Rankines,而是13091...
Business Cat

7
-11.99开尔文?
乔纳森·艾伦,

2
假设中,开氏温度为负值并没有本质上的错误。它们只是比正常温度高无穷。(注意:我不是物理学家,我整天都在观看Youtube视频,并假装自己是互联网上的一员)。
Draco18s

Answers:


4

Pyth40 37 36字节

-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

在线尝试!

眼镜

  • 输入: 100
  • 输出: [Kelvin, Celcius]\n[Rankine, Fahrenheit]

数学

kelvin = (average*5+916.025)/7

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>


您在代码段中
拼错

2
@numbermaniac Bah,在经历了所有麻烦之后,我也去仔细检查了华氏度的拼写...
Neil

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+⊢

在线尝试!

匿名monad,使用Dyalog Classic字符集。


不,它使用 Dyalog Classic字符集,因为这仅适用于Dyalog APL。
亚当


@Adám谢谢!如果我只能问一下,为什么这不适用于其他APL?
Uriel's

因为只有Dyalog兼具{dfns}以及单字节编码。GNU APL有dfns,但使用UTF-8而没有,而APL2(您链接到的代码页)既没有dfns也没有
2015年

现在您正在使用默认火车,它绝对是Dyalog APL,因为这是Dyalog APL(和J)所独有的。
亚当

2

PHP,62字节

开尔文,摄氏,兰金,华氏度

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

在线版本

PHP,64字节

开尔文,兰金,华氏,摄氏

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

在线版本


2

dc,37 38字节

[编辑1:根据尼尔的评论,添加了第三种形式]

两个[前两个]的长度相同:(第一个产生华氏,摄氏,开尔文,朗肯(从上到下),第二个产生华氏,兰金,摄氏,开尔文。

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使用_表示输入中的负数): [来自前两种形式;请参阅下面的第三种形式的编辑。]

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

9k设置9位算术。
?从stdin读取输入,将其保留在堆栈(TOS)的顶部。将TOS加
183.205+183.205,
1.4/将TOS除以1.4或7/5,得到开氏度。
d重复TOS。(即,重复开尔文度数)
1.8*r从开尔文计算兰金,然后反转堆栈的前两个。
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

尼尔(Neil)提出的这种形式首先是计算摄氏度而不是开尔文。r从开尔文(Kelvin)计算Rankin时,这节省了旋转(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个字节。
尼尔

@尼尔,谢谢!编辑成答案。
詹姆斯·沃尔德比-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


0

私语v2,168字节

> 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

在线尝试!

输出为 Kelvin\nCelsius\nRankine\nFahrenheit

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.