Çok üşüdüm, sıcaklığı arttır


53

Bu benim ilk golf yarışmam.

Ne yapmak gerekiyor

AC uzaktan kumanda sistemimi mümkün olan en kısa bayt miktarında oluşturun. Odam şu anda çok soğuk ve uzaktan kumandamı özlüyorum.

Şimdi, tam anlamıyla onu inşa etmeni istemiyorum ya da bir şey yap, sadece şunu yap:

Yavaş bir sıcaklık artışı, 40 dereceden başlar ve tam olarak 72 ile biter. Artış süresi, artış başına her zaman 500 milis olmalıdır. Sonunda 500ms daha bekleyebilir. Ancak durmasını tercih ederim. Artışın kendisi uzaktan kumandam gibi her seferinde iki kat artmalı.

Ekranı silmemelisiniz. Yeni hatlara sahip olmalısın.

Ne olmalı

Örnek çıktı (parantez içindeki her şey çıkarılmamalıdır).

40
(wait 500 millis)
42
(wait 500 millis)
44
(..repeat until 72..)
72
(stop or wait 500ms)

Aklımda bu benim ilk golf benim, bu yüzden golf oynamak zorsa özür dilerim. :(

Bol şans, golfçüler!


3
Küçük bir şey, ancak "her zaman 500 milis olmalı" temelde herhangi bir makul cihaz için çok katı. Bir sapma belirtmenizi tavsiye ederim, +/-% 10 gibi bir şey.
FryAmTheEggman

1
İlk çıktıyı göstermeden önce 500ms bekleyebilir misiniz?
FlipTack

35
Fahrenheit kullanmak için -1 (gerçekten değil, ama en azından kullandığınızı söylemelisiniz ; en az 40 santigrat derece soğuk değil )
John Dvorak

20
Fahrenheit kullanmak için +1, Celsius'tan daha iyi çözünürlüğe sahip ve Kelvin ya da Rankine gibi bir şey kadar keyfi değil
Nick T

8
@NickT sonra şansınız kalmaz çünkü bu uzaktan kumandanın çözünürlüğü 1 ° C'den yüksek olan 2 ° F'dir . Ve Celcius'ta Fahrenheit'ten daha yüksek çözünürlük elde edersiniz, uzaktan kumanda 0.5 ve daha fazlasını gösterebilir. Her neyse, basit bir erkeğim ve 22 ile 23 ° C arasında ayrım yapamıyorum bu yüzden bu durumda yüksek çözünürlük benim için işe yaramaz
phuclv

Yanıtlar:


43

Bash + linux hizmet programları, 19

seq 40 2 72|pv -qlL2

seqsayısal çıktıyı üretir. pv2 satır / sn ratelimitler.


2
Çıktı -qbastırıyor STDERR'ye gidiyor, bu yüzden ihtiyacın olduğunu sanmıyorum.
Dennis,

14
İş için doğru araçlarla "bir şeyi yap ve iyi yap" mükemmel bir gösteri. :)
Doorknob

2
Yakın geliyor "Anti-golfscript karşıtı golf" topraklarında.
Vi.

42

Minecraft 1.9.0+, 204 162 bayt + 58 36 28 24 20 blok = 262 240 232 186 182 blyte

Bu çözüm golf oynamaktadır ve bir veya iki ekran görüntüsünde bütünüyle görülemez. İki aksaklık kullanır ve oyunun diğer iki özelliğini kötüye kullanır.

ÇALIŞTIRMAK!  MINECRAFT sizi öldürecek!

