Elegir idiomas para jugar golf [cerrado]

28

¿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.

Ming-Tang
fuente
Para algunos problemas es el sistema de tipos. Por ejemplo, si necesita lidiar con enteros de más de 64 bits, quiere idiomas que tengan eso incorporado (por ejemplo, Golfscript, Haskell) en lugar de idiomas que los hagan costosos (por ejemplo, Java).
Peter Taylor
He hecho de esto un wiki de acuerdo con nuestra política sobre preguntas de tipo "Consejos".
dmckee
99 botellas es útil si necesita un idioma que comience con una letra específica ...
Jesse Millikan
Felicitaciones a as, trimsty, algoritmshark y hosch250 por ayudar a hacer de este hilo un mejor recurso. ¡Por favor, sigan enviando las presentaciones! Fue una difícil recompensa entre algoritmoshark y hosch250, quienes dieron un gran esfuerzo detallado, pero al final Herr Shark recibe el visto bueno por liderar el camino.
Jonathan Van Matre
Elige el idioma que quieras. También es una competencia dentro de los idiomas. Más soluciones únicas e interesantes en más idiomas es bueno.
Mego

Respuestas:

-1

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.

ewanm89
fuente
2
Como usuario principalmente de Python, en Py pagas por tu facilidad de uso en el recuento de caracteres, aunque hay algunos trucos realmente extravagantes que pueden salvar a los personajes. Haskel y Lisp, aunque son divertidos, tienden a correr incluso más tiempo que Python.
Arrdem
Probablemente esta no debería ser la respuesta aceptada. La descripción sobre los idiomas de alto nivel bajo no tiene nada que ver con el recuento de caracteres.
Samy Bencherif
Sí, es realmente justo tener una respuesta de 2011 a una pregunta editada el 23 de febrero de 2017. ¿Quizás deberíamos dejar de cambiar las preguntas después de que se haya respondido?
ewanm89
10

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;)

3 revoluciones
fuente
Excelente contribución! Gracias por ser el primero en la piscina.
Jonathan Van Matre
4

¿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í .

cjfaure
fuente
No sé nada sobre Perl, pero estoy de acuerdo.
ckjbgames
2

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 porputs

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 X

Problemas 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ódigo

Problemas 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 Qde 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#

Timtech
fuente
2

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 la diff()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 importdeclaraciones largas . Por ejemplo, mathy sysya están importados por defecto. (Tenga en cuenta que esto puede no funcionar si su programa Python2 depende de la división de enteros).

as
fuente
Buena informacion! Gracias por contribuir
Jonathan Van Matre
1

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:

La entrada requiere la creación de un Scannerobjeto. Es difícil ingresar un solo carácter. Requiere la especificación de qué tipos está ingresando.
El análisis es bastante simple debido al forbucle. El forbucle mejorado es excelente para esto.
Java admite métodos, pero la declaración del método es bastante larga.
Java es excelente en matemáticas, así como todos los demás lenguajes de alto nivel.
Java es difícil de usar cuando el problema implica modificar cadenas. No puede realizar modificaciones en una cadena existente.
Las matrices de Java son fáciles de usar.
Java es bueno en la recursividad.
Java incluye gráficos incorporados. Son muy fáciles de usar.

C ++

C ++ es un lenguaje muy fuerte, pero es algo extenso cuando se trata de jugar golf con 56 caracteres Hello world!.

La entrada y salida son fáciles. No necesita especificar qué tipos está ingresando, eso se hace automáticamente. Sin embargo, debe incluir la biblioteca iostream.
Analizar es muy fácil.
La declaración de la función es simple, pero consume muchos caracteres importantes. C ++ sobresale en matemáticas, pero no incluye PI o E, como lo hace Java.
Las cadenas de C ++ son fáciles de usar y cambian según sea necesario.
Uso vectors siempre que sea posible en lugar de arrays, pero ambos son fáciles de usar.
C ++ es bueno en la recursividad.
C ++ no incluye gráficos integrados.

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.

La entrada es fácil, pero todo es entrada como cadenas. Debe convertir manualmente todas las entradas a los valores que desee.
El análisis y el bucle es muy simple.
Las declaraciones de funciones de Python son bastante simples y cortas.
Python es bueno en matemáticas.
Las cuerdas de Python son fáciles de usar.
Las matrices son fáciles de usar.
Python es bueno en la recursividad.
Python no incluye gráficos incorporados.

hosch250
fuente
Supongo que por el bucle for mejorado, estás hablando de un bucle de rango. C ++ admite esto desde C ++ 11 ( en.cppreference.com/w/cpp/language/range-for ). Es sintácticamente similar al bucle for-range de Java y requiere que la clase del objeto iterable para implementar begin () y end () o begin (T) y end (T) se sobrecarguen para el objeto dado. También se implementa para cadenas de estilo C y matrices integradas y funciona para todos los contenedores de biblioteca estándar.
foobar
@foobar Sí, estaba hablando de eso. Gracias por la información, lo he deseado desde que tomé Java.
Hosch250
Java ahora tiene una solución de 61 bytes, pero su punto sigue en pie.
MilkyWay90