Ortalama olmayan sıcaklıklar!


21

TNB'de bir kez en iyi sıcaklık ölçeği hakkında bir tartışma yapıldı ve bir şey üzerinde anlaştık: Dört ana sıcaklık ölçeğinin ortalamasını alın! Bu, Celsius , Kelvin , Fahrenheit ve Rankine'dir (Üzgünüz Réaumur).

Yani, şimdi mesele şu ki, çoğu insan bu sistemi kullanmıyor. Yani, bu ortalamadan geri dönüş yapmak için bir programa ihtiyacım var!

Meydan okuma

Belli bir sıcaklığın Celsius, Fahrenheit, Kelvin ve Rankine gösterimlerinin ortalaması göz önüne alındığında, önceden belirlenmiş ve tutarlı bir düzende bireysel standart gösterimler verilir. Beyaz tahta hesaplamalarıma dayanarak bunun mümkün olduğu ortaya çıktı. Giriş, dilinizin kullanabileceği her aralıkta tek bir kayan nokta değeri olacak ve çıktı, herhangi bir makul formatta dört kayan nokta değeri olacaktır. Çıktıyı dilinizin menzili içinde olmaya zorlamak için girişi kısıtlayabilirsiniz, ancak Mutlak Sıfır'a kadar destekleyebilmelisiniz (bu nedenle negatif sayıları kullanabilmeniz gerekir).

Test Kılıfları

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)

Bu değerler Uriel'in Python programı ile üretildi ve doğru olduklarını doğruladım.



İlk üç test durumunun bir şekilde berbat olduğunu düşünüyorum, Fahrenheit ve Kelvin sayıları aynı ondalık bölüme sahip ve bunun tersi de geçerli.
ETHproductions

Ayrıca son test durumu için 13092....Rankines aldım13091...
Business Cat

7
-11,99 Kelvin ?!
Jonathan Allan,

2
Varsayımdaki negatif Kelvin sıcaklıklarında doğal olarak yanlış bir şey yoktur . Sadece normal sıcaklıklardan çok daha sıcaklar . (Not: Ben fizikçi değilim, bütün gün Youtube videolarını izliyorum ve internette bir numara gibi davranıyorum.)
Draco18,

Yanıtlar:


4

Pyth , 40 37 36 bayt

-BJ + c36641 280c * 5Q7 273.15-B * J1.8 459.67 
-BJc + 916.025 * 5Q7 273.15-B * J1.8 459.67
-BJc + 916.025 * 5Q7 273.15-B * 1.8J459.67

Çevrimiçi deneyin!

gözlük

  • Giriş: 100
  • Çıktı: [Kelvin, Celcius]\n[Rankine, Fahrenheit]

Matematik

kelvin = (average*5+916.025)/7

10

JavaScript (ES6), 49 bayt

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 Bah, ve tüm sıkıntılardan sonra Fahrenheit'in yazımını da iki kez kontrol etmeye gittim ...
Neil

10

Python, 63 bayt

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

a ortalama, sonuçların bir demetini döndürür (celsius, fahrenheit, kelvin, rankine)

İlgili matematik:

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 bayt

@ Adám sayesinde 6 bayt kaydedildi

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

Çevrimiçi deneyin!

Anonim monad, Dyalog Classic karakter kümesini kullanır.


Hayır, Dyalog Classic karakter kümesini kullanır , çünkü bu yalnızca Dyalog APL'de çalışır.
Adám


@ Adám teşekkürler! Sadece sorabilirsem, bu neden diğer APL'lerde işe yaramaz?
Uriel

Sadece Dyalog iki olduğundan {dfns}, ve tek baytlık kodlama. GNU APL, dfns'ye sahiptir, ancak UTF-8'i kullanır ve buna sahip değildir ; APL2 (bağladığınız kod sayfası) dfns de değildir .
Adám

Şimdi düzensiz bir tren kullandığınıza göre, kesinlikle Dyalog APL'dir, çünkü bu Dyalog APL'ye (ve J) özgüdür.
Adám

2

PHP, 62 Bayt

Sipariş Kelvin, Santigrat, Rankine, Fahrenheit

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

Çevrimiçi sürüm

PHP, 64 Bayt

Sipariş Kelvin, Rankine, Fahrenheit, Santigrat

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

Çevrimiçi sürüm


2

dc, 37 38 bayt

[Düzenleme 1: Neil'in yorumuna göre üçüncü form eklendi]

Bu [ilk iki] ikisi de aynı uzunluktadır: (İlki Fahrenheit, Celsius, Kelvin, Rankine (yığında yukarıdan aşağıya) ve ikincisi Fahrenheit, Rankine, Celsius, Kelvin üretir.

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

Örnek çıktılar ( dcgirdideki negatif sayıları işaret etmek için _ kullanır): [ilk iki formdan; üçüncü form için aşağıdaki düzenlemeye bakın.]

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

Nasıl çalışır

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

9k9 basamaklı aritmetik ayarını yapar.
?stdin'den girişi okur, yığının en üstünde bırakır (TOS).
183.205+TOS'a 183.205 ekler ve TOS'u
1.4/1.4 veya 7 / 5'e bölerek Kelvin derece verir.
dTOS kopyalar. (
1.8*rBaşka bir deyişle, Kelvin derecelerini çoğaltır) Rankine'i Kelvin'den hesaplar, daha sonra yığının ilk ikisini tersine çevirir.
d273.15-TOS kopyalar ve Santigrat derece almak için 273.15 çıkarır.
d1.8*32+TOS'u çoğaltır, 9/5 ile çarpar ve Fahrenheit için 32 ekler.
fyığının içeriğini yazdırır.


Düzenleme 1, devam etti:

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

Neil tarafından önerilen bu form, Kelvin yerine Santigrat'ı hesaplayarak başlar. Bu, rRankin'i Kelvin'den hesaplarken döndürme (an ) tasarrufu sağlar .

Santigrat değerini hesaplar = (Ortalama - 199.205) * 5/7 199.205-1.4/, Kelvin'i elde etmek için 273.15 ekler, Rankin'i almak için 1.8 ile çarpar ve Fahrenheit'i almak için 459.67'yi çıkarır. Örneğin:

20
-198.406428571
261.263571429
145.146428572
-128.003571428

9k?199.205-1.4/d273.15+d1.8*d459.67-fçıkış sırasını değiştirerek 1 bayt kaydeder.
Neil

@Neil, teşekkürler! Cevap olarak düzenlendi.
James Waldby - jwpat7


0

Python 3, 67 bayt

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

Bu kod Celcius'ta sıcaklık elde etmek için bazı cebirleri yapar, sonra diğer sıcaklık birimlerine dönüştürürüm. Sıcaklıklar listede saklanır t.


0

Fısıltılar v2 , 168 bayt

> 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

Çevrimiçi deneyin!

Çıkışlar Kelvin\nCelsius\nRankine\nFahrenheit

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.