Golf ein Venn-Diagramm-Generator
Um den 180. Geburtstag von John Venn gebührend zu feiern , müssen Sie heute ein Programm erstellen, das ein Venn-Diagramm ausgibt !
Eingang:
Eine positive Ganzzahl N
, die den im Diagramm angezeigten Zahlenbereich (von Null bis N
) und drei Sätze positiver Ganzzahlen definiert.
Ausgabe:
Ein 3-Mengen-Venn-Diagramm, in dem alle Ganzzahlen von 0 bis N
und die Beziehungen der Mengen angezeigt werden, indem sie in den entsprechenden Bereichen des Diagramms angezeigt werden, ähnlich wie in diesem .
Anmerkungen
- Verwenden Sie
stdin
(oder was auch immer die Entsprechung Ihrer Sprache ist), um die Werte abzurufen. - Sie können das Eingabeformat für die Sätze und für definieren
N
(getrennt durch Komma, Schrägstrich oder was für Sie am besten geeignet ist). - Zahlen, die in keinem der Sätze enthalten sind, sich aber innerhalb des angegebenen Bereichs befinden, müssen im Diagramm angezeigt werden, nur nicht innerhalb einer Region.
- Die Sets müssen nicht benannt werden.
- Die Ausgabe kann eine Zeichnung oder eine ASCII-Grafik sein.
- Das Diagramm kann eine beliebige Form haben, solange die Grenzen eindeutig unterscheidbar sind (wenn Sie sich für ASCII-Grafik entschieden haben, ist beispielsweise die Verwendung von + (oder einer ähnlichen Option) zum Überschreiten von Grenzen unerlässlich).
- Die Regionen können, müssen aber nicht schattiert sein.
- Alle integrierten Funktionen oder Bibliotheken von Drittanbietern, die Venn-Diagramme generieren, sind nicht zulässig.
- Es gelten Standardlücken .
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
code-golf
graphical-output
set-theory
William Barbosa
quelle
quelle
Antworten:
Mathematica
343264Ungolfed
Angenommen,
10
wurde eingegeben fürm
und{{1,2,3,4,5,9},{1,2,3,6,8},{7,2,9}}
wurde eingegeben fürd
,Golf gespielt 264
Ich war überrascht, dass die gesamte Berechnung innerhalb der
Graphics
Funktion selbst durchgeführt werden konnte. Mit Ausnahme der Eingänge handelt es sich um einen Einzeiler.quelle
RandomSample
, um den Standort zu wählen?Circles
, damit die grauen Scheiben weg sind. Die meisten Einsparungen ergeben sich aus der Tatsache, dass alle Mitglieder einer Region in der Mitte dieser Region eingezeichnet sind.Ruby,
654590566542505 BytesDas hat Spaß gemacht. Ich habe ASCII verwendet. Ich konnte noch nicht alle möglichen Kombinationen testen. Wenn Sie also einen fehlerhaften Testfall finden, lassen Sie es mich bitte wissen.
Es erwartet die Eingabe auf STDIN im folgenden Format
Und werde dich dann mit dieser Schönheit belohnen
Ich glaube nicht, dass ich die Mühe machen kann, eine ungolfed Version hinzuzufügen. Bitte schauen Sie sich die Originalversion im Bearbeitungsverlauf an, um eine etwas besser lesbare Version zu erhalten.
Dies könnte sicherlich weiter verbessert werden, indem die festgelegten Grenzen weniger eng werden oder sogar festgehalten werden, wie dies bei einigen der grafischen Grenzen der Fall ist, aber ich bevorzuge, dass es gut aussieht und trotz des Golfspiels "richtig" ausgeführt wird.
quelle
BBC BASIC, 243 ASCII-Zeichen (tokenisierte Dateigröße 211 Byte)
Laden Sie den Emulator unter http://www.bbcbasic.co.uk/bbcwin/bbcwin.html herunter
Golf gespielt
BBC Basic ist sehr willkürlich, welche Zeilenumbrüche / Leerzeichen Sie entfernen können. Abgesehen davon, dass unnötige Zeilenumbrüche entfernt werden, gibt es hier einen anderen Trick, der nicht in der ungolfed-Version enthalten ist: Ich ordne das Ansichtsfenster (siehe Erläuterung unten in ungolfed-Kommentaren) am ENDE der Plotschleife zu, nicht am Anfang. Dies bedeutet, dass die Elemente außerhalb des Satzes oben links dargestellt werden und der Cursor in einem Ansichtsfenster oben rechts am Ende des Programms eingeschlossen wird. Der Grund dafür ist die Beseitigung der
VDU26
.Ungolfed
Jeder Satz von Zahlen wird beendet, indem der Benutzer die Zahl N + 1 eingibt (eine etwas ungewöhnliche Wahl, um Fehler zu vermeiden, die beim Versuch auftreten, außerhalb des Bereichs eines Arrays zu schreiben.). Anschließend wird vom Textmodus in den Grafikmodus gewechselt und zeichnet das Venn-Diagramm.
Die Eingabedaten werden in einem Array gespeichert, wobei für jeden anzuzeigenden Wert eine Zelle vorhanden ist. Die Daten werden als 3-Bit-Wert gespeichert: 1 für Set0 + 2 für Set1 + 4 für Set2 mit einer Zahl im Bereich von 0 bis 7. BBC basic hat keinen Shift-Operator, daher wird stattdessen der Power-Operator verwendet:
2^i
anstelle von1<<i
in C zum Beispiel.Nach dem Zeichnen der Kreise durchläuft eine äußere Schleife jede der acht Regionen und bewegt sich zu den erforderlichen Koordinaten (gemäß einer Datentabelle). Eine innere Schleife druckt alle Zahlen in dieser Region (die mit dem entsprechenden 3-Bit-Wert in der Array.)
Montage typischer Ein- und Ausgänge (ungolfed version)
In der Golfversion wird die Position der Zahlen außerhalb der Sätze mit der Eingabeaufforderung ausgetauscht
>
.quelle
Javascript 1235
http://jsfiddle.net/44a4L/7/
Getestet in Google Chrome V36.
Die Eingabe erfolgt in den Variablen upper, set1, set2 und set3.
Update: Skaliert nun automatisch abhängig von der Größe der Eingabe.
Beispielausgabe:
quelle
Python - 603
Die Eingabe ist N, gefolgt von den drei durch Kommas getrennten Mengen (z
8, {1,2,4}, {2,3,4,5}, {4,6,8}
. B. ). Es gibt einen Satz in ACSII-Grafik wie folgt aus:quelle
HTML + JavaScript (E6) 752
761Eingabeformat: max set1 set2 set3 (jeder Satz ist eine durch Kommas getrennte Liste von Zahlen)
Beispiel: 10 1,2,3,4,5,9 1,2,3,6,8 7,2,9
Beispiel 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
Alle Abschnitte automatisch Größe dank HTML-Rendering.
Javascript E5 Version Funktioniert in Chrome und MSIE 10 (vielleicht 9)
Nicht (so) golfen
quelle
Python 3 - 353
Hat noch jemand als Kind mit Logo gespielt?
Probe:
python3 turtletest.py 15 1,2,3,4,5,9,10,12 1,3,4,6,7,9 1,2,7,8,9
quelle
Perl
388b346b488bDiese Ausgabe ähnelt einem anderen Eintrag:
Testlauf und Ausgabe:
quelle
T-SQL 2095
Angenommen, @N ist ein Int mit N. Angenommen, @A, @B und @C sind Tabellen mit den drei Zahlenmengen. Ich habe nicht versucht, zu viel Golf zu spielen.
Weniger Golf Version:
quelle