Anti-golfscript anti-golf: cree una tarea donde GolfScript o J sea superado por su lang (convencional) [cerrado]


29

Necesitas hacer tres cosas:

  1. Estado de una tarea, T .
  2. Solución de la tarea en el lenguaje no suele utilizar para jugar al golf, A .
  3. Solución de la tarea en un lenguaje típicamente utilizado para jugar al golf, B . No intentes simplemente hinchar B para aumentar el puntaje, en lugar de eso, piensa que B fue escrito por tu competidor.

Use el sentido común para definir typically used for golfing, intente maximizar la diversión para otros usuarios.

Otros usuarios pueden proponer mejores Bcorreos electrónicos (tal vez incluidos en otros idiomas "golf").

Anotar es (length_in_bytes(B)+5)/(length_in_bytes(A)+5), más es mejor. (¿Tal vez la fórmula de puntuación debería cambiarse? ..)

La idea principal es inventar una tarea donde los lenguajes que generalmente funcionan bien en codegolf encuentran un problema. Puede ser la fuerza repentina de un lenguaje habitual en la tarea dada o la debilidad repentina de algunos golflang.

Evite tareas que mencionen lenguajes de programación específicos, como Input a string and execute it as a Scheme code.


1
Supongo que haces de esto un concurso de popularidad en lugar de un código de golf. De lo contrario, la gente se quejará de que no se trata de un "código más corto".
Victor Stafusa

OK, cambiando al concurso de popularidad. También puede sugerir un mejor título o una mejor puntuación.
Vi.

¿Supongo que mi pregunta anterior califica? codegolf.stackexchange.com/questions/18633/… La solución perl es de 48 caracteres, mientras que la solución J es de 54 caracteres
user12205

1
¿Podemos especificar lang B (siempre y cuando sea bueno en el golf)? ¿O alguien puede decir "aquí hay un programa en el idioma <insertar nombre del idioma> y tiene una solución muy corta de longitud <n>:"?
Justin

1
Por cierto, algunos idiomas como Perl pueden estar en el lado A y en el lado B, dependiendo del contexto.
Vi.

Respuestas:


14

Mi pregunta anterior, Imprimir una onda sinusoidal (verticalmente), califica en este momento. Lo publico aquí como una solución, también espero que ustedes puedan encontrar algunas soluciones más cortas para mi pregunta original.

Según lo requerido por Vi., Publicaré un resumen de la pregunta.

Imprima una onda sinusoidal continua desplazándose verticalmente en un terminal. El programa no debe terminar y debe desplazarse continuamente hacia abajo de la onda (excepto hasta SIGINT). Puede suponer que el desbordamiento no es un problema (es decir, puede usar bucles infinitos con contadores incrementales o recursión infinita).

La ola debe satisfacer las siguientes propiedades:

  • Amplitud = 20 caracteres (amplitud pico)
  • Período = 60 a 65 líneas (inclusive)
  • La salida solo debe consistir en espacios, nueva línea y |
  • Después de cada línea de salida, haga una pausa de 50 ms.

Hay una salida de muestra en mi pregunta original, pero no la estoy publicando aquí, porque esto hará que mi respuesta sea ridículamente larga. Mi pregunta original se puede ver aquí: Imprimir una onda sinusoidal (verticalmente)

Más corto Aactualmente: una solución Perl con 48 caracteres: https://codegolf.stackexchange.com/a/18655/12205

print$"x(25+20*sin).'|
';$_+=.1;`sleep .05`;do$0

Más corto Bactualmente: una solución J con 54 caracteres: https://codegolf.stackexchange.com/a/18649/12205

