寒すぎる、温度を上げる


53

これは私の最初のゴルフコンテストです。

するべきこと

可能な限り短いバイトで、ACリモートコントロールシステムを構築してください。私の部屋は今あまりにも寒く、リモコンがありません。

今、私はあなたが文字通りそれまたは何かを構築することを望まない、ただこれをゴルフする:

温度の緩やかな増分。40度から始まり、正確に72度で終わります。増分時間は、増分ごとに常に500ミリ秒でなければなりません。最後にさらに500ms待つことができます。ただし、停止することをお勧めします。私のリモコンのように、増分自体は毎回2ずつ増加する必要があります。

画面をクリアしないでください。改行が必要です。

何が起こるか

出力例(括弧内のすべてを出力すべきではありません)。

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

覚えておいてください これは私の最初のゴルフですので、これがゴルフに難しすぎるなら、私は謝罪します。:(

幸運を祈ります、ゴルファー!


3
些細なことですが、「常に500ミリ秒である必要があります」は、合理的なデバイスにとって根本的に厳しすぎます。+/- 10%のような分散を指定することをお勧めします。
FryAmTheEggman 16

1
500ms待ってから初期出力を表示できますか?
FlipTack 16

35
-1華氏を使用するために(ない本当に、しかし、あなたは少なくとも必要があると言うあなたがそれを使用している、摂氏40度ではなく、少しも寒すぎ)
ジョン・ドヴォルザーク

20
それは摂氏よりも優れた解像度を持ち、何でもないケルビンまたはランキンなどの任意のようである華氏を使用するための1、
ニック・T

8
@NickTの場合、このリモコンの解像度は2°Fで1°Cよりも高いため、運が悪かったのです。また、Celciusでは、華氏よりも高い解像度を得ることができます。リモートでは、0.1まで表示できる場合は0.5以上を表示できます。とにかく私は単純な男で、22°Cと23°Cを区別できないため、この場合の高解像度は役に立たない
phuclv

回答:


43

Bash + Linuxユーティリティ、19

seq 40 2 72|pv -qlL2

seq数値出力を生成します。 pvレートを2行/秒に制限します。


2
出力の-q抑制はSTDERRに送られるため、必要ないと思います。
デニス

14
仕事に適したツールを使用して、「1つのことを実行し、適切に実行する」ことを示す優れたデモ :)
ドアノブ

2
近くに来て、「抗golfscript抗ゴルフ」の領土。
Vi。

42

Minecraft 1.9.0 + 、204 162バイト+ 58 36 28 24 20ブロック= 262 240 232 186 182ブライト

このソリューションは徹底的に調べられており、1つまたは2つのスクリーンショットで全体を見ることができません。2つのグリッチを使用し、ゲームの別の2つの機能を悪用する

走れ! MINECRAFTはあなたを殺します!

このソリューションは、以下の原理と同じ原理を使用します。わずか4ブロックのコンパクトな設計です。

  • インパルスコマンドブロック(オレンジ)からの単一の信号によってのみ、チェーンコマンドブロック(緑のブロック)をレッドストーンで駆動できないという事実を悪用します。

  • ピストンが完全に伸びるのに0.30秒かかるという事実を悪用し、レッドストーンは信号を登録するのに0.10秒しか必要としません。

  • また、2つのグリッチを悪用してタイマー(TNT)をオフに設定します。タイマー(TNT)の横にあるレッドストーンは電源が入るだけでなく、TNTがもう1つのレッドストーンであると見なし、電源を入れます。

  • それは信号を通過させ、形状を変化させる給電取得した後に、これらすべての虐待の上に、信号短縮(TNT下のもの)は、一使用であるを通じて「増分」(一番上のオレンジブロック)に

さまざまな部分の機能に関する少しの説明は、古いソリューションで見ることができます(ただし、すぐ下のソリューションで最適です)。オフラインで試すこともできます(4ずつ増加する単純化されたソリューションは、1.11以降でのみ機能します)コマンドブロックでこのコマンド実行します


古いソリューション、Minecraft 1.9.0以降、186ブライト:

MINECRAFT乱用

TNTは通常Minecraftで3.0秒後に爆発するため/setblock、指定されたヒューズを使用してコマンド()でこれを配置する必要があります。また、よりコンパクトな設計を使用して、冗長なコマンドブロック(42バイトを含む)と古いバージョンに対するレッドストーンを削除します。これはもっと低くなることはできないと確信しています...

