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,
44
es dos4
s) - Punto decimal (p. Ej.,
4.4
Dos4
s), 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 4
puede 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 4
s, ni más ni menos. Además, .4 = 4/10
es 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_expression
y 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
G
para Gamma yv
para sqrt.† Bueno, estrictamente podría eliminar
44
a cambio de11
as44/4
y71
as√(Γ√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
.4
sea un número válido para este juego.