달의 위상을 그립니다


20

도전

달의 위상이 주어지면 ASCII 아트를 사용하여 그립니다.

프로그램은 초승달, 초승달, 1 분기, 왁싱 깁슨, 보름달, 멍청한 멍청이, 지난 분기 및 쇠약 한 초승달을 처리해야합니다. 입력은 정수입니다.

0 -> new moon
1 -> waxing crescent
2 -> first quarter
3 -> waxing gibbous
4 -> full moon
5 -> waning gibbous
6 -> last quarter
7 -> waning crescent

ASCII 아트는 모두 16x8 격자에 배치됩니다 (문자 크기 비율로 인해). .임의의 문자 및 #공백이 아닌 다른 문자로 바꿀 수 있습니다 .

초승달의 출력은 다음과 같아야합니다.

................
................
................
................
................
................
................
................

초승달 왁싱 :

..........######
............####
.............###
.............###
.............###
.............###
............####
..........######

1 분기 :

........########
........########
........########
........########
........########
........########
........########
........########

멍청한 왁싱 :

......##########
....############
...#############
...#############
...#############
...#############
....############
......##########

보름달 :

################
################
################
################
################
################
################
################

쇠약 한 초승달은 쇠약 한 깁스와 왁싱 한 깁스, 그리고 첫 번째와 마지막 분기와 같이 각 줄이 반전 된 왁싱 초승달입니다.

규칙

  • 표준 허점 적용
  • 차이가 없어야하지만 원하는 경우 반대 방향으로 왁싱 / waning을 출력하도록 선택할 수 있습니다 (이 질문에 표시된 그래픽은 북반구에 대한 것입니다)
  • 출력은 정확하게 지정해야합니다. 줄 바꿈은 합리적인 줄 구분 기호가 될 수 있으며 원하는 경우 줄 바꿈 줄이있을 수 있습니다.


"차이가 없어야하지만"-바이트를 절약했습니다. (제대로
Jonathan Allan

1
ASCII 아트 여야합니까? MoonPhase["Icon"]Mathematica에서 17 바이트입니다…
나무가 아님

@JonathanAllan 오 좋은. 그렇다면 그것은 변화를 가져올 것입니다 : P
HyperNeutrino

@ lanlock4 ASCII 아트를 만든 이유 중 하나를 말씀하셨습니다. 또한 그렇습니다. ASCII 예술이어야합니다.
HyperNeutrino

답변:


7

젤리 ,  43 32 바이트

비트 마스크에서 비교 마스크로 -7 바이트 이동
일부 암묵적인 프로그래밍 개선으로
-2 바이트 -1 바이트 남반구로 이동
-1 바이트- 완전히 새로운 ɓ체인 구분 기호를 사용하십시오.

“>,##‘m0Dm€0ż@€4Ḷ¤Œṙɓ%4>C¹⁸:4¤?Y

문자를 사용 0하기위한 .1위해 #.

온라인 에서 사용해보십시오!

방법?

처음 4 개의 위상을 캡처하는 마스크를 만들고 위상 div-4가 0이 아닌 경우 라인을 반전시키지 않고 모듈로 -4 위상 결과의 결과 값을 보완합니다.

나는 원래 비트 마스크를 구축하지만, 마스크 값이었다 0, 8, 12,와 14- 0000, 1000, 1100,와 1110- 이들은이 phase최고의 것들 - 비교 - 마스크 대신 사용할 수 있도록.

“>,##‘m0Dm€0ż@€4Ḷ¤Œṙɓ%4>C¹⁸:4¤?Y - Main link 1: number phase
“>,##‘                           - code-page index literal [62,44,35,35]
      m0                         - reflect -> [62,44,35,35,35,35,44,62]
        D                        - decimalise -> [[6,2],[4,4],[3,5],[3,5],[3,5],[3,5],[4,4],[6,2]]
         m€0                     - reflect €ach -> [[6,2,2,6],[4,4,4,4],[3,5,5,3],[3,5,5,3],[3,5,5,3],[3,5,5,3],[4,4,4,4],[6,2,2,6]]
                 ¤               - nilad and link(s) as a nilad:
               4                 -   literal 4
                Ḷ                -   lowered range -> [0,1,2,3]
            ż@€                  - zip (reverse @rguments) for €ach -> [[[0,6],[1,2],[2,2],[3,6]],[[0,4],[1,4],[2,4],[3,4]],[[0,3],[1,5],[2,5],[3,3]],[[0,3],[1,5],[2,5],[3,3]],[[0,3],[1,5],[2,5],[3,3]],[[0,3],[1,5],[2,5],[3,3]],[[0,4],[1,4],[2,4],[3,4]],[[0,6],[1,2],[2,2],[3,6]]]
                  Œṙ             - run-length decode -> [[0,0,0,0,0,0,1,1,2,2,3,3,3,3,3,3],[0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3],[0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3],[0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3],[0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3],[0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3],[0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3],[0,0,0,0,0,0,1,1,2,2,3,3,3,3,3,3]]
                                    -   i.e.: 0000001122333333  -
                                              0000111122223333  - Marking out the separate
                                              0001111122222333  - regions as filled up by
                                              0001111122222333  - the phases of the moon in
                                              0001111122222333  - the southern hemisphere.
                                              0001111122222333  -
                                              0000111122223333  -
                                              0000001122333333  -
                    ɓ            - dyadic chain separation & swap arguments, call that m
                     %4          - phase mod 4
                       >         - greater than? (vectorises across m) 1 if so 0 if not
                              ?  - if:
                             ¤   -   nilad followed by link(s) as a nilad:
                          ⁸      -     link's left argument, phase
                           :4    -     integer divide by 4
                        C        - then: complement
                         ¹       - else: identity (do nothing)
                               Y - join with newlines
                                 - implicit print

3
그것은 언어가 아니며 모뎀 소음입니다.
Alnitak

@Alnitak PPCG에 오신 것을 환영합니다! 이 PPCG.SE에 가입하여 해당 의견을 제시 할 수 있습니까? ;)
HyperNeutrino