古いソリューション、Minecraft 1.9.0以降、232ブライト:

おっと、これらの古いソリューションは4ずつ増加することがわかりました...

ゴルフクラフト

1.9コマンドブロックチェーン機能(緑色のブロック)を使用してブロックを保存します。また、従来のソリューションよりもコンパクトな信号短縮器を使用します

さらに古いソリューション、Minecraft 1.7.0 +、240ブライト:

魂のない怪物

最初の解決策(以下)よりもコンパクトなタイマー(TNT)を使用します。

最も古いソリューション、Minecraft 1.7.0 +、262ブライト:

古い怪物


これは、Minecraftが変数を処理する方法のために非常に長いです。

  • 変数を定義するには(int): scoreboard objectives add <variable> dummy

  • 値を変数に設定するには(プレーヤーを含む各エンティティが独自の変数値を持っています): scoreboard players set <entity> <variable> <value>

    • *<entity>すべてのエンティティを選択してバイトを保存するために使用できます。

    • 定義された変数のみを使用できます

    • 変数の値は変数ではなく数値に設定する必要があります

  • var1をvar2でインクリメントするには: scoreboard players operation <entity> var1 += <entity> var2

    • <entity>単一のエンティティでなければなりません。@p、ではない*

スクリーンショットは私自身のもので、WTFPLの下でデュアルライセンスされており、SEが今日使用することを決定したライセンス(現在 cc by-sa 3.0 with attribution required):-)


2
うわー!あなたはMinecraftを使用しました、それは天才です!+1 :)
IMustBeSomeone 16

1
@IMustBeSomeone待って、私はこれをゴルフする方法を見つけました:)
ルドルフジェリン

1
...終了すると、回路が爆発します。
SuperJedi224 16

@ SuperJedi224はい。違いますか?
ルドルフジェリン16

2
@RudolfL.Jelínek私はそれが実際にルールに反していないと確信していますが、それはちょっと奇妙です。繰り返しになりますが、それはゴルフのコードの一部です。
SuperJedi224 16

18

Vimは、24、23バイト/キーストローク

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

@Kritixi Lithosのおかげで1バイト節約できました!

携帯電話で作成され、モバイルvimでテストされています(明らかに本物です)。

実行中のgifは次のとおりです。

ここに画像の説明を入力してください

そして、ここにコマンドごとの説明があります:

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

sms、オプションで、あなたは:)バイトを保存するために、それを削除することができます
KritixiのLithos

@KritixiLithos私はそれを知っていました!どのように私はそれを見落としましたか?ありがとう!
DJMcMayhem

8
学生は教師になりました:P
Kritixi Lithos

1
「コンピューターにアクセスできたら、後でgifと説明を投稿します」が半年(まったくそうではありません)待ちます
-HyperNeutrino

@HyperNeutrinoハハハハハ、私はこの答えを完全に忘れていました。それは良いですか:P
DJMcMayhem

10

JavaScript(ES6)、52バイト

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

f()


回答をよりきちんと整理したものを次に示しますf=(i=40)=>setTimeout(i>70||f,500,i+2,console.log(i))。悲しいことに、まだ同じ52バイトです。
イスマエルミゲル

無名の関数宣言が許可されているというメタコンセンサスに基づい50てカウントする必要はないので、これはバイトではありませんか?f=
R. Kap

1
@ R.Kap良いキャッチですが、この場合、f=関数は(の最初のパラメーターとしてsetTimeout)自身を呼び出す必要があるため、が必要です。
ETHproductions

8

ゼリー13 12バイト

40µṄœS.+2µ⁴¡

オンラインでお試しください!JellyプログラムはBashスクリプトでラップされ、出力の各行の前にタイムスタンプが付けられます。

使い方

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.

最後の反復の後、72の最終値が暗黙的に出力され、プログラムが終了します。


うわー、それは意図された機能であり、他の言語をBashからtioで呼び出すことができますか?
マイル

2
はい、それは意図されています。システムコールまたは同様の機能をサポートするすべての言語で同じことができるはずです。
デニス

ゴルフチャレンジに勝利し、チャレンジの一部が一定の値で増加する言語の場合、これは私には非常に長く見えます:)
AlexRacer