Bu çözüm, aşağıdaki prensiplerle aynı prensipleri kullanıyor, sadece 4 blok daha kompakt bir tasarım.

  • Chain komut bloklarının (yeşil bloklar) redstone ile çalıştırılamaması gerçeğini kötüye kullanmak, sadece bir impuls komut bloğundan (turuncu) bir singal tarafından çalıştırılamaz.

  • Suistimallerin tamamen uzaması için 0,30 saniye sürüyor ve redstone'un bir sinyali kaydetmek için sadece 0,10 saniye alması gerekiyor.

  • Ayrıca, zamanlayıcıyı (TNT) kapatmak için iki katlı bir aksaklığı kötüye kullanır: zamanlayıcının (TNT) yanındaki kırmızıtaşı yalnızca güç almakla kalmaz, TNT'nin başka bir redstone olduğunu ve buna güç sağladığını düşünür.

  • Tüm bu suiistimallerin ötesinde, sinyal kısaltıcı (TNT'nin altındaki şey) tek kullanımlıktır, güç verildikten sonra şeklini değiştirir ve içinden "artımcı" (en üstteki turuncu blok) sinyalinin geçmesine izin verir

Farklı parçaların işlevselliği hakkında biraz açıklama, eski çözümlerde görülebilir (ancak en iyisi aşağıdaki bölümde). Ayrıca Çevrimdışı Deneyin! (4 ile artan basitleştirilmiş çözüm, bu komutu bir komut bloğunda çalıştırarak yalnızca 1.11+'de çalışır) .


Eski çözüm, Minecraft 1.9.0+, 186 blyte:

MINECRAFT ABUSE

TNT normalde Minecraft’ta 3,0 saniye sonra patladığından, bunun /setblockiçin belirli bir sigortaya sahip bir komut ( ) kullanılmalıdır. Ayrıca, yedek komut bloğunu (42 bayt içeren) ve eski sürümlere göre redstone'u kaldırmak için daha kompakt bir tasarım kullanır. Bunun daha düşük olamayacağından eminim ...

Daha eski çözüm, Minecraft 1.9.0+, 232 blytes:

Hata! Bu daha eski çözümlerin 4'lük artışlarla başladığını öğrendim ...

golfcraft

Blokları kurtarmak için 1.9 komut bloğu zinciri özelliğini (yeşil blok şeyi) kullanır. Ayrıca eski çözümlerde daha kısa ve daha kompakt bir sinyal kullanır.

Daha eski çözüm olan Minecraft 1.7.0+, 240 blyte:

ruhsuz canavar

Daha kompakt bir zamanlayıcı (TNT) ve ardından ilk çözümü kullanır (aşağıda).

En eski çözüm, Minecraft 1.7.0+, 262 blyte:

yaşlı canavar


Minecraft'ın değişkenleri işleme biçimi nedeniyle bu çok uzun:

  • Bir değişken tanımlamak için (int): scoreboard objectives add <variable> dummy

  • Bir değişkene değer ayarlamak için (oyuncular dahil her varlık kendi değişken değerine sahiptir): scoreboard players set <entity> <variable> <value>

    • *<entity>Tüm varlıkları seçmek ve baytları kaydetmek için kullanılabilir .

    • sadece tanımlanmış değişkenler kullanılabilir

    • değişkenin değeri, bir değişkene değil bir sayıya ayarlanmalıdır

  • Var1'i var2 ile artırmak için: scoreboard players operation <entity> var1 += <entity> var2

    • <entity>tek bir varlık olmalıdır, örn. @p, değil*

Ekran görüntüleri benim, WTFPL kapsamında lisanslı ve SE'nin bugün kullanmaya karar verdiği lisans (şu anda cc by-sa 3.0 with attribution required) :-)


2
Vaov! Minecraft kullandın, bu dahi! +1 :)
IMustBeSomeone 25:16

1
@ IMustBeSomeone Bekleyin, bunu golf
oynamak

1
... devreniz bittiğinde kendini havaya uçurur.
SuperJedi224,

@ SuperJedi224 Evet. Yanlış mı?
RudolfJelin

2
@ RudolfL.Jelínek Aslında kurallara aykırı olmadığından eminim ama biraz garip. Sonra tekrar, bu golf kodunun ne anlama geldiğinin bir parçası.
SuperJedi224,

18

Vim, 24 , 23 bayt / tuş vuruşlarını

i40<esc>qq:sl500m
Yp2<C-a>q15@q

@Kritixi Lithos! Sayesinde bir bayt kurtarıldı!

Telefonumdan yazılan, mobil vim'de test edilmiştir (ki bu gerçek bir şeydir).

İşte çalışan bir gif:

görüntü tanımını buraya girin

Ve burada bir komut tarafından komut açıklaması:

i40<esc>            " Insert '40' into the buffer
        qq          " Start recording into register 'q'
          :sl500m   " Sleep form 500 ms
Y                   " Yank this line
 p                  " and paste it on a newline
  2<C-a>            " Increment this line twice
        q           " Stop recording
         15@q       " Callback register 'q' 15 times

sİçinde msisteğe bağlıdır, bir byte :) kurtarmak için kaldırabilirsiniz
Kritixi Lithos

