У нас есть квадратный сад 10х10 метров за пределами нашего дома. Мы хотим посадить траву и сделать террасу. Мы решили, как разделить сад, но не определили соотношение количества травы и террасы.
Нам нужна помощь, чтобы визуализировать это, и ASCII-art, несомненно, является лучшим способом сделать это.
Вызов:
Возьмите целое число в включающем диапазоне [0, 100] (или, возможно, десятичное число [0, 1]), представляющее, сколько процентов сада должно быть террасой.
Один квадратный метр террасы будет представлен либо -
штрихом, либо баром |
. Один квадратный метр травы будет представлен хеш-меткой #
.
- Если количество террасы меньше или равно 50%, то сад должен быть покрыт решетками, начиная с нижнего левого угла, и заполнять вертикально, а затем горизонтально.
- Если количество террас составляет более 50%, то мы хотим, чтобы настил был другим способом (штрихи вместо столбцов), и начинался в нижнем левом углу, а затем заливался горизонтально, а затем вертикально.
Примеры:
N = 25%
||########
||########
||########
||########
||########
|||#######
|||#######
|||#######
|||#######
|||#######
N = 75%
##########
##########
-----#####
----------
----------
----------
----------
----------
----------
----------
N = 47%
||||######
||||######
||||######
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
N = 50%
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
N = 51%
##########
##########
##########
##########
-#########
----------
----------
----------
----------
----------
N = 0%
##########
##########
##########
##########
##########
##########
##########
##########
##########
##########
N = 100%
----------
----------
----------
----------
----------
----------
----------
----------
----------
----------
Это код-гольф, поэтому выигрывает самый короткий код в байтах. Стандартные правила, касающиеся ввода / вывода. Это ASCII-арт, поэтому вывод должен выглядеть как в приведенных выше примерах. Т.е. вывод ["|", "|" ...]
не в порядке.
Пояснения приветствуются как всегда :)
Ответы:
APL (Dyalog) , 34 байта
Функция анонимного префикса, ожидающая целое число в диапазоне 0–100. Предполагается
⎕IO
( я ndex O rigin)0
, что по умолчанию во многих системах.Попробуйте онлайн!
{
…}
Лямбда;⍵
это аргумент:'#-|[
…]
Индексировать строку следующим массивом:50≥⍵
1, если 50 больше или равно аргументу, иначе 0s←
хранить в S (для S Молл)1+
приращение⍵⍴
циклический г eshape к аргументу длине100↑
возьми первую сотню из этого, дополнив нулями10 10⍴
г eshape до десяти строк и столбцов десяти⊢
дать это (отделяетсяs
от10 10
)⍉⍣s
транспонировать, если маленький⊖
перевернуть вверх дномисточник
{⊖⍉⍣c⊢10 10⍴(⍵/'-|'⊃⍨c←⍵≤50),100/'#'}
99/'#'
⍴
J ,
39, 3837 байтКак это устроено:
Попробуйте онлайн!
источник
{.
с аргументом «за пределы» - хороший трюк.(]|.@|:_10{&'#|-'\100{.1+$)>&50
_100{.
который ставит заливки в начале, но затем мне нужно было повернуть вспять каждый ряд, поэтому я отказался от него.JavaScript (ES6), 84 байта
Принимает ввод как целое число в [0 ... 100] .
Контрольные примеры
Показать фрагмент кода
Отформатировано и прокомментировано
источник
Python 2 ,
121117116 байтовПопробуйте онлайн!
источник
[i*10:-~i*10]
может быть[i*10:][:10]
.Желе , 23 байта
Попробуйте онлайн!
Измените номер перед
Ç
в нижнем колонтитуле, чтобы изменить ввод. Работает как монадическая ссылка в программе без аргументов командной строки, что разрешено .источник
ȷ2
->³
)SWI Пролог, 249 байт
Решение довольно простое. Процедура
a
создает строки,l
записывает символы в столбцы в строке иr
решает, какой символ следует распечатать.источник
G<51
должен работать вместоG<=50
.MATL , 26 байт
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
источник
Python 2 , 85 байт
Попробуйте онлайн!
В обоих случаях каждая строка дополняется справа
#
до длины 10, что позволяет нам разделить этот код между двумя вариантами. Число 10 использовалось достаточно часто, чтобы псевдонимыT=10
сохраняли приличное количество байтов.источник
51
После ввода и после он пропускает строку.Рубин ,
9282 байтаПопробуйте онлайн!
Как это устроено:
Каждая ячейка в сетке имеет прогрессивное число, начинающееся с нижнего левого угла и продолжающееся горизонтально или вертикально в зависимости от значения n:
Если
n>50
номер в100-y*10+x
противном случае этоx*10+9-y
источник
Древесный уголь , 25 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
шелуха , 24 байта
Попробуйте онлайн!
объяснение
источник
SOGL V0.12 , 21 байт
Попробуй здесь!
Объяснение:
источник
постоянный ток ,
210197 байтПопробуйте онлайн!
источник
APL (Dyalog Classic) , 33 байта
Попробуйте онлайн!
основываясь на ответе Адама
⎕d
это строка'0123456789'
∘.,
Декартово произведение⍨
с собой⍎¨
оцените каждый - получите матрицу 10x10 0 ... 99⍵>
логическая матрица для аргумента⍵
больше⊢
действует как разделитель(⍉+⍨)⍣(⍵≤50)
если ⍵≤50, то удвойте матрицу (+
с собой) и транспонируйте (⍉
)⊖
вертикальный реверс'#-|'[ ]
индексировать строку'#-|'
с каждым элементом матрицыисточник
q , 51 байт
источник
Retina ,
7262 байтаПопробуйте онлайн! Ссылка включает в себя тестовые случаи. Редактировать: 10 байтов сохранены с помощью @MartinEnder. Объяснение:
Повторите
|
указанное количество разНо если введено не менее 51, измените их на
-
s.Добавить 100
#
с.Разделите на 10 групп по 10, отбросив все, что осталось.
Если входное значение было не менее 51, перенесите результат.
Сортировать результат.
Альтернативное решение, также 62 байта:
Сортировка перед транспонированием позволяет сэкономить байты на условии для транспонирования, но стоит байт, чтобы получить результат в правильном порядке.
источник
#
на первомO
этапе, потому что$.%`
будет максимум9
. Вы также можете сохранить некоторый байт, избегая цикла за счет другого этапа сортировки в конце, например так: tio.run/##K0otycxL/… Вероятно, есть даже более короткий способ перегруппировать результат этогоM
этапа в окончательную форму. ,O
сцену сразу заM
сценой, чтобы вы могли продолжать смотреть вперед, а не смотреть назад.Python 2 ,
106103 байтаПопробуйте онлайн!
источник
PHP, 119 + 1 байт
Запустите как трубу с
-nR
или попробуйте онлайн .источник
Желе , 24 байта
Попробуйте онлайн!
Как это устроено
Я использую слишком много надстрочных знаков ...
источник
R , 102 байта
Попробуйте онлайн!
Читает
n
из стандартного ввода и печатает сад в стандартный вывод.Объяснение:
источник