Temperaturas não médias!


21

Houve uma discussão na TNB uma vez sobre a melhor escala de temperatura e concordamos em algo: Faça a média das quatro principais escalas de temperatura! Ou seja, Celsius , Kelvin , Fahrenheit e Rankine (Desculpe Réaumur).

Portanto, agora o problema é que a maioria das pessoas não usa esse sistema. Então, preciso de um programa para converter novamente a partir dessa média!

Desafio

Dada a média das representações Celsius, Fahrenheit, Kelvin e Rankine de uma certa temperatura, produz as representações padrão individuais, em qualquer ordem pré-especificada e consistente. Acontece que isso é possível, com base nos meus cálculos do quadro branco. A entrada será um único valor de ponto flutuante em qualquer faixa que seu idioma possa suportar e a saída será quatro valores de ponto flutuante em qualquer formato razoável. Você pode restringir a entrada para forçar a saída no intervalo do seu idioma, mas você deve ser capaz de dar suporte ao Absolute Zero (portanto, você deve ser capaz de lidar com números negativos).

Casos de teste

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)

Esses valores foram gerados com o programa Python de Uriel , e eu verifiquei que eles estavam corretos.



Eu acho que os três primeiros casos de teste estão confusos de alguma forma, os números de Fahrenheit e Kelvin têm a mesma parte decimal e vice-versa.
ETHproductions

Também para o último caso de teste, recebo 13092....Rankines em vez de #13091...
Business Cat

7
-11.99 Kelvin ?!
Jonathan Allan

2
Não há nada inerentemente errado com temperaturas Kelvin negativas no hipotético. Eles são infinitamente mais quentes que as temperaturas regulares . (Nota: eu não sou físico, apenas assisto a vídeos do Youtube o dia inteiro e finjo ser um na internet).
Draco18s

Respostas:


4

Pitão , 40 37 36 bytes

-BJ + c36641 280c * 5Q7 273,15-B * J1,8 459,67 
-BJc + 916,025 * 5T7 273,15-B * J1,8 459,67
-BJc + 916,025 * 5T7 273,15-B * 1,8J459,67

Experimente online!

Especificações

  • Entrada: 100
  • Saída: [Kelvin, Celcius]\n[Rankine, Fahrenheit]

Matemática

kelvin = (average*5+916.025)/7

10

JavaScript (ES6), 49 bytes

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>


Você soletrou Celsius errado em seu trecho :)
numbermaniac

2
@numbermaniac Bah, e depois de todos os problemas que eu fui para verificar novamente a ortografia de Fahrenheit também ...
Neil

10

Python, 63 bytes

def f(a):x=(a+183.205)*5/7;m=x*9/5;return x-273.15,m-459.67,x,m

a é a média, retorna uma tupla dos resultados conforme (celsius, fahrenheit, kelvin, rankine)

Matemática envolvida:

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 bytes

6 bytes salvos graças a @ Adám

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

Experimente online!

Mônada anônima, usa o conjunto de caracteres Dyalog Classic.


Não, ele usa o conjunto de caracteres Dyalog Classic, pois isso funcionará apenas no Dyalog APL.
Adám


@ Adám obrigado! se posso apenas perguntar, por que isso não funcionaria em outros APLs?
Uriel

Porque apenas Dyalog tem ambos {dfns}, e de byte único de codificação. O GNU APL possui dfns, mas usa UTF-8 e não , enquanto o APL2 (que era a página de código à qual você vinculou) não possui nem dfns nem .
Adám 25/04/19

Agora que você está usando um trem tácito, é definitivamente o Dyalog APL, pois é exclusivo do Dyalog APL (e J).
Adám 25/04/19

2

PHP, 62 bytes

Ordem Kelvin, Celsius, Rankine, Fahrenheit

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

Versão Online

PHP, 64 bytes

Ordem Kelvin, Rankine, Fahrenheit, Celsius

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

Versão Online


2

dc, 37 38 bytes

[Edit 1: Adicionado terceiro formulário, pelo comentário de Neil]

Estes [primeiros dois] têm o mesmo comprimento :( O primeiro produz Fahrenheit, Celsius, Kelvin, Rankine (de cima para baixo na pilha), e o segundo produz Fahrenheit, Rankine, Celsius, Kelvin.

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

Exemplo de saídas ( dcusa _ para sinalizar números negativos na entrada): [das duas primeiras formas; veja a edição abaixo para o terceiro formulário.]

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

Como funciona

9k?183.205+1.4/d1.8*rd273.15-d1.8*32+f

9kdefine aritmética de 9 lugares.
?lê a entrada do stdin, deixando-a no topo da pilha (TOS).
183.205+adiciona 183,205 ao TOS
1.4/divide o TOS por 1,4 ou 7/5, dando graus Kelvin.
dTOS duplicado. (Ou seja, duplica os graus Kelvin)
1.8*rcalcula Rankine de Kelvin e depois inverte os dois primeiros da pilha.
d273.15-duplica TOS e subtrai 273,15 para obter graus Celsius.
d1.8*32+duplica o TOS, multiplica por 9/5 e adiciona 32, para Fahrenheit.
fimprime o conteúdo da pilha.


Edição 1, continuação:

9k?199.205-1.4/d273.15+d1.8*d459.67-f

Este formulário, sugerido por Neil, começa computando Celsius em vez de Kelvin. Isso economiza uma rotação rao computar Rankin a partir de Kelvin.

Ele calcula Celsius = (Média - 199,205) * 5/7 via 199.205-1.4/, adiciona 273,15 para obter Kelvin, multiplica por 1,8 para obter Rankin e subtrai 459,67 para obter Fahrenheit. Por exemplo:

20
-198.406428571
261.263571429
145.146428572
-128.003571428

9k?199.205-1.4/d273.15+d1.8*d459.67-feconomiza 1 byte, alterando a ordem de saída.
Neil

@ Neil, obrigado! Editado em resposta.
precisa saber é o seguinte


0

Python 3, 67 bytes

c=(5*float(input())-996.025)/7;t=[c,c*1.8+32,c+273.15,c*1.8+491.67]

Este código faz uma álgebra para obter a temperatura em Celsius, então eu a converto para as outras unidades de temperatura. As temperaturas são armazenadas na lista t.


0

Sussurros v2 , 168 bytes

> 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

Experimente online!

Saídas como Kelvin\nCelsius\nRankine\nFahrenheit

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.