6

Perl 6、30バイト

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

ゴルフのないコードのように見えて申し訳ありません。短くする方法がわかりません...

最後の数字の直後に停止するバージョンは、37バイトになります。

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

後にスペースが必要36ですか?
NoOneIsHere

2
.say&sleep(.5) for 40,42...7229バイト
ugexe

@ugexe:非短絡演算子の引数の副作用に順番に依存することは、言語仕様がこれを保証していないため、実装固有のハックのように感じます。オートー、多分コードゴルフでいいの?
smls 16

@SeeOneRhino:はい。{空白なしに別の発現以下のブラケットは、ハッシュ(「連想配列」)の添字の開始として解釈されます。Perl 6は、その文法が(ほとんど)バックトラッキングなしでソースコードの1パス解析を許可するように意図的に設計されているため、そのように厳密です。
smls 16


6

TI-Basic(CEまたはCSEのみ)、16バイト

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

多くのコマンドはシングルバイトトークンであることに注意してください。


29バイトですか?8バイトコードを表示することは可能ですか?
redstarcoder 16

1
TI-Basicには独自の文字セットがあります。For(Pause End、およびラインの先頭のコロンはすべて、単一のバイトです。
ジュリアンLachniet

奇妙な...申し分なく、他の答えもそれを行うようです。
redstarcoder 16

1
これまでのベスト!しかし、文字セットをちょっと数えてみてもわからない。
IMustBeSomeone 16


5

MATL、14バイト

17:E38+".5Y.@D

MATL Online試しください最初に機能しない場合は、ページをリロードする必要があります。

説明

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)

古いバージョン(仕様変更前)、画面のクリア

17:E38+"5&Xx@D

MATL Online試しください


画面をクリアする必要はありません。
アダム16

@Adámありがとう。私は知っていますが、それは同じバイト数を取り、より良く見えます:-)
ルイスメンドー

1
(おそらくあなたのポストの後に)明確に/編集した後、画面をクリアしない程度のゴルフチャレンジの状態に何か@LuisMendo
トーマス・ウォード

@ThomasWardヘッズアップをありがとう!OPは本当に変更について回答者に通知すべきでした
ルイスメンドー

4

Dyalog APL、20 バイト

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

