이 도전은 2017 년 8 월 21 일에 일어났던 일식에서 영감을 얻은 간단한 ASCII 아트 도전입니다 0 <= n <= 4
.
n=0:
*****
** **
* *
* *
** **
*******
n=1:
*****
** *****
* *******
* *******
** ******
*******
n=2:
*****
*********
***********
***********
***********
*******
n=3:
*****
***** **
******* *
******* *
****** **
*******
n=4:
*****
** **
* *
* *
** **
*******
규칙
- 인덱스를 0 또는 1로 지정할 수 있습니다.
- 사용 된 문자는 공백이며 공백 이외의
*
인쇄 가능한 문자를 사용할 수 있습니다*
. - 후행 공백은 선택 사항입니다 (공백이있을 수도 있고 없을 수도 있음).
- 이것은 code-golf 이며, 가장 낮은 바이트 수가 승자입니다.
답변
파이썬 (2) , 161 (149) 142 135 바이트
lambda n,u=u' *':u''' *****
****
**
**
****
*******'''.translate({1:u[0<n<3],2:u[0<n<4],3:u[1<n<4]})
Xcoder 씨 에게 -7 감사합니다 .
답변
숯 , 82 81 55 43 바이트
Neil 덕분에 -38 바이트!
Nν”{“⟲FEd⧴_³⟲”‖O¿﹪ν⁴«F﹪ν²G↗³↑²↖²↙³*↑¤*¿⁼ν¹‖
온라인으로 사용해보십시오! 링크는 자세한 버전입니다.
나는 그것을 위해 않았다. : P 아마 40 바이트가 나올 것입니다. 26 38 바이트 … 충분히 가까이?
답변
계피 껌 , 70 바이트
16 진 덤프 :
0000000: 6c33 5053 5050 d002 012e 20a5 0002 4026 l3PSPP.... ...@&
0000010: 9001 0568 6c20 07a6 0648 4080 b521 8a19 ...hl ...H@..!..
0000020: 30a6 1644 1093 0de3 a098 6184 6206 422d 0..D......a.b.B-
0000030: 6136 c20c 6374 3380 3cb8 5aa0 1436 36ba a6..ct3.<.Z..66.
0000040: 5f4c 280f 0f00 _L(...
이 언어를 사용하는 방법을 찾기 위해 너무 오래 기다렸습니다 . :피
시나몬 껌은 풍선 껌이지만 풍선 껌보다 “실제”언어에 가깝습니다.
첫 번째 바이트 ( l
)는 모드를 사전 모드로 설정합니다. 나머지 바이트는 다음 문자열 압축입니다.
0& *****
** **
* *
* *
** **
*******;1& *****
** *****
* *******
* *******
** ******
*******;2& *****
*********
***********
***********
***********
*******;3& *****
***** **
******* *
******* *
****** **
*******;4& *****
** **
* *
* *
** **
*******
이것은 본질적으로 각 텍스트가 숫자로 지정된 조회 테이블을 만듭니다. 그런 다음 프로그램은 입력을 받아 해당 텍스트를 출력합니다.
답변
자바 스크립트 (ES6) 103 102 바이트
f=
n=>` *****
**66733**${s=`
*666777333*`}${s}
**6667333**
*******`.replace(/\d/g,c=>" *"[c*2>>n&1])
<input type=number min=0 max=4 oninput=o.textContent=f(this.value)><pre id=o>
편집 : @ darrylyeo 덕분에 1 바이트가 절약되었습니다.
답변
답변
VI, 108 바이트
D:let@a=@"%2?@":@"%4?"X":"\\d"<CR>
3i <Esc>5a*<Esc>Yphr*$a*<Esc>O**1110333**<Esc>YPi <Esc>3lx3lx"0px4lyl2p$xYp
:%s/<C-r>a/ /g<CR>
:%s/\d/*/g<CR>
<CR>
는 IS Enter
뇌졸중 <C-?>
에 해당 Control + ?
하고, <Esc>
에 Escape
분명히. 이들 각각은 1 바이트로 계산됩니다 ( meta 참조 ). 솔루션의 줄 바꿈은 가독성을위한 것입니다. <CR>
실제 Enter
스트로크 만 나타냅니다 .
입력
입력 파일은을 나타내는 1 자만 포함해야합니다 n
.
쏘다
VI는 다음과 같이 시작해야합니다.
vi -u NONE input
설명
솔루션에는 3 개의 파트가 있습니다. 설명하기가 가장 쉽기 때문에 두 번째 부분 (두 번째 줄)을 먼저 설명하겠습니다.
태양 그리기
태양을 그리는 명령은 다음과 같습니다.
3i <Esc>5a*<Esc>Yphr*$a*<Esc>O**1110333**<Esc>YPi <Esc>3lx3lx"0px4lyl2p$xYp
태양이와 함께 그려야합니다 ,
*
, 0
, 1
와 3
,이 같은 :
*****
**11033**
*111000333*
*111000333*
**1110333**
*******
대칭은이 부분의 바이트 크기를 줄이는 데 도움이되었지만 그렇게 중요하지는 않습니다. 나는 전체 라인을 설명하지 않지만 패턴은 *****
쉽게 마지막 행을 생성하는 데 사용되며, 패턴이 **1110333**
포함 된 3 개 다른 라인을 생성하는 기준으로 촬영되었습니다 0
, 1
하고 3
.
사용하는 것이 중요합니다 0
, 1
그리고 3
채워질 수 일 부품 (다음 설명을 참조). 이 태양을 그리는 데 55 바이트 가 걸립니다 아마도 몇 가지 트릭으로 골프를 칠 수 있습니다.
에 따라 태양을 채우는 n
태양을 올바르게 채우려면 다음 지침을 따르십시오.
- 만약
n = 0
, 다음0
,1
그리고3
(모든 숫자)를 교체해야합니다 - 인 경우
n = 1
,1
로 교체해야하며다른 숫자는
*
- 만약
n = 2
, 다음0
,1
그리고3
(모든 숫자)를 교체해야합니다*
- 인 경우
n = 3
,3
로 교체해야하며다른 숫자는
*
- 경우
n = 4
, 다음0
,1
그리고3
(모든 숫자)를 교체해야합니다(같은
n = 0
)
이를 통해 필요한 대체는 다음과 같습니다.
- 일부 숫자를
( 첫 번째 대체 )로 바꿉니다.
- 다른 모든 숫자를
*
( 두 번째 대체 )로 바꿉니다.
“일부 숫자”는 “숫자 없음”을 의미 할 수 있습니다 ( n = 2
예 :). 모든 숫자가 이미 첫 번째 대체 문자로 대체 된 경우 “다른 모든 숫자”는 “숫자 없음”을 나타낼 수도 있습니다 n = 0
.
두 번째 대체 는 11 바이트 로 쉽게 작성할 수 있습니다 .
:%s/\d/*/g<CR>
첫 번째 치환 은에 따라 달라 지므로 먼저 대체n
할 자릿수를 계산해야합니다. 대체 된 문자가 register에 저장된 경우 대체 a
명령도 11 바이트로 작성 됩니다 .
:%s/<C-r>a/ /g<CR>
<C-r>a
a
명령을 입력하면 레지스터 내용으로 바뀝니다 .
a
이전 명령어에 따라 의 값을 계산하려면 알고리즘은 (의사 코드)입니다.
n := read()
if (n % 2 != 0)
then
a := n
else
if(n % 4 != 0)
then
a := "X"
else
a := "\d"
"X"
문자열은 때 n = 2
자리수가 공백으로 대체되지 않기 때문에 사용됩니다 . 첫 번째 대체가 아무것도하지 않는 한 태양이 아닌 모든 문자열을 여기에서 사용할 수 있습니다.
이것은 31 바이트 로 쓸 수 있습니다 :
D # yank and delete the first character of the file (n) to register "" (yank by default) : n = @"
:let@a= # define register "a content
@"%2 # if (n % 2 != 0)
? # then
@" # n
: # else
@"%4 # if (n % 4 != 0)
? # then
"X" # "X"
: # else
"\\d" # "\\d"
<CR> # calculate "a
해결책
이 모든 부품을 올바른 순서로 넣으면 해결책이 있습니다.
D:let@a=@"%2?@":@"%4?"X":"\\d"<CR> # calculate the digits to replace with spaces
3i <Esc>5a*<Esc>Yphr*$a*<Esc>O**1110333**<Esc>YPi <Esc>3lx3lx"0px4lyl2p$xYp # draw the sun with spaces, stars, 0, 1 and 3
:%s/<C-r>a/ /g<CR> # replace the pattern stored in register "a with spaces
:%s/\d/*/g<CR> # replace the remaining digits with stars
답변
PHP, 114 + 1 바이트
+1 바이트 -R
. 변화하는 힌트에 대해 @Neil에게 감사드립니다.
for(;$c=" *****
**66733**
*666777333*
*666777333*
**6667333**
*******"[$i++];)echo+$c?" *"[$c*2>>$argn&1]:$c;
*
0 색인에 밑줄을 사용합니다 . 파이프로 실행 -nR
하거나 온라인으로 사용해보십시오 .
PHP 5.5 이상 필요 :
오래된 PHP는 리터럴 문자열 인덱싱 (구문 분석 오류)을 이해하지 못합니다.
PHP 7.1은 숫자가 아닌 값에 대해 불평합니다 (교체 +$c
로 대체 $c>0
).