我太冷了,调高温度


53

这是我的第一次高尔夫比赛。

你需要做什么

用最短的字节为我构建AC远程控制系统。我的房间现在太冷了,我想念我的遥控器。

现在,我不希望您从字面上构建它或任何东西,只需打高尔夫球:

缓慢的温度增量,从40度开始,恰好在72度结束。增量时间必须始终为每次增量500毫秒。最后可以再等待500毫秒。我希望它停止。增量本身每次必须增加两次,就像我的遥控器一样。

您不应该清除屏幕。您应该有换行符。

应该发生什么

示例输出(不应该输出括号中的所有内容)。

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

请记住, 这是我的第一场高尔夫,因此对打高尔夫球太困难了,我深表歉意。:(

祝您好运,高尔夫球手!


3
较小的东西,但是对于任何合理的设备,“必须始终为500毫秒”从根本上来说太严格了。我建议指定方差,例如+/- 10%。
FryAmTheEggman '16

1
您可以等待500毫秒再显示初始输出吗?
FlipTack

35
-1用于使用华氏温度(不是真的,但您至少应该您正在使用它; 40摄氏度一点也不冷)
John Dvorak

20
+1使用华氏度,它的分辨率比摄氏温度更好,并且与除开尔文或兰金之外的任何东西一样任意
Nick T

8
@NickT,那么您不走运,因为此遥控器的分辨率为2°F,高于1°C。使用遥控器可以显示0.5的摄氏温度,而比华氏显示的分辨率高,如果显示为0.1,则分辨率更高。无论如何,我是一个简单的人,无法在22°C和23°C之间进行区分,因此这种情况下的高分辨率对我来说毫无用处
phuclv

Answers:



42

的Minecraft 1.9.0+,204个 162字节+ 58个 36 28 24 20块= 262个 240 232 186 182 blytes

这个解决方案是经过精心设计的,它不能完整地显示在一个甚至两个屏幕截图中。使用两个小故障并滥用游戏的其他两个功能

跑! 矿工将杀了你!

该解决方案使用与以下解决方案相同的原理,但紧凑设计只有4个块。

  • 滥用链命令块(绿色块)不能由红石驱动的事实,只能由脉冲命令块(橙色)中的单个信号驱动。

  • 滥用活塞需要0.30秒才能完全伸展,而红石只需要0.10s即可记录信号。

  • 还滥用了双重故障来关闭计时器(TNT):计时器(TNT)旁边的红石不仅被供电,而且还认为TNT是另一个红石并为其供电。

  • 除了所有这些滥用之外,信号缩短器(TNT之下的东西)是一种用途,在通电后会改变形状,从而允许信号通过它传递到“增量器”(最上面的橙色块)

在较旧的解决方案中可以看到有关其不同部分功能的一些解释(但在下面的解决方案中最好)。您也可以离线尝试!(简化的解决方案递增4,仅在1.11+中有效)通过在命令块中运行此命令


旧的解决方案,《我的世界》 1.9.0+,186个blytes:

矿工滥用

由于在Minecraft中,TNT通常会在3.0秒后爆炸,因此必须/setblock使用带有指定保险丝的命令()将其放置。还使用更紧凑的设计来删除冗余命令块(包含42个字节)和针对旧版本的红石。我敢肯定这不会降低...

较旧的解决方案,Minecraft 1.9.0 +,232个blytes:

糟糕,我发现这些较旧的解决方案会增加4 ...

高尔夫球手

使用1.9命令块链功能(绿色块事物)保存块。与旧解决方案相比,还使用了更紧凑的信号缩短器

更老的解决方案,Minecraft 1.7.0 +,240个blytes:

无情的怪物

比第一个解决方案(以下)使用更紧凑的计时器(TNT)。

最早的解决方案,《我的世界》 1.7.0+,262种blytes:

老怪物


由于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

1
@IMustBeSomeone等等,我找到了一种打高尔夫球的方法:)
RudolfJelin 16/12/25

1
...您的电路在完成后会自行炸毁。
SuperJedi224

@ SuperJedi224是的。这是错的吗?
RudolfJelin

2
@RudolfL.Jelínek我敢肯定,这实际上并没有违反规则,但是有点奇怪。再说一遍,这是高尔夫代码的一部分。
SuperJedi224 '16

18

VIM,24,23个字节/击键

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

感谢@Kritixi Lithos,节省了一个字节!

用我的手机编写,并在移动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 16/12/24

