Из-за нехватки денег вы подписались на постройку пончиков для The Donut Shop ™, крупнейшей компании по производству цифровых пончиков в мире, в основном потому, что они продают пончики любого размера, какие только можно вообразить.
Теперь, учитывая, что торговые стандарты в настоящее время очень жесткие, вам нужно написать как можно более короткий фрагмент кода, чтобы создать эти пончики, чтобы исходный код, который их создал, можно было поместить снаружи пакета.
Вызов
С учетом 4 входных данных, радиуса внешнего кольца, радиуса внутреннего кольца, возможных разбрызгиваний и вероятности разбрызгивания ячейки выведите пончик, покрытый этими разбрызгивателями, который имеет правильные внутренние и внешние радиусы.
- Входные данные могут быть приняты по вашему усмотрению (аргументы функции, стандартный ввод, программные аргументы) и в любом порядке.
- Брызги будут даны в виде 1 символа для каждого типа брызг
^+*-
в качестве входных данных посыпьте будет список из 4 -х опрыскиваний,^
,+
,*
,-
- Вероятность опрыскивания будет введена в качестве значения с плавающей точкой между 0 и 1. Например:
0.1
,0.23
- Вы должны распечатать вывод на стандартный вывод или эквивалентный.
- Брызги не могут быть по краям пончика.
- Каждый тип разбрызгивания должен иметь одинаковую вероятность попадания в каждую клетку.
- Радиусы даны в единицах с 1 ячейкой.
- Если внутренний радиус равен 0 ИЛИ внешнему радиусу, говорят, что пончик не имеет кольца.
- Оба радиуса будут неотрицательными целыми числами.
- Внутренние и внешние края пончика должны быть представлены с помощью хэшей (
#
) Тест, чтобы увидеть, находится ли точка в круге, учитывая радиус и центр круга:
(x-center)**2+(y-center)**2 < radius**2
Пример ввода с выводом
(внешний радиус, внутренний радиус, разбрызгивание, вероятность разбрызгивания)
10, 4, "^ + * -", 0,1
######### # # ## ++ * *## # # # ^^ - * # # ##### ^ # #+ # # # # # #- # # # # * # # # #+ # # # # # #^ +# # # # # # # # * ##### # # + - # # ^ # ## ^ + ## # ^ # #########
5, 2, ": ^ + *", 0,9
##### #^^+ ^# #**### # #:# #^# #^# #*# #:# #*# #:+###* # # *:^:# #####
Это код гольф, самый короткий ответ в байтах выигрывает
10, 4
и5, 2
довольно разные. Я собирался оставить комментарий к ответу, но понял, что не совсем понимаю, как должен выглядеть результат для каких-либо измерений, кроме тех, что в примерах. Если вы хотите изменить исходную идею в соответствии с выводом из ответа, это зависит от вас, но задача должна четко определить, как нарисовать границы в любом случае.Ответы:
MATLAB, 231 байт
Вот решение Matlab:
Несколько примеров:
источник
Python, 263 байта
Таким образом, я увидел проблему без ответов, которая выглядела относительно простой, но также интересной и продуманной для себя:
Хм ... Если я один с ответом, я буду побеждать, пока неизбежно не появится лучший ответ.
Поэтому я несколько минут сидел с Python и придумал черновик, который, с помощью предложений сообщества, я настраивал, чтобы уменьшить его размер.
Для приведенных выше примеров это создает
и
Я очень сомневаюсь, что это самое короткое из возможных решений, но я думаю, что оно вполне сработало для попытки самоучки подростка убить время. Так как это было разработано, чтобы быть как можно меньшим, я не включил комментарии и сделал ярлыки для каждого имени переменной, и как таковая, эта программа больше для удобства использования, чем читаемости.
Если вы хотите использовать этот код по неизвестной мне причине, просто запустите его в режиме IDLE и введите команду
в формате, описанном выше.
источник
abs
вызова, поскольку радиусы гарантированно будут неотрицательными. Я также рекомендую проверить советы по игре в гольф на Python для дополнительных указателей. Снова добро пожаловать!N=False if I==0 or I>=O else True
может быть,not (I==0 or I>=O)
а функция C может быть лямбда-выражением. Но это действительно хорошая первая запись!P
более одного раза, поэтому нет смысла сохранять*100
в переменной.