Golf un générateur de diagramme de Venn
Afin de célébrer correctement le 180e anniversaire de John Venn , votre tâche consistera aujourd'hui à créer un programme qui génère un diagramme de Venn !
Contribution:
Un entier positif N
qui définira la plage de nombres apparaissant dans le diagramme (de zéro à N
) et trois ensembles d'entiers positifs.
Sortie:
Un diagramme de Venn à 3 ensembles montrant tous les entiers de 0 à N
et les relations des ensembles en les affichant dans les régions appropriées du diagramme, semblable à celui-ci .
Remarques
- Utilisez
stdin
(ou l'équivalent de votre langue) pour obtenir les valeurs. - Vous pouvez définir le format d'entrée pour les ensembles et pour
N
(Séparé par une virgule, une barre oblique ou tout ce qui vous convient le mieux). - Les nombres qui n'apparaissent dans aucun des ensembles mais qui se trouvent dans la plage spécifiée doivent apparaître sur le diagramme, mais pas dans aucune région.
- Les ensembles n'ont pas besoin d'être nommés.
- La sortie peut être un dessin ou un art ascii.
- Le diagramme peut avoir n'importe quelle forme tant que les limites peuvent être distinguées sans ambiguïté (si vous avez choisi l'art ASCII, l'utilisation de + (ou similaire) pour franchir les limites est essentielle, par exemple).
- Les régions peuvent mais ne doivent pas être ombrées.
- Toutes les fonctions intégrées ou bibliothèques tierces qui génèrent des diagrammes de Venn sont interdites.
- Des échappatoires standard s'appliquent .
C'est le code-golf , donc le code le plus court, en octets, gagne.
code-golf
graphical-output
set-theory
William Barbosa
la source
la source
Réponses:
Mathematica
343264UnGolfed
En supposant que l'
10
entrée étaitm
et{{1,2,3,4,5,9},{1,2,3,6,8},{7,2,9}}
était entrée pourd
,Golfé 264
J'ai été surpris que tout le calcul puisse être effectué dans la
Graphics
fonction elle-même. À l'exception des entrées, il s'agit d'un monoligne.la source
RandomSample
pour choisir l'emplacement?Circles
, donc les disques gris ont disparu. La plupart des économies proviennent du fait que tous les membres d'une région sont tracés au centre de cette région.Rubis,
654590566542505 octetsC'était amusant. J'ai utilisé ASCII. Je n'ai pas encore pu tester toutes les combinaisons possibles, donc si vous trouvez un cas de test glitchy, faites le moi savoir.
Il attend l'entrée sur STDIN dans le format suivant
Et vous récompensera ensuite avec cette beauté
Je ne pense pas que je puisse être dérangé pour ajouter une version non golfée. Veuillez consulter la version originale dans l'historique des modifications pour une version un peu plus lisible.
Cela pourrait certainement être joué plus loin en rendant les limites fixées moins serrées ou même en les maintenant fixes comme le font certaines des graphiques, mais je préfère que cela soit joli et se fasse "correctement" malgré le golf.
la source
BBC BASIC, 243 caractères ASCII (taille du fichier tokenisé 211 octets)
Téléchargez l'émulateur sur http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Golfé
BBC Basic est très arbitraire sur les nouvelles lignes / espaces que vous pouvez éliminer. En plus de supprimer les nouvelles lignes inutiles, il y a une autre astuce ici qui n'est pas dans la version non golfée: j'affecte la fenêtre d'affichage (voir l'explication ci-dessous dans les commentaires non golfés) à la FIN de la boucle de traçage, pas au début. Cela signifie que les éléments en dehors de l'ensemble sont tracés en haut à gauche et que le curseur est piégé dans une fenêtre en haut à droite à la fin du programme. La raison en est d'éliminer le
VDU26
.Non golfé
Chaque ensemble de nombres est terminé par l'utilisateur entrant le nombre N + 1 (un choix légèrement inhabituel, c'est pour éviter les erreurs causées en essayant d'écrire en dehors de la plage d'un tableau.) Ensuite, il passe d'un mode texte à un mode graphique et trace le diagramme de Venn.
Les données d'entrée sont stockées dans un tableau, une cellule pour chaque valeur à afficher. Les données sont stockées sous la forme d'une valeur de 3 bits: 1 pour Set0 + 2 pour Set1 + 4 pour Set2 donnant un nombre compris entre 0 et 7. BBC basic n'a pas d'opérateur shift, donc l'opérateur power est utilisé à la place:
2^i
au lieu de1<<i
in C par exemple.Après avoir tracé les cercles, une boucle externe parcourt chacune des huit régions, se déplaçant vers les coordonnées requises (selon un tableau de données.) Une boucle interne imprime tous les nombres de cette région (ceux avec la valeur correspondante de 3 bits dans le tableau.)
Montage des entrées et sorties typiques (version non golfée)
Dans la version golfée, la position des numéros en dehors des ensembles est échangée avec l'invite de commande
>
.la source
Javascript 1235
http://jsfiddle.net/44a4L/7/
Testé dans google chrome v36.
L'entrée est prise dans les variables supérieures, set1, set2 et set3.
Mise à jour: évolue désormais automatiquement en fonction de la taille de l'entrée.
Exemple de sortie:
la source
Python - 603
L'entrée est N suivie des trois ensembles, séparés par des virgules (par exemple
8, {1,2,4}, {2,3,4,5}, {4,6,8}
). Il génère un ensemble dans l'art ACSII comme suit:la source
HTML + JavaScript (E6) 752
761Format d'entrée: max set1 set2 set3 (chaque ensemble est une liste de nombres séparés par des virgules)
Exemple: 10 1,2,3,4,5,9 1,2,3,6,8 7,2,9
Exemple 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
Taille automatique de toutes les sections grâce au rendu html.
La version Javascript E5 fonctionne dans Chrome et MSIE 10 (peut-être 9)
Pas (donc) joué au golf
la source
Python 3-353
Quelqu'un d'autre a-t-il joué avec Logo quand il était enfant?
Échantillon:
python3 turtletest.py 15 1,2,3,4,5,9,10,12 1,3,4,6,7,9 1,2,7,8,9
la source
perl
388b346b488bCela a produit une sortie similaire à une autre entrée:
Test et sortie de test:
la source
T-SQL 2095
Suppose que @N est un entier contenant N. Suppose que @A, @B et @C sont des tableaux contenant les trois ensembles de nombres. Je n'ai pas trop essayé de jouer au golf.
Version moins golfée:
la source