Quin-Bomb을 똑딱!


9

도전:

정수 입력을 사용하여 아래에 지정된 새 프로그램 / 기능을 출력하는 프로그램 또는 기능을 작성하십시오.

입력:

정수 n: 시한 폭탄이 폭발하기 전의 시간 (초)입니다.

산출:

n입력 시간이 초 단위 인 원래 프로그램 은 다음을 수행하는 새로운 프로그램 / 기능을 출력합니다.

  • 했습니다 n이전 프로그램이 실행 된 이후 초 통과? 인쇄BOOM!
  • 그렇지 않으면 : 자체적으로 실행될 때 타이머를 다시 n초로 재설정하는 프로그램 / 기능을 인쇄 하십시오 (첫 번째 출력 된 프로그램 / 기능과 동일하게 작동).

참고 : 시작 시간이 변경 되었기 때문에 첫 번째 출력 된 프로그램 / 기능 (대부분의 언어에서)과 정확히 동일하지 않습니다 (아래 설명 예 참조).

의사 코드 예 :

원래 프로그램이 ABC있고 입력이 60초 라고 가정 해 봅시다 .

ABC& 60출력 DEF(60).

  • DEF(60)60 초 내에 실행 되면 이 출력됩니다 ( DEF_G(60)와 정확히 동일 DEF(60)하지만 새로운 시작 시간 사용).
  • 경우 DEF(60)60 초 동안 실행, 그것은 출력 것이다 BOOM!.

'시작 시간'의 의미를 명확히하는 예 :

  1. 입력 60초 수의 기본 프로그램 은에서 실행됩니다 12:00:00. 시작 시간이 1 인 첫 번째 출력 프로그램을 출력합니다 12:00:00.
  2. 시작 시간이 첫 번째 출력 프로그램 12:00:00은에서 실행됩니다 12:00:45. 시작 시간이 인 두 번째 출력 프로그램을 출력합니다 12:00:45.
  3. 시작 시간이이 세 번째 출력 프로그램 12:00:45이에서 실행됩니다 12:01:25. 시작 시간이 4 번째 인 4 번째 출력 프로그램을 출력합니다 12:01:25.
  4. 시작 시간이있는이 네 번째 출력 프로그램 12:01:25은에서 실행됩니다 12:05:00. 출력 BOOM!됩니다.

첫 번째 출력은 BOOM!이후 12:01:00에 인쇄되는 방법에 유의하십시오 . 그러나 출력 프로그램은 12:01:253 단계에 있더라도 계속해서 다음 프로그램을 출력합니다 BOOM!(출력 출력 프로그램이 첫 번째 출력 프로그램보다 시작 시간이 길기 때문에). .

도전 규칙 :

  • 기본 퀴닝 규칙이 적용됩니다.
  • 최소한 n몇 초가 지났어야합니다. 입력이 경우에 따라서 60시간을 시작하는 것은이었다 12:00:00에서, 12:01:00그것은 것입니다 여전히 출력 V2 프로그램 만에 12:01:01이 출력 것이다 BOOM!.
  • 출력 프로그램은 입력을받지 않습니다 ( 더 짧은 경우 비어있는 사용하지 않는 매개 변수 제외 ). 시작 시간은 다음 프로그램에 '하드 코딩 된'값으로 제공되어야합니다. 따라서 출력 프로그램의 출력이 이전 (대부분의 언어)의 출력과 정확히 같지 않습니다.
  • 기본 프로그램 / 기능의 크기 만 바이트 단위로 계산됩니다.
  • 언어가 지원하는 경우 프로그램 또는 함수를 문자열 (또는 바이트 / 문자 배열 / 목록과 같은 비슷한 형식) 또는 함수로 출력 할 수 있습니다 (확실하지 않은지 물어보십시오).

일반 규칙:

  • 이것은 바이트 단위의 최단 답변이 이깁니다.
    코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하십시오. '모든'프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오.
  • 표준 규칙이 답변에 적용 되므로 STDIN / STDOUT, 적절한 매개 변수 및 리턴 유형의 전체 프로그램과 함께 함수 / 방법을 사용할 수 있습니다. 당신의 전화.
  • 기본 허점 은 금지되어 있습니다.
  • 가능하면 코드 테스트 링크를 추가하십시오.
  • 또한 필요한 경우 설명을 추가하십시오.

"프로그램 출력"이란 무엇입니까? 문자열로 출력 소스 코드? 또는 함수를 반환합니까?
tsh