@KritixiLithos Bunu biliyordum! Bunu nasıl göz ardı ettim? Teşekkürler!
DJMcMayhem

8
Öğrenci öğretmen oldu: P
Kritixi Lithos

1
"Bir bilgisayara girdikten sonra daha sonra bir gif ve bir açıklama gönderirim" yarım yıl bekler (tam değil)
HyperNeutrino

@HyperNeutrino Hahahahaha, Bu cevabı tamamen unuttum. Daha iyi mi: P
DJMcMayhem

10

JavaScript (ES6), 52 bayt

f=(i=40)=>console.log(i)|i-72&&setTimeout(f,500,i+2)

f()


İşte sizin için cevabın daha düzgün yeniden düzenleme bulunuyor: f=(i=40)=>setTimeout(i>70||f,500,i+2,console.log(i)). Ne yazık ki, hala aynı 52 bayt.
Ismael Miguel,

Adsız işlev bildirimlerine izin verilen meta konsensüsünü temel alarak 50saymaya gerek duymadığınız için bu bayt olmamalı mı ? f=
R. Kap

1
@ R.Kap İyi yakalama, ancak bu durumda, f=işlevin kendisini çağırması gerektiği için gereklidir (ilk parametre olarak setTimeout).
ETHProductions

8

Jöle , 13 12 bayt

40µṄœS.+2µ⁴¡

Çevrimiçi deneyin! Jelly programı, çıktının her satırını bir zaman damgası ile ön eklemek için Bash komut dosyasına sarılır.

Nasıl çalışır

40µṄœS.+2µ⁴¡  Main link. No arguments.

40             Set the return value to 40.
  µ      µ⁴¡  Execute the chain between the two µ 16 times.

   Ṅ           Print the return value, followed by a linefeed.
      .        Yield 0.5.
    œS         Sleep for 0.5 seconds. Yield the previous result.
       +2      Add 2.

Son yinelemeden sonra, 72 değerinin nihai değeri örtük olarak basılır ve program çıkar.


Vay be, amaçlanan bir özellik, Bash'ten diğer dilleri tio'da arayabilmek mi?
mil

2
Evet, bu amaçlandı. Aynısını, sistem çağrılarını veya benzer özellikleri destekleyen tüm dillerden de yapabiliyor olmalısınız.
Dennis,

Golf mücadelelerini kazanan ve mücadelenin sabit bir değere
yükselen bir parçası

6

Perl 6 , 30 bayt

for 20..36 {sleep .5;say 2*$_}

Golf kodu gibi göründüğü için üzgünüm, kısaltmanın bir yolunu göremiyorum ...

Son sayıdan hemen sonra duran sürüm 37 bayttır:

for 20..36 {sleep .5 if $++;say 2*$_}

Sonra boşluğa ihtiyacınız var 36mı?
Hayır,

2
.say&sleep(.5) for 40,42...7229 byte
ugexe

@ugexe: Kısa devre yapan operatörlerin argümanlarının sırayla gerçekleşmesi argümanlarının yan etkilerine dayanarak, uygulamaya özgü bir hack gibi geliyor, çünkü AFAIK dil spesifikasyonu bunu garanti etmiyor. OTOH, belki kod golf için sorun değil mi?
16'da

@SeeOneRhino: Evet. Bir {boşluk olmadan başka bir ifade aşağıdaki aparatı, bir karma başlangıcı ( "birleştirici dizisi"), alt yazı olarak yorumlanır. Perl 6 böyle kesin çünkü, dilbilgisi kasıtlı olarak (hemen hemen) hiç geri izleme olmadan kaynak kodun tek geçişli ayrıştırılmasına izin verecek şekilde tasarlanmıştı.
16'da

6

Pyth - 12 bayt

Çok basit, 0-17 arası bir for döngüsünü kullanır.

V17+40yN.d.5

Şimdiye kadarki en küçük, birincilik için bağlandın :)
IMustBeSomeone

