Al no tener dinero en efectivo, se ha registrado para construir donas para The Donut Shop ™, la compañía de donas digital más grande del mundo, principalmente porque venden donas de todos los tamaños imaginables.
Ahora, dado que los estándares comerciales hoy en día son muy difíciles, debe escribir un fragmento de código lo más corto posible para crear estas donas para que el código fuente que las creó pueda colocarse en el exterior del paquete.
Desafío
Dadas 4 entradas, radio del anillo exterior, radio del anillo interior, las posibles aspersiones y la posibilidad de que una celda tenga una aspersión, genera una rosquilla cubierta en esas aspersiones que tiene los radios internos y externos correctos.
- La entrada puede tomarse como desee (argumentos de una función, stdin, argumentos de programa) y en cualquier orden.
- Las aspersiones se darán en forma de 1 carácter por tipo de aspersión.
^+*-
como entrada espolvorear sería una lista de 4 asperja,^
,+
,*
,-
- La posibilidad de una aspersión se introduce como un valor de punto flotante entre 0 y 1. Por ejemplo:
0.1
,0.23
- Debe imprimir la salida en stdout o equivalente.
- Las chispas no pueden estar en los bordes de la rosquilla.
- Cada tipo de aspersión debe tener una probabilidad igualmente probable de estar en cada celda.
- Los radios se dan en unidades de 1 celda.
- Si el radio interno es igual a 0 O al radio externo, se dice que la rosquilla no tiene anillo.
- Ambos radios serán enteros no negativos.
- Los bordes interno y externo de la rosquilla se deben representar con hashes (
#
) Una prueba para ver si un punto está en un círculo, dado un radio y el centro del círculo es:
(x-center)**2+(y-center)**2 < radius**2
Ejemplo de entrada con salida
(radio exterior, radio interior, aspersiones, posibilidad de aspersión)
10, 4, "^ + * -", 0.1
######### # # ## ++ * *## # # # ^^ - * # # ##### ^ # #+ # # # # # #- # # # # * # # # #+ # # # # # #^ +# # # # # # # # * ##### # # + - # # ^ # ## ^ + ## # ^ # #########
5, 2, ": ^ + *", 0.9
##### #^^+ ^# #**### # #:# #^# #^# #*# #:# #*# #:+###* # # *:^:# #####
Este es el código de golf, la respuesta más corta en bytes gana
10, 4
y5, 2
son bastante diferentes. Iba a dejar un comentario sobre la respuesta, pero me di cuenta de que realmente no entendía cómo debería ser la salida para cualquier dimensión, excepto las de los ejemplos. Si desea cambiar su idea original para que coincida con el resultado de la respuesta, depende de usted, pero el desafío debe definir claramente cómo dibujar los bordes de cualquier manera.Respuestas:
MATLAB, 231 bytes
Aquí una solución matlab:
Algunos ejemplos:
fuente
Python, 263 bytes
Entonces vi un desafío sin respuestas que parecía relativamente fácil pero también interesante y pensé para mí mismo:
Hmm ... Si soy el único con una respuesta, estaré ganando hasta que inevitablemente aparezca una mejor respuesta.
Así que me senté con Python durante unos minutos y se me ocurrió un borrador que, con la ayuda de las sugerencias de la comunidad, he estado modificando para reducir su tamaño.
Para los ejemplos anteriores, esto crea
y
Dudo mucho que esta sea la solución más corta posible, pero creo que funcionó bastante bien para el intento de un adolescente autodidacta de matar el tiempo. Dado que esto fue diseñado para ser lo más pequeño posible, no he incluido comentarios y he tomado atajos en cada nombre de variable y, como tal, este programa es más de usabilidad que de legibilidad.
Si desea utilizar este código por alguna razón que yo desconozco, simplemente ejecútelo en IDLE y escriba el comando
en el formato descrito anteriormente.
fuente
abs
llamada, ya que se garantiza que los radios no serán negativos. También recomiendo consultar Consejos para jugar golf en Python para obtener sugerencias adicionales. De nuevo, bienvenido!N=False if I==0 or I>=O else True
podría sernot (I==0 or I>=O)
y la función C podría ser una lambda. ¡Pero es una muy buena primera entrada!P
más de una vez, por lo que no tiene sentido guardar el*100
en una variable.