Hãy cho tôi biết giai đoạn âm lịch!


10

Thử thách

Đưa ra một hình ảnh của Mặt trăng làm đầu vào, xuất ra pha của Mặt trăng.

Chu kỳ mặt trăng

Chương trình của bạn sẽ được cung cấp một trong những hình ảnh này ở định dạng png và bạn phải xuất ra pha chính xác như đã cho:

new moon

hexdump

waxing crescent

hexdump

first quarter

hexdump

waxing gibbous

hexdump

full moon

hexdump

waning gibbous

hexdump

third quarter

hexdump

waning crescent

hexdump

Đầu vào

Đầu vào sẽ là đường dẫn đến tệp png 240 px x 240 px và sẽ là một trong những hình ảnh ở trên.

Các byte hình ảnh được đảm bảo là như nhau.

Chiến thắng

Mã ngắn nhất sẽ thắng


1
Như một phần thưởng, hãy kiểm tra mát gif này: upload.wikimedia.org/wikipedia/commons/b/ba/...
Beta Decay

Câu trả lời:


9

Node.js , 145 byte

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]

Hãy thử trực tuyến! (tạo tập tin giả với cùng kích thước)

Làm sao?

Chúng tôi chỉ nhìn vào kích thước của tệp và chuyển đổi nó thành các chỉ mục trong hai bảng tra cứu.

Phần đầu tiên:

 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

Phần thứ hai:

 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

Python 2 , 223 222 byte

-1 byte nhờ OMᗺ

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))- sẽ trả về pixel RGBA tại x,y
getpixel((n*48,99))[2]for n in[1,2,3,4]- sẽ trả về kênh màu xanh lam của đường giữa, trong đó n*48 ... for n in 1,2,3,4sẽ có 4 điểm mà ánh sáng mặt trời có thể che phủ
n*getpixel(...)- sẽ tạo ra một giá trị khác nhau cho mỗi cột
sum(...)%13- các giá trị này được thêm vào với nhau và %13được sử dụng để có được một duy nhất giá trị cho từng pha, sẽ được sử dụng làm chỉ mục cho danh sách pha
Các pixel nằm trong vòng tròn màu đỏ:
hình ảnh mặt trăng với các pixel được tô sáng


5

Ruby, 131 byte

->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]}

Ví dụ, các byte được tìm thấy bởi lực lượng vũ phu - lấy byte thứ 699 của tệp modulo 7, ví dụ, đưa một chỉ mục vào bảng tra cứu đầu tiên.



1

PHP (> = 5,4), 199 197 byte

(-2 byte bằng cách chơi gôn nhiều hơn)

<?$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],'_',' ');

Để chạy nó:

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

Thí dụ:

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

Ghi chú:

  • Các -d error_reporting=0tùy chọn được sử dụng để không ra thông báo / cảnh báo.
  • Các -d short_open_tag=1yêu cầu để cho phép thẻ ngắn.
  • Nếu bạn đang sử dụng một httpsURL như ví dụ trên, OpenSSL cũng sẽ được bật.

Làm sao?

Lấy kích thước tệp (byte) và tạo một số duy nhất cho nó theo công thức này:

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

Công thức này tạo ra các số từ 0 đến 8 chỉ thiếu 3.

┌─────────────────┬───────┬─────────┬─────┬────────────────────────┐
│      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 │
└─────────────────┴───────┴─────────┴─────┴────────────────────────┘

Cách tiếp cận trước đây:

PHP (> = 5,4), 251 byte

<?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];

Để chạy nó:

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

Thí dụ:

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

Ghi chú:

  • Các -d error_reporting=0tùy chọn được sử dụng để không ra thông báo / cảnh báo.
  • Các -d short_open_tag=1yêu cầu để cho phép thẻ ngắn.
  • PHP phải có GD và nó phải được kích hoạt.
  • Nếu bạn đang sử dụng một httpsURL như ví dụ trên, OpenSSL cũng sẽ được bật.

Làm sao?

Kiểm tra cho màu sắc của 4 điểm ảnh trong hình ảnh ở 40,120, 80,120, 160,120200,120và quyết định về giai đoạn mặt trăng từ những màu sắc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.