달의 위상을 말해줘!


10

도전

달의 이미지가 입력으로 주어지면 달의 위상을 출력합니다.

달의 위상

프로그램은 다음 이미지 중 하나를 png 형식으로 제공하며 주어진대로 정확하게 위상을 출력해야합니다.

new moon

16 진 덤프

waxing crescent

16 진 덤프

first quarter

16 진 덤프

waxing gibbous

16 진 덤프

full moon

16 진 덤프

waning gibbous

16 진 덤프

third quarter

16 진 덤프

waning crescent

16 진 덤프

입력

입력은 240 x 240 px png 파일의 경로가되며 위의 이미지 중 하나가됩니다.

이미지 바이트는 동일하게 보장됩니다.

승리

최단 코드 승리


1
보너스로,이 멋진 GIF를 확인하십시오 : upload.wikimedia.org/wikipedia/commons/b/ba/…
Beta Decay

답변:


9

Node.js , 145 바이트

p=>'third/waning/first/full/waxing/new'.split`/`[(s=require('fs').statSync(p).size)%418%6]+' '+'quarter/crescent/gibbous/moon'.split`/`[s%12%9%4]

온라인으로 사용해보십시오! (동일한 크기의 더미 파일 생성)

어떻게?

파일 크기를보고 두 개의 조회 테이블에서 색인으로 변환합니다.

첫 번째 부분:

 phase | file size | mod 418 | mod 6 | mapped to
-------+-----------+---------+-------+-----------
   0   |    3451   |    107  |    5  | new
   1   |    6430   |    160  |    4  | waxing
   2   |    5144   |    128  |    2  | first
   3   |    7070   |    382  |    4  | waxing
   4   |    5283   |    267  |    3  | full
   5   |    7067   |    379  |    1  | waning
   6   |    4976   |    378  |    0  | third
   7   |    6337   |     67  |    1  | waning

두 번째 부분 :

 phase | file size | mod 12 |  mod 9 |  mod 4 | mapped to
-------+-----------+--------+--------+--------+-----------
   0   |    3451   |     7  |     7  |    3   | moon
   1   |    6430   |    10  |     1  |    1   | crescent
   2   |    5144   |     8  |     8  |    0   | quarter
   3   |    7070   |     2  |     2  |    2   | gibbous
   4   |    5283   |     3  |     3  |    3   | moon
   5   |    7067   |    11  |     2  |    2   | gibbous
   6   |    4976   |     8  |     8  |    0   | quarter
   7   |    6337   |     1  |     1  |    1   | crescent

7

파이썬 2 , 223222 바이트

OMᗺ 덕분에 -1 바이트

lambda p:'new moonzzfull moonzzfirst quarterzzwaxing crescentzzwaning gibbouszzwaxing gibbouszthird quarterzwaning crescent'.split('z')[sum(n*Image.open(p).getpixel((n*48,99))[2]for n in[1,2,3,4])%13]
from PIL import Image

getpixel((x,y))-RGBA 픽셀을 x,y
getpixel((n*48,99))[2]for n in[1,2,3,4]반환합니다.-중간 선의 파란색 채널을 반환합니다. n*48 ... for n in 1,2,3,4여기에서 햇빛이 가릴 수있는 4 포인트가
n*getpixel(...)됩니다
sum(...)%13.- 각 열에 대해 다른 값을 생성합니다. 이 값은 서로 더하여 %13고유 한 값 을 얻는 데 사용됩니다. 단계 목록
의 인덱스로 사용될 각 단계의 값입니다 . 픽셀은 대략 빨간색 원 안에 있습니다.
픽셀이 강조된 달 그림


5

루비, 131 바이트

->f{f=open(f,'rb').read;%w[first third waxing new full waning][f[699].ord%7]+' '+%w[x moon gibbous quarter crescent][f[998].ord%5]}

예를 들어, 모듈로 7의 699 번째 바이트를 취하면 무차별 대입으로 발견 된 바이트 오프셋은 첫 번째 룩업 테이블에 인덱스를 제공합니다.



1

PHP (> = 5.4), 199 197 바이트

(골프에 의한 2 바이트)

<?$s=strlen(file_get_contents($argv[1])).'';echo strtr([waning_crescent,waning_gibbous,new_moon,0,waxing_crescent,waxing_gibbous,full_moon,first_quarter,third_quarter][($s[0]+$s[3])%11-2],'_',' ');

그것을 실행하려면 :

php -d error_reporting=0 -d short_open_tag=1 <filename> <image_path>

예:

php -d error_reporting=0 -d short_open_tag=1 lunar_phase.php https://upload.wikimedia.org/wikipedia/commons/thumb/c/c9/Moon_phase_6.svg/240px-Moon_phase_6.svg.png

노트:

  • -d error_reporting=0옵션은 통지 / 경고를 출력하지 않는 데 사용됩니다.
  • -d short_open_tag=1짧은 태그를 허용해야합니다.
  • https위 예제와 같은 URL을 사용하는 경우 OpenSSL 도 활성화해야합니다.

어떻게?

이 수식으로 파일 크기 (바이트)를 가져 와서 고유 한 번호를 만듭니다.

((<first_bytes_digit> + <fourth_bytes_digit>) % 11) - 2

이 수식은 3 만 누락 된 0에서 8까지의 숫자를 생성합니다.

┌─────────────────┬───────┬─────────┬─────┬────────────────────────┐
│      Phase      │ Bytes │ 1st+4th │ %11 │ -2 (position in array) │
├─────────────────┼───────┼─────────┼─────┼────────────────────────┤
│ new moon        │  3451 │ 3+1=4   │   4 │                      2 │
│ waxing crescent │  6430 │ 6+0=6   │   6 │                      4 │
│ first quarter   │  5144 │ 5+4=9   │   9 │                      7 │
│ waxing gibbous  │  7070 │ 7+0=7   │   7 │                      5 │
│ full moon       │  5283 │ 5+3=8   │   8 │                      6 │
│ waning gibbous  │  7067 │ 7+7=14  │   3 │                      1 │
│ third quarter   │  4976 │ 4+6=10  │  10 │                      8 │
│ waning crescent │  6337 │ 6+7=13  │   2 │                      0 │
└─────────────────┴───────┴─────────┴─────┴────────────────────────┘

이전 접근법 :

PHP (> = 5.4), 251 바이트

<?foreach([4,8,16,20]as$w){$a+=imagecolorat(imagecreatefrompng($argv[1]),$w*10,120)>1e7;$a&&$w<5?$b=-2:0;}$x=explode('_','full moon_waning gibbous_third quarter_waning crescent_new moon_waxing crescent_first quarter_waxing gibbous');echo$x[$a*++$b+4];

그것을 실행하려면 :

php -d error_reporting=0 -d short_open_tag=1 <filename> <image_path>

예:

php -d error_reporting=0 -d short_open_tag=1 lunar_phase.php https://upload.wikimedia.org/wikipedia/commons/thumb/c/c9/Moon_phase_6.svg/240px-Moon_phase_6.svg.png

노트:

  • -d error_reporting=0옵션은 통지 / 경고를 출력하지 않는 데 사용됩니다.
  • -d short_open_tag=1짧은 태그를 허용해야합니다.
  • PHP에는 GD 가 있어야하며 활성화되어 있어야합니다.
  • https위 예제와 같은 URL을 사용하는 경우 OpenSSL 도 활성화해야합니다.

어떻게?

화상의 4 개 화소의 색상 검사 40,120, 80,120, 160,120200,120와 그 색의 월령 결정한다.

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