@tsh 문자열과 함수를 모두 허용하는 규칙을 추가했습니다.
Kevin Cruijssen

답변:


2

자바 스크립트, 51 바이트

f=(t,o=setTimeout(_=>o=0,t*1e3))=>_=>o?f(t):'BOOM!'

브라우저에서 테스트

구 버전

f=(t,o=0)=>{setTimeout(()=>o=1,t*1000);return ()=>o?'BOOM!':f(t)}

브라우저에서 테스트


예상대로 작동하지 않는 것 같습니다.
Maarten Bicknese

당신은 할 수 있습니다 삭제 게시물을하고, 삭제를 취소 어떠한 아래로 투표를 피하기 위해, 한번 고정을.
tsh

에서 골프장을 이용할 수 있습니다 return()=>. 그리고 거의 JavaScript로 프로그래밍하지는 않았지만 테스트 스크립트를 검사하고 함수 출력 기능에 대한 테스트를 추가하여 수정했습니다. 네 번째 함수 테스트로 테스트하십시오. 모든 것이 작동하는 것 같습니다. 놀랍도록 짧아서 추가 할 수 있으므로 +1입니다. 추신 : 규칙에서 함수 대신 문자열을 출력해야한다고 명시했습니다. 그러나 두 가지를 모두 허용하도록 규칙을 약간 변경하겠습니다. 테스트 중에 로깅 할 함수를 출력하도록 스크립트를 수정 해 주시겠습니까?
케빈 크루이 센

1
f=(t,o=setTimeout(_=>o=0,t*1e3))=>_=>o?f(t):'BOOM!'작동
tsh

너는 마법사 니?! 논리를 매개 변수 기본값으로 사용하는 것을 생각하지 않았습니다.
Maarten Bicknese

4

자바 스크립트, 53 바이트

f=(d,t=1/0,n=Date.now()/1e3)=>n>t?'BOOM!':_=>f(d,d+n)


이전 답변 (반환은 문자열이어야 함)

자바 스크립트, 78 바이트

(f=(o,t,d)=>(x=d,n=Date.now()/1e3)=>o&&n>t?'BOOM!':`(f=${f})(${[1,n+x,x]})`)()


좋은 대답, 놀랍게도 읽을 수 있습니다. 나는 약간의 테스트를했고 모든 것이 잘 작동하는 것 같습니다. 나에게서 +1
Kevin Cruijssen

1

자바 8, 234 바이트

n->"v->{long t=System.nanoTime();t/=1e9;String s=\"v->{long t=System.nanoTime();t/=1e9;String s=%c%s%1$c;return t-%d>"+n+"?%1$cBOOM!%1$c:s.format(s,34,s,t);}\";return t-"+(System.nanoTime()/1e9)+">"+n+"?\"BOOM!\":s.format(s,34,s,t);}"

직접 도전 과제를 게시 해 죄송합니다. 그것은 주로 도전에 대한 추가 설명으로 의미되며, 질문 자체에 질문을 추가하거나 답변으로 게시할지 여부를 의심했습니다 (그리고 도전 게시물을 어지럽히 지 않기 위해 답변으로 게시하기로 결정했습니다).
그리고 나는 또한 (시도하고) 이길 무언가라고 말하고 싶지만, 그것은 언급 할 가치조차 없기 때문에 .. 자바 (거의) 항상 구타됩니다. ;피

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

출력 예 :

v->{long t=System.nanoTime();t/=1e9;String s="v->{long t=System.nanoTime();t/=1e9;String s=%c%s%1$c;return t-%d>60?%1$cBOOM!%1$c:s.format(s,34,s,t);}";return t-70492.687613232>60?"BOOM!":s.format(s,34,s,t);}

출력 된 람다 함수를 여기에서 시도하십시오.

출력 예 :

v->{long t=System.nanoTime();t/=1e9;String s="v->{long t=System.nanoTime();t/=1e9;String s=%c%s%1$c;return t-%d>60?%1$cBOOM!%1$c:s.format(s,34,s,t);}";return t-70548>60?"BOOM!":s.format(s,34,s,t);}

설명:

main 함수는 정수 입력을 받아서 문자열을 반환합니다. 기본적으로 정수 입력 및 시작 시간 (시간 소인으로 초 단위)을 하드 코딩 된 값으로 퀴인 함수를 반환합니다.

주요 기능:

