Generador de diagramas de Golf a Venn
Para celebrar adecuadamente el 180 cumpleaños de John Venn , hoy su tarea será crear un programa que genere un diagrama de Venn .
Entrada:
Un entero positivo N
que definirá el rango de números que aparecen en el diagrama (de cero a N
) y tres conjuntos de enteros positivos.
Salida:
Un diagrama de Venn de 3 conjuntos que muestra todos los enteros de 0 a N
y las relaciones de los conjuntos mostrándolos en las regiones apropiadas del diagrama, similar a este .
Notas
- Use
stdin
(o el equivalente de su idioma) para obtener los valores. - Puede definir el formato de entrada para los conjuntos y para
N
(Separado por coma, barra inclinada o lo que sea mejor para usted). - Los números que no aparecen en ninguno de los conjuntos pero que están dentro del rango especificado deben aparecer en el diagrama, pero no dentro de ninguna región.
- Los conjuntos no necesitan ser nombrados.
- La salida puede ser un dibujo o arte ascii.
- El diagrama puede tener cualquier forma siempre que los límites sean claramente distinguibles (si elige el arte ASCII, es esencial usar + (o similar) para cruzar los límites, por ejemplo).
- Las regiones pueden pero no tienen que estar sombreadas.
- No se permiten las funciones integradas o las bibliotecas de terceros que generan Diagramas de Venn.
- Se aplican lagunas estándar .
Este es el código de golf , por lo que el código más corto, en bytes, gana.
code-golf
graphical-output
set-theory
William Barbosa
fuente
fuente
Respuestas:
Mathematica
343264Sin golf
Suponiendo que
10
se ingresóm
y{{1,2,3,4,5,9},{1,2,3,6,8},{7,2,9}}
se ingresó parad
,Golfed 264
Me sorprendió que todo el cálculo pudiera llevarse a cabo dentro de la
Graphics
función misma. Con la excepción de las entradas, es una línea.fuente
RandomSample
para elegir la ubicación?Circles
, por lo que los discos grises se han ido. La mayor parte del ahorro proviene del hecho de que todos los miembros de una región están trazados en el centro de esa región.Ruby,
654590566542505 bytesEsto fue divertido. Yo usé ASCII. Todavía no pude probar todas las combinaciones posibles, así que si encuentras un caso de prueba con fallas, avísame.
Espera la entrada en STDIN en el siguiente formato
Y luego te recompensará con esta belleza
No creo que pueda molestarme en agregar una versión sin golf. Eche un vistazo a la versión original en el historial de edición para obtener una versión algo más legible.
Ciertamente, esto podría desarrollarse aún más al hacer que los límites establecidos sean menos ajustados o incluso mantenerlos fijos como lo hacen algunos de los gráficos, pero prefiero que se vea bien y se haga "correctamente" a pesar de jugar al golf.
fuente
BBC BASIC, 243 caracteres ASCII (tamaño de archivo tokenizado 211 bytes)
Descargue el emulador en http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Golfed
BBC Basic es muy arbitrario acerca de las nuevas líneas / espacios en blanco que puede eliminar. Además de eliminar nuevas líneas innecesarias, hay otro truco aquí que no está en la versión no oculta: asigno la ventana gráfica (vea la explicación a continuación en los comentarios no reflejados) al FIN del ciclo de trazado, no al principio. Esto significa que los elementos fuera del conjunto se trazan en la parte superior izquierda y el cursor queda atrapado en una ventana en la parte superior derecha al final del programa. La razón de esto es eliminar el
VDU26
.Sin golf
El usuario termina cada conjunto de números ingresando el número N + 1 (una opción ligeramente inusual, esto es para evitar errores causados al intentar escribir fuera del rango de una matriz). Luego cambia de un modo de texto a un modo de gráficos y traza el diagrama de Venn.
Los datos de entrada se almacenan en una matriz, una celda para cada valor que se mostrará. Los datos se almacenan como un valor de 3 bits: 1 para Set0 + 2 para Set1 + 4 para Set2 dando un número en el rango de 0 a 7. BBC basic no tiene operador de turno, por lo que se utiliza el operador de potencia: en
2^i
lugar de1<<i
en C por ejemplo.Después de trazar los círculos, un bucle externo atraviesa cada una de las ocho regiones, moviéndose a las coordenadas requeridas (según una tabla de datos). Un bucle interno imprime todos los números en esa región (aquellos con el valor de 3 bits correspondiente en el formación.)
Montaje de entrada y salida típicas (versión no protegida)
En la versión de golf, la posición de los números fuera de los conjuntos se intercambia con el símbolo del sistema
>
.fuente
Javascript 1235
http://jsfiddle.net/44a4L/7/
Probado en google chrome v36.
La entrada se toma en las variables upper, set1, set2 y set3.
Actualización: ahora se escala automáticamente según el tamaño de la entrada.
Salida de muestra:
fuente
Python - 603
La entrada es N seguida de los tres conjuntos, separados por comas (p
8, {1,2,4}, {2,3,4,5}, {4,6,8}
. Ej .). Produce un conjunto en el arte ACSII como el siguiente:fuente
HTML + JavaScript (E6) 752
761Formato de entrada: max set1 set2 set3 (cada conjunto es una lista de números separados por comas)
Ejemplo: 10 1,2,3,4,5,9 1,2,3,6,8 7,2,9
Ejemplo 2: 30 2,4,6,8,10,12,14,16,18,30 3,6,9,12,15,18,21,30 5,10,15,20,25,30
Tamaño automático de todas las secciones gracias a la representación html.
La versión Javascript E5 funciona en Chrome y MSIE 10 (quizás 9)
No (tan) golfizado
fuente
Python 3 - 353
¿Alguien más jugó con Logo cuando era niño?
Muestra:
python3 turtletest.py 15 1,2,3,4,5,9,10,12 1,3,4,6,7,9 1,2,7,8,9
fuente
perl
388b346b488bEsto tiene una salida similar a otra entrada:
Prueba de funcionamiento y salida:
fuente
T-SQL 2095
Supone que @N es un int que contiene N. Supone que @A, @B y @C son tablas que contienen los tres conjuntos de números. No traté de jugar al golf demasiado.
Versión menos golfizada:
fuente