8

자바 스크립트 (ES6), 121 ... 103 92 바이트

f=(n,i=128)=>i--?f(n,i)+(i%16?'':`
`)+'.#.'[i%16+4*n-~-'31000013'[n&1?i>>4:1]*~-(n&2)>>4]:''

데모


아, 나는 점심 시간에 이것을 찌르고 싶었다. 그러나 나는 당신을 이겼을 것입니다.
Shaggy

4

하스켈 , 98 90 바이트

f i=do{a<-[3,1,0,0,0,0,1,3];[".#."!!div(i*4+x+[0,a-1,0,1-a]!!mod i 4)16|x<-[0..15]]++"\n"}

목록 모나드 ( do행 블록 및 열에 대한 목록 이해)를 사용하여 행과 열을 반복 하고 입력 ( i), 행의 오프셋 값 ( a) 및 열 인덱스를 사용하여 각 셀의 문자를 결정합니다. ( x).

실제 오프셋에 대한 하위 표현식을 단순화하여 8 바이트를 절약했습니다.


3

파이썬 (2) , 144 (142) 127 바이트

i=input()
a,b='#.'[::i/4*2-1]
i%=4
for x in range(8):y=(int(abs(x-3.5))or 1)+2;y=[y,16-y][i>2];y=[i*4,y][i%2];print(16-y)*a+b*y

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

확실히 더 골프를 칠 수 있습니다, 팁은 높이 평가됩니다 :)

undergroundmonorail 덕분에 1 바이트로 골프!

나는 ovi와 Mego 덕분에 많은 바이트를 골랐다. 나는 codegolf에 4 개의 공백을 사용하지 않는 것을 잊어 버린 바보이기 때문이다. :)


if i>2:y=16-y로 변경 될 수 있습니다 y=[16-y,y][i>2]이상이지만, 세미콜론의 자유로운 사용과 루프가 몇 바이트를 저장하는 한 줄이 될 수 있도록 것이다.
Mego


1

Mathematica, 125 바이트

s=Switch;Grid@If[1<#<6,#&,1-#&][s[m=#~Mod~4,0,0,2,1,_,1-{3.4,5}~DiskMatrix~{8,16}]s[m,1,h=Table[Boole[i>8],8,{i,16}],_,1-h]]&

사용하여 그리드를 반환 1하고 0대신 .#각각.

두 개의 마스크, 하나는 원형, 하나는 반 음영 처리 된 마스크를 사용하고 논리적으로 결합하여 적절한 모양을 얻습니다.

두 개의 마스크는 1-{3.4,5}~DiskMatrix~{8,16}원형 마스크와 Table[Boole[i>8],8,{i,16}]절반 마스크로 만들어집니다 . 논리는 다음과 같습니다.

output = f(a AND b)

where f, a and b are:

n | f    a  b
--+-----------
0 | NOT  F  ◨ 
1 | NOT  ○  ◧ 
2 | 1    T  ◨
3 | 1    ○  ◨
4 | 1    F  ◨ 
5 | 1    ○  ◧ 
6 | NOT  T  ◨ 
7 | NOT  ○  ◨

and에 대한 곱셈을 사용하여 1s 및 0s로 논리를 시뮬레이션 합니다 .ANDx -> 1-xNOT

28 바이트에 대한 보너스 (비 ASCII) 솔루션 : IconData["MoonPhase",#/4-1]&

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