Tantangan
Mengingat fase bulan, gambarkan menggunakan seni ASCII.
Program Anda harus menangani bulan baru, waxing sabit, kuartal pertama, waxing gibbous, bulan purnama, memudarnya gibbous, kuartal terakhir, dan memudarnya bulan sabit. Masukan Anda akan berupa bilangan bulat.
0 -> new moon
1 -> waxing crescent
2 -> first quarter
3 -> waxing gibbous
4 -> full moon
5 -> waning gibbous
6 -> last quarter
7 -> waning crescent
Seni ASCII semuanya ditempatkan pada kisi 16x8 (karena rasio dimensi karakter). Anda dapat mengganti .
dengan karakter apa saja dan#
dengan non-spasi putih lainnya.
Output untuk bulan baru harus:
................
................
................
................
................
................
................
................
Untuk waxing sabit:
..........######
............####
.............###
.............###
.............###
.............###
............####
..........######
Untuk kuartal pertama:
........########
........########
........########
........########
........########
........########
........########
........########
Untuk waxing siamang:
......##########
....############
...#############
...#############
...#############
...#############
....############
......##########
Dan untuk bulan purnama:
################
################
################
################
################
################
################
################
Bulan sabit memudar hanya bulan sabit waxing dengan setiap baris terbalik, seperti dengan siamang siam dan siamang siam, dan kuartal pertama dan terakhir.
Aturan
- Celah Standar Berlaku
- Anda dapat memilih untuk menghasilkan waxing / memudarnya ke arah yang berlawanan jika Anda mau, meskipun seharusnya tidak ada bedanya (grafik yang ditunjukkan dalam pertanyaan ini adalah untuk belahan bumi utara)
- Output Anda harus persis seperti yang ditentukan. Baris baru Anda bisa berupa pemisah baris yang masuk akal, dan Anda mungkin memiliki baris tambahan tambahan jika Anda mau.
MoonPhase["Icon"]
adalah 17 byte dalam Mathematica ...Jawaban:
Jelly ,
4332 byte-7 byte bergerak dari bit-mask ke perbandingan-mask
-2 byte dengan beberapa perbaikan pemrograman diam-diam
-1 byte pindah ke belahan bumi selatan
-1 byte - gunakan
ɓ
pemisah rantai yang semuanya baru ... digunakan pertama kali!Menggunakan karakter
0
untuk.
dan1
untuk#
.Semua case dalam test suite di Coba online!
Bagaimana?
Buat masker yang menangkap empat fase pertama, dan alih-alih membalikkan garis melengkapi nilai yang dihasilkan dari hasil fase modulo-4 ketika fase div-4 bukan nol.
Saya awalnya dibangun masker sedikit, tetapi nilai-nilai topeng adalah
0
,8
,12
, dan14
-0000
,1000
,1100
, dan1110
- ini memilikiphase
orang-orang terkemuka - sehingga perbandingan-mask dapat digunakan sebagai gantinya.sumber
JavaScript (ES6),
121...10392 byteDemo
Tampilkan cuplikan kode
sumber
Haskell ,
9890 byteIni loop melalui baris dan kolom menggunakan daftar monad (
do
blok untuk baris dan pemahaman daftar untuk kolom) dan menentukan karakter mana untuk setiap sel menggunakan ekspresi input (i
), nilai offset untuk baris (a
), dan indeks kolom (x
).Disimpan 8 byte dengan menyederhanakan subekspresi untuk offset yang sebenarnya.
sumber
Python 2 ,
144142127 byteCobalah online!
Pasti bisa bermain golf lebih lanjut, tips sangat dihargai :)
Golf 1 byte berkat kereta bawah tanahmon!
Golf off banyak byte berkat ovi dan Mego karena saya bodoh yang lupa untuk tidak menggunakan 4 spasi untuk codegolf :)
sumber
if i>2:y=16-y
dapat diubah menjadiy=[16-y,y][i>2]
, yang lebih panjang, tetapi dengan penggunaan titik koma secara bebas akan memungkinkan loop Anda menjadi satu-liner untuk menyimpan beberapa byte.PHP, 105 Bytes
Cobalah online!
sumber
$a/4
? Pengindeksan akan melakukan pemotongan. :)Mathematica, 125 byte
Mengembalikan kisi menggunakan
1
dan0
bukannya.
dan#
masing - masing.Ia bekerja menggunakan dua topeng, satu melingkar satu dan satu setengah teduh, dan secara logis menggabungkan mereka untuk mendapatkan bentuk yang sesuai.
Kedua topeng dibuat dengan
1-{3.4,5}~DiskMatrix~{8,16}
untuk yang melingkar, danTable[Boole[i>8],8,{i,16}]
untuk yang setengah. Logikanya adalah sebagai berikut:Logika disimulasikan dengan
1
s dan0
s dengan menggunakan perkalian untukAND
danx -> 1-x
untukNOT
.Solusi bonus (non-ASCII), untuk 28 byte:
IconData["MoonPhase",#/4-1]&
sumber