Возможно, вы слышали о «логотипе хакера», также называемом «эмблема хакера». Это выглядит так:
Это образец математической симуляции под названием Игра Жизни. Планер - это самый простой образец Жизни, который движется, и самый узнаваемый из всех моделей Жизни.
Соревнование
Задача довольно проста: показать логотип хакера. Это определяется как:
- Сетка 3х3 с рамкой, белым фоном и серыми линиями сетки.
- Пять черных точек, расположенных на планере GoL.
- Ничего больше.
Правила
- Черные точки должны заполнять 40% - 80% их отдельных ячеек сетки.
- Вы отобразите эмблему с графическим выводом, но без ASCII .
- Вывод должен быть не менее 30х30 пикселей .
- Вывод должен иметь только цвета серый, черный и белый .
- Каждый блок сетки в сетке будет иметь одинаковый размер. Сетка будет обычным квадратом 3х3 .
- Вы не можете извлекать логотип из Интернета или вашей файловой системы.
- Ваша программа будет отображать логотип на пустом экране / окне. Если он заканчивается, он должен сделать это нормально.
- Обратите внимание, что «точки» не обязательно означает «круги». «Точка» - это одиночная геометрическая фигура, центрированная по центру ячейки сетки с одной поверхностью. Например, если круг или квадрат будут квалифицироваться как точка, два треугольника или шахматная доска не будут.
Победитель
Поскольку это код-гольф , выигрывает самый короткий ответ на каждом языке!
Пожалуйста, включите скриншот вывода вашей программы в свой ответ.
Ответы:
Mathematica, 62 байта
Mathematica, 71 байт
источник
Graphics@Disk[]
в качестве аргумента.Rasterize@Grid[{{,●,},{,,●},{●,●,●}},Frame->All,FrameStyle->Gray]
. ● является двухбайтовым символом Unicode. Поскольку это не обязательно должен быть круг, возможно, какой-нибудь символ ASCII мог бы работать, чтобы удовлетворить требование 40% -80%.Rasterize
или что-то подобное, чтобы соответствовать требованию, такgraphical output but no ASCII art
как символы по-прежнему выбираются в сетке как символы Юникода.CSS + HTML,
56 + 84 = 140 байт,52 + 84 = 136 байт.Сохранено 4 байта путем включения предложений из комментариев.
При этом используется символ UTF-8,
•
длина которого составляет 2 байта, а также преимущество любезности синтаксиса HTML.источник
•
!line-height:.4;
, а другой, пропустив закрытие,}
GLSL (фрагментный шейдер),
278235256 байтПосмотрите это в действии: http://glslsandbox.com/e#40717.2
источник
precision highp float;void main(){vec2 a=gl_FragCoord.xy/20.-.2;ivec2 b=ivec2(a);a-=vec2(b)+.5;gl_FragColor=vec4(vec3(a.x<-.5||a.y<-.5||a.x>.3||a.y>.3?.5:length(a+.1)<.4&&(b.x+b.y-3)*b.y==0?.0:1.)*float(b.x<3&&b.y<3),1.);}
Python 2 ,
169140 байтФактический размер, 61 на 61, нанесенный на гораздо больший холст 300 на 400:
Отображение сетки пикселей:
Точки используют 177 пикселей в диапазоне 40% -80%, независимо от того, учитывается ли белая заливка 19 на 19 (144,4–288,8) или 21 на 21, включая обе границы (176,4–352,8).
Примечание: программа завершает работу и закрывает окно холста, как только рисунок завершен, чтобы ручное закрытие окна добавляло строку
done()
.turtle
пакет Python, разработанный для вводного графического программирования Перо начинаетсяx,y=0,0
с середины холста размером 300 на 400 пикселей (по умолчанию),up
поднимает перо,goto
перемещает перо,shape
задает форму пера с именованной формой ("square"
это предопределенная форма с шириной пикселя по умолчанию 21 ),color
задает цвет, где два параметра устанавливают штрих (по умолчанию ширина 1) и заливку; Байт сохраняется с помощью параметра(r,g,b)
кортежа, чтобы заменить его"white"
с[1,1,1]
использованием умножения списка[1]*3
. Наконецdot
рисует точку с заданной шириной в пикселях и цвете. Значение ширины точки по умолчанию слишком мало, чтобы его можно было квалифицировать,9
поэтому я сделал его эстетичным и квалифицированным15
. Цвет точки может быть"black"
но распакованный(r,g,b)
кортеж0,0,0
короче на два байта.Ручка должна удаляться от любой точки на конце, так как в противном случае серая / белая ручка скрывает точку.
Сетки пересекаются с использованием DIV (
/
) и Mod (%
) изi
начиная с8
(i
инициализируются ,9
но декрементируются в началеwhile
цикла) и работает вниз0
, компенсируя результаты2,1,0
с-1,0,1
использованием(1-...)
и масштабирования каждого до размера сетки , используя коэффициент 20 (обратите внимание, что20-i/3*20
на самом деле байтов меньше, чем20*(1-i/3)
, то же самое для%
). Это производит порядок [нижний левый, центральный левый, верхний левый, нижний средний, центральный средний, верхний средний, нижний правый, правый центральный, верхний правый] и требует "hasDot
" оценки[1,0,0,1,0,1,1,1,0]
, который302
в двоичной системе это может получить доступ путем проверкиi
й мощности двух компонент302
с использованием побитового-и,302&2**i
.источник
turtle
.Applesoft BASIC ,
479476516515483482 байта-32 с использованием нечитаемых имен переменных: P
-1, потому что Apple решила быть волшебной и позволила мне использовать неявное / несуществующее GOTO
Вот моя собственная (очень подходящая) программа для примера вывода, в котором не используются кружки:
Выход:
источник
Машинный код IA-32,
8180 байтHexDump:
Это
fastcall
вызываемая функция,doit
которая возвращает изображение в формате PGM в предоставленном буфере. Использование:Выход:
Я использовал разрешение 256x256, потому что
это круто,он позволяетecx
автоматически разбивать индекс пикселя на координатыy
вch
иx
вcl
. Кроме того, формат файла PGM требует число 255 в заголовке изображения.Внутренние квадраты 54х54 (41% клеток по площади).
Исходный код (может быть скомпилирован Visual Studio):
Образец клетки
может быть представлен "оптимизированной" битовой картой из 7 битов.
Биты индексируются выражением
y * 2 + x
, где(x,y)
находится ячейка. Это выражение дает одинаковый индекс для 2 пар клеток. Это счастливое совпадение, что значения битов там одинаковы.источник
42*42/85/85
только 24,4%.HTML & CSS, 155 байт
Оказывается, HTML действительно прощает ошибки синтаксиса.
1 байт сохранен благодаря @Octopus · 1 байт сохранен благодаря @Downgoat · 2 байт сохранен благодаря @StephenS
2 байта сохранены благодаря @Ryan · 3 байта сохранены благодаря @styfle · 4 байта сохранены благодаря @Ferrybig
13 байтов сохранено благодаря @SteveBennett
источник
R (
130119113 байтов)источник
axes=F
для заменыxaxt="n",yaxt="n"
. Если вы удваиваете все значения координат, вы сохраняете 4 чистых байта (но не можете использовать1:3,2:3
хитрость).;box()
какaxes=F
и снимает рамку. Кроме того , какaxes
этоplot
параметр , а не передаетсяpar
через ,...
какxaxt
/yaxt
, она даже не нужно быть прописаны полностью.c(1,7)
переменной (l=c(1,7)
); (2) заменаann
наan
; (3) замена[xy]li
на[xy]li
; и (4) удаление второго, избыточный аргумент дляgrid
:grid(3,lt=1)
. На самом деле, я взял на себя смелость редактировать это в (на рассмотрении).Python 2,7,
214311309 байтЭто моя первая попытка в код-гольфе, поэтому я уверен, что это можно улучшить. Я хотел бы не устанавливать пределы, но похоже, что matplotlib не может определить, что я нарисовал круги там, где сделал. Без установки xlim () и ylim () отображаются только два нижних круга.
Выход:
Редактировать: Исправлен цвет границ и убраны номера тиков. Я должен сказать, что matplotlib очень плотно сформулирован и не слишком дружелюбен к изменению цвета осей.
Срезал 3 байта благодаря @DJMcMayhem
Редактировать: снял два байта, установив мои тики в качестве кортежа внутри функций set_ticks.
источник
for s in'xy':exec"x.set_"+s+"ticks(a);"+s+"lim(-.5,2.5);"
. (Я не проверял это, хотя, так что я не уверен)Bash + ImageMagick,
233226 символовОбразец вывода:
Bash + ImageMagick, 215 символов
Владелец вопроса еще не ответил на вопрос сглаживания, и некоторые другие решения также имеют дополнительные оттенки серого, добавленные сглаживанием, поэтому на данный момент этот более короткий выглядит также приемлемым.
Образец вывода:
источник
Ruby,
144166164148144 байтаВыход:
Изменить: теперь имеет серые линии сетки.
источник
d=d+1
имеет более короткую форму (d+=1
) и==1
здесь эквивалентно>0
. Также подумайте, что происходит, когда вы устанавливаете c в Fixnum вместо массива :-)[]
как если бы это был массив битов (только для чтения, но здесь все в порядке).g=[2,13,24]
чтобыg=2,13,24
и заменитьeach
сmap
.PNG,
105100 байт(т.е. этот файл изображения)
Учитывая, что HTML и другие языки, не относящиеся к программированию, разрешены , мне было любопытно посмотреть, сколько я смогу сыграть в простое отображаемое в браузере изображение, чтобы служить базовым сравнением. Результат сжимается с помощью инструментов с открытым исходным кодом optipng (
-o7 -zm1-9 -strip all
) и pngwolf . Я также экспериментировал с zopflipng , но результаты были больше. Другие инструменты сжатия с закрытым исходным кодом могут сбрить еще пару байтов.Данные изображения в base64:
Показать фрагмент кода
Правка Я заставил точки коснуться верхней и нижней частей ячейки, чтобы вызвать большую повторяемость в шаблоне пикселей и, таким образом, улучшить степень сжатия. Но не волнуйтесь, точка все еще только заполняет (7 * 9) / (9 * 9) ≈ 78% своей ячейки.
Нестандартный PNG, 88 байт
Как отмечает @anatolyg , есть некоторый потенциал игры в гольф, удаляющий кусок IEND (12 байтов). Технически IEND требуется стандартом . Однако каждый фрагмент PNG содержит свой собственный размер и информацию о контрольной сумме. Поэтому не обязательно иметь конечный маркер. И действительно, все протестированные браузеры могут отображать изображение без проблем.
К сожалению (или к счастью), это нестандартное изображение отклонено imgur, поэтому я не могу его загрузить. Это кодировка base64:
Показать фрагмент кода
источник
PNG
это не язык программирования.Октава ,
127124 байтаУдалено 3 байта благодаря Луису.
grid
достаточно (вместоgrid on
).Выходы (после сохранения):
Обратите внимание, что на выходе отображаются серые линии сетки в окне графика. Они чернеют при сохранении (по какой-то причине).
Ну, это было долго и грязно! Пришлось пройти через множество модификаций, чтобы это соответствовало спецификациям.
Объяснение и, надеюсь, немного игры в гольф в ближайшее время ...
источник
'square'
чтобы он был квадратным на всех платформах.spy([0,1,0;0,0,1;1,1,1],'.k',80),set(gca,'XTick',.5:4,'XTickLabel','','YTick',.5:4,'YTickLabel',''),axis(.5+[0,3,0,3],'square'),grid on
,Обработка,
212198 байтПо сути, мы используем простую обработку, чтобы нарисовать белый фон, затем устанавливаем прозрачность прямоугольников, используемых для сетки, и рисуем их штрихи серым цветом. Мы продолжаем, определяя прямоугольник, снова устанавливая значение заполнения, чтобы заполнить круги черным цветом, и определяем круги пятерок.
Вуаля!
Вы можете добавить
или больше, чтобы лучше видеть цвет штрихов.
(Это мой первый Code-Golf, надеюсь, я все сделал правильно.)
РЕДАКТИРОВАТЬ: Благодаря Kritixi Lithos! Убрал переводы строк, изменил на int f = 25 и использовал -1 в фоновом режиме (float)
источник
float f=25;
кint f=25;
и используяbackground(-1)
вместоbackground(255);
Тикз,
193175170 байтВот вывод:
источник
MATL ,
7469686462 байтаПопробуйте это в MATL Online! (Это займет несколько секунд.)
Вывод онлайн-переводчика:
источник
Обработка, 134 байта
Вдохновленный @Zep, вот мой однострочный процессинг (а также мой первый гольф-код):
Спасибо за @Kritixi Lithos за его блестящие советы, как сбрить несколько байтов!
источник
for(int i=0,x,y;...
чтобы вы могли сброситьint
тело цикла. Кроме того,fill(255);
может стать простоfill(-1);
+20
при установке значенияx
иy
, таким образом , что вы можете изменить ,rect
чтобыrect(x+5,y+5,30,30);
иellipse
кellipse(x+20,y+20,23,23);
и сохранить два байта.LaTeX + Tikz, 155 байт
источник
1/0
делает разделение?x
иy
координат..5
стали справедливыми1
.[step=2]
создания требуется примерно 8 байтов (добавление ). Упрощение координат для рисования кругов не сохранит достаточно байтов. (Вы получаете 157 байт , если вы это делаете)SmileBASIC, 125 байт
58081 (U + E2E1, который находится в блоке «Область личного пользования») - это код символа для символа круга. Поместить его в строку тоже можно, но поскольку в UTF-8 он закодирован как 3 байта, он будет такой же длины (и не будет отображаться здесь правильно).
источник
C #, 333 байта
Полная / Отформатированная версия:
Идея проста: мы создаем графический объект из изображения и используем его, чтобы сделать изображение полностью белым. Затем зациклите каждый квадрат изображения, рисуя ограничивающий прямоугольник. Если это одно из мест для точки, мы тоже это рисуем. Наконец, мы сохраняем изображение в файл и позволяем Windows решить, как его открыть, в моем случае оно открывается с помощью Windows Photo Viewer.
Использование a
Process
для показа изображения и сохранение в файл намного короче, чем создание форм Windows или приложения WPF, из-за всех различных классов и лишнего пуха, необходимого для их создания.Выход:
источник
PHP, 221 + 2 байта
Сохранить в файл; позвоните в браузер. Если ваш браузер отображает бред,
вставьте
header("Content-Type:image-png");
передimagepng($i);
.Точки не очень круглые; это из-за небольших пропорций.
сломать
Я думаю, что
0x4c4b40
квалифицируется как приблизительный серый. Если нет, добавьте четыре байта.источник
R 313 236 байт
Пересмотренный код, основанный в основном на комментариях от @ user2390246, сэкономил 77 байт. Очень ценю помощь.
Кроме того, вы хотите добавить вызов к более короткому R-решению @mschilli. Он показывает элегантный способ решения проблемы графических значений по умолчанию.
Выход
Идет в файл с именами "р". Опущение и расширение спасли мне четыре байта. Но затем мне пришлось отредактировать расширение файла обратно на «bmp», чтобы загрузить его. Так что, возможно, я не должен получить кредит на эти четыре байта.
Комментарий
Я подумал: «Эта графика - не что иное, как простой график с пятью точками. Должно быть простым делом реализовать язык с надежными графическими возможностями данных. Давайте попробуем это в R.» Но тогда мне пришлось потратить порядка 80% байтов, просто работая над графическими значениями по умолчанию R.
Вроде не тот инструмент для работы ....
Я не мог найти менее подробный способ гарантировать размер и соотношение сторон графики, чем путем вызова конструктора bmp и затем dev.off (). Комбинация составляет 25 байтов. Если ваш R-сеанс настроен правильно, вы можете получить графику, которая выглядит более или менее правильно, не тратя эти байты, но она не является надежной или непротиворечивой.
источник
b
, просто поместите два безымянных вектора непосредственно вplot
функцию. Используйтеc(l,3)
дляxaxp
иyaxp
. Вы можете просто использоватьF
для false, нет необходимости определять его. И определите новую функцию,a(x,...)
которая вызывает,axis(x)
но имеет значения по умолчанию для меток, tck и т. Д., Чтобы вам не нужно было указывать их все дважды.axes=F
а неxaxt='n',yaxt='n'
. И вы забыли использовать.5
при определении,l
хотя вы использовали этот трюк позже..5
?.bmp
расширение файла, вы можете просто назвать егоr
.TI-BASIC,
218140137 байтПримечание: это количество байтов немного завышено. Программа использует только 85 токенов, но это сохраняется в 137 байтах. Кроме того, если вы используете не цветной калькулятор, вы можете сохранить еще 4 токена, потому что вам не нужно указывать цвет (по умолчанию синий), но я не знаю, достаточно ли велики их экраны для этот вызов, потому что у меня нет ни одного.
prgmHACKER (138 байт, 86 токенов):
Для правильного отображения эта программа требует, чтобы Xmin = Ymin = 0, Xmax = Ymax = 3, Xscl = Yscl = 1. Также необходимо правильно установить dX, но калькулятор делает это для вас, когда вы устанавливаете любую другую переменную окна. Я не мог видеть, сколько места эти переменные использовали в оперативной памяти.
Кроме того, параметры формата должны быть {RectGC, CoordOff, GridLine, GridColor: MEDGRAY, Оси: OFF, ExprOff, BorderColor: 1, Background: OFF}, но это переключаемые значения и не занимающие дополнительного места в зависимости от настройки.
источник
{0,1,2,1,2}
а{0,0,0,2,1}
затем добавить0.5
к каждому элементу.L1
иL2
наL₁
иL₂
, так как вы уже используете их. Я думаю, что вы можете удалить}
иL₁(I)+.5→A
=>.5+L₁(I
иL₂(I)+.5→B
=>.5+L₂(I→B
.R
119114111 байт(Спасибо @JayCe за сохранение мне 3 байта)
Не короче, чем другое решение R , но совершенно другой подход:
Используется макет, в котором 4 первых графика - это пустые ячейки, а 5 других - с точками в них.
источник
Excel VBA, 180 байт
Анонимная функция окна VBE Immediate, которая не требует ввода и вывода в объект листа по умолчанию (
Sheet1
).Комментируемая версия
Выход
-6 байт для использования
[{21,32,13,23,33}]
болееSplit("21 32 13 23 33")
-2 байта для использования
Mid(s,2)
болееRight(s,1)
-3 байта для использования
(s\10)
болееLeft(s,1)
источник
Октава
10794103 байтаили же
оба решения составляют 103 байта.
источник
line([x1,x2],y)
тебя надо делатьline([x1,x2],[y,y])
Apple Swift (iOS - CoreGraphics / QuartzCore) - 832 байта
Я нарисовал форму полностью, используя Quartz для устройства Apple iOS. К сожалению, это не особо внимательный язык, поэтому результат довольно большой, но это настолько мало, насколько я могу его себе представить.
Более читаемая версия для всех, кто интересуется:
Вот результат, полученный в iOS Simulator:
источник
Рубин с Обуви, 118 символов
Бит проверка заимствованы из RJHunter «s комментарий сделал на Mark Thomas » s решение Руби .
Образец вывода:
источник
SVG + HTML,
146138135133 байтаБлагодаря снисходительному анализатору HTML
xmlns="http://www.w3.org/2000/svg"
объявление может быть опущено, а также кавычки атрибутов и закрывающий тег. Эта версия решает некоторые проблемы других HTML-решений:Отредактируйте Shaved off 8 байтов, используя тот факт, что подпути не нужно закрывать для заполнения .
Редактировать В соответствии с грамматикой svg , не обязательно разделять запятую (
.5,.5
). Я также отказался от явной заливки, чтобы изменить направление рисования одной линии с отрицательного на положительное, сохранив черту. И, наконец, я изменил счет, чтобы не включать завершающий перевод строки, извините за ошибку новичка.Править Изучение из другого ответа на Codegolf, я заменил финал
9 />
с9>
. Это прекрасно работает во всех протестированных браузерах.источник
Python 3 + PyGame, 238 байт
Казалось бы, произвольные константы от меня пытаются сделать изображение максимально большим, не жертвуя байтами.
С непечатными символами, 229 байт
Я заменил списки байтовыми литералами, что сохраняет кучу символов, но непечатные символы не могут отображаться здесь должным образом. Я заменил непечатные символы на их графические эквиваленты U + 2400-U + 2421 для отображения.
источник