6

TI-Basic (yalnızca CE veya CSE), 16 bayt

:For(A,40,72
:Pause A,.5
:End

Birçok komutun tek bayt simge olduğunu unutmayın.


29 bayt görüyorum? 8 byte kodunu göstermeniz mümkün mü?
redstarcoder

1
TI-Basic'in kendi karakter seti var. For(, Pause , EndVe hatların başında iki nokta üst üste tüm tek bayt bulunmaktadır.
Julian Lachniet

Garip ... tamam, sanırım diğer cevaplar da bunu yapıyor.
redstarcoder

1
Şimdiye kadar elimizden gelenin en iyisini! Ancak, karakter kümesi gibi bir şey saymak eğer bilmiyorum.
IMustBeSomeone 0


5

MATL , 14 bayt

17:E38+".5Y.@D

MATL Online'da deneyin ! Başlangıçta çalışmazsa sayfayı yeniden yüklemeniz gerekebilir.

açıklama

17:     % Push array [1 2 ... 17]
E       % Multiply by 2, element-wise
38+     % Add 38, element-wise. This gives [40 42 ... 72]
"       % For each k in that array
  .5Y.  %   Pause 0.5 seconds
  @D    %   Push k and display
        % End (implicit)

Eski versiyon (spec değişiklikten önce), ekranı temizle

17:E38+"5&Xx@D

MATL Online'da deneyin !


Ekranı temizlemeniz gerekmez.
Adám

@ Adám Teşekkürler. Biliyorum, ama aynı sayıda bayt aldı ve daha güzel görünüyor :-)
Luis Mendo

1
@LuisMendo Golf mücadelesi, düzenlemelerden / netleştirmelerden sonra (muhtemelen gönderinizden sonra) ekranı temizlememekle ilgili bir şey belirtiyor
Thomas Ward

@ThomasWard Heads-up için teşekkürler! OP, değişim hakkında yanıt verenleri gerçekten bilgilendirmeliydi
Luis Mendo

4

Dyalog APL , 20 bayt

{⎕DL.5⊣⎕←⍵}¨38+2×⍳17

