Katakan padaku Fase Bulan!

10

Tantangan

Diberikan gambar Bulan sebagai input, output fase Bulan.

Fase Bulan

Program Anda akan diberikan salah satu gambar ini dalam format png dan Anda harus menampilkan fase persis seperti yang diberikan:

new moon

hexdump

waxing crescent

hexdump

first quarter

hexdump

waxing gibbous

hexdump

full moon

hexdump

waning gibbous

hexdump

third quarter

hexdump

waning crescent

hexdump

Memasukkan

Input akan menjadi path ke file 240 px x 240 px png dan akan menjadi salah satu gambar di atas.

Bytes gambar dijamin sama.

Kemenangan

Kode terpendek menang

Peluruhan Beta
sumber
1
Sebagai bonus, lihat gif keren ini: upload.wikimedia.org/wikipedia/commons/b/ba/…
Beta Decay

Jawaban:

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]

Cobalah online! (menghasilkan file dummy dengan ukuran yang sama)

Bagaimana?

Kami hanya melihat ukuran file dan mengubahnya menjadi indeks dalam dua tabel pencarian.

Bagian pertama:

 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

Bagian kedua:

 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
Arnauld
sumber
7

Python 2 , 223 222 byte

-1 byte berkat 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))- akan mengembalikan piksel RGBA di x,y
getpixel((n*48,99))[2]for n in[1,2,3,4]- akan mengembalikan saluran biru garis tengah, di mana n*48 ... for n in 1,2,3,4akan ada 4 titik di mana sinar matahari dapat menutupi
n*getpixel(...)- akan menghasilkan nilai yang berbeda untuk setiap kolom
sum(...)%13- nilai-nilai ini ditambahkan bersama-sama dan %13digunakan untuk mendapatkan keunikan nilai untuk setiap fase, yang akan digunakan sebagai indeks untuk daftar fase
. Pixel kira-kira ada di dalam lingkaran merah:
gambar bulan dengan piksel disorot

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

Byte offset ditemukan oleh brute force - mengambil byte 699 dari file modulo 7, misalnya, memberikan indeks ke dalam tabel pencarian pertama.

Gagang pintu
sumber
2

Python 2 , 196 165 byte

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]

Cobalah online!

ბიმო
sumber
1

PHP (> = 5.4), 199 197 byte

(-2 bytes dengan lebih banyak bermain golf)

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

Untuk menjalankannya:

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

Contoh:

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

Catatan:

  • The -d error_reporting=0opsi digunakan untuk pemberitahuan tidak keluaran / peringatan.
  • The -d short_open_tag=1diperlukan untuk memungkinkan tag singkat.
  • Jika Anda menggunakan httpsURL seperti contoh di atas, OpenSSL juga harus diaktifkan.

Bagaimana?

Dapatkan ukuran file (byte) dan buat nomor unik untuknya dengan rumus ini:

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

Rumus ini menghasilkan angka dari 0 hingga 8 dengan hanya 3 yang hilang.

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

Pendekatan sebelumnya:

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

Untuk menjalankannya:

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

Contoh:

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

Catatan:

  • The -d error_reporting=0opsi digunakan untuk pemberitahuan tidak keluaran / peringatan.
  • The -d short_open_tag=1diperlukan untuk memungkinkan tag singkat.
  • PHP harus memiliki GD dan harus diaktifkan.
  • Jika Anda menggunakan httpsURL seperti contoh di atas, OpenSSL juga harus diaktifkan.

Bagaimana?

Cek untuk warna 4 piksel dalam gambar di 40,120, 80,120, 160,120dan 200,120dan memutuskan pada fase bulan dari warna-warna.

Night2
sumber