너무 추워 온도를 올려


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

1
초기 출력을 표시하기 전에 500ms를 기다릴 수 있습니까?
FlipTack

35
화씨를 사용하기위한 -1 (실제로는 아니지만 적어도 그것을 사용 한다고 말해야 합니다 .40 도는 약간 춥지 않습니다 )
John Dvorak

20
화씨를 사용하는 경우 +1, 섭씨보다 해상도가 뛰어나며 켈빈이나 랭킨이 아닌 것만 큼 임의적입니다.
Nick T

8
@NickT 그렇다면이 리모컨의 해상도는 1 ° C보다 높은 2 ° F 이므로 운이 나쁘다 . 또한 화씨보다 섭씨에서 더 높은 해상도를 얻을 수 있으며, 0.1로 표시 할 수 있으면 0.5 이상을 표시 할 수있는 리모컨이 있습니다. 어쨌든 나는 단순한 사람이고 22 ° C와 23 ° C를 구별 할 수
없으므로이

답변:


43

배쉬 + 리눅스 유틸리티, 19

seq 40 2 72|pv -qlL2

seq숫자 출력을 생성합니다. pvrate를 2 라인 / 초로 제한합니다.


2
출력 -q억제는 STDERR로 이동하므로 필요하다고 생각하지 않습니다.
Dennis

14
작업에 적합한 도구를 사용하여 "한 가지 일을 잘 수행하십시오"라는 훌륭한 데모. :)
Doorknob

2
가까이 오는 "반 golfscript 안티 골프" 영토.
Vi.

42

마인 1.9.0+, 204 162 바이트 + 58 개 36 28 24 20 블록 = 262 240 232 186 182 blytes

이 솔루션은 문제가 해결되었으며 하나 또는 두 개의 스크린 샷으로 전체적으로 볼 수 없습니다. 두 가지 결함을 사용하고 게임의 다른 두 가지 기능을 남용

운영!  MINECRAFT가 당신을 죽일 것입니다!

이 솔루션은 아래의 것과 동일한 원리를 사용하며 단지 4 블록 더 컴팩트 한 디자인입니다.

  • 체인 명령 블록 (녹색 블록)은 레드 스톤으로 구동 할 수없고 임펄스 명령 블록 (오렌지)의 단일 신호만으로 전원을 공급할 수 없습니다.

  • 피스톤이 완전히 연장되는 데 0.30 초가 걸리고, 레드 스톤은 신호를 등록하는 데 0.10 초만 필요하다는 사실을 남용합니다.

  • 또한 타이머 (TNT)를 끄기 위해 2 중 결함을 남용합니다. 타이머 (TNT) 옆의 레드 스톤은 전원이 공급 될뿐만 아니라 TNT가 또 다른 레드 스톤이라고 생각하여 전원을 공급합니다.

  • 이러한 모든 남용 중에서, 신호 단축기 (TNT 하의 것)는 일회용이며, 전원이 공급 된 후 형태가 바뀌어 신호 "증 분기"(맨 위 주황색 블록) 로 전달할 수 있습니다.

다른 부분의 기능에 대한 약간의 설명은 이전 솔루션에서 볼 수 있습니다 (그러나 바로 아래 솔루션에서 가장 좋습니다). 오프라인으로 사용해 볼 수도 있습니다 ! (4 용액 증분 간략화 만 1.11+ 작동) 을 실행하여 이 명령을 커맨드 블록 .


기존 솔루션, Minecraft 1.9.0+, 186 개의 blytes :

마인 크래프트 남용

TNT는 일반적으로 Minecraft에서 3.0 초 후에 폭발하므로이 /setblock퓨즈는 지정된 퓨즈 가있는 명령 ( ) 으로 배치 해야합니다. 또한 이전 버전에 비해 중복 명령 블록 (42 바이트 포함)과 레드 스톤을 제거하기 위해보다 컴팩트 한 디자인을 사용합니다. 나는 이것이 더 낮아질 수 없다고 확신합니다 ...

이전 솔루션, Minecraft 1.9.0+, 232 개의 blytes :

죄송합니다.이 오래된 솔루션이 4 씩 증가한다는 것을 알았습니다 ...

golfcraft

1.9 명령 블록 체인 기능 (녹색 블록)을 사용하여 블록을 저장합니다. 구형 솔루션보다 더 컴팩트 한 신호 단축기를 사용합니다.

이전 솔루션 인 Minecraft 1.7.0+, 240 개의 blytes :

영혼이없는 괴물

첫 번째 솔루션 (아래)보다 더 컴팩트 한 타이머 (TNT)를 사용합니다.

가장 오래된 솔루션, Minecraft 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

1
... 완료되면 회로가 끊어집니다.
SuperJedi224

@ SuperJedi224 예. 잘못 됐나?
RudolfJelin

2
@ RudolfL.Jelínek 실제로 규칙에 위배되지는 않지만 확실합니다. 다시 말하지만, 이는 코드 골프의 일부입니다.
SuperJedi224

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

s에서는 ms선택 사항입니다, 당신은 바이트 : 저장을 제거 할 수 있습니다
Kritixi LITHOS

@KritixiLithos 나는 그것을 알고 있었다! 그것을 어떻게 간과 했습니까? 감사!
DJMcMayhem

8
학생은 교사가되었다 : P
Kritixi Lithos

1
"컴퓨터에 액세스하면 나중에 gif와 설명을 게시하겠습니다" 반년 기다립니다 (아주 아님)
HyperNeutrino

@HyperNeutrino Hahahahaha, 나는이 답변에 대해 완전히 잊어 버렸습니다. P
DJMcMayhem

10

