6
votes

Raccourcissement du code Python

J'essayais de résoudre ce problème ici: - https://www.spoj.pl/problèmes / Phival /

Les questions vous demandent de produire autant de chiffres décimaux du rapport doré (1 + sqrt (5)) / 2 que possible et essayez de minimiser la longueur de code. P>

C'est ce que j'ai en ce moment. Ce code peut-il être fait de plus court? P>

from decimal import *
getcontext().prec=7050
print(1+Decimal(5).sqrt())/2


5 commentaires

Le moyen le plus rapide de le faire serait d'avoir une page Web qui accueille 1 million de chiffres de PHI et que votre programme soit simplement Echo Curl MySite.com \ Phi :-)


Pourquoi définir la précision à 7050? Pourquoi pas 9999? Tout comme court-coque, mais beaucoup plus de chiffres.


@delnan il dépasserait le timelimit.


@GlowCoder .. très intelligent :) .. Mais cela ne fonctionnerait pas sur le Spoj.


Pour référence, codegolf.stackexchange.com a un tas de ces problèmes spoj.pl sur eux


4 Réponses :


3
votes

Vous pouvez sortir de l'espace avant l'astérisque.

Mise à jour:

Vous avez ajouté la partie sur une espace insignifiante, j'ai donc commencé à penser à une approche différente. Si WhitSpace n'est pas compté, vous pourrez peut-être faire quelque chose comme celui-ci xxx

Il code chaque chiffre sous forme de nombre d'espaces sur une ligne dans une constante de chaîne multi-lignes . De toute évidence, vous pouvez ajouter plus de lignes pour obtenir plus de chiffres. Il devrait courir assez vite car il y a très peu de calcul. Il utilise 50 (mise à jour 2: 45) caractères non-blancs pour produire n'importe quel nombre de chiffres de chiffres.


3 commentaires

Merci. Mais la longueur de la source est comptée comme le nombre de caractères espaces non blancs.


@Jack_Carver: Avec les nouvelles informations sur l'espace blanc, j'ai proposé une autre approche pouvant donner de meilleurs résultats.


Vous pouvez effectuer n'importe quel code Python à seulement 44 caractères (ou 42 en Python2) si l'espace blanc n'est pas compté Pastebin.com/UHR9TWQT < / a>



0
votes

En raison d'un score élevé pour le code abrégé, je pense que la meilleure approche pourrait être juste xxx


1 commentaires

Score (NDIGITS = 1, Codelen = 6) -> 2500001 , Score (7050, 68) -> 227638 Il doit y avoir "au moins 1000 [chiffres] après la décimale indiquer."



0
votes

Eh bien, j'ai essayé l'approche JavaScript-ISH, et cela ne fonctionne apparemment pas en python: xxx

semble que votre code est assez proche de la solution la plus courte possible. < / p>


1 commentaires

Oui. Mais en raison de la nature variée de la formule, je ne peux pas comprendre exactement la longueur de la source minimale. La meilleure solution Python a un score de "307962" où comme le mien donne "212528".



1
votes

Prendre recours à une approche à une extrême, cela utilise seulement 19 caractères non-blancs: xxx

accordé, le code requis pour générer les premiers 1000000 chiffres serait plus de 10 ^ 1000000 caractères de longueur!


0 commentaires