n->        // Method with integer parameter and String return-type
  "v->{long t=System.nanoTime();t/=1e9;String s=\"v->{long t=System.nanoTime();t/=1e9;String s=%c%s%1$c;return t-%d>"
          //  First part of the output-function
  +n      //  With the integer input placed as hard-coded value
  +"?%1$cBOOM!%1$c:s.format(s,34,s,t);}\";return t-"
          //  The second part of the output-function
  +(System.nanoTime()/1e9)
          //  With the current time in seconds as hard-coded starting time
  +">"+n  //  And the integer input again (for the output of the output function)
  +"?\"BOOM!\":s.format(s,34,s,t);}"
          //  The final part of the output-function

n=60 아래 예제에서 사용되었습니다.

첫 번째 출력 프로그램 :

v->{                   // Method with empty unused parameter and String return-type
  long t=System.nanoTime();t/=1e9;
                       //  New starting time in seconds
  String s="v->{long t=System.nanoTime();t/=1e9;String s=%c%s%1$c;return t-%d>60?%1$cBOOM!%1$c:s.format(s,34,s,t);}";
                       //  Unformatted (quine) result-function
  return t-            //  If the difference between the new starting time
    70492.687613232    //  and hard-coded starting time from the main function
    >60?               //  is larger than the hard-coded integer from the main function
     "BOOM!"           //   Return "BOOM!"
    :                  //  Else:
     s.format(s,34,s,  //   Return the formatted (quine) result-function,
              t);}     //   with this new starting time as new hardcoded value

두 번째 출력 프로그램 :

70492.687613232로 대체되는 것을 제외하고 첫 번째 출력 프로그램과 동일합니다 70548.



0

05AB1E , 50 바이트

"‘ÒÞ!""žažb‚žcª60β"D.VsI’"34ç ìD«ÿÿ©ÿDU-›iX®:ëÿ’D«

확실히 조금 더 골프를 칠 수는 있지만 수정 된 값으로 quine 프로그램을 출력하는 semi-quine을 출력하는 것은 까다 롭습니다.

온라인으로 시도 또는 20 초 예를 실행하려고 .

설명:

"‘ÒÞ!"                     # Push the string "‘ÒÞ!"
"žažb‚žcª60β"              # Push the string "žažb‚žcª60β"
 D                         # Duplicate it
  .V                       # Execute it as 05AB1E code:
                           #  ža          : Push the current hours
                           #    žb        : Push the current minutes
                           #      ‚       : Pair them together
                           #       žcª    : Append the current seconds
                           #          60β : Convert from this integer list to base-60
s                          # Swap the seconds-integer and duplicated "žažb‚žcª60β"-string
I                          # Push the input
"34ç ìD«ÿÿ©ÿDU-›iX®:ëÿ’  "# Push the string '"34ç ìD«ÿÿ©ÿDU-›iX®:ëÿ',
                           # where the `ÿ` are automatically replaced with the stack-values
 D«                        # Duplicate it, and append them together
                           # (after which the string is output implicitly as result)

결과 프로그램 예 :

"34ç ìD«30žažb‚žcª60β©35555DU-›iX®:ë‘ÒÞ!"34ç ìD«30žažb‚žcª60β©35555DU-›iX®:ë‘ÒÞ!

기본 quine을 기반으로합니다 "34çìD«"34çìD«.

"34ç ìD«30žažb‚žcª60β©35555DU-›iX®:ë‘ÒÞ!"
                           # Push this string
 34ç                       # Push 34, converted to a character: '"'
    ì                      # Prepend it in front of the string
     D«                    # Duplicate this string, and append them together
                           # (we now have the quine-string at the top of the stack)
  žažb‚žcª60β              # Get the current time in seconds similar as above
             ©             # Store it in variable `®` (without popping)
              35555        # Push the time this program was generated
                   DU      # Store a copy in variable `X`
                     -     # Subtract the two times
30                    i   # If the original input-integer is larger than this:
  X®:                      #  Replace integer `X` with `®` in the generated quine-string
                       ë   # Else:
  ‘ÒÞ!                     #  Push dictionary string "BOOM!"
                           # (and output the top of the stack implicitly as result)

내이 05AB1E 팁을 참조하십시오 (섹션 어떻게 사전을 사용하는 방법을? ) 이유를 이해하는 ‘ÒÞ!것입니다 "BOOM!".
참고 : 공백이있는 이유는 çì그렇지 않기 때문에로 인해 사전 문자열 ( triumph)로 해석되기 때문 ’...’입니다.

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