자바 스크립트 (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 바이트입니다.
Ismael Miguel

익명 함수 선언이 허용되는 메타 합의 를 기반으로 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에서 다른 언어를 호출 할 수있는 의도 된 기능입니까?
마일

2
그렇습니다. 시스템 호출 또는 유사한 기능을 지원하는 모든 언어에서 동일하게 수행 할 수 있어야합니다.
Dennis

골프 도전에서이기는 언어와 도전의 일부가 일정한 값으로 증가하는 경우, 이것은 나에게 매우 길어 보입니다 :)
AlexRacer

6

펄 6 , 30 바이트

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

코드가없는 코드처럼 보이게되어 죄송합니다. 더 짧은 방법은 없습니다.

마지막 숫자 바로 다음에 중지되는 버전은 37 바이트입니다.

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

후에 공간이 필요 36합니까?
NoOneIsHereHere

2
.say&sleep(.5) for 40,42...7229 바이트
ugexe

@ugexe : 비 단락 연산자의 인수가 순서대로 발생하는 부작용에 의존하는 것은 언어 사양이 AFAIK 언어 보증을 보장하지 않기 때문에 구현 특정 해킹처럼 느껴집니다. OTOH, 코드 골프는 괜찮을까요?
smls

@SeeOneRhino : 그렇습니다. {공백없이 다른 표현식에 따라 브래킷 해시의 시작 ( "연관 배열") 첨자로 해석된다. Perl 6은 문법이 의도적으로 역 추적없이 (거의) 소스 코드의 원 패스 파싱을 허용하도록 의도적으로 설계 되었기 때문에 엄격합니다.
smls

6

Pyth-12 바이트

매우 간단합니다. 0-17의 for 루프를 사용합니다.

V17+40yN.d.5

가장 작은 지금까지 당신은 첫 번째 장소에 묶여 있습니다 :)
IMustBeSomeone

6

TI 기본 (CE 또는 CSE 만 해당), 16 바이트

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

많은 명령은 단일 바이트 토큰입니다.


29 바이트가 보입니까? 8 바이트 코드를 보여줄 수 있습니까?
redstarcoder

1
TI-Basic에는 자체 문자 세트가 있습니다. For(, Pause , End, 라인의 시작 부분에 콜론은 모든 단일 바이트이다.
Julian Lachniet 2016

이상해 ... 좋아, 다른 답변들도 그렇게하는 것처럼 보인다.
redstarcoder

1
지금까지 최고! 그러나 문자 세트를 계산하면 계산할 수 없습니다.
IMustBeSomeone


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 에서 사용해보십시오 !


화면을 지우지 않아도됩니다.
Adám

@ Adám 감사합니다. 알아요,하지만 같은 수의 바이트가
걸리고

1
@LuisMendo 골프 챌린지는 편집 / 설명 후 (게스트 후) 화면을 지우지 않는 것에 대해 이야기합니다
Thomas Ward

@ThomasWard 감사합니다! OP는 실제로 변경에 대해 응답자에게 통보해야합니다.
Luis Mendo

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

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루프가있는 길이는 정확히 같은 길이입니다.
JAD

3

펄 6 , 27 바이트

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

say를로 나눈 값을 True강제 변환합니다 .12

유니 코드 shenanigans는 23 자로 줄일 수 있습니다.

sleep .say/2 for ㊵,㊷…72

그러나 이것은 29 UTF-8로 인코딩 된 바이트입니다.


3

파이썬 2, 57 56 55 바이트

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

편집하다:

Mega Man 덕분에 -1 바이트

Flp.Tkc 덕분에 -1 바이트


1
0.5 대신 0.5를 사용하여 1 바이트를 절약 할 수 있습니다.
Mega Man

@MegaMan 감사합니다, 나는 그것이 작동 할 수 있다는 것을
몰랐

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은 44에서 72까지 실행하고 모든 루프에서 카운터를 4 씩 증가시키는 FOR 루프를 시작합니다. 그런 다음 1 초 동안 휴면 상태가됩니다. QBasic에는 더 세밀한 컨트롤 foor sleep가 없기 때문에 .제공 하는 것을 시뮬레이트 .5하는 인수 를 추가했습니다 .


3

코 틀린, 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

하스켈, 67 바이트

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

ghc 만 사용하려는 경우 대신 대신 가져 와서 GHC.Conc사용하여 몇 바이트를 절약 할 수 있습니다 .threadDelayusleep


2

PHP, 38 바이트

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

밑줄을 구분자로 사용합니다. 로 실행하십시오 -nr.


2

클로저, 54 바이트

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

세 번째 리스프 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에서 멈추지 않아도 500ms를 더 기다릴 수 있습니다. :)
IMustBeSomeone 1

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

파이썬 2, 57 58 바이트

편집하다

내 편리한 시간에 57 바이트로 계산되었지만 TIO는 58을 말합니다. 내 컴퓨터로 돌아 왔으므로 이것이 최종 제안입니다. 흥미롭게도 TIO는 시간 초과를 고려하지 않고 기다렸다가 전체 목록을 한 번에 인쇄합니다. 내 우분투 상자의 Android 용 QPython 및 Python 2에서 작동하므로 충분합니다.

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

온라인으로 사용해보십시오!

겠습니까 58 파이썬 3에서 59 어쨌든 sonrad10 @ 이길 수 없습니다.


1
구문 오류가 발생합니다.range(...)
FlipTack

@ Flp.Tkc 감사합니다. 그것은 편리한 오타에 직접 입력되었습니다.
ElPedro

2

R, 44 42 바이트

간단하게 for-loop에는 골퍼가있을 수 있습니다. (또한 교차 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>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.