Гольф генератор Венна Диаграммы
Чтобы правильно отпраздновать 180-летие Джона Венна , сегодня ваша задача - создать программу для вывода диаграммы Венна !
Входные данные:
Целое положительное число, N
которое будет определять диапазон чисел, отображаемых на диаграмме (от нуля до N
), и три набора целых положительных чисел.
Выход:
Диаграмма Венна с тремя наборами, показывающая все целые числа от 0 до N
и отношения множеств, отображая их в соответствующих областях диаграммы, аналогично этой .
Заметки
- Используйте
stdin
(или любой другой эквивалент вашего языка), чтобы получить значения. - Вы можете определить формат ввода для наборов и для
N
(разделенных запятой, косой чертой или любым другим, который вам больше подходит). - Числа, которые не появляются ни в одном из наборов, но находятся в указанном диапазоне, должны появляться на диаграмме, но не внутри какой-либо области.
- Наборы не должны быть названы.
- На выходе может быть рисунок или ascii-art.
- Диаграмма может иметь любую форму, если границы однозначно различимы (например, если вы выбрали искусство ASCII, важно использовать + (или аналогичный) для пересечения границ).
- Области могут быть, но не должны быть затенены.
- Любые встроенные функции или сторонние библиотеки, которые генерируют диаграммы Венна, запрещены.
- Применяются стандартные лазейки .
Это код-гольф , поэтому выигрывает самый короткий код в байтах.
code-golf
graphical-output
set-theory
Уильям Барбоза
источник
источник
Ответы:
Mathematica
343264UnGolfed
Предполагая,
10
был вход дляm
и{{1,2,3,4,5,9},{1,2,3,6,8},{7,2,9}}
был вход дляd
,Гольф 264
Я был удивлен, что все вычисления могут быть выполнены внутри самой
Graphics
функции. За исключением входов, это однострочник.источник
RandomSample
чтобы выбрать место?Circles
, чтобы серые диски пропали. Большая часть экономии происходит из-за того, что все члены региона расположены в центре этого региона.Рубин,
654590566542505 байтЭто было весело Я использовал ASCII. Я еще не смог протестировать каждую возможную комбинацию, поэтому, если вы обнаружите сбойный тестовый пример, пожалуйста, дайте мне знать.
Ожидается ввод на STDIN в следующем формате
И тогда наградит вас этой красотой
Я не думаю, что я могу быть обеспокоен тем, чтобы добавить версию без гольфа. Пожалуйста , обратите внимание на оригинальную версию в истории редактирования для нескольких более читаемой версии.
Это, конечно, может быть сделано в дальнейшем, сделав границы набора менее узкими или даже оставив их неподвижными, как делают некоторые из графических, но я предпочитаю, чтобы это выглядело хорошо и было сделано "правильно", несмотря на то, что играли в гольф.
источник
BBC BASIC, 243 символа ASCII (токенизированный размер файла 211 байт)
Загрузите эмулятор на http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Golfed
BBC Basic очень произвольно говорит о том, какие символы новой строки / пробелы вы можете устранить. Помимо удаления ненужных новых строк, здесь есть еще один трюк, которого нет в версии без заглядывания: я назначаю область просмотра (см. Объяснение ниже в комментариях без заглавных букв) в конце цикла построения, а не в начале. Это означает, что элементы вне набора отображаются в верхнем левом углу, а курсор попадает в область просмотра в правом верхнем углу в конце программы. Причиной этого является устранение
VDU26
.Ungolfed
Каждый набор чисел завершается тем, что пользователь вводит число N + 1 (немного необычный выбор, чтобы избежать ошибок, вызванных попыткой записи вне диапазона массива.) Затем он переходит из текстового режима в графический режим. и строит диаграмму Венна.
Входные данные хранятся в массиве, по одной ячейке для каждого отображаемого значения. Данные хранятся в виде 3-битного значения: 1 для Set0 + 2 для Set1 + 4 для Set2, что дает число в диапазоне от 0 до 7. BBC basic не имеет оператора сдвига, поэтому вместо
2^i
него используется оператор power: вместо1<<i
in С например.После построения окружностей внешний цикл проходит через каждую из восьми областей, перемещаясь к требуемым координатам (согласно таблице данных). Внутренний цикл печатает все числа в этой области (с соответствующими 3-битными значениями в массив).
Монтаж типичного ввода и вывода (негольфированная версия)
В версии для игры в гольф позиция чисел вне наборов заменяется командной строкой
>
.источник
Javascript 1235
http://jsfiddle.net/44a4L/7/
Проверено в Google Chrome v36.
Вход берется в переменные upper, set1, set2 и set3.
Обновление: теперь автоматически масштабируется в зависимости от размера ввода.
Образец вывода:
источник
Питон - 603
На входе N следуют три набора, разделенные запятыми (например
8, {1,2,4}, {2,3,4,5}, {4,6,8}
). Это выводит набор в искусстве ACSII как следующее:источник
HTML + JavaScript (E6) 752
761Формат ввода: max set1 set2 set3 (каждый набор представляет собой разделенный запятыми список чисел)
Пример: 10 1,2,3,4,5,9 1,2,3,6,8 7,2,9
Пример 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
Все размеры разделов автоматически благодаря HTML-рендеринга.
Версия Javascript E5 Работает в Chrome и MSIE 10 (возможно, 9)
Не так
источник
Питон 3 - 353
Кто-нибудь еще играл с Logo в детстве?
Образец:
python3 turtletest.py 15 1,2,3,4,5,9,10,12 1,3,4,6,7,9 1,2,7,8,9
источник
Perl
388b346b488bЭто имеет вывод, похожий на другую запись:
Тестовый прогон и вывод:
источник
T-SQL 2095
Предполагается, что @N - это int, содержащее N. Предполагается, что @A, @B и @C - это таблицы, содержащие три набора чисел. Не пытался играть в гольф слишком много.
Менее гольф-версия:
источник