1
“一旦我可以使用计算机,我会稍后发布gif和说明”,等待了半年(不太
长时间

@HyperNeutrino哈哈哈哈哈,我完全忘记了这个答案。那更好

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'2

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,然后退出程序。


哇,这是预定功能,能够在Tio中从Bash调用其他语言吗?
英里

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:依靠非短路运算符的参数的副作用是按顺序发生的,对我来说,这感觉像是特定于实现的黑客,因为AFAIK语言规范不能保证这一点。OTOH,也许对于代码高尔夫来说还可以吗?
smls

@SeeOneRhino:是的。{另一个没有空格的表达式之后的方括号被解释为哈希(“关联数组”)下标的开头。Perl 6如此严格,因为它的语法是经过精心设计的,以允许对源代码进行一次遍历解析,而几乎没有回溯。
smls


6

TI-Basic(仅限CE或CSE),16字节

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

请注意,许多命令都是单字节令牌。


我看到29个字节了吗?您可以显示8个字节的代码吗?
redstarcoder

1
TI-Basic具有自己的字符集。For(Pause End,和行开头的冒号都是单字节。
朱利安·拉希涅

奇怪...好吧,好像其他答案也一样。
redstarcoder

1
迄今为止最好的!但是,我不知道我是否会计算字符集。
IMustBeSomeone


5

MATL,14个字节

17:E38+".5Y.@D

MATL在线中尝试一下如果页面最初不起作用,则可能需要重新加载该页面。

说明

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在线中尝试一下


您无需清除屏幕。
阿达姆(Adám)2016年

@Adám谢谢。我知道,但是它占用了相同数量的字节,并且看起来更好:-)
Luis Mendo

1
@LuisMendo高尔夫挑战赛提出了一些有关在编辑/弄清楚后(可能在您发帖后)不清除屏幕的问题
Thomas Ward

@ThomasWard感谢您的注意!OP确实应该已经将有关此更改的信息通知了答复者
Luis Mendo,2016年

4

Dyalog APL,20 字节

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

{ 匿名函数

⎕DL 延迟...

.5⊣ 一半(一秒钟),而不是

⎕← 打印(用换行符)

 论点

应用于每个

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

1
感谢您的光临。是的,我可以做到。另外,如何使我的帖子计算需要多少字节?我自己写的,但在其他人的帖子中看起来却有所不同。
韦德·泰勒

每个人都自己编写,没有自动计算功能。您的标头使用** ... **标记,而本网站上的传统标头使用# ...。我已经编辑了您的答案,所以您可以看到它的完成方式。
isaacg '16

1
@isaacg非常感谢。现在看起来确实更好。
韦德·泰勒

1
使用s<72保存另一个字节。
ranisalt

4

划痕,5块

(磁盘空间56.0kb)

img

(对不起,分辨率太低!)

不言自明,真的。变量值显示在“舞台”上的框中。


这不增加4吗?(而不是2的请求)
VisualMelon

1
@VisualMelon啊,感谢您的通知-在编辑问题之前我误解了该问题;后来我重新阅读并编辑了另一个答案,而忘记了这个答案。谢谢!
RudolfJelin

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

有趣的是,相同的想法但带有for-loop的长度是完全相同的。
2016年

3

Perl 6,27个字节

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

say返回True1除以时将被强制转换为数字2

Unicode恶作剧代码最多可以包含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字节感谢Mega Man

-1字节归功于Flp.Tkc


1
您可以通过使用0.5而不是0.5保存一个字节
洛克人

@MegaMan谢谢,我还没意识到那行得通
sonrad10 '16

为什么不删除print语句的括号并使用Python 2?
FlipTack


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没有更细粒度的控制对象sleep,因此我添加了一个.模拟给定.5作为参数。


3

Kotlin,47个字节

我想问题说明中没有说解决方案实际上应该包含两个增量,因此 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))

第三口交。只是在范围内进行迭代,每次迭代都打印并休眠。睡到最后。

取消高尔夫:

(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,2016年

2

八度,38 35字节

@LuisMendo节省了3个字节,方法是更改endforend

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 for Android和Python 2,可在我的Ubuntu盒子上使用,对我来说已经足够了。

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

在线尝试!

在Python 3中将是58 59,因此无论如何都不会击败@ sonrad10。


1
这将引发语法错误,您需要在range(...)
FlipTack

谢谢@ Flp.Tkc。它是在我方便的输入框中直接键入的。
ElPedro '16

2

R,44 42字节

直截了当的循环,可能是高尔夫球手。(此外,划掉的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.Start或中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>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.