El acertijo Four fours es un acertijo matemático recreativo popular que implica el uso de exactamente cuatro 4s (y ningún otro número) y un conjunto definido de operaciones para alcanzar cada número desde 0 hasta un máximo dado.
En esta versión, los únicos operadores siguientes están permitidos:
- Se puede usar cualquier símbolo de agrupación
- Suma (
+), Resta (-), Multiplicación (*), División (/) - Factorial (
!), función Gamma (Γ) - Exponenciación (
^), raíz cuadrada (√) - Concatenación (por ejemplo,
44es dos4s) - Punto decimal (p. Ej.,
4.4Dos4s), Overbar (p. Ej..4~ = 4/9)
Se aplica el orden estándar de operaciones.
Su programa debe generar, dada una entrada entre 0 y 100 inclusive, una solución correcta para esa entrada. Si el programa genera una solución no válida para cualquier entrada, ese programa no es válido.
Por ejemplo, con una entrada de 0, su programa podría generar 44-44.
El uso de módulos externos no está permitido. Solo _.4~está permitido para el operador de barra superior, es decir, solo uno 4puede estar detrás del punto decimal.
Este es el código golf, por lo que gana la solución más corta
Editar : para ser más claro, el programa debe generar un conjunto de las operaciones anteriores aplicadas exactamente a cuatro 4s, ni más ni menos. Además, .4 = 4/10es un término válido y cuenta como usar solo uno 4.
fuente

!(4)lugar de(4)!)?Respuestas:
GolfScript (129 caracteres *)
El tiempo de ejecución es del orden de 4 minutos en mi PC. Se puede obtener una aceleración moderada a costa de dos caracteres agregando una operación de unicidad
.&inmediatamente después del%+.Utilizo expresiones pre-codificadas
1,2,4,6,24,120, y44, y construir el resto a partir de los que utilizan solamente+,*y-. De esta manera, no necesito hacer ninguna aritmética no entera en el programa en sí. Intenté obtener expresiones más simples colocando los valores precodificados más simples al comienzo.Todos esos valores son obligatorios † , y es necesario admitir ambas direcciones de sustracción (
complex_expression - simple_expressiony viceversa). También es necesario incluir algunas operaciones que requieren paréntesis (específicamentea*(b-c)), por lo que pongo entre paréntesis todas las subexpresiones indiscriminadamente.* Estoy contando puntos de código Unicode suponiendo que el programa esté codificado en UTF-8, y ocultando el hecho de que, a menos que esté utilizando una versión reciente de Ruby para ejecutar el intérprete, realmente lo trata como caracteres ASCII. Si está muy preocupado por esto, use
Gpara Gamma yvpara sqrt.† Bueno, estrictamente podría eliminar
44a cambio de11as44/4y71as√(Γ√4+(ΓΓ4+Γ√4)!), pero eso no es una buena compensación.fuente
Python 155 bytes
Los primeros tres bytes (
\xEF\xBB\xBF) son la marca de orden de bytes UTF-8, aunque el archivo debe guardarse en formato ANSI. Elûyâse interpretará como√yΓrespectivamente en cp437 y cp850 , que deberían funcionar en casi cualquier cuadro de Windows.El tiempo de ejecución es de aproximadamente 0.4s en mi computadora.
Uso de muestra (nombre del archivo
four_fours.py):Resultados para 0..100 . Debido a la forma en que se itera el hash, prefiere usarlo con la
4!mayor frecuencia posible.Editar: guardó una cantidad de bytes agregando
Γ√4 = 1, lo que elimina la necesidad de cualquier agrupación, y eliminando√4 = 2, lo que ya no era necesario.fuente
J,
175161 caracteresEl formato marcado es
(v op v) op (v op v)dóndev={0.4 4/9 1 2 4 6 24}yop={+ - * /}completo 0..100 resultados
fuente
.4sea un número válido para este juego.