Generator diagramów Venna
Aby właściwie świętować 180. urodziny Johna Venna , dzisiaj Twoim zadaniem będzie stworzenie programu, który wygeneruje diagram Venna !
Wkład:
Dodatnia liczba całkowita N
, która określi zakres liczb występujących na schemacie (od zera do N
) oraz trzy zestawy dodatnich liczb całkowitych.
Wydajność:
Diagram Venna N
składający się z trzech zestawów, pokazujący wszystkie liczby całkowite od 0 do i relacje zbiorów, wyświetlając je w odpowiednich obszarach diagramu, podobnych do tego .
Uwagi
- Użyj
stdin
(lub cokolwiek, co jest odpowiednikiem twojego języka), aby uzyskać wartości. - Możesz zdefiniować format wejściowy dla zestawów i dla
N
(Oddzielone przecinkiem, ukośnikiem lub tym, co najbardziej Ci odpowiada). - Liczby, które nie pojawiają się w żadnym zestawie, ale mieszczą się w określonym zakresie, muszą pojawiać się na schemacie, ale nie w żadnym regionie.
- Zestawy nie muszą mieć nazw.
- Wyjściem może być rysunek lub ascii-art.
- Schemat może mieć dowolny kształt, o ile granice są jednoznacznie rozróżnialne (jeśli wybierzesz grafikę ASCII, na przykład konieczne jest użycie znaku + (lub podobnego) do przekraczania granic).
- Regiony mogą, ale nie muszą być zacienione.
- Wszelkie wbudowane funkcje lub biblioteki stron trzecich generujące diagramy Venna są niedozwolone.
- Obowiązują standardowe luki .
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
code-golf
graphical-output
set-theory
William Barbosa
źródło
źródło
Odpowiedzi:
Mathematica
343264UnGolfed
Zakładając
10
było wejście dom
i{{1,2,3,4,5,9},{1,2,3,6,8},{7,2,9}}
było wejście dod
,Gra w golfa 264
Byłem zaskoczony, że wszystkie obliczenia można przeprowadzić w ramach
Graphics
samej funkcji. Z wyjątkiem danych wejściowych jest to jedna linijka.źródło
RandomSample
aby wybrać lokalizację?Circles
, więc szare dyski zniknęły. Większość oszczędności wynika z faktu, że wszyscy członkowie regionu są narysowani w centrum tego regionu.Rubinowy,
654590566542505 bajtówTo było fajne. Użyłem ASCII. Nie byłem jeszcze w stanie przetestować każdej możliwej kombinacji, więc jeśli znajdziesz usterkę testową, daj mi znać.
Oczekuje danych wejściowych STDIN w następującym formacie
I wtedy nagrodzi cię tym pięknem
Nie sądzę, żebym mógł się martwić dodaniem wersji bez golfa. Zapoznaj się z oryginalną wersją w historii edycji, aby uzyskać nieco bardziej czytelną wersję.
Można to z pewnością pograć w golfa, zmniejszając granice zestawów, a nawet utrzymując je tak, jak niektóre graficzne, ale wolę, aby wyglądały ładnie i zostały wykonane „poprawnie”, pomimo tego, że grały w golfa.
źródło
BBC BASIC, 243 znaki ASCII (tokenizowany rozmiar pliku 211 bajtów)
Pobierz emulator z http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Grał w golfa
BBC Basic bardzo arbitralnie określa, które znaki nowej linii / białe znaki można wyeliminować. Oprócz usuwania niepotrzebnych nowych linii jest jeszcze jedna sztuczka, której nie ma w wersji bez golfa: Przypisuję rzutnię (patrz wyjaśnienie poniżej w komentarzach bez golfa) na KONIEC pętli kreślarskiej, nie na początku. Oznacza to, że elementy poza zestawem są drukowane w lewym górnym rogu, a kursor jest uwięziony w rzutni w prawym górnym rogu na końcu programu. Powodem tego jest wyeliminowanie
VDU26
.Nie golfił
Każdy zestaw liczb jest kończony przez użytkownika wprowadzającego liczbę N + 1 (nieco nietypowy wybór, aby uniknąć błędów spowodowanych próbą zapisu poza zakresem tablicy.) Następnie przechodzi z trybu tekstowego do trybu graficznego i rysuje diagram Venna.
Dane wejściowe są przechowywane w tablicy, po jednej komórce dla każdej wyświetlanej wartości. Dane są przechowywane jako 3-bitowa wartość: 1 dla Set0 + 2 dla Set1 + 4 dla Set2, podając liczbę z zakresu od 0 do 7. BBC basic nie ma operatora zmiany biegów, więc zamiast niego używany jest operator mocy:
2^i
zamiast1<<i
w Na przykład C.Po wykreśleniu okręgów zewnętrzne pętle przechodzą przez każdy z ośmiu regionów, przesuwając się do wymaganych współrzędnych (zgodnie z tabelą danych). Pętla wewnętrzna drukuje wszystkie liczby w tym regionie (te o odpowiedniej wartości 3-bitowej w szyk.)
Montaż typowego wejścia i wyjścia (wersja bez golfa)
W wersji golfowej pozycja liczb poza zestawami jest wymieniana z wierszem poleceń
>
.źródło
Javascript 1235
http://jsfiddle.net/44a4L/7/
Testowane w Google Chrome v36.
Dane wejściowe są pobierane przez zmienne górne, set1, set2 i set3.
Aktualizacja: teraz automatycznie skaluje się w zależności od wielkości danych wejściowych.
Przykładowe dane wyjściowe:
źródło
Python - 603
Dane wejściowe to N, po których następują trzy zestawy, oddzielone przecinkami (np
8, {1,2,4}, {2,3,4,5}, {4,6,8}
.). Generuje zestaw w sztuce ACSII, taki jak:źródło
HTML + JavaScript (E6) 752
761Format wejściowy: maks. Zestaw1 zestaw2 zestaw3 (każdy zestaw to lista liczb oddzielona przecinkami)
Przykład: 10 1,2,3,4,5,9 1,2,3,6,8 7,2,9
Przykład 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
Wszystkie sekcje mają automatyczny rozmiar dzięki renderowaniu HTML.
Wersja Javascript E5 Działa w Chrome i MSIE 10 (może 9)
Nie (tak) grał w golfa
źródło
Python 3 - 353
Czy ktoś jeszcze bawił się Logo jako dziecko?
Próba:
python3 turtletest.py 15 1,2,3,4,5,9,10,12 1,3,4,6,7,9 1,2,7,8,9
źródło
perl
388b346b488bDaje to wynik podobny do innego wpisu:
Uruchomienie testowe i wyjście:
źródło
T-SQL 2095
Zakłada, że @N jest liczbą całkowitą zawierającą N. Zakłada, że @A, @B i @C są tabelami zawierającymi trzy zestawy liczb. Nie próbowałem za dużo grać w golfa.
Wersja mniej golfowa:
źródło