아이들 게임 ‘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 1
0과 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
훨씬 짧은 대신 사용 했습니다.say
say
tellraw
execute @e ~ ~ ~ tellraw @a "duck"
tellraw @a "goose"
스크린 샷
편집 : { “text”: “duck”}을 “duck”으로 변경했습니다 ( “goose”와 동일).
답변
자바 스크립트, 45 44 42 39 37 바이트
오버플로 오류가 발생할 가능성이 있습니다.
f=_=>`duck
${new Date%2?f():`goose`}`
그것을 테스트
답변
옥타브 , 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
설명:
마지막으로 무작위로 설명하겠습니다. 다른 것들은 비슷하지만 0000 년 1 월 1 일부터 오늘까지 의 일수를 사용합니다 .
rand
(0, 1) 간격의 난수를 반환합니다 . 따라서 11/rand
보다 큰 숫자를 반환합니다 . 범위 때문에 , 보다 큰 임의의 부동 1 과 동일 , 범위를 생성 한 X … , x> = 1 .1:f
f
1: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.