Это задача графического вывода, где задача состоит в том, чтобы дать самый короткий код для каждого языка.
задача
Ваш код должен построить один фиолетовый пиксель (шестнадцатеричное значение # 800080 или rgb (128, 0, 128)), двигаясь по часовой стрелке вокруг круга. Полное путешествие по кругу должно занять ровно 60 секунд и продолжаться бесконечно. Ничто другое не должно отображаться на экране или в окне, кроме пикселя. Ширина круга должна составлять 0,75 (подходящее округление), ширина экрана или окна, а фон должен быть белым. Чтобы избежать глупых решений, экран или окно должны иметь ширину не менее 100 пикселей.
Ваш код должен быть полной программой .
Языки и библиотеки
Вы можете использовать любой язык или библиотеку, которая вам нравится. Тем не менее, я хотел бы иметь возможность протестировать ваш код, если это возможно, поэтому, если вы можете предоставить четкие инструкции по его запуску в Ubuntu, это было бы очень полезно.
Пропал двадцать лучших языков. Нужна помощь.
Следующие двадцать лучших языков программирования в настоящее время вообще не имеют решения.
C , C ++, C # , Python , PHP , Visual Basic .NET , Perl, Delphi / Object Pascal, Сборка , Objective-C , Swift, Pascal, Matlab / Octave , PL / SQL, OpenEdge ABL, R
Каталог
Фрагмент стека в нижней части этого поста создает каталог из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать имя языка ссылкой, которая будет отображаться во фрагменте кода:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 62095; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 9206; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang, user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Ответы:
Обработка ,
1019796 байт4 байта благодаря Фламбино.
1 байт благодаря Kritixi Lithos.
Это создает окно по умолчанию 100 на 100 пикселей с необходимой анимацией.
Отказ от ответственности: это изображение не GIF. Не смотрите на это ни на минуту.
источник
π/1800
радианы за раз. (Это былоπ/3600
10 секунд назад из-за моего пердеть мозга.)QB64, 79 байт
QB64 - это эмулятор QBasic, который добавляет некоторые приятные функции. Эта программа использует one (
CLS,15
), который не поддерживается vanilla QBasic.Это очень громко. Он использует
PLAY
команду, чтобы ненадолго остановить выполнение перед очисткой экрана; в противном случае пиксель будет мерцать и станет невидимым.Загрузите QB64 , загрузите этот файл, нажмите
Run
и затемStart
.Вот оно в действии:
Я взял некоторые уловки (
SCREEN 7
вместоSCREEN 13
иPSET
вместоPOKE
) из ответа @ DLosc, так что кредит заслуживает. Как и в его ответе, мой пурпурный на самом деле#8B008B
, который был признан приемлемым ОП.(Константа
9.55
является приблизительной30/π = 9.54929658551
. Достаточно ли она близка?)источник
PLAY
для задержки. Мог бы поклясться, что был код для отдыха, но я не вижу его сейчас в файле справки. Я рассматривал возможность использования (функции)TIMER
в качестве параметра, но никогда не пытался его проверить, не короче ли он. Престижность!PSET
от тебя, так что похвала назад :) Похоже, отдыхn0
это дольше, чемc
. Кроме того, мне нравится, что это немного нарушает правила: OP сказал, что больше ничего не может быть показано в окне, но никогда не говорил, что моя программа не может громко звучать как BEEP BEEP BEEP BEEP .Ява,
449443439 байтПотому что у меня всегда были глупые идеи. Люблю играть в гольф на Яве;).
Редактировать: Спасибо за @Ypnypn для игры в гольф 7 байтов!
Edit2: Спасибо за @Franz D. за сохранение 3 байта!
источник
8388736
.JFrame
, использоватьFrame
, позволяет удалить импорт Javax.Mathematica,
10210194 байтаСоздает скрытый белый круг и помещает точку, которая следует за его краем, от 0 до 2π.
DefaultDuration
Опция Mathematica позволяет мне устанавливать цикл каждые 60 секунд.Вот ускоренная версия вывода:
РЕДАКТИРОВАТЬ: Изменить,
Circle
чтобыDisk
сохранить 2 символа, добавил отрицательный знак,t
чтобы заставить его двигаться по часовой стрелке.РЕДАКТИРОВАТЬ: Сохранено 7 байтов с помощью
~
оператора (благодаря Mauris).источник
a~f~b
вместоf[a,b]
, разве это не сделает вашRotate
короче?)Point@{0,1}
и я не думаю, что вам нужен список вокругPurple,Point...
.HTML, 235
290295354347байтСохраните как
.html
файл и откройте в браузере, для которого не нужны префиксы поставщиков, такие как Chrome или Firefox. Или попробуйте эту скрипку .Это новая версия, которая намного короче моей первой попытки, которую я написал за 5 минут до встречи. Новый размер холста - это квадрат, основанный на высоте окна просмотра. Это работает довольно хорошо и не ограничено определенной определенной высотой. Я очень точен в настройках задания (размер родительского элемента 75%, фиолетовый и 1px). Поэтому мне нужно, и я не могу отказаться или упростить следующие правила:
Ungolfed
Это негольфированная версия с чистой разметкой:
Правки
linear
сейчас.)}}
. Благодаря зубной щетке .12%
вместо12px
которого того же значения, соответствующего размеру родительского элемента.источник
)}}
от конца (CSS-парсер автоматически завершит блоки)TI-BASIC, 44 байта
Для калькуляторов TI-84 + CSE / CE, которые поддерживают ограниченную цветную графику BASIC.
Цвет здесь - пурпурный, или цвет 13 (можно также использовать
MAGENTA
токен).Я использую
rand
вместо1
условия бесконечного цикла, чтобы обеспечить небольшую задержку (~ 15 мс) между тем, когда отображается пиксель и когда он снова выключается.Установите калькулятор в режим радиан перед запуском этой программы; Я не считаю это по размеру, потому что это состояние по умолчанию. Также установите
Ans
0, введя 0 перед программой; это также по умолчанию.Спасибо @quartata за тестирование этой программы (у меня нет калькулятора цветов).
источник
Java,
339308289287 байтСпасибо @Peter Lenkefi, чье замечательное решение помогло мне начать работу, и чей цикл я беззастенчиво скопировал!
Основная экономия была связана с переключением на чистый AWT и рендерингом непосредственно во фрейме - нет необходимости в JPanel (или Canvas). Я также сделал счетчик целочисленной переменной, обновленной простым инкрементом, и сохранил несколько байтов, изменяя константы, чтобы иметь возможность вырезать цифру здесь и там.
РЕДАКТИРОВАТЬ: Спасибо @Peter Lenkefi и @tobii за их предложения в комментариях. Побеждать HTML было бы неплохо - кто-нибудь знает, как надежно приостановить выполнение в Java без использования sleep () и необходимости отлавливать исключения?
РЕДАКТИРОВАТЬ 2: JAVA БИТ HTML (в настоящее время на 290 байтов!): D Время теперь зависит от машины, но ~ 60 секунд для полного круга на моей машине, что нормально, согласно @Lembik. Еще раз спасибо @PeterLenkefi за его предложение - мой ответ - больше чем половина его :)
РЕДАКТИРОВАТЬ 3: @Ajay предложил удалить «re» из «перекрасить». На два байта меньше. Мы добираемся туда :)
источник
int c,i
и пропускint
вfor(int i=..
должно сохранить еще немного.new Frame(){...}
.Haskell,
143136 байтЭто использует глянцевый пакет:
Более красивая версия
источник
.0
.HTML (CSS?), 167 байт
Вдохновленный insertusername здесь ответ
Ungolfed:
источник
HTML + CSS
обычно не считается языком программирования, однако это до ОП.body
себя. :)QBasic, 106
Протестировано на QB64 , где написано, что у него есть версия для Linux (хотя я пробовал только на Windows).
SCREEN 7
устанавливает графический режим.COLOR 5,15
устанавливает темный пурпурный цвет как основной цвет и ярко-белый как цвет фона.DO ... LOOP
это бесконечный цикл. Обычно вы видите это какDO WHILE ... LOOP
(или вы можете поставитьLOOP WHILE
вместо этого, или использоватьUNTIL
для отрицательного условия), но вы также можете оставить условие вне, и в этом случае оно зацикливается навсегда.TIMER
количество секунд с полуночи в виде значения с плавающей запятой.CLS
= CLear Screen.PSET
Устанавливает точку на цвет, цвет переднего плана по умолчанию.i
начинается с нуля и подсчитывается на pi / 300 каждый раз в цикле, таким образом, завершая полный круг после 600 повторений. Мы вычисляем пи как 4 * арктан (1).t# = TIMER: WHILE TIMER < t# + 0.1: WEND
. Но нам не нужны числа с двойной точностью (помеченные#
) для разницы в 0,1 секунды, и получается, чтоIF cond THEN [GOTO] line
синтаксис на 1 символ корочеWHILE ... WEND
цикла.Цикл повторяется 600 раз за 60 секунд, завершая полный цикл.
Предостережения
#8B008B
вместо запрошенного#800080
(очищается с помощью OP).i
увеличивается, пока оборот не станет достаточно близким к 60 секундам. (Попробуйте знаменатель 69 или 68.)источник
SCREEN 8
вместо этого7
делать?скрипт mIRC, 184 байта
Это оптимизировано для mIRC в Wine. Запустите mIRC, нажмите,
Alt + R
затем вставьте его, закройте редактор и запустите/g
Время на GIF может быть выключено.
источник
R 170 байт
Это зависит от пакета
animation
. И вот gif, чтобы показать, что это работает:Сохранение неверного решения в формате gif (139 байт):
Для этого требуется ImageMagick для установки. Результат сохраняется в GIF.
источник
Рубин с Обуви, 159 байтов
Пиксель на самом деле является наконечником секундной стрелки аналоговых часов. Так что это абсолютно точно.
Рубин с Обуви, 134 байта
Это альтернатива, основанная на кадрах в секунду, вдохновленная другими ответами. Хотя в документации сказано, что fps по умолчанию равен 10, практические тесты показывают, что на самом деле это 12.
Оба решения принимают буквально: «ширина круга должна составлять 0,75 (соответственно, округляя) ширину экрана или окна»: рассчитывайте на основе ширины окна, чтобы пиксель иногда оставлял дно неквадратного окна. Не уверен, как ожидается, что такой случай будет обработан. (Использовать минимальную ширину и высоту? Ходить по овальному пути?) Окно начинается с размера по умолчанию 600 x 500 и может быть изменено.
источник
D
286280 байт(392 если написано нормально)
Или так, как я изначально написал без игры в гольф:
Зависит от simpledisplay.d и color.d, расположенных здесь: https://github.com/adamdruppe/arsd
Просто скачайте эти два отдельных файла и поместите их в тот же каталог, что и приведенный выше код, а затем:
dmd yourfile.d simpledisplay.d color.d
скомпилируйте, а затем просто запустите его.Моя маленькая библиотека была написана для того, чтобы сделать такие быстрые анимации довольно простыми, так что это хорошо работает на своих сильных сторонах! Увы, мне нравятся длинные имена идентификаторов, и я не предоставляю
Point
конструктор, который принимаетfloat
так, что добавляет 18-байтовое приведение и .... Идем пару десятков, прописывая имена моих методов.источник
C #,
379365 байтЗависит от
System.Windows.Forms
иSystem.Drawing
бежать. Вывод в окне 1000x1000.источник
var
SVG, 177 байт
Неверная разметка от ада до завтрака, но она работает (по крайней мере, в Chrome). Как и холст HTML5, размер SVG по умолчанию составляет 300x150, так что это то, что он предполагает.
Изменить: Ой, я случайно оставил в течение 6 вместо 60. Исправил это, но также обнаружил, что
0.5
работает как раз.5
, так что никаких изменений в количестве байтов.источник
Машинный код X86 -
150146149133127 байтГольф версия:
«Ungolfed», исходная версия:
Загружаемая версия в кодировке Base64
Скопируйте и вставьте этот адрес в ваш браузер. Переименуйте полученный файл
golfcrcl.com
и запустите в среде DOS, то есть DosBox.источник
Mathematica
208 185139 байтПеремещает фиолетовый пиксель вокруг массива, используемого в качестве изображения.
Метод 1 139 байт
Метод 2 154 байта
Наносит пиксель вдоль круговой траектории за 60 секунд.
Метод 3 193 байта
Это рисует часы с галочками и метками белого цвета, для которых секундная стрелка является пикселем.
источник
30
иt
.Obj-C ++ / Какао,
777678668657643628 байтТак что это, наверное, худший способ что-либо сделать, но я решил попробовать.
Может быть скомпилирован на Mac (мой в любом случае)
g++ -framework Cocoa file.mm
и запущен из терминала ( ctrl-Cчтобы выйти, так как это не приложение).Редактировать: Сохранено 99 байт: Исправлено
main()
для запуска на OS X 10.10 (1-я версия работала только на 10.8), пропущен перевод / поворот в пользу простых вычислений триггера, перестал беспокоиться о размещении окна и другие мелочи.Изменить: Сохранено еще 10 байтов: Изменено только
orderFront
для отображения окна. Хотя на самом деле это не переднее окно, но ни один не сделалorderFrontAndMakeKey
, так что ...Редактировать: Сохранено еще 11 байтов: пропущено
NSMakeRect
и найдена цифра, которая просто должна была идти.Редактировать: Сохранено еще 14 байтов: не нужно было назначать
NSTimer
экземпляр чему-либо, и, очевидно, может пропустить инициализациюr
до нуля.Редактировать: Сохранено еще 15 байтов: я не могу остановиться. Отправить помощь.
источник
Javascript / Processingjs,
175173156153152 байтаДля запуска: либо зайдите на сайт http://www.openprocessing.org/sketch/226733, чтобы увидеть его в действии с помощью processing.js, либо загрузите обработку 2.0 с processing.org , вставьте код в IDE обработки, выберите режим Javascript и посмотрите это пошло.
источник
background(-1)
на один байт корочеbackground(255)
Вяз , 274 байта
Попробуйте или отредактируйте его в своем браузере:
Маленькая версия
Версия без гольфа
Обратите внимание, что если мы избавимся от импорта и начертим контур вокруг холста, мы уменьшим его до 149 байт, но это, вероятно, обман!
источник
C #, 301 байт
Зависит от метрики размера по умолчанию; размер и положение могут быть немного в зависимости от ряда факторов. Может или не может мерцать ужасно; чтобы решить это, добавьте следующее:
источник
Lua + Löve, 189 знаков
love.update()
получает в качестве параметра время, прошедшее с предыдущего кадра. Рисует в стандартном окне 800 x 600 с фиксированными координатами, поскольку размер окна в любом случае не изменяется.источник
Python 2 + Pygame,
221198193источник
С (с использованием SDL1.2),
237233Компилирует и запускает используя
gcc -I/usr/include/SDL snippet.c -lSDL -lm && ./a.out
источник
ActionScript 2.0, 151 байт
К сожалению, Adobe Flash не является бесплатной, и Google сообщает, что он не работает в Linux без виртуальной машины или Wine (и даже с Wine он работает только в основном ). Тем не менее, я хотел посмотреть, насколько хорошо он справится с этой задачей. Довольно хорошо, оказывается.
Основная идея: создать новый объект фрагмента ролика, расположить его в точке (200, 200), а затем нарисовать точку 2 на 200 пикселей дальше вправо. Теперь видеоклип имеет ширину 200 пикселей и высоту 1 пиксель. Точка поворота - это исходные координаты, с которых мы начали, поэтому, когда мы изменяем
_rotation
свойство, точка перемещается по кругу вокруг точки (200, 200). Удобно,_rotation
в градусах; 0,25 градуса / кадр * 24 кадра / секунда * 60 секунд / минута = 360 градусов / минута.Для запуска с нуля, если у вас есть Flash, создайте новый документ Flash 1 , откройте панель «Действия» и вставьте приведенный выше код. Никакой дополнительной настройки не требуется, если принять во внимание белый фон по умолчанию, холст 550x400 и 24 кадра в секунду. Нажмите Ctrl-Enter и смотрите.
Если у вас нет самой Flash, вы все равно можете просматривать результаты с помощью бесплатного Flash Player, который должен поставляться с большинством современных браузеров. Загрузите SWF-файл здесь . Если вы не можете воспроизвести его, попробуйте также загрузить и открыть эту HTML-страницу с SWF-файлом в том же каталоге.
1 Протестировано в Adobe Flash CS4 Professional, выбрав «Flash File (ActionScript 2.0)», когда его спросят, какой тип нового файла создать.
2 На самом деле маленький треугольник, как вы увидите, достаточно ли увеличить его. Это был самый лучший способ нарисовать точку.
источник
JavaScript с jQuery, 205 байтов
jsfiddle , фрагмент ниже
Это, возможно, не совсем по книге. Размер холста по умолчанию (по крайней мере в Chrome) составляет 300x150, поэтому я отцентрировал круг на 75x75. Я мог бы отцентрировать его на 150х75 и сделать его радиус 113px (~ 75% ширины), но иногда он был бы вне холста, поэтому я выбрал ~ 75% высоты.
Но это не так уж и мало, так что
Показать фрагмент кода
источник
Blitz 2D / 3D , 126 байт
К сожалению, этот язык поддерживается только в Windows (хотя он может работать и в Wine).
источник
Javascript ES6, 202 байта
Протестировано в Firefox 41.
Как и в другом (почти) чистом ответе на Javascript, круг центрируется на 75x75, так как по умолчанию размер элементов canvas равен 300x150, как определено спецификациями HTML.
источник
Матлаб,
141136Я просто отправляю это тебе, Лембик, чтобы получить полный список.
Старая версия:
источник