Bana Ay Evresini anlat!


10

Meydan okuma

Girdi olarak Ay'ın bir görüntüsü verildiğinde, Ay'ın evresini çıktılayın.

Ay'ın safhaları

Programınıza bu resimlerden birini png biçiminde verilecektir ve aşamayı tam olarak verildiği gibi çıkarmalısınız:

new moon

HexDump

waxing crescent

HexDump

first quarter

HexDump

waxing gibbous

HexDump

full moon

HexDump

waning gibbous

HexDump

third quarter

HexDump

waning crescent

HexDump

Giriş

Giriş, 240 piksele 240 piksel png dosyasına giden yol olacak ve yukarıdaki resimlerden biri olacaktır.

Görüntü baytlarının aynı olacağı garanti edilir.

Kazanan

En kısa kod kazanır


1
Bonus olarak, bu güzel gif'e göz atın
Beta

Yanıtlar:


9

Node.js , 145 bayt

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]

Çevrimiçi deneyin! (aynı boyutlarda sahte dosyalar oluşturur)

Nasıl?

Sadece dosyanın boyutuna bakıyoruz ve iki arama tablosunda indekslere dönüştürüyoruz.

İlk kısım:

 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

İkinci kısım:

 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 , 223222 bayt

OMᗺ sayesinde -1 bayt

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 pikseli x,y
getpixel((n*48,99))[2]for n in[1,2,3,4]geri döndürür - orta çizginin mavi kanalını döndürür, n*48 ... for n in 1,2,3,4güneş ışığının kapsayabileceği 4 nokta
n*getpixel(...)olacaktır - her sütun için farklı bir değer oluşturur
sum(...)%13- bu değerler birlikte eklenir ve %13benzersiz bir değer elde etmek için kullanılır Faz listesi için dizin olarak kullanılacak her bir fazın değeri
Pikseller yaklaşık olarak kırmızı dairelerin içindedir:
Vurgulanan pikselli ay resmi


5

Ruby, 131 bayt

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

Kaba kuvvet tarafından bulunan bayt uzaklıkları - örneğin modulo 7 dosyasının 699. baytını almak, ilk arama tablosuna bir dizin verir.



1

PHP (> = 5.4), 199 197 bayt

(Daha fazla golf ile -2 bayt)

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

Çalıştırmak için:

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

Misal:

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

Notlar:

  • Bu -d error_reporting=0seçenek, uyarı / uyarı vermemek için kullanılır.
  • -d short_open_tag=1Kısa etiketleri izin vermek için gereklidir.
  • httpsYukarıdaki örnek gibi bir URL kullanıyorsanız , OpenSSL'nin de etkinleştirilmesi gerekir.

Nasıl?

Dosya boyutunu (bayt) alır ve bu formülle dosya için benzersiz bir sayı oluşturur:

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

Bu formül, yalnızca 3 eksik olan 0 ile 8 arasında sayılar üretir.

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

Önceki yaklaşımlar:

PHP (> = 5.4), 251 bayt

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

Çalıştırmak için:

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

Misal:

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

Notlar:

  • Bu -d error_reporting=0seçenek, uyarı / uyarı vermemek için kullanılır.
  • -d short_open_tag=1Kısa etiketleri izin vermek için gereklidir.
  • PHP GD olmalı ve etkinleştirilmelidir.
  • httpsYukarıdaki örnek gibi bir URL kullanıyorsanız , OpenSSL'nin de etkinleştirilmesi gerekir.

Nasıl?

En görüntüde 4 piksel renk için denetler 40,120, 80,120, 160,120ve 200,120ve bu renklerden ay faz üzerinde karar verir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.