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.
- Problemas de matematicas
- Resolver acertijos numéricos
- Realizar métodos numéricos
- Problemas de matriz 2D difíciles
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
).
- Problema al tratar con números primos
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.
- Procesamiento de cadenas
- Procesamiento de matriz
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.
- Problemas que requieren solución de E / S, ya sea consola o archivo
- Problemas que requieren que escriba su solución como una definición de función
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 funciona
- Problemas que requieren análisis
- Geometría Computacional
No 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;)