{ adsız işlev

⎕DL Gecikme ...

.5⊣ değeri yerine yarım (bir saniye)

⎕← Yazdır (newline ile)

 argüman

her birine uygulanır

38+ otuz sekiz artı

iki defa

⍳17 1 ila 17 arasında tam sayılar


4

C, Linux'ta Clang 3.8.1 ile derlendi, 62 59 58 bayt

@Ranisalt sayesinde 2 bayt kurtarıldı

s=38;main(){for(;s<74;printf("%d\n",s+=2))usleep(500000);}

59 bayt

s=38;main(){for(;s<73;printf("%d\n",s+=2+usleep(500000)));}

62 Bayt

s=38;main(){for(;s!=72;){printf("%d\n",s+=2);usleep(500000);}}

s=38                # Initializes a global (int) variable, this is only possible in C, in other languages from the C family variables must have an explicit type.
main()              # Is the main entry point, again as before, in case a type isn't specified C defaults to int
printf("%d\n",s+=2) # printf outputs to stdout based on the pattern defined in the first parameter 
                    # %d is a placeholder for an int variable
                    # \n appends a newline to stdout
                    # The second parameter increments the s variable and afterwards it goes in the placeholder's spot.
usleep(500000)      # This function is Linux specific, it takes an int as parameter, it represents how much time the app needs to sleep in microseconds

2
Cevabınız için teşekkürler ve sitemize hoşgeldiniz. Dilinize aşina olmayanlar için biraz açıklama ekleyebilir misiniz?
isaacg

1
Beni karşıladığın için teşekkürler. Evet tabi ki bunu yapabilirim. Ayrıca, gönderimin kaç bayt alacağını hesaplamasını nasıl sağlayabilirim? Bunu kendim yazdım, ama başkalarının gönderilerinde farklı görünüyor.
Wade Tyler

Herkes kendi kendine yazar, otomatik hesaplama özelliği yoktur. Başlığınız ** ... **işaretlemede kullanılır, oysa bu sitedeki geleneksel başlıklar kullanılır # .... Cevabınızı değiştirdim, böylece nasıl yapıldığını görebilirsiniz.
isaacg

1
@isaacg Çok teşekkürler. Şimdi daha iyi görünüyor.
Wade Tyler

1
Kullanarak s<72başka bir bayt kaydeder.
Aralık'ta

4

Çizik, 5 blok

(disk alanı 56.0kb)

img

(Düşük çözünürlük için özür dilerim!)

Açıklayıcı, gerçekten. Değişken değeri "sahne" de bir kutuda gösterilir.


Bunun 4 artışı yok mu? (istek olarak 2'ye karşılık olarak)
VisualMelon

1
@VisualMelon Ah, bildirim için teşekkürler - Düzenlenmeden önce soruyu yanlış anladım; Daha sonra tekrar okudum ve bunu unuturken diğer cevabımı düzenledim. Teşekkürler!
RudolfJelin

3

Mathematica, 34 bayt

Pause[Print@#;.5]&/@Range[40,72,2]

Tam program Giriş almaz ve STDOUT'a çıkış verir.


3

R, 49 bayt

x=38;while(x<72){Sys.sleep(.5);x=x+2;cat(x,"\n")}

Çok önemsiz bir çözüm ama hile yapar.


İlk x = 40 başlangıçta 40 yazdırmıyor. X = 38 ile başlamalısınız.
rnso

Komik, aynı fikir ama bir fordöngü ile tam olarak aynı uzunluk.
JAD

3

Perl 6 , 27 bayt

sleep .say/2 for 40,42...72

saydöner Truebir sayısal zorlanır edilir 1ile bölündüğü zaman 2.

Unicode shenanigans 23 karaktere kadar indirebilir:

sleep .say/2 for ㊵,㊷…72

Ama bu 29 UTF-8 kodlu bayt.


3

Python 2, 57 56 55 Bayt

import time
a=40
while a<73:print a;time.sleep(.5);a+=2

DÜZENLE:

Mega Man sayesinde -1 bayt

Flp.Tkc sayesinde -1 Bayt



@MegaMan Teşekkürler, işe yarayacağını
farketmemiştim

Neden parantezi print cümlesi etrafından alıp Python 2 kullanmıyorsunuz?
FlipTack


3

C #, 95 bayt

()=>{for(int i=40;i<73;i+=2){System.Console.WriteLine(i);System.Threading.Thread.Sleep(500);}};

Döngü için basit, sonunda fazladan 500ms bekler.


3

QBIC , 21 bayt

[44,72,4|?a┘'sleep 1.

QBIC, bir FOR döngüsünü başlatır, 44'ten 72'ye kadar çalışır ve sayacı her döngüde 4 arttırır. Daha sonra 1 saniye boyunca uyur. QBasic'in daha ince bir kontrol kontrolü olmadığı için sleep, argüman olarak .vermeyi simüle etmek için bir ekledim .5.


3

Kotlin, 47 bayt

Sorun ifadesinde, çözümlerin gerçekte iki katına kadar artış içermesi gerektiği söylenmedi, bu yüzden 40+2*iburada yasal.

Düzenli bir Kotlin kaynağı olarak yazılmışsa main:

fun main(args:Array<String>){(0..16).map{println(40+2*it);Thread.sleep(500)}}

(77 bayt)

UPD : Kotlin 1.3'te args:Array<String>kaldırılabilir, bu yüzden 18 bayt daha az.

Ve Kotlin Script’inde tüm program

(0..16).map{println(40+2*it);Thread.sleep(500)}

(47 bayt)


İlk programınız önce uzun bir süre bekleyecek, sonra tüm sonuçları verecek gibi görünüyor.
devRicher

1
@devRicher, try.kotlinlang.org adresinde çalıştırıyor gibisiniz. Öyleyse, bu ortamın bir sorunu, stdout'un kızarmadığı ya da bir şey gibi görünüyor. Yerel olarak çalıştırdığımda, amaçlandığı gibi davranıyor.
kısayol tuşu


2

Haskell, 67 bayt

import System.Posix.Unistd
mapM((>>usleep 500000).print)[40,42..70]

Yalnızca ghc ile gitmek istiyorsanız, yerine alarak GHC.Concve kullanarak birkaç bayttan tasarruf edebilirsiniz .threadDelayusleep


2

php, 38 bayt

for(;35>$t+=2;usleep(5e5))echo$t+38,_;

sınırlayıcı olarak alt çizgi kullanır. İle koş -nr.


2

Clojure, 54 bayt

(doseq[t(range 32 73 2)](println t)(Thread/sleep 500))

Üçüncü lisp ftw. Sadece aralıkta tekrar eder, her yinelemeyi yazdırır ve uyur. Sonunda uyur.

Ungolfed:

(doseq [t (range 32 73 2)]
    (println t)
    (Thread/sleep 500)))

Sonunda uyumayan bir sürüm, 66 byte

(doseq[t(range 32 73 2)](println t)(if(< t 72)(Thread/sleep 500)))

Unutmayın, bunlar talimatların belirtmediğinden tam programlardır. Bir işlev gerekirse, her birine bir bayt ekleyin.


2

Raket 46 bayt

(for((i(range 40 73 2)))(println i)(sleep .5))

Ungolfed:

(define (f)
  (for ((i (range 40 73 2)))
    (println i)
    (sleep .5)))

Çalıştırılacak komut: (f)


1
Unutma, 72'de durması gerekmiyor, 500ms daha bekleyebilir. :)
IMustBeSomeone 1

2

Octave, 38 35 bayt

Kaydedilen 3 bayt sayesinde değiştirerek @LuisMendo için endforiçinend

for i=20:36;disp(2*i);sleep(.5);end

Çevrimiçi deneyin!

Ben Octave'de yeniyim, bu yüzden bu çözüm daha da ileriye dönük olabilir. Herhangi bir ipucu bekliyoruz!

Ungolfed

for i=20:36
  disp(2*i)
  sleep(.5)
end

2

Python 2, 57 58 Bayt

Düzenle

Kullanıcımda 57 bayt sayılır, ancak TIO şimdi kendi makineme döndüğüm için 58 diyor, bu da son teklifim. İlginç bir şekilde, TIO zaman aşımına saygı duymuyor gibi görünüyor ve sadece bir seferde bekler ve ardından tüm listeyi yazdırır. Ubuntu kutumda Android için QPython ve Python 2 üzerinde çalışıyor, bu yüzden bu benim için yeterli.

import time
for x in range(40,74,2):print x;time.sleep(.5)

Çevrimiçi deneyin!

Olurdu 58 Python 3 59 her neyse sonrad10 @ dövmek değil.


1
Bu bir sözdizimi hatası range(...)
verirdi

Teşekkürler @ Flp.Tkc. Bu yazım hatası doğrudan benim kullanışlı hense yazdı.
ElPedro

2

R, 44 42 bayt

Basitçe döngü için, muhtemelen bir golfçü yolu var. (Ayrıca, çarpı 44'ü hala 44'dür.)

for(i in 20:36*2)cat(i,"\n",Sys.sleep(.5))

2

F #, 60 bayt

async{for i in 40..2..72 do printfn"%d"i;do!Async.Sleep 500}

Bu bir async ifadesidir, çalıştırmak için onu içine Async.Startveya içine geçirir Async.RunSynchronously.


2

Noodel , rekabetçi olmayan 10 bayt

Noodel meydan okuma oluşturulduktan sonra doğduğu için yarışamıyor :(

40Ḷ16ñ++ḍh

Dene:)

Nasıl çalışır

40         # Creates the literal number 40 and places it into the pipe.
  Ḷ16      # Loop the following code 16 times.
     ñ     # Print what is in the front of the pipe with a new line.
      ++   # Increment what is in the pipe by two.
        ḍh # Delay for a half a second (500ms).

Bu cevapta kullanılan sözdizimini destekleyen bir Noodel sürümü yoktur . İşte doğru bir sürüm:

kȥḶ16ñ⁺2ḍh

<div id="noodel" code="kȥḶ16ñ⁺2ḍh" input="" cols="10" rows="17"></div>

<script src="https://tkellehe.github.io/noodel/noodel-latest.js"></script>
<script src="https://tkellehe.github.io/noodel/ppcg.min.js"></script>

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.