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

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 Уриэля , и я убедился, что они верны.

HyperNeutrino
источник
2
связанный
Leaky Nun
Я думаю, что первые три тестовых случая как-то испорчены, числа Фаренгейта и Кельвина имеют одинаковую десятичную часть, и наоборот.
ETHproductions
Также в последнем тестовом примере я получаю 13092....Ранкинс вместо13091...
Business Cat
7
-11,99 кельвина ?!
Джонатан Аллан
2
Нет ничего изначально неправильного в гипотетических отрицательных температурах Кельвина. Они просто бесконечно жарче, чем обычные температуры . (Примечание: я не физик, я просто смотрю видео Youtube весь день и притворяюсь, что они есть в Интернете).
Draco18s

Ответы:

4

Pyth , 40 37 36 байт

-BJ + c36641 280c * 5Q7 273,15-B * J1,8 459,67 
-BJc + 916,025 * 5Q7 273,15-B * J 1,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 Бах, и после всех неприятностей я пошел, чтобы перепроверить написание Фаренгейта тоже ...
Нейл
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

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

постоянный ток, 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
Джеймс Уолдби - jwpat7
источник
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.

Dat
источник
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


источник