(관련 / 영감 : 볼링장 그리기 )
겨울철에 재미있는 취미는 농구와 같은 큰 공과 작은 눈사람 인물을 사용하여 눈사람 볼링을 수행하는 것입니다. 이것을 ASCII로 다시 만들어 봅시다.
각 눈사람은 다음으로 구성됩니다.
(.,.)
( : )
눈사람 “핀”의 정렬은 다음과 같습니다.
(.,.) (.,.) (.,.) (.,.)
( : ) ( : ) ( : ) ( : )
(.,.) (.,.) (.,.)
( : ) ( : ) ( : )
(.,.) (.,.)
( : ) ( : )
(.,.)
( : )
이러한 “핀”에서 표시되어 있습니다 1
에 10
로
7 8 9 10
4 5 6
2 3
1
지금까지는 표준입니다. 그러나 일반적인 볼링과 달리 눈사람 핀은 단순히 평평 해져 완전히 제거되지 않습니다. 이것은 맞은 핀의 눈을 수동으로 평평하게해야하는 사람이 수행합니다. 납작한 눈사람은 _____
공백이있는 (5 개의 밑줄)로 표시됩니다 . 다음은 1 3 5 6 9 10
핀이 평평한 예입니다 ( 2 4 7 8
핀만 남음을 의미 ).
(.,.) (.,.)
( : ) ( : ) _____ _____
(.,.)
( : ) _____ _____
(.,.)
( : ) _____
_____
입력
- 의 정수 목록
1
에10
편리한 형식으로 핀을 강타 따라서 필요했다 나타내는 평평합니다. - 각 숫자는 최대 한 번만 나타나며 숫자는 순서에 따라 정렬 (정렬, 정렬되지 않은 정렬, 내림차순 정렬) 할 수 있습니다.
- 입력은 하나 이상의 정수를 갖도록 보장됩니다.
산출
올바른 핀을 평평하게하여 눈사람 핀의 결과 ASCII 아트 표현.
규칙
- 문자 자체가 올바르게 정렬되는 한 줄 바꿈 또는 공백은 모두 선택 사항입니다.
- 전체 프로그램 또는 기능이 허용됩니다. 함수 인 경우 출력하지 않고 출력을 반환 할 수 있습니다.
- 가능하면 사람들이 코드를 시험해 볼 수 있도록 온라인 테스트 환경에 대한 링크를 포함하십시오!
- 표준 허점 은 금지되어 있습니다.
- 이것은 코드 골프 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.
예
1 3 5 6 9 10
(.,.) (.,.)
( : ) ( : ) _____ _____
(.,.)
( : ) _____ _____
(.,.)
( : ) _____
_____
1 2 3
(.,.) (.,.) (.,.) (.,.)
( : ) ( : ) ( : ) ( : )
(.,.) (.,.) (.,.)
( : ) ( : ) ( : )
_____ _____
_____
1 2 3 4 5 6 8 9 10
(.,.)
( : ) _____ _____ _____
_____ _____ _____
_____ _____
_____
답변
05AB1E , 45 44 바이트
TF"(.,.)( : )"„ _5×{«4ä2ä¹N>åè})4L£Rvyø»}».c
설명
TF # for N in [0 ... 9] do:
"(.,.)( : )" # push string
„ _ # push the string " _"
5× # repeat it 5 times
{ # sort
« # concatenate the strings
4ä # split the string in 4 parts
2ä # split the list in 2 parts
¹N>åè # if index+1 is in the input, push the first part
# else push the second part
} # end loop
) # wrap stack in a list
4L£ # split list in parts of size 1,2,3,4
R # reverse list
v # for each list in list of lists
yø # transpose the list
» # join by spaces and newlines
} # end loop
» # join by newlines
.c # centralize
답변
눈사람 1.0.2 , 157 바이트
(()("789:045600230001"4aG::48nSdU][:#:]eq]/nM;AsI[:"_____"wR[" "wR/aC;:"( : )"wR["(.,.)"wR/aC;bI;:" "wRdUaC;bI\#**\;aMaZ:" "aJ1AfL;aM;aM1AfL"
"aJ1AfL*))
이 도전을 보았을 때 나는 완벽한 언어로 대답해야한다는 것을 알았습니다 …
이것은 숫자의 배열로 입력을 취하고 현재 영구를 통해 문자열로 출력하는 서브 루틴입니다.
“가독성”/ 미학을 위해 포장 :
(()("789:045600230001"4aG::48nSdU][:#:]eq]/nM;AsI[
:"_____"wR[" "wR/aC;:"( : )"wR["(.,.)"wR/aC;bI
;:" "wRdUaC;bI\#**\;aMaZ:" "aJ1AfL;aM;aM1AfL"
"aJ1AfL*))
약간 ungolfed / 댓글 버전 :
}
1wR`
3wR`aC`
5wR`aC`
6wR`aC`
9wR`aC`
*
((
)(
"789:045600230001" // pin layout data
4aG // split into groups of 4; we need each row twice
: // map over groups of 2 output lines
: // map over pins (or whitespace)
48nS // subtract ascii '0'
dU][ // duplicate the pin; we need it in the if{}
: // if (pin) {
#:]eq]/nM;AsI[:"_____"wR[" "wR/aC;:"( : )"wR["(.,.)"wR/aC;bI
;: // } else {
" "wRdUaC
;bI // }
\#**\ // maneuver the permavars around to discard pin
;aM
aZ:" "aJ1AfL;aM
;aM
1AfL // flatten (simulate a flatmap)
"
"aJ // join on newline
1AfL // flatten again into a single string
*
))
#sP
답변
스택 된 비경쟁 118 바이트
deepmap
이 도전 이후에 수많은 버그 수정과 함께 몇 가지 추가 사항을 추가 했습니다. 여기 사용해보십시오!
@a((7 8 9 10)(4 5 6)(2 3)(1)){e:('(.,.)
( : )' '
_'5 hrep)a e has#' 'hcat
}deepmap{e i:'
'i 3*hrep e,$hcat#/!LF+}map
언 골프
{ a :
((7 8 9 10) (4 5 6) (2 3) (1))
{ e :
(
'(.,.)' LF '( : )' + +
' ' LF '_' + + 5 hrep
) @possible
a e has @ind
possible ind get @res
' ' @padding
res padding hcat return
} deepmap
{ e i:
' ' LF ' ' + + i 3 * hrep
e ,
$hcat insert!
LF +
} map
} @:bowl
(1 2 3 4 6 10) bowl out
산출:
(.,.) (.,.) (.,.)
( : ) ( : ) ( : ) _____
(.,.)
_____ ( : ) _____
_____ _____
_____
답변
파이썬 2 248 243 241 226 224 223 221 210 206 200 177 바이트
@Rod 덕분에 -5
Rod 덕분에 다시 -15
Rod에서 공간 계산을 다시 사용하여 -1
더 많은 줄과 들여 쓰기로 인해 더 길어 지지만 놀랍게도 11 바이트 더 짧습니다.
나는 이것이 200 이하가 될 것이라고 확신합니다 …
나는 옳았지만 @ Pietu1998의 23 바이트 가치의 힌트가 없었습니다. 많은 감사합니다!
i,z=input(),0;m=['']*10;n=m[:]
for x in range(11):m[x-1],n[x-1]=('(.,.)',' '*5,'( : )','_'*5)[x in i::2]
for y in 10,6,3,1:
for q in m,n:print' '*3*z+' '.join(q[y-4+z:y])
z+=1
정수 목록으로 입력을받습니다. 248에서 너무 크지 만 작동합니다.
답변
C 번호 233 221 213 203 바이트
메소드는 떨어진 핀 목록으로 int 배열 a를 사용합니다.
string S(int[]a){string o="",x=o,y=o,z=o;for(int i=10;i>0;){var c=a.Contains(i);x=(c?" ":"(.,.) ")+x;y=(c?"_____ ":"( : ) ")+y;if(i==7|i<5&i--!=3){o+=$"{z}{x}\n{z}{y}\n";x=y="";z+=" ";}}return o;}
포장
string S(int[]a){string o="",x=o,y=o,z=o;for(int i=10;i>0;)
{var c=a.Contains(i);x=(c?" ":"(.,.) ")+x;y=(c?"_____ ":
"( : ) ")+y;if(i==7|i<5&i--!=3){o+=$"{z}{x}\n{z}{y}\n";x=y="";
z+=" ";}}return o;}
넓히는
string S(int[] a)
{
string o = "", x = o, y = o, z= o;
for (int i = 10; i > 0;)
{
var c = a.Contains(i);
x = (c ? " " : "(.,.) ") + x;
y = (c ? "_____ " : "( : ) ") + y;
if (i==7|i<5&i--!=3)
{
o += $"{z}{x}\n{z}{y}\n";
x = y = "";
z += " ";
}
}
return o;
}
Ghost, raznagul 및 auhmaan의 의견에 대한 제안으로 몇 바이트를 떨어 뜨 렸습니다.
답변
배치, 262 바이트
@echo off
for /l %%i in (1,1,10)do set s%%i=( : )
for %%i in (%*)do set s%%i=_____
set l=call:l
%l%%s7%%s8%%s9%%s10%
%l%" %s4%%s5%%s6%
%l%" %s2%%s3%
%l%" %s1%
exit/b
:l
set s=%~1
set s=%s:( : )=(.,.)%
echo(%s:_____= %
echo(%~1
참고 : 2, 3, 4 행은 공백으로 끝나고 각 행에 후행 공백을 출력합니다. 5 바이트의 비용으로 제거 할 수 있습니다. 눈사람의 하단 절반으로 변수 s1 … s10을 만든 다음 명령 줄 인수로 주어진 변수를 병합하여 작동합니다. 적절한 행이 두 번 인쇄되며 처음에는 아래쪽 절반이 위쪽 절반으로 바뀝니다. 이렇게하면 상한 및 하반 변수 두 세트를 사용하여 18 바이트를 절약 할 수 있습니다.
답변
자바 스크립트, 154 149 바이트
f=
a=>`6 7 8 9
_3 4 5
__1 2
___0
`[r='replace'](/\d|_/g,m=>++m?~a.indexOf(m)?'_____':'( : )':' ')[r](/.*\n?/g,m=>m[r](/ : |_/g,s=>s=='_'?' ':'.,.')+m)
I.oninput=()=>O.innerHTML=f(JSON.parse(`[${I.value.match(/\d+/g)}]`))
I.oninput()
<input id=I value="1 3 5 6 9 10"><pre id=O>