오리, 오리, 거위! 정해진 횟수만큼

아이들 게임 ‘Duck, Duck, Goose’를 기억 하십니까? 아니? 나도 마찬가지야

도전

  • 개별 라인에 ‘오리’라는 단어를 정해진 횟수만큼 인쇄하십시오.
  • ‘goose’라는 단어를 인쇄하십시오.
  • 프로그램이 종료됩니다.

규칙

  • 가장 적은 바이트로 게임을 시도하십시오.
  • 오리는 하나 이상 있어야합니다.
  • 목록 끝에 거위가 정확히 하나 있어야합니다.
  • 각 줄에 정확히 하나의 새가 있어야합니다. 빈 줄이 없습니다.
  • 출력 된 문자열의 경우에는 관련이 없습니다.
  • 줄 안에 공백이 있습니다.
  • 프로그램이 완료되어야합니다.
  • 프로그램이 지속적으로 같은 수의 오리를 생산해서는 안됩니다.

즐기세요!


참고 :이 질문은 비 결정적 출력을 생성하는 가장 짧은 코드 의 사본이 아닙니다

이유는 다음과 같습니다.

  • 어린이 게임과의 관계
  • 결과 문자열의 정의 된 시작 및 끝 요구 사항 다른 챌린지에는 지정된 출력이 없습니다.
  • 답변 다른 경우, 중복되지 않은 챌린지는 한 자리 수의 바이트입니다. 이것의 평균은 약 30 정도입니다.
  • 이 도전과 그 도전 사이의 중첩 정도에 따라 ‘랜덤’태그를 포함한 코드 골프 질문은 중복됩니다. 모두 삭제해야합니까?
  • 이 챌린지에 대한 코드 답변은 다른 챌린지와 일치하지만 (이의도 무한 방식으로) 해당 챌린지에 대한 답변은이 챌린지와 일치하지 않습니다.


답변

젤리 , 13 바이트

2X“¢;ÆS»ẋ“ʋ¢»

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

설명:

2X“¢;ÆS»ẋ“ʋ¢»

2X             Random number (1 or 2)
  “¢;ÆS»       Compressed string equivalent to "duck\n"
        ẋ      Repeat the "duck\n" that random number of times
         “ʋ¢»  Compresses string equivalent to "goose"
               Implicitly concatenated and returned

더 읽기 쉬운 버전 : 온라인으로 사용해보십시오!

항상 1 ~ 2 마리의 오리를 반환합니다.


답변

작업 인화점 스크립팅 언어, 48 바이트

f={s="duck\n";s+([s,""]select random 1)+"goose"}

항상 한두 오리를 인쇄합니다.

random 10과 1 사이의 (부동 소수점) 숫자를 반환합니다.이 숫자는 select배열과 함께 인수로 전달됩니다 [s,""]. 그런 다음 난수가 가장 가까운 정수 (0 또는 1)로 반올림되고 해당 인덱스의 배열 요소가 배열에서 선택됩니다.

전화 :

hint call f

산출:

대체 56 바이트 버전 :

f={s="duck\n";format[s+"%1goose",[s,""]select random 1]}

답변

월드 오브 워크래프트 81 바이트

월드 오브 워크래프트에서 실행할 수있는 매크로는 다음과 같습니다.

/run for x=1,random(1,9) do SendChatMessage("Duck") end; SendChatMessage("Goose")

답변

마인 크래프트 <1.13, 72 54 바이트

미안 해요

명령:

  • 크리에이티브 모드에서 새로운 마인 크래프트 월드 만들기
  • 해당 세계의 저장 폴더를 찾아 다음 코드를 data/functions/minecraft/ddg.mcfunction
  • /function ddg게임 콘솔에서 실행

작동 방식 :

세계의 모든 엔터티에 대해 “duck”이라는 단어를 출력 한 다음 “goose”라는 단어를 출력합니다. 개체가 지속적으로 생성되고 데스 폰되기 때문에 “오리”의 수는 일정하지 않습니다. 엔티티의 이름을 출력하고 정확히 말한 것을 출력 하기 때문에 tellraw훨씬 짧은 대신 사용 했습니다.saysaytellraw

execute @e ~ ~ ~ tellraw @a "duck"
tellraw @a "goose"

스크린 샷

편집 : { “text”: “duck”}을 “duck”으로 변경했습니다 ( “goose”와 동일).


답변

자바 스크립트, 45 44 42 39 37 바이트

오버플로 오류가 발생할 가능성이 있습니다.

f=_=>`duck
${new Date%2?f():`goose`}`

그것을 테스트

o.innerText=(
f=_=>`duck
${new Date%2?f():`goose`}`
)()
<pre id=o></pre>

답변

옥타브 , 38 33 바이트

이것은 가장 짧지 않지만 (36 바이트) 가장 좋아합니다. 설명은 하단에 있습니다.

disp(['duck '+~(1:1/rand)';'goose'])

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


몇 가지 짧은 변형 :

이것은 원칙적으로 작동하지만 (33 바이트) 온라인 인터프리터가 시간 초과됩니다.

disp(['duck '+~(1:now)';'goose'])

출력을 짧게하기 위해 일부 바이트를 추가하면 35 또는 36 바이트가됩니다.

disp(['duck '+~(7e5:now)';'goose'])   % Works on octave-online.net
disp(['duck '+~(7.3e5:now)';'goose']) % Works on tio.run

설명:

마지막으로 무작위로 설명하겠습니다. 다른 것들은 비슷하지만 00001 월 1 일부터 오늘까지 의 일수를 사용합니다 .

rand(0, 1) 간격의 난수를 반환합니다 . 따라서 11/rand 보다 큰 숫자를 반환합니다 . 범위 때문에 , 보다 큰 임의의 부동 1 과 동일 , 범위를 생성 한 X … , x> = 1 .1:ff1:floor(f)1:1/rand

Octave가 스택 기반 언어 인 것처럼 이것을 설명하려고 노력할 것입니다.

      'duck '                           % Push the string 'duck ' to the stack
               (1:1/rand)               % Push a vector 1... floor(1/rand)
              ~(1:1/rand)'              % Negate the vector (making it all zeros)
                                        % and transpose it.
             +                          % Add 'duck ' with the vertical vector of zeros
                                        % to implicitly duplicate the string r times
     [                    ;'goose']     % Push the string 'goose' and concatenate
                                        % vertically with the rest
disp(                              )    % Display it all.

답변

펄 5 , 20 바이트

먼저 실용적인 26 바이트 :

거위에 걸리기 전에 1-9 번 오리.

say"Duck
"x(1+$^T%9),Goose

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

그러나 많은 메모리와 시간이 있다면 Chris가 제안한이 20 바이트 버전 도 작동합니다.

say"Duck
"x$^T,Goose

이것은 또한 2038 년 문제Perl 5에 대해 해결 될 것이라고 가정하고 , 그렇지 않으면 1 초 20 년 동안 유효하지 않을 것입니다.