想象一下四个人站成一排。第一个看温度计,把温度告诉右边的人。这种情况一直持续到最后一个人在一张纸上写下温度。不幸的是,由于一个错误的沟通,线上的每个人都把温度转换成他们喜欢的单位,而不知道它已经是哪一个了。
假设人们喜欢的单位是celsius,fahrenheit,fahrenheit,celsius。第一种是20°C,第二种是华氏,第二种是华氏68度,第三种是在不知道自己已经收到了华氏154.4°C的情况下,最后由第四人将其转换为华氏68°C。
您将得到两个输入:温度(t)和许多人(n)。您的程序(或函数)应该返回原始温度和由此产生的温度之间的平均差值,用于每一种可能的n人员。
有两个温度单位:°F和°C。要在它们之间进行转换,可以使用F=\frac95C+32和C=\frac59(F-32)。
您可以选择您的程序是接收到以°F或°C输入的温度,第一个人应该始终收到准确的温度,只有在必要时才转换为他们的首选单元。
作为一个例子,我们将使用输入的温度为41°F,只有3人。有8种可能的温度优惠:
FFF 41°F -> 41.0 -> 105.8 -> 222.44 -> 222.44°F
FFC 41°F -> 41.0 -> 105.8 -> 41.00 -> 105.80°F
FCF 41°F -> 41.0 -> 5.0 -> 41.00 -> 41.00°F
FCC 41°F -> 41.0 -> 5.0 -> -15.00 -> 5.00°F
CFF 41°F -> 5.0 -> 41.0 -> 105.80 -> 105.80°F
CFC 41°F -> 5.0 -> 41.0 -> 5.0 -> 41.00°F
CCF 41°F -> 5.0 -> -15.0 -> 5.00 -> 5.00°F
CCC 41°F -> 5.0 -> -15.0 -> -26.11 -> -15.00°F与41°F的平均距离为54.88°F,是程序的输出。
温度应该用浮子、十进制或某种分数来表示。精度应该在合理的范围内;对于在低温下输入少于10个人的输入,在前四位小数位中不应该出现浮点误差或不精确。
您可以将输入和输出的温度表示为°F或°C,但必须是一致的(尽管输入可以输出不同的单位,只要它们不改变)。温度可能是负的。人数永远不会少于两人。
输出被称为高于温度,尽管从技术上讲它是多重温度的算术平均值。
对于所有测试用例,输入单元与输出单元相同。
41°F 2 -> 25.2
41°F 3 -> 54.88
41°F 4 -> 77.236444...
41°F 10 -> 295.4268...
20°C 4 -> 57.21218...
-1°C 2 -> 12.133...
-20°C 2 -> 6.2222...
-40°F 4 -> 0这是密码-高尔夫,最短的答案以字节为单位的每种语言都赢了!
发布于 2021-03-31 06:17:28
(|40+⎕)+.×(|÷≢)1-1.8*1(-,+)⍨⍣(⎕-2)⊢1-3|⍳4一个完整的程序。取人数,然后是初始温度。为了便于测试,TIO版本封装在一个功能中。正如我在一项评论中指出的那样,最初和最后的单位都不重要,只要它们是平等的。
数学
该代码利用了华氏温度转换在-40 (-40°F = -40°C)的固定点这一事实。然后,我们可以将所有的温度读数增加40,然后整个转换序列减少为\frac95的(正负)整数幂。
由于每个温度值都被40的常量值所抵消,所以两个偏移温度值之间的差值与原始温度值的差值相同。因此,只需将偏移量应用于初始温度,而忽略其直到结束。
让我们打电话给r = \frac95。
现在到计数所有转换路径的部分。假设初始读数是华氏温度。然后:
F→F (r^0)或F→C (r^{-1})。F→F (r^0)或C→F (r^1)。C→F (r^1)或F→C (r^{-1})。因此,任务简化为查找(r^0 + r^{-1})(r^1+r^{-1})^{n-2}(r^1+r^0)扩展中的所有单个术语。然后插入r值,将差异的平均值计算为1,然后与初始温度相乘(用偏移量)。
(|40+⎕)+.×(|÷≢)1-1.8*1(-,+)⍨⍣(⎕-2)⊢1-3|⍳4
⊢1-3|⍳4 ⍝ A fancy way to create an array of 0 ¯1 1 0
⍝ which represents the powers in (1+r^-1)(r+1)
⍣(⎕-2) ⍝ Repeat n-2 times...
1(-,+)⍨ ⍝ multiply the given polynomial with (r+r^-1)
⍝ and list all powers
1.8* ⍝ Plug in r = 1.8 and evaluate the powers
1- ⍝ Difference of each value from 1
(|÷≢) ⍝ Average of absolute differences from 1
+.× ⍝ Product and sum with...
(|40+⎕) ⍝ Absolute difference between -40 and t发布于 2021-03-31 04:41:39
发布于 2021-03-31 07:09:12
T=>U=>g=(N,p)=>(--N?g(N,~-p)+g(N,p+1|0):Math.abs(U**p-1)*(1+U)*(T+40))/2,C=5/9,F=9/5布布勒已经计算出了正确的公式,所以我想在这里删除不正确的公式(许多错误)。您可以从布布勒柱阅读更多关于数学公式的内容。你可以从这篇文章的历史中找到一个基于这个公式的解决方案。
但是计算二项式系数需要花费太多的字节。因此,使用递归得到了一个较短的解。和递归函数:
https://codegolf.stackexchange.com/questions/222642
复制相似问题