告诉我月相!


10

挑战

给定月球图像作为输入,输出月球的相位。

月相

您的程序将以png格式提供这些图像之一,并且您必须完全按照给定的相位输出相位:

new moon

十六进制转储

waxing crescent

十六进制转储

first quarter

十六进制转储

waxing gibbous

十六进制转储

full moon

十六进制转储

waning gibbous

十六进制转储

third quarter

十六进制转储

waning crescent

十六进制转储

输入值

输入将是240 px x 240 px png文件的路径,并且将是上面的图像之一。

图像字节保证是相同的。

获奖

最短代码胜出


1
作为奖励,看看这个凉爽的GIF:upload.wikimedia.org/wikipedia/commons/b/ba/...
β衰变

Answers:


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

Python 2中223个 222字节

-1字节归功于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))-将在以下位置返回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

Ruby,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字节,给出第一个查找表的索引。


2

Python 2中196个 165字节

lambda f:'first quarter|new moon|waning crescent|waxing gibbous|third quarter|full moon|waxing crescent|waning gibbous'.split('|')[sum(map(ord,open(f).read()))%41%9]

在线尝试!


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

此公式生成从0到8的数字,仅缺少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 │
└─────────────────┴───────┴─────────┴─────┴────────────────────────┘

先前的方法:

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,12080,120160,120200,120,并决定从这些颜色月相。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.