Powiedz mi fazę księżycową!


10

Wyzwanie

Biorąc pod uwagę obraz Księżyca jako dane wejściowe, wysyłaj fazę Księżyca.

Fazy ​​księżyca

Twój program otrzyma jeden z tych obrazów w formacie png i musisz wyprowadzić fazę dokładnie tak, jak podano:

new moon

zrzut heksowy

waxing crescent

zrzut heksowy

first quarter

zrzut heksowy

waxing gibbous

zrzut heksowy

full moon

zrzut heksowy

waning gibbous

zrzut heksowy

third quarter

zrzut heksowy

waning crescent

zrzut heksowy

Wejście

Dane wejściowe będą ścieżką do pliku png o wymiarach 240 na 240 pikseli i będzie to jeden z powyższych obrazów.

Gwarantujemy, że bajty obrazu są takie same.

Zwycięski

Najkrótszy kod wygrywa


1
Jako bonus, sprawdź ten fajny gif: upload.wikimedia.org/wikipedia/commons/b/ba/…
Rozpad Beta

Odpowiedzi:


9

Node.js , 145 bajtów

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]

Wypróbuj online! (generuje fikcyjne pliki o tych samych rozmiarach)

W jaki sposób?

Po prostu patrzymy na rozmiar pliku i konwertujemy go na indeksy w dwóch tabelach odnośników.

Pierwsza część:

 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

Druga część:

 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 bajtów

-1 bajt dzięki 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))- zwróci piksel RGBA w x,y
getpixel((n*48,99))[2]for n in[1,2,3,4]- zwróci niebieski kanał środkowej linii, gdzie n*48 ... for n in 1,2,3,4będą 4 punkty, w których światło słoneczne może zasłonić
n*getpixel(...)- wygeneruje inną wartość dla każdej kolumny
sum(...)%13- te wartości są sumowane i %13są używane do uzyskania unikalnego wartość dla każdej fazy, która będzie używana jako indeks dla listy faz
. Piksele znajdują się w przybliżeniu wewnątrz czerwonych kółek:
obraz księżyca z podświetlonymi pikselami


5

Rubin, 131 bajtów

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

Przesunięcia bajtów znalezione przez brutalną siłę - na przykład biorąc 699 bajt pliku modulo 7, daje indeks do pierwszej tabeli odnośników.


2

Python 2 , 196 165 bajtów

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]

Wypróbuj online!


1

PHP (> = 5,4), 199 197 bajtów

(-2 bajty przez więcej golfa)

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

Aby uruchomić:

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

Przykład:

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

Uwagi:

  • -d error_reporting=0Opcja nie służy do wyjścia zawiadomień / ostrzeżenia.
  • Jest -d short_open_tag=1to wymagane, aby umożliwić krótkie tagi.
  • Jeśli używasz httpsadresu URL takiego jak w powyższym przykładzie, należy również włączyć OpenSSL .

W jaki sposób?

Pobiera rozmiar pliku (bajty) i tworzy dla niego unikalny numer według tej formuły:

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

Ta formuła generuje liczby od 0 do 8, brakuje tylko 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 │
└─────────────────┴───────┴─────────┴─────┴────────────────────────┘

Poprzednie podejścia:

PHP (> = 5,4), 251 bajtów

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

Aby uruchomić:

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

Przykład:

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

Uwagi:

  • -d error_reporting=0Opcja nie służy do wyjścia zawiadomień / ostrzeżenia.
  • Jest -d short_open_tag=1to wymagane, aby umożliwić krótkie tagi.
  • PHP musi mieć GD i powinno być włączone.
  • Jeśli używasz httpsadresu URL takiego jak w powyższym przykładzie, należy również włączyć OpenSSL .

W jaki sposób?

Sprawdza koloru 4 piksele w obrazie w 40,120, 80,120, 160,120i 200,120oraz decyduje o fazy księżyca z tych kolorów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.