Sag mir die Mondphase!

10

Herausforderung

Wenn Sie ein Bild des Mondes als Eingabe erhalten, geben Sie die Mondphase aus.

Phasen des Mondes

Ihr Programm erhält eines dieser Bilder im PNG-Format und Sie müssen die Phase genau wie angegeben ausgeben:

new moon

Hexdump

waxing crescent

Hexdump

first quarter

Hexdump

waxing gibbous

Hexdump

full moon

Hexdump

waning gibbous

Hexdump

third quarter

Hexdump

waning crescent

Hexdump

Eingang

Die Eingabe ist der Pfad zu einer 240 x 240 Pixel großen PNG-Datei und eines der obigen Bilder.

Die Bildbytes sind garantiert gleich.

Gewinnen

Der kürzeste Code gewinnt

Beta-Zerfall
quelle
1
Schauen Sie sich
Beta Decay

Antworten:

9

Node.js , 145 Bytes

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]

Probieren Sie es online aus! (generiert Dummy-Dateien mit den gleichen Größen)

Wie?

Wir sehen uns nur die Größe der Datei an und konvertieren sie in zwei Nachschlagetabellen in Indizes.

Erster Teil:

 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

Zweiter Teil:

 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
quelle
7

Python 2 , 223 222 Bytes

-1 Byte dank 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))- gibt das RGBA-Pixel bei zurück x,y
getpixel((n*48,99))[2]for n in[1,2,3,4]- gibt den blauen Kanal der Mittellinie zurück, wo n*48 ... for n in 1,2,3,4sich 4 Punkte befinden, an denen das Sonnenlicht liegen kann
n*getpixel(...)- erzeugt für jede Spalte einen anderen Wert
sum(...)%13- diese Werte werden addiert und %13verwendet, um eine eindeutige zu erhalten Wert für jede Phase, der als Index für die Phasenliste verwendet wird.
Die Pixel befinden sich ungefähr innerhalb der roten Kreise:
Mondbild mit hervorgehobenen Pixeln

Stange
quelle
5

Ruby, 131 Bytes

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

Durch Brute Force gefundene Byte-Offsets - Wenn Sie beispielsweise das 699. Byte der Datei Modulo 7 verwenden, erhalten Sie einen Index in der ersten Nachschlagetabelle.

Türknauf
quelle
2

Python 2 , 196 165 Bytes

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]

Probieren Sie es online aus!

ბიმო
quelle
1

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

(-2 Bytes durch mehr Golfen)

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

Um es auszuführen:

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

Beispiel:

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

Anmerkungen:

  • Die -d error_reporting=0Option wird verwendet, um keine Benachrichtigungen / Warnungen auszugeben.
  • Das -d short_open_tag=1ist erforderlich, um kurze Tags zuzulassen.
  • Wenn Sie eine httpsURL wie im obigen Beispiel verwenden, sollte OpenSSL ebenfalls aktiviert sein.

Wie?

Ruft die Dateigröße (Bytes) ab und erstellt nach dieser Formel eine eindeutige Nummer dafür:

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

Diese Formel generiert Zahlen von 0 bis 8, wobei nur eine 3 fehlt.

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

Bisherige Ansätze:

PHP (> = 5,4), 251 Bytes

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

Um es auszuführen:

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

Beispiel:

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

Anmerkungen:

  • Die -d error_reporting=0Option wird verwendet, um keine Benachrichtigungen / Warnungen auszugeben.
  • Das -d short_open_tag=1ist erforderlich, um kurze Tags zuzulassen.
  • PHP muss GD haben und sollte aktiviert sein.
  • Wenn Sie eine httpsURL wie im obigen Beispiel verwenden, sollte OpenSSL ebenfalls aktiviert sein.

Wie?

Prüft , ob die Farbe von 4 Pixeln in dem Bild bei 40,120, 80,120, 160,120und 200,120und entscheidet über die Mondphase aus diesen Farben.

Nacht2
quelle