($:+&0.1[6!:3@]&0.05[2:1!:2~' |'#~1,~[:<.20*1+1&o.)0  




Actualmente, el puntaje de esta respuesta es 1.113 (un puntaje muy bajo)


El puntaje actual de acuerdo con la fórmula actual es aproximadamente 1.113
Vi.

@Vi. ¿Debo eliminar esta respuesta o debo esperar un tiempo y ver qué pasa? Si es esto último, ¿cuánto tiempo debo esperar?
user12205

La declaración establece bytes, no caracteres. Convertida a UTL-8, la solución APL hizo 61 bytes (70 para UTF-16).
Vi.

2
Estás afirmando que Perl no es un idioma que se usa típicamente para jugar al golf, ¡pero es el idioma que primero se asoció con la palabra golf ! Ruby, de 56 años, se parece al lenguaje real A en las respuestas actuales a sus preguntas.
Peter Taylor

8

Agrega dos números

Obtén dos números de STDIN y súmalos. Debe admitir números de coma flotante, por lo que 0.5 + 1.5 tiene que ser igual a 2.

Perl 5 (con -E)

say<>+<>

GolfScript

n%'+'*'"#{
}"'n/\*~

Puntuación calculada como (24+5)/(8+2+5) = 1.9(3). -ETambién cuenta como bytes del programa.
Vi.

El mismo comentario que le hice al as: estás afirmando que Perl no es un idioma que se usa típicamente para jugar al golf, ¡pero es el idioma que primero se asoció con la palabra golf !
Peter Taylor

Y su programa GolfScript no funciona. Un programa de trabajo sería n%'+'*'"#{ }"'n/\*~donde el carácter entre {}es una nueva línea literal (no se admite en los comentarios).
Peter Taylor

@PeterTaylor, en comparación con GolfScript, Perl es un lenguaje "habitual"; comparado con Java, es un lenguaje de "golf".
Vi.

1
El J para que esto no es tan malo, de hecho: +/".1!:1,~1. APL probablemente sería aún más pequeño.
algormshark


7

Puntuación 48/37 o 1. (297)

T: escriba un fragmento de código que finalice el programa después de exactamente una hora (lo más cerca posible, como un segundo) de ejecución. No se preocupe por las excepciones, pueden ser manejadas.

A: Java (32)

Thread.sleep(3600000);int a=1/0;

B: es para Befunge 98, requiere la huella digital TIME (43)

"EMIT"4(HMS00p01p02p#;gS-!01gM-!H-!++3-!j;@

Esto toma la Hora, Minuto y Segundo en el momento de la ejecución, y coloca las celdas en 02, 01 y 00. Luego, salta ;a la segunda parte. La segunda parte funciona de la siguiente manera:

g          get the value at 00
"EMIT"4(S) get the current time in seconds
-!         subtracts the values and changes a 0 to 1, anything else to 0

de manera similar para el minuto y la hora.

++  sums up the values
3-! i the sum is 3, we get a 1, otherwise, we get a 0.
j   jump over the next that many cells
;   skip code execution until the next ;
@   end program

Tenga en cuenta que Befunge volverá automáticamente al principio de la línea cuando se llegue al final de una línea.


Como podemos ver, Befunge no es bueno cuando se trata de esperar momentos específicos. Sin embargo, Java no es malo.


9
APL:⎕DL 3600
marinus

14
Java generalmente se lee como class Main{public static void main...
Vi.

3
@Vi. ver "fragmento de código". Básicamente, requiere el código que realmente hace el trabajo, no más que eso.
Justin

2
No conozco Befunge, pero el fragmento de Java no "finaliza el programa" como lo requiere la especificación. Eso requeriría una System.exit(0);o envolver su sueño en un mainmétodo.
Peter Taylor

3
@DoorknobofSnow no se compila:error: not a statement
Bob

5

Salida de un determinado archivo de texto (498.388888 puntos)

El resultado final está aquí .

El script Python 3.4.3 para imprimirlo es de 49 bytes:

for b in dir(__builtins__):print(eval(b).__doc__)

El ingenuo programa CJam igual a la salida del objetivo, al envolver la cadena de salida "..."y escapar de cada uno "que ocurre en ella, sería 26908 bytes.


Muy inteligente, aunque puede entrar en conflicto con la restricción de "idiomas específicos" (que es vago, lo admito).
BMac

La regla más cercana es "evitar mencionar un lenguaje específico". Python no se menciona, pero está claramente indicado.
Vi.

Sí, esta respuesta es un poco irónica, solo quería señalar que la regla es una pendiente resbaladiza. Imagínese si hubiera "destrozado" la salida más, por ejemplo, tomando la suma de verificación SHA1 de cada cadena de documentación, sería muy extraño afirmar que "este montón confuso de dígitos hexadecimales es demasiado específico del idioma" :)
Lynn

Si quisiera hacer una respuesta más "justa", probablemente usaría Mathematica. Puede hacer muchas cosas extremadamente específicas de dominio que tomarían miles de bytes de CJam / Pyth / cualquier otra cosa. Pero tristemente, no sé el idioma.
Lynn

El enlace a la salida está muerto.
pppery

4

Di "Hola mundo!" (50/26 ≈ 1.92)

Muestre un cuadro de mensaje para decir "¡Hola, mundo!"

JavaScript

alert('Hello world!')

En un navegador con soporte para DOM Nivel 0+.

Perl

use Win32;Win32::MsgBox('Hello world!','',48)

Ejecutando en ActivePerl con Win32 :: GUI.


alertno es inherentemente parte de JS, y el programa GolfScript es solo un comentario.
Peter Taylor

He cambiado la respuesta para usar Perl simple.
Cepillo de dientes

3

Salida "¡Hola mundo!" hasta que el usuario presione "q", 1.842 105/44 = 2.386

  1. Imprimir "¡Hola mundo!" (incluida nueva línea).
  2. El usuario presiona una tecla, que no se repite en la pantalla.
  3. Repita hasta que la tecla presionada sea "q".

QBasic ( 52 39 caracteres)

1?"Hello world!":IF"q"<>INPUT$(1)THEN 1

Desde que publiqué mi respuesta original, descubrí que podía desactivar el formato automático en QB64. : ^ D Con el número de línea y el ?acceso directo para PRINT, esto se parece más bien a una expresión ternaria en lenguajes tipo C.

Primera versión:

PRINT "Hello world!"
IF INPUT$(1) <> "q" THEN RUN

Perl 5 (100 caracteres)

while("q"ne$e){print"Hello world!\n";system"stty cbreak -echo";$e=getc;system"stty -cbreak echo";}

Lo anterior solo funcionará en (¿cierto?) Sistemas UNIX (probado en Ubuntu 12.04). Es posible que uno pueda ir multiplataforma y reducirlo a 91 caracteres usando el módulo Term :: ReadKey , pero no lo he probado:

use Term::ReadKey;while("q"ne$e){print"Hello world!\n";ReadMode 3;$e=ReadKey 0;ReadMode 0;}

1

Hola mundo (3 1/3 puntos)

Programa de escritura que genera Hello World. .

HQ9 + (1 personaje)

Este no es un lenguaje "típicamente utilizado para jugar al golf", así que creo que encaja aquí. Funciona en este intérprete, por cierto .

H

GolfScript (15 caracteres)

Dudo que pueda acortarse, incluso si es GolfScript.

"Hello World."

8
No creo que se HQ9+adapte como un idioma. Está diseñado para trucos / acertijos / diversión. Brainfuck / unlambda / otros idiomas esoterical tampoco parecen ser conformes como A .
Vi.

@ Vi .: Pero normalmente no se usa para jugar al golf.
Konrad Borowski el

44
Puedes intentar utilizarlo HQ9+como lenguaje B y vencerlo con Java o algo así ...
Vi.

77
Parece que hay una jerarquía: en comparación con Java, Perl es un golflang. En comparación con Perl, GolfScript es un golflang. En comparación con GolfScript, HQ9 + es un golflang ...
Vi.

@ Vi .: Revisé cuidadosamente la descripción de su tarea. HQ9 + nunca se usa para jugar al golf, a excepción de dos tareas particulares: "99 botellas" y "Hola, mundo". A menos que pueda mostrar alguna otra tarea en la que HQ9 + gane con cualquier otro lenguaje de programación, todavía creo que se ajusta a la definición, incluso si la abusa (oye, es un concurso de popularidad ). HQ9 + simplemente no se usa para cosas de golf que no están relacionadas con esas dos tareas. Por lo tanto, no se usa típicamente para jugar al golf. El segundo obviamente está diseñado para CodeGolf: es GolfScript.
Konrad Borowski

0

Salida "¡Hola, mundo!", 33/97 = 2.94

Escribe un programa que salga Hello world!

Arduino o GML

Serial.print("Hello world!")

o

show_message("Hello world!")

Ambos son 28 personajes.

GTB

Utilizo mucho GTB para jugar al golf (especialmente desde que lo creé yo mismo, y es Turing completo). Desafortunadamente, solo hay soporte limitado para caracteres en minúscula (porque la calculadora TI-84 no puede manejarlo). ¡Este es probablemente el programa GTB más corto que puede generar Hello World!

S;"lower",1,1)→_~"H"+S;"expr(",1,1)+_+_+S;"cos(",2,1)+" W"+S;" or ",2,2)+_+S;" and ",4,1)+"!

92 caracteres.


¿La versión GTB también lo envía al puerto serie?
Vi.

¿La versión GTB está hinchada intencionalmente con varios cossy exprsrealmente no puede generar algo de forma regular? O el "personaje en realidad no es una cadena literal y me confunde ...
Vi.

@Vi. No está hinchado en absoluto ... tiene que quitar e de expr, dos l de abajo, o de cos, o de o, l de abajo, yd de y.
Timtech

'Otros usuarios pueden proponer mejores Bs (tal vez incluso en otros idiomas "golf"). '--- déjame probar golfscript:"Hello world!"
John Dvorak

@ JanDvorak Probablemente tengas razón.
Timtech
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.