Не средние температуры!


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)

Эти значения были сгенерированы программой Python Уриэля , и я убедился, что они верны.



Я думаю, что первые три тестовых случая как-то испорчены, числа Фаренгейта и Кельвина имеют одинаковую десятичную часть, и наоборот.
ETHproductions

Также в последнем тестовом примере я получаю 13092....Ранкинс вместо13091...
Business Cat

7
-11,99 кельвина ?!
Джонатан Аллан

2
Нет ничего изначально неправильного в гипотетических отрицательных температурах Кельвина. Они просто бесконечно жарче, чем обычные температуры . (Примечание: я не физик, я просто смотрю видео Youtube весь день и притворяюсь, что они есть в Интернете).
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>


Вы неправильно
написали

2
@numbermaniac Бах, и после всех неприятностей я пошел, чтобы перепроверить написание Фаренгейта тоже ...
Нейл

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

Дьялог АПЛ, 46 40 байт

6 байтов сохранено благодаря @ Adám

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

Попробуйте онлайн!

Анонимная монада, использует набор символов Dyalog Classic.


Нет, он использует набор символов Dyalog Classic, так как он будет работать только на Dyalog APL.
Адам

Сохраните шесть байтов:273.15 459.67 0 0-⍨4⍴63 35÷⍨45×183.205+⊢
Адам

@ Adám спасибо! если я могу только спросить, почему это не работает на других APL?
Уриэль

Поскольку только Dyalog имеет как {dfns}, и однобайтное кодирование. GNU APL имеет dfns, но использует UTF-8 и не имеет , в то время как APL2 (это была кодовая страница, на которую вы ссылались) не имеет ни dfns, ни .
Адам

Теперь, когда вы используете молчаливый поезд, это определенно Dyalog APL, поскольку он уникален для Dyalog APL (и J).
Адам


2

постоянный ток, 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-значную арифметику.
?читает ввод из стандартного ввода, оставляя его на вершине стека (TOS).
183.205+добавляет 183,205 к TOS,
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

Эта форма, предложенная Нилом, начинается с вычисления Цельсия вместо Кельвина. Это сохраняет вращение rпри вычислении Ранкина из Кельвина.

Он вычисляет Цельсия = (Среднее - 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

Whispers 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.