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


21

Колись у ТНБ тривала дискусія щодо найкращої шкали температури, і ми домовились про щось: візьміть середнє значення для всіх чотирьох основних температурних шкал! Тобто Цельсій , Кельвін , Фаренгейт і Ранкін (Вибачте, Реумур).

Отже, зараз проблема полягає в тому, що більшість людей не використовують цю систему. Отже, мені потрібна програма для перетворення назад із цього середнього!

Виклик

Враховуючи середнє значення уявлень за Цельсієм, Фаренгейтом, Кельвіном та Ранкіном про певну температуру, виведіть окремі стандартні подання у будь-якому попередньо визначеному та послідовному порядку. Виявляється, це можливо, виходячи з моїх розрахунків на дошці. Введення буде єдиним значенням з плаваючою комою в будь-якому діапазоні, з яким може оброблятися ваша мова, а вихід буде чотири значення з плаваючою комою у будь-якому розумному форматі. Ви можете обмежити вхід, щоб змусити вихід виходити в діапазон вашої мови, але ви повинні мати можливість підтримувати до абсолютного нуля (таким чином, вам потрібно вміти обробляти негативні числа).

Випробування

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

Також для останнього тестового випадку я отримую 13092....замість Rankines13091...
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>


Ви неправильно написали Цельсія у своєму фрагменті :)
numbermaniac

2
@numbermaniac Ба, і після всіх проблем я пішов ще раз перевірити правопис Фаренгейта ...
Ніл,

10

Пітон, 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

Діалог APL, 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}, і однобайтное кодування. APL GNU має dfns, але використовує UTF-8 і його немає , тоді як APL2 (яка була кодовою сторінкою, до якої ви пов’язані) не має ні dfns, ні .
Адам

Тепер, коли ви користуєтесь негласним поїздом, це точно Dyalog APL, оскільки це унікально для Dyalog APL (і J).
Adám


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-мі місця.
?зчитує вхід зі stdin, залишаючи його у верхній частині стека (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

Ця форма, запропонована Нілом, починається з обчислення Цельсія замість Кельвіна. Це економить обертання (an 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 байт, змінюючи порядок виводу.
Ніл

@Neil, дякую! Відредаговано у відповідь.
Джеймс Уолдбі - 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.