Вызов
Учитывая фазу луны, нарисуйте ее, используя искусство ASCII.
Ваша программа должна обрабатывать новолуние, растущий полумесяц, первую четверть, растущую гиббусу, полную луну, убывающую гиббусу, последнюю четверть и убывающий полумесяц. Ваш ввод будет целым числом.
0 -> new moon
1 -> waxing crescent
2 -> first quarter
3 -> waxing gibbous
4 -> full moon
5 -> waning gibbous
6 -> last quarter
7 -> waning crescent
Искусство ASCII все размещено в сетке 16x8 (потому что размеры символов). Вы можете заменить .
любым символом и #
любым другим непробельным символом.
Выход для новолуния должен быть:
................
................
................
................
................
................
................
................
Для вощения полумесяца:
..........######
............####
.............###
.............###
.............###
.............###
............####
..........######
За первый квартал:
........########
........########
........########
........########
........########
........########
........########
........########
Для вощения гиббуса:
......##########
....############
...#############
...#############
...#############
...#############
....############
......##########
И для полной луны:
################
################
################
################
################
################
################
################
Убывающий полумесяц - это просто растущий полумесяц с каждой перевернутой линией, как с убывающим гиббусом и растущим гиббусом, а также в первой и последней четверти.
правила
- Стандартные лазейки применяются
- При желании вы можете выводить растущие / убывающие значения в противоположном направлении, хотя это не должно иметь значения (графики, показанные в этом вопросе, относятся к северному полушарию).
- Ваш вывод должен быть точно таким, как указано. Ваши новые строки могут быть любым разумным разделителем строк, и вы можете использовать завершающий перевод новой строки, если хотите.
MoonPhase["Icon"]
в Mathematica 17 байтов ...Ответы:
Желе ,
4332 байта-7 байт, перемещающихся из битовой маски в маску сравнения,
-2 байта с некоторыми улучшениями в неявном программировании,
-1 байт, переход в южное полушарие,
-1 байт - используйте совершенно новый
ɓ
цепной разделитель ... его впервые в истории!Использует символы
0
для.
и1
для#
.Все случаи в тестовом наборе в Попробуй онлайн!
Как?
Создает маску, фиксирующую первые четыре фазы, и вместо обращения линий дополняет результирующие значения результата фазы по модулю 4, когда фаза div-4 не равна нулю.
Первоначально я построил битовую маску, но значения маски были
0
,8
,12
, и14
-0000
,1000
,1100
, и1110
- у них естьphase
ведущие из них - так сравнения маска может использоваться вместо этого.источник
JavaScript (ES6),
121...10392 байтадемонстрация
Показать фрагмент кода
источник
Haskell ,
9890 байтОн просматривает строки и столбцы, используя монаду списка (
do
блок для строк и понимание списка для столбцов), и определяет, какой символ для каждой ячейки использует выражение input (i
), значение смещения для row (a
) и индекс столбца. (x
).Сохранено 8 байтов за счет упрощения подвыражения для истинного смещения.
источник
Python 2 ,
144142127 байтПопробуйте онлайн!
Определенно можно играть в гольф дальше, советы приветствуются :)
Гольф от 1 байта благодаря подземному монорельсу!
Выиграл много байтов благодаря ovi и Mego, потому что я дурак, который забывает не использовать 4 пробела для codegolf :)
источник
if i>2:y=16-y
может быть изменено наy=[16-y,y][i>2]
, что длиннее, но с либеральным использованием точек с запятой позволит вашему циклу быть одной строкой, чтобы сохранить несколько байтов.PHP, 105 байт
Попробуйте онлайн!
источник
$a/4
? Индексация сделает раскрой. :)Mathematica, 125 байт
Возвращает сетку, используя
1
и0
вместо.
и#
соответственно.Он работает, используя две маски, одну круглую и одну полутени, и логически комбинируя их, чтобы получить соответствующие формы.
Две маски сделаны
1-{3.4,5}~DiskMatrix~{8,16}
для круглой иTable[Boole[i>8],8,{i,16}]
для половины. Логика такова:Логика моделируется с помощью
1
s и0
s с использованием умножения дляAND
иx -> 1-x
дляNOT
.Бонусное (не ASCII) решение для 28 байтов:
IconData["MoonPhase",#/4-1]&
источник