{ 無名関数

⎕DL ディレイ...

.5⊣ の値ではなく半分(秒)

⎕← 印刷(改行あり)

 引数

それぞれに適用される

38+ 38プラス

二度

⍳17 1から17の整数


4

LinuxでClang 3.8.1でコンパイルされたC、62 59 58バイト

@ranisaltのおかげで2バイト節約

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

59バイト

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

62バイト

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
答えてくれてありがとう、サイトへようこそ。あなたの言語にあまり詳しくない人のために、少し説明を加えていただけますか?
isaacg 16

1
私を歓迎してくれてありがとう。確かに、私はそれができます。また、投稿に必要なバイト数をどのように計算させるのですか?私はそれを自分で書きましたが、他の人の投稿では見た目が異なります。
ウェイドタイラー

誰もが自分で書いて、自動計算機能はありません。ヘッダーは** ... **マークアップで使用し# ...ますが、このサイトの従来のヘッダーはを使用します。あなたの答えを編集しましたので、あなたはそれがどのように行われたかを見ることができます。
isaacg 16

1
@isaacgどうもありがとう。今では良く見えます。
ウェイドタイラー

1
を使用すると、s<72もう1バイト節約されます。
ラニソルト16

4

スクラッチ、5ブロック

(ディスク容量56.0kb)

img

(低解像度でごめんなさい!)

分かりやすい、本当に。変数値は「ステージ」上のボックスに表示されます。


これには4の増分はありませんか?(要求として2とは対照的に)
VisualMelon

1
@VisualMelonあ、通知をありがとう-編集する前に質問を誤解していた。後でそれを読み直し、この答えを忘れながら他の答えを編集しました。ありがとう!
ルドルフジェリン

3

Mathematica、34バイト

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

完全なプログラム。STDOUTへの入力および出力はありません。


3

R、49バイト

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

非常に簡単な解決策ですが、トリックを行います。


初期x = 40は、開始時に40を印刷しません。x = 38から始める必要があります。
rnso 16

おかしい、同じ考えですが、for-ループを使用するとまったく同じ長さです。
JAD

3

Perl 6、27バイト

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

sayTrue、で1除算されると数値に強制変換され2ます。

ユニコードシェナンガンは、23文字まで短縮できます。

sleep .say/2 for ㊵,㊷…72

しかし、それは29 UTF-8エンコードされたバイトです。


3

Python 2、57 56 55バイト

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

編集:

メガバイトのおかげで-1バイト

Flp.Tkcのおかげで-1バイト


1
あなたの代わりに0.5の0.5使って、1つのバイトを救うことができる
ロックマン

@MegaManおかげで、私は仕事ができることに気づいていなかった
sonrad10

printステートメントの括弧を外してPython 2を使用してみませんか?
FlipTack 16


3

C#、95バイト

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

これは単純なforループで、最後にさらに500ms待機します。


3

QBIC、21バイト

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

QBICはFORループを開始し、44から72まで実行し、ループごとにカウンターを4ずつ増やします。その後、1秒間スリープします。QBasicには、よりきめの細かいコントロールfoor sleepがないため、引数として.与えることをシミュレートするためにを追加しました.5


3

Kotlin、47バイト

問題のステートメントでは、ソリューションには実際には2ずつ増分する必要があるとは言われていなかったため、40+2*iここでは合法です。

通常のKotlinソースとして記述されている場合main

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

(77バイト)

UPD:Kotlin 1.3では、args:Array<String>削除できるため、18バイト少なくなります。

Kotlin Scriptでは、プログラム全体は次のようになります

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

(47バイト)


最初のプログラムは、最初に長い時間待機してから、すべての結果を出力するようです。
devRicher

1
@ devRicher、try.kotlinlang.orgで実行しているようです。もしそうなら、それは環境の問題であり、stdoutがフラッシュされていないなどのようです。ローカルで実行すると、意図したとおりに動作します。
ホットキー


2

Haskell、67バイト

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

ghcのみGHC.Concを使用threadDelayする場合は、の代わりにインポートして使用することで数バイトを節約できますusleep


2

php、38バイト

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

アンダースコアを区切り文字として使用します。で実行し-nrます。


2

Clojure、54バイト

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

3番目のlisp ftw。範囲内で反復し、各反復を印刷およびスリープします。最後に寝ます。

ゴルフをしていない:

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

最後にスリープしないバージョン、66バイト

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

指示では指定されていないため、これらは完全なプログラムです。関数が必要な場合は、それぞれにバイトを追加します。


2

ラケット46バイト

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

ゴルフをしていない:

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

実行するコマンド: (f)


1
72で停止する必要はなく、さらに500ミリ秒待つことができます。:)
IMustBeSomeone 16

2

オクターブ、38 35バイト

@LuisMendoのおかげで3バイト節約されendforました。end

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

オンラインでお試しください!

私はOctaveを初めて使用するので、この解決策はさらに進化するかもしれません。どんなヒントでも大歓迎です!

非ゴルフ

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

2

Pythonの2、57の 58バイト

編集

私の手元では57バイトとカウントされましたが、TIOは58を言ったので、私は自分のマシンに戻ったので、それが私の最後のオファーです。興味深いことに、TIOはタイムアウトを尊重していないようで、ただ待ってからリスト全体を一度に印刷します。AndroidのQPythonとUbuntuボックスのPython 2で動作するため、これで十分です。

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

オンラインでお試しください!

Python 3では58 59になるので、とにかく@ sonrad10に勝るものはありません。


1
これは後にコロン(セミコロンではない)を必要とする、構文エラーをスローしていましたrange(...)
FlipTack

ありがとう@ Flp.Tkc。それは私のタイプミスの手に直接入力されました。
エルペドロ16

2

R、44 42バイト

簡単なforループ、ゴルファーの方法がありそうです。(また、バツ印の44はまだ通常の44です...)

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

2

F#、60バイト

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

これは、それを実行してAsync.Startor に渡すための非同期式Async.RunSynchronouslyです。


2

Noodel、競合しない10バイト

Noodelはチャレンジが作成された後に生まれたため、競争できません:(

40Ḷ16ñ++ḍh

それを試してみてください:)

使い方

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).

この回答で使用されている構文をサポートするNoodelのバージョンはありません。正しいバージョンは次のとおりです。

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>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.