¡Esto fue divertido! Sin embargo, con solo tres dígitos, la diversión terminó demasiado pronto. Este desafío es similar, pero mantendremos la diversión.
El reto
Imprima tantos dígitos de la Proporción Dorada φ como sea posible. La proporción áurea se define como el número que satisface φ = (φ + 1) / φ y los primeros 100 dígitos están dados por:
1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375 ...
Este desafío no se trata de computación φ! Se trata de imprimir tantos dígitos como sea posible sin usar ningún método para hacerlo dos veces. ¡Así que encuentra tantas formas creativas de obtener tus dígitos como puedas!
Restricciones
Por sí solo, imprimir los dígitos de φ sería demasiado simple, así que aquí están las reglas:
- Debe construir el número en orden de izquierda a derecha , ya sea imprimiéndolo pieza por pieza o construyendo una cadena de izquierda a derecha e imprimiéndolo al final; incluso podría generar una matriz de caracteres de dígitos y luego unirlos y imprímalo, siempre que lo haga en orden. En las siguientes reglas, "imprimir" y "salida" pueden referirse a cualquiera de esos procesos (por ejemplo, si está creando una cadena, y la cadena contiene
1.6
que cuenta que1.6
ya se ha impreso). - Para su código , obtiene un presupuesto de 15 caracteres por dígito . El período no cuenta para ese presupuesto, pero también debe imprimirse. Tenga en cuenta que la restricción solo se aplica al tamaño total del código: puede usar más de 15 caracteres para cualquier dígito, siempre que no use más en promedio. De hecho, puede acumular una "deuda" en los personajes y "pagarla" más adelante. Por ejemplo, para imprimir
1.618
tienes 60 caracteres. - La biblioteca estándar incluye / importa no cuenta para el tamaño del código. ¡Pero no puedes dar esos alias abreviados de forma gratuita!
- No debe usar el dígito que está generando actualmente, ni ninguno que ya haya impreso. Por ejemplo,
1
puede no aparecer en ninguna parte de su código fuente, porque es el primer dígito. El código que da salida a la8
de1.618
puede utilizar cualquiera o todos los dígitos[0234579]
, pero ninguno de[168]
. Para este propósito, todos los literales que son equivalentes a un solo dígito se tratan como ese dígito . Entonces, si su idioma puede representarlo,9
ya'\t'
que no puede usarlo en ningún lugar, donde no podría usar uno9
. - No debe producir varios dígitos a la vez. Debería ser posible dividir claramente su código en fragmentos que generen un dígito a la vez.
No se debe hacer referencia a cualquier incorporada la función, el operador / secuencia matemática / boolean / bits sabia, variable o constante que se ha utilizado en el código que genera un dígito anterior. Las excepciones son la conversión de entero a cadena, la concatenación de cadenas y las funciones de impresión que puede necesitar para cada dígito. Tenga en cuenta que no importa con qué nombre se refiera a cualquier incorporado: solo porque alias un incorporado
PI
a ambosp
yq
no significa que pueda usarlop
una yq
otra vez. Del mismo modo, está permitido el uso de un nombre dos veces si se refiere a dos muebles empotrados diferentes, como cadenalength
y la matrizlength
.Si su lenguaje de programación no tiene funciones, use su mejor criterio sobre cuál sería el equivalente, por ejemplo, para bash scripting, la invocación de otros programas debe seguir las reglas impuestas a las funciones
- Su envío debe estar escrito en un solo idioma. Por lo tanto, no ejecutar el intérprete de otro idioma para obtener acceso a las funciones integradas de ese idioma también.
Trascendencia
Los siguientes puntos están implícitos en las reglas anteriores, pero los agrego aquí para evitar preguntas que ya han surgido en el sandbox ::
- No está permitido sobrescribir partes de su salida imprimiendo algunos espacios (generalmente
'\b'
) en el medio. - Los bucles que generan / generan múltiples dígitos están prohibidos. (Sin embargo, los bucles que calculan un solo dígito están bien).
(1 + √5)/2
Está prohibido usar una versión ofuscada o dividir números de Fibonacci para obtener más de un solo dígito.- No puede calcular previamente los 10 dígitos y almacenarlos en 10 variables y luego solo referirse a ellos, porque esas referencias de variables no generan el dígito; el código que llena la variable sí lo hace, por lo que esto es una violación de la regla 6.
- De hecho, no puede reutilizar ningún resultado anterior (o intermedio), porque eso significaría que dos dígitos compartirían el código para ser generado .
- De lo contrario, puede utilizar cualquier medio (que no sea puramente matemático) para generar los dígitos. (¡Y deberías!)
- De hecho, no es necesario calcular nada, si puede extraer los dígitos correctos de muchos lugares diferentes utilizando su biblioteca estándar.
- Usted puede utilizar un operador varias veces mientras se genera un solo dígito, por lo que
2+2+2
es juego limpio para generar la primera6
(aunque es poco probable que el más corto). - Usted puede utilizar cualquier literal con la frecuencia que desee, porque no son constantes integradas. Por lo tanto, siempre que no tenga que imprimir
5
, puede incluir tantos5
s en su código como desee. - No puede codificar la salida, porque eso implicaría usar los dígitos que está generando.
En resumen: no use ningún método para generar dígitos dos veces y no use el dígito que está emitiendo actualmente o ninguno que ya haya impreso.
Si detecta un vacío que le permite obtener una puntuación (casi) infinita, no arruine el desafío explotándolo, pero avíseme para que pueda ver si el vacío puede solucionarse sin romper nada.
Tanteo
El programa que imprime el mayor número de dígitos gana correctamente. En caso de empate, el código más corto rompe el empate.
Agregue una versión comentada no escrita que identifica qué parte de su código genera qué dígito.
PD: Si alguien supera los 100 dígitos anteriores, aquí hay algunos más .
x = (x+1)/x
(o x^2 = x+1
) (o x^2-x+1
).