¿Cuáles son algunos consejos para elegir el idioma adecuado para el golf? ¿Qué factores afectan el idioma a elegir?
Aquí hay algunos tipos de problemas de ejemplo:
- Problemas que requieren solución de E / S , ya sea consola o archivo
- Problemas que requieren análisis
- Problemas que requieren que escriba su solución como una definición de función
- Problemas de matematicas
- Problema al tratar con números primos
- Resolver acertijos numéricos
- Realizar métodos numéricos
- Procesamiento de cadenas
- Procesamiento de matriz
- Problemas de matriz 2D difíciles
- Geometría Computacional
- Recursividad
- Gráficos 2D
- Gráficos en 3D
- Audio
- Redes / web
- Procesamiento en paralelo
No diga simplemente cosas como "Usar GolfScript | J" porque le gustan.
Respuestas:
Depende de lo que uno necesite, C / C ++ es rápido, pero debe codificar más del trabajo usted mismo. Python y Ruby son más lentos, pero son mucho más fáciles de codificar con métodos integrados que acortan mucho trabajo y manejan automáticamente valores infinitamente grandes (si uno tiene la RAM). Usar un lenguaje funcional como Haskell es excelente para un uso funcional puramente matemático si uno puede enmarcar el problema de esa manera.
fuente
Poniendo mis dos centavos en los lenguajes de programación de matriz , J y APL en particular.
K / Kona, Q y Nial también entran en esta categoría, pero generalmente tienen los mismos beneficios y críticas. Usa discreción. Usaré los ejemplos J a continuación, principalmente porque son ASCII y, por lo tanto, fáciles de escribir; recuerde que los caracteres APL cuentan como bytes individuales, así que no deje que ese sea su problema con el idioma como opción para jugar al golf.
Estos dos son muy buenos lenguajes matemáticos y de manipulación de datos, porque arrojan matrices alrededor de un nivel alto, y muchos bucles se realizan implícitamente , al decir, por ejemplo, agregar diez a cada uno de 3, 4 y 5 (
10 + 3 4 5
) o sumar cada uno fila de una matriz (+/"1 arr
--el bucle está en el"1
).Con problemas de números primos en particular, J tiene primitivas incorporadas rápidas y cortas, al igual que algunos dialectos de APL. (Editar: Estoy pensando en Nars2000, que es en parte un dialecto y una implementación completamente diferente. APL no tiene funciones integradas para primos). N-ésimo primo (
p:
), no. de primos hasta (_1&p:
), factoring (q:
), GCD y LCM (+.
y*.
), y así sucesivamente, hay mucho allí. Sin embargo, en la práctica, la pregunta a menudo especificará que tiene que cocinar sus propias implementaciones principales, por lo que estas no ven demasiado uso. Todavía hay formas ordenadas y elegantes de obtener lo mejor que necesita, simplemente se vuelve un poco menos de cortar y pegar.El procesamiento de matrices y cadenas es un poco confuso: si es algo para lo que APL / J es bueno o tiene un idioma primitivo o común, es casi trivial; si es algo muy secuencial y no muy paralelizable, lo pasarás mal. Cualquier cosa en el medio está en el aire, aunque generalmente responderán favorablemente.
IO es raro. APL tiene una expresión de entrada de un solo carácter, pero con J usted tiene que pasar por lo menos 8 a leer en un número:
".1!:1]1
. La salida es un poco menos detallada, pero todavía está viendo 6 o 7 caracteres desperdiciados, en la práctica. A J en particular realmente le gusta mucho si puede tomar la entrada como argumentos para una función, en lugar de tener que jugar con IO.En la práctica, con J y APL, generalmente la solución se escribe como una función que invocas en la consola. Con APL, básicamente puede poner nombres de variables para sus argumentos y ajustar la expresión con la que estaba trabajando entre llaves y llamarlo un día.
Pero con J, hay un poco de sobrecarga para definir funciones explícitamente
3 :'...'
, y tienes que escapar de cualquier cadena en el interior, por lo que lo que generalmente se hace es algo llamado programación tácita: programa en el nivel de función, combinando primitivas de una manera no muy diferente al de Haskell. Esto puede ser tanto una bendición como una maldición, porque no tienes que gastar tantos personajes refiriéndose a tus argumentos, pero es fácil ahogarse entre paréntesis y terminar perdiendo decenas de personajes tratando de hackear tu solución, por lo demás corta e inteligente. algo que funcionaNo tengo experiencia jugando al golf con estos problemas particulares, pero diré esto: al final, los lenguajes de programación de matriz son muy buenos para canalizar y transformar muchos datos de la misma manera. Si puede convertir el problema en un ejercicio de combinación de números, puede convertirlo en un problema APL / J, sin sudar.
Dicho esto, no todo es un problema APL / J. A diferencia de Golfscript, APL y J resultaron ser buenos para el golf, junto con sus otros beneficios;)
fuente
¿Por qué aún no se ha elogiado a Perl? Es un excelente lenguaje de golf, para casi cada uno de estos, especialmente cosas relacionadas con cuerdas (regex).
Burlesque es bueno para programas relacionados con números, mientras que Ruby es ideal para una manipulación de texto más simple.
En realidad, hay una lista de idiomas y puntajes de golf aquí .
fuente
Me gusta usar lenguajes de programación oscuros para (intentar) hacer el trabajo.
Aquí están mis favoritos para los detalles que enumeró:
Problemas que requieren solución de E / S, ya sea consola o archivo
Idiomas como TI-Basic funcionan bien, pero prefiero Ruby por
puts
Problemas que requieren análisis
GolfScript definitivamente te ayudará aquí
Problemas que requieren que escriba su solución como una definición de función
Tabla TI-84 : permite funciones como,
Y=
por ejemplo,Y=|X|
devuelve el valor absoluto de XProblemas de matematicas
TI-Basic : hecho para una calculadora, por lo que incluye matemáticas;)
Problema al tratar con números primos
Nada especial; Mathematica es probablemente la herramienta adecuada para el trabajo
Resolver acertijos numéricos
TI-Basic, ya que recorre automáticamente las matrices
Realizar métodos numéricos
TI-Basic o Mathematica
Procesamiento de cadenas
Python : tiene algunas excelentes funciones de cadena.
No importa cuán bueno creas que es TI-Basic , no lo uses para cadenas ...
Procesamiento de matriz
TI-Basic : recorre automáticamente los arreglos ; por ejemplo, incrementar todos los valores en la matriz -
L1+1→L1
Ruby : también tiene características de matriz muy potentes y, por supuesto,
!
también ayudará a comprimir el códigoProblemas de matriz 2D difíciles
Ruby o Python funciona mejor aquí, ya que TI-Basic no admite matrices 2D
Geometría Computacional
TI-Basic tiene características geométricas y se puede usar para la mayoría de las matemáticas, hasta cálculo y álgebra lineal
PRIMA
Bucle
De cualquier Arduino o Quomplex . Arduino tiene incorporado
void loop(){}
y Quomplex tiene los bucles infinitos contenidos entre paréntesis ([]
)Dibujo / GUI
Game Maker Language tienecaracterísticas de dibujo muy potentes, y TI-Basic también es una herramienta generalmente útil debido al soporte para dibujar en el gráfico.
Quines
De cualquier HQ9 + o Quomplex porque HQ9 + tiene el
Q
de salida del código fuente del programa y Quomplex se imprimirán automáticamente su código fuente a menos que*
(salida) se especifica o no produce ninguna salida, que se define con#
fuente
Si está resolviendo un problema de matemáticas y no tiene Mathematica, pruebe Sage . Está basado en Python, por lo que si ya conoce Python, no necesita mucho tiempo para aprender su sintaxis.
Ejemplos:
También es útil para el trazado de gráficos y la resolución de ecuaciones (por ejemplo, puede usar la
solve()
función en Sage, o si las reglas lo prohíben, permite una fácil implementación del proceso de Newton Raphson porque tiene ladiff()
función que puede realizar una diferenciación simbólica) .Además, si usted es un programador de Python2, el uso de Sage puede permitirle hacer trampa omitiendo las
import
declaraciones largas . Por ejemplo,math
ysys
ya están importados por defecto. (Tenga en cuenta que esto puede no funcionar si su programa Python2 depende de la división de enteros).fuente
Conozco tres lenguajes: Java, C ++ y Python 3. No conozco ninguno de estos en un nivel alto, pero esta es mi experiencia con ellos.
Java:
Nunca volvería a usar Java para jugar golf. Solo se necesitan más de 80 caracteres para escribir
Hello World!
. Sin embargo, tiene sus puntos fuertes:C ++
C ++ es un lenguaje muy fuerte, pero es algo extenso cuando se trata de jugar golf con 56 caracteres
Hello world!
.Python 3
Python 3 es similar a C ++ y Java. Es mucho más corto ya que no está fuertemente tipado; en otras palabras, solo adivina cuáles son las variables.
fuente