Este es un desafío de salida gráfica donde la tarea es dar el código más corto por idioma.
Tarea
Su código debe trazar un solo píxel púrpura (valor hexadecimal # 800080 o rgb (128, 0, 128)), moviéndose en el sentido de las agujas del reloj alrededor de un círculo. Debería llevar exactamente 60 segundos hacer un recorrido completo alrededor del círculo y debería continuar indefinidamente. No se debe mostrar nada más en la pantalla o ventana, excepto el píxel. El ancho del círculo debe ser 0,75 (redondeando adecuadamente) el ancho de la pantalla o ventana y el fondo debe ser blanco. Para evitar soluciones tontas, la pantalla o ventana debe tener al menos 100 píxeles de ancho.
Su código debe ser un programa completo .
Idiomas y bibliotecas
Puede usar cualquier idioma o biblioteca que desee. Sin embargo, me gustaría poder probar su código si es posible, así que si puede proporcionar instrucciones claras sobre cómo ejecutarlo en Ubuntu, sería muy apreciado.
Faltan los veinte idiomas principales. Se necesita ayuda.
Los siguientes veinte principales lenguajes de programación no tienen ninguna solución.
C , C ++, C # , Python , PHP , Visual Basic .NET , Perl, Delphi / Object Pascal, Assembly , Objective-C , Swift, Pascal, Matlab / Octave , PL / SQL, OpenEdge ABL, R
Catalogar
El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
## [><>](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>
Respuestas:
Procesamiento ,
1019796 bytes4 bytes gracias a Flambino.
1 byte gracias a Kritixi Lithos.
Esto crea una ventana predeterminada de 100 por 100 píxeles con la animación requerida.
Descargo de responsabilidad: esa imagen no es un GIF. No lo mires por un minuto.
fuente
π/1800
radianes a la vez. (Fueπ/3600
hace 10 segundos debido a mi pedo cerebral).QB64, 79 bytes
QB64 es un emulador QBasic que agrega algunas características agradables. Este programa utiliza uno (
CLS,15
) que no es compatible con vanilla QBasic.Esto es muy ruidoso. Utiliza el
PLAY
comando para detener la ejecución por un corto tiempo antes de borrar la pantalla; de lo contrario, el píxel parpadeará y se volverá invisible.Descargue QB64 , cargue este archivo, haga clic
Run
y luegoStart
.Aquí está en acción:
Tomé algunos trucos (en
SCREEN 7
lugar deSCREEN 13
, y enPSET
lugar dePOKE
) de la respuesta de @ DLosc, por lo que el crédito se debe. Como en su respuesta, mi magenta es en realidad#8B008B
, lo que fue considerado aceptable por el OP.(La constante
9.55
es una aproximación de30/π = 9.54929658551
. ¿Está lo suficientemente cerca?)fuente
PLAY
por un retraso. Podría haber jurado que había un código para descansar, pero ahora no lo veo en el archivo de ayuda. Pensé en usar (una función de)TIMER
como parámetro, pero nunca lo intenté para ver si era más corto. ¡Prestigio!PSET
de ti, así que felicitaciones :) Parece que un descanson0
es más largo quec
. Además, me gusta como un poco de flexión de reglas: el OP dijo que no se podía mostrar nada más en la ventana, pero nunca dijo que mi programa no podía ir en voz alta BEEP BEEP BEEP BEEP .Java,
449443439 bytesPorque siempre he tenido ideas estúpidas. Como jugar al golf en Java;).
Editar: ¡Gracias por @Ypnypn por jugar al golf 7 bytes!
Edit2: ¡Gracias por @Franz D. por guardar 3 bytes!
fuente
8388736
.JFrame
, usarFrame
, le permite eliminar la importación de Java.Mathematica,
10210194 bytesCrea un círculo blanco que está oculto y coloca un punto que sigue su borde de 0 a 2π. La
DefaultDuration
opción de Mathematica me permite configurarlo para completar un ciclo cada 60 segundos.Aquí hay una versión acelerada de la salida:
EDITAR: cambie
Circle
aDisk
para guardar 2 caracteres, agregó un signo negativot
para que se mueva en el sentido de las agujas del reloj.EDITAR: guardado 7 bytes utilizando el
~
operador (gracias a Mauris).fuente
a~f~b
lugar def[a,b]
, ¿eso no te haríaRotate
más corto?)Point@{0,1}
y no creo que necesite la listaPurple,Point...
.HTML, 235
290295354347bytesGuarde como un
.html
archivo y ábralo en un navegador que no necesite prefijos de proveedor, como Chrome o Firefox. O prueba este violín .Esta es una nueva versión que es mucho más corta que mi primer intento, que había escrito 5 minutos antes de una reunión. El nuevo tamaño del lienzo es un cuadrado basado en la altura de la ventana gráfica. Eso funciona bastante bien y no está restringido a una determinada altura definida. Soy muy preciso sobre la configuración en el desafío (75% del tamaño de su padre, púrpura y 1px). Por lo tanto, necesito y no puedo descartar o simplificar las siguientes reglas:
Sin golf
Esta es la versión sin golf con marcado limpio:
Ediciones
linear
ahora.)}}
. Gracias al cepillo de dientes .12%
lugar de12px
cuál es el mismo valor correspondiente al tamaño del elemento padre.fuente
)}}
desde el final (el analizador CSS finalizará automáticamente los bloques)TI-BASIC, 44 bytes
Para las calculadoras TI-84 + CSE / CE, que admiten algunos gráficos en color BASIC limitados.
El color aquí es magenta o color 13 (también se puede usar el
MAGENTA
token).Utilizo en
rand
lugar de1
la condición de bucle infinito para proporcionar un pequeño retraso (~ 15 ms) entre el momento en que se muestra el píxel y cuando se apaga nuevamente.Configure su calculadora en modo radianes antes de ejecutar este programa; No cuento esto en el tamaño porque es el estado predeterminado. También se establece
Ans
en 0 ingresando un 0 antes del programa; Este es también el valor predeterminado.Gracias a @quartata por probar este programa (no tengo una calculadora de color).
fuente
Java,
339308289287 bytes¡Gracias a @Peter Lenkefi, cuya gran solución me ayudó a comenzar, y cuyo for-loop copié descaradamente!
El ahorro principal se debió a cambiar a AWT puro y renderizar directamente en el Marco, sin necesidad de un JPanel (o Canvas). También convertí el contador en una variable entera, actualizada mediante un simple incremento, y guardé unos pocos bytes girando las constantes para poder quitar un dígito aquí y allá.
EDITAR: Gracias a @Peter Lenkefi y @tobii por sus sugerencias en los comentarios. Vencer HTML sería bueno: ¿alguien sabe cómo pausar de manera confiable la ejecución en Java sin usar sleep () y tener que detectar excepciones?
EDIT 2: JAVA BEATS HTML (¡actualmente en 290 bytes!): D El tiempo ahora depende de la máquina, pero ~ 60 segundos para un círculo completo en mi máquina, lo cual está bien según @Lembik. Gracias de nuevo a @PeterLenkefi por su sugerencia: mi respuesta es más de la mitad de la suya :)
EDITAR 3: @Ajay sugirió eliminar el "re" de "repintar". Dos bytes menos. Estamos llegando allí :)
fuente
int c,i
y omitiendo elint
defor(int i=..
debe ahorrar un poco más.new Frame(){...}
.Haskell,
143136 bytesEsto usa el paquete de brillo :
La versión más bonita es
fuente
.0
.HTML (CSS?), 167 bytes
Inspirado por la respuesta de insertusernamehere
Sin golf:
fuente
HTML + CSS
generalmente no se considera un lenguaje de programación, sin embargo, depende del OP.body
sí mismo. :)QBasic, 106
Probado en QB64 , que dice que tiene una versión de Linux (aunque solo lo he probado en Windows).
SCREEN 7
establece el modo de gráficos.COLOR 5,15
establece magenta oscuro como color de primer plano y blanco brillante como color de fondo.DO ... LOOP
Es un bucle infinito. Por lo general, lo vería comoDO WHILE ... LOOP
(o puede ponerlo en suLOOP WHILE
lugar o usarloUNTIL
para una condición negada), pero también puede omitir la condición, en cuyo caso se repite para siempre.TIMER
es el número de segundos desde la medianoche, como un valor de punto flotante.CLS
= Pantalla CLear.PSET
ESTABLECE un punto a un color, color de primer plano de forma predeterminada.i
comienza en cero y cuenta por pi / 300 cada vez a través del ciclo, completando así un círculo completo después de 600 repeticiones. Calculamos pi como 4 * arctan (1).t# = TIMER: WHILE TIMER < t# + 0.1: WEND
. Pero no necesitamos números de doble precisión (marcados con#
) para una diferencia de 0.1 segundos, y resulta que laIF cond THEN [GOTO] line
sintaxis es 1 carácter más corta que unWHILE ... WEND
bucle.El ciclo se repite 600 veces en 60 segundos, completando así un círculo completo.
Advertencias
#8B008B
lugar del solicitado#800080
(se borra con el OP).i
se incrementa hasta que una revolución esté lo suficientemente cerca de 60 segundos. (Pruebe con un denominador de 69 o 68.)fuente
SCREEN 8
lugar de7
hacer?script mIRC, 184 bytes
Esto está optimizado para mIRC en Wine. Inicie mIRC, presione y
Alt + R
luego pegue esto, cierre el editor y ejecútelo con/g
El momento en el gif podría estar apagado.
fuente
R, 170 bytes
Se basa en el paquete
animation
. Y aquí hay un gif para mostrar que funciona:Solución no válida guardando en un gif (139 bytes):
Este requiere que ImageMagick esté instalado. El resultado se guarda en un gif.
fuente
Rubí con zapatos, 159 bytes
El píxel es en realidad la punta del segundero de un reloj analógico. Entonces este es absolutamente preciso.
Rubí con zapatos, 134 bytes
Esta es una alternativa basada en cuadros por segundo, inspirada en las otras respuestas. Aunque la documentación dice que el fps predeterminado es 10, las pruebas prácticas muestran que en realidad es 12.
Ambas soluciones toman "El ancho del círculo debe ser 0.75 (redondeando adecuadamente) el ancho de la pantalla o ventana" literalmente: calcule en función del ancho de la ventana, por lo que el píxel ocasionalmente puede salir de la parte inferior de una ventana no cuadrada. No estoy seguro de cómo se espera que se maneje tal caso. (¿Usar un mínimo de ancho y alto? ¿Caminar en una ruta ovalada?) La ventana comienza con un tamaño predeterminado de 600 x 500 y es redimensionable.
fuente
D,
286280 bytes(392 si se escribe normalmente)
O la forma en que lo escribí originalmente sin jugar al golf:
Depende de simpledisplay.d y color.d ubicados aquí: https://github.com/adamdruppe/arsd
Simplemente descargue esos dos archivos individuales y colóquelos en su mismo directorio que el código anterior, luego:
dmd yourfile.d simpledisplay.d color.d
para compilar y luego simplemente ejecutarlo.¡Mi pequeña biblioteca fue escrita para hacer animaciones rápidas como esta bastante simple, por lo que esto juega bien con sus puntos fuertes! Por desgracia, me gustan los nombres de identificadores largos y no proporcioné un
Point
constructor que tome,float
por lo que agrega 18 bytes de conversión y ... idk un par de docenas deletreando los nombres de mis métodos.fuente
C #,
379365 bytesDepende de
System.Windows.Forms
ySystem.Drawing
para correr. La salida está en una ventana de 1000x1000.fuente
var
SVG, 177 bytes
Marcado no válido desde el infierno hasta el desayuno, pero se ejecuta (al menos en Chrome). Al igual que un lienzo HTML5, el tamaño predeterminado para un SVG parece ser 300x150, así que eso es lo que se supone.
Editar: Vaya, accidentalmente me fui con una duración de 6 en lugar de 60. Se corrigió eso, pero también descubrí que
0.5
funciona de la misma.5
manera, por lo que no hay cambios en el conteo de bytes.fuente
X86 Machine-código -
150146149133127 bytesVersión de golf:
'Ungolfed', versión de origen:
Versión descargable, codificada en base64
Copie y pegue esta dirección en su navegador. Cambie el nombre del archivo resultante
golfcrcl.com
y ejecútelo en un entorno DOS, es decir, DosBox.fuente
Mathematica
208185139bytesMueve un píxel morado alrededor de una matriz utilizada como imagen.
Método 1 139 bytes
Método 2 154 bytes
Traza un píxel a lo largo de una ruta circular en 60 segundos.
Método 3 193 bytes
Esto dibuja un reloj, con marcas y etiquetas en blanco, para las cuales la manecilla de segundos es un píxel.
fuente
30
yt
.Obj-C ++ / Cocoa,
777678668657643628 bytesAsí que esta es probablemente la peor manera de hacer algo, pero pensé que lo intentaría.
Se puede compilar en una Mac (la mía de todos modos) con
g++ -framework Cocoa file.mm
y ejecutar desde la terminal ( ctrl-Cpara salir, ya que no es una aplicación).Editar: 99 bytes guardados: corregido
main()
para ejecutarse en OS X 10.10 (la primera versión solo se ejecutó en 10.8), omitió traducir / rotar a favor de cálculos trigonométricos simples, dejó de molestarse con la colocación de ventanas y otras cosas pequeñas.Editar: guardado otros 10 bytes: cambiado solo
orderFront
para mostrar la ventana. Sin embargo, en realidad no lo convierte en la ventana frontal, pero tampoco lo hizoorderFrontAndMakeKey
, así que ...Editar: guardó otros 11 bytes: se omitió
NSMakeRect
y encontró un dígito que solo tenía que ir.Editar: guardó otros 14 bytes: no necesité asignar la
NSTimer
instancia a nada, y aparentemente puede omitir la inicializaciónr
a cero.Editar: guardado otros 15 bytes: no puedo parar. Enviar ayuda.
fuente
Javascript / Processingjs,
175173156153152 bytesPara ejecutar: visite http://www.openprocessing.org/sketch/226733 para verlo en acción usando processing.js, o descargue el procesamiento 2.0 de processing.org , pegue el código en el IDE de procesamiento, seleccione el modo Javascript y mire ir.
fuente
background(-1)
es un byte más corto quebackground(255)
Olmo , 274 bytes
Intente o edítelo en su navegador:
Versión pequeña
Versión sin golf
Tenga en cuenta que si nos deshacemos de las importaciones y dibujamos el contorno alrededor del lienzo, tenemos 149 bytes, ¡pero eso probablemente sea una trampa!
fuente
C #, 301 bytes
Depende de las métricas de tamaño predeterminadas; El tamaño y la posición pueden variar un poco dependiendo de varios factores. Puede o no parpadear horriblemente; para resolver eso, agregue lo siguiente:
fuente
Lua + Löve, 189 caracteres
love.update()
recibe como parámetro el tiempo transcurrido desde el cuadro anterior. Dibuja en la ventana predeterminada de 800 x 600 en coordenadas fijas, ya que la ventana no es redimensionable de todos modos.fuente
Python 2 + Pygame,
221198193fuente
C (usando SDL1.2),
237233Compila y ejecuta usando
gcc -I/usr/include/SDL snippet.c -lSDL -lm && ./a.out
fuente
ActionScript 2.0, 151 bytes
Desafortunadamente, Adobe Flash no es freeware, y Google informa que no funciona en Linux sin una VM o Wine (e incluso con Wine, solo funciona principalmente ). Aún así, quería ver qué tan bien le iría en esta tarea. Bastante bien, resulta.
La idea básica: crear un nuevo objeto de clip de película, colocarlo en (200, 200) y luego dibujar un punto 2 en él 200 píxeles más a la derecha. Ahora el clip de película tiene 200 píxeles de ancho y 1 píxel de alto. El punto de pivote son las coordenadas originales donde comenzamos, por lo que cuando modificamos la
_rotation
propiedad, el punto se mueve en un círculo alrededor del punto (200, 200). Convenientemente,_rotation
está en grados; 0.25 grados / cuadro * 24 cuadros / segundo * 60 segundos / minuto = 360 grados / minuto.Para ejecutar desde cero si tiene Flash, cree un nuevo documento Flash 1 , abra el panel Acciones y pegue el código anterior. No se requiere más personalización, asumiendo el fondo blanco predeterminado, el lienzo 550x400 y 24 fps. Presiona Ctrl-Enter y mira cómo se va.
Si no tiene Flash, aún puede ver los resultados con el Flash Player gratuito, que debería venir con la mayoría de los navegadores modernos. Descargue el archivo SWF aquí . Si no puede reproducirlo, intente descargar también esta página HTML y abrirla, con el archivo SWF en el mismo directorio.
1 Probado en Adobe Flash CS4 Professional, eligiendo "Archivo Flash (ActionScript 2.0)" cuando se le preguntó qué tipo de archivo nuevo crear.
2 En realidad, un pequeño triángulo, como verás si lo acercas lo suficiente. Fue la forma más golfica que pude encontrar para dibujar un punto.
fuente
JavaScript con jQuery, 205 bytes
jsfiddle , fragmento a continuación
Tal vez esto no esté del todo en el libro. El tamaño predeterminado de un lienzo (al menos en Chrome) es 300x150, por lo que he centrado el círculo en 75x75. Podría centrarlo en 150x75 y hacer que su radio sea de 113px (~ 75% del ancho), pero estaría fuera del lienzo algunas veces, así que elegí ~ 75% de la altura.
Pero no es particularmente corto de todos modos, así que meh '
Mostrar fragmento de código
fuente
Blitz 2D / 3D , 126 bytes
Desafortunadamente, este idioma solo es compatible con Windows (aunque puede ejecutarse en Wine).
fuente
Javascript ES6, 202 bytes
Probado en Firefox 41.
Al igual que la otra respuesta (casi) pura de Javascript, el círculo está centrado en 75x75 ya que el tamaño predeterminado de los elementos del lienzo es 300x150 según lo definido por las especificaciones HTML.
fuente
Matlab,
141136Le envío esto, Lembik, para que tenga una lista completa.
Versión antigua:
fuente