Dans mon cours d'économie, mes amis et moi aimons trouver des moyens de réorganiser les chiffres au format date (au format MM / JJ / AA) pour créer une équation mathématique valide. Pour la plupart, nous sommes autorisés à utiliser l'addition, la soustraction, la multiplication, la division, les parenthèses et l'exponentiation en plus de la concaténation.
Votre programme devrait faire quelque chose de similaire. Le programme doit importer la date actuelle et insérer des opérateurs pour imprimer une expression selon les règles suivantes.
- Les chiffres DOIVENT être utilisés dans l'ordre. Le réarrangement des chiffres n'est pas autorisé.
- L'expression résultante doit être mathématiquement exacte.
- L'addition, la soustraction, la multiplication, la division, l'exponentiation et l'utilisation de parenthèses sont autorisées. Il en va de même pour la concaténation des chiffres. Cependant, toutes les opérations ne sont pas nécessaires. Vous ne pouvez pas utiliser un signe de soustraction pour rendre un chiffre négatif (comme
-1+1+11=10
le 11 novembre 2010). - Le programme doit s'exécuter en 60 secondes sur une machine standard.
Par exemple, ce défi a été écrit le 10 novembre 2015. Le programme interpréterait cela comme 11/10/15. Un exemple de sortie serait (1+1)/10=1/5
.
Bonus
Vous pouvez multiplier le nombre d'octets de votre code par 0,9 pour chacun des éléments suivants pris en charge par votre programme.
- Le programme imprime toutes les expressions possibles qui peuvent être formées, séparées par des retours à la ligne. Multipliez par 0,95 supplémentaire si les expressions sont répertoriées dans l'ordre croissant des symboles supplémentaires.
- Le programme fonctionne également pour les dates MM / JJ / AAAA, en imprimant une possibilité avec les deux premiers chiffres de l'année en plus de la possibilité sans. Si ce bonus est combiné avec le premier bonus, toutes les possibilités avec les deux premiers chiffres de l'année doivent être imprimées.
- Le programme imprime aussi une équation quand il y a plusieurs égalités (par exemple, le 11 Novembre 2011,
1=1=1=1=1=1
serait imprimé, en plus de possibilités telles que1*1=1=1=1=1
,1*1*1=1=1=1
et1*1*1*1=1=1
. Tous ces cas doivent être imprimés pour la première prime à atteindre. - Le programme prend en charge la conversion en bases entre 2 et 16. Notez que si la base n'est pas 10, tous les nombres de l'expression doivent être écrits dans la même base et
(Base b)
doivent être écrits après l'expression (avecb
remplacé en conséquence).
C'est du golf de code, donc les règles standard s'appliquent. Le code le plus court en octets gagne.
Réponses:
Python 3,
424420369363 octetsBrute force toutes les combinaisons possibles d'opérations dans les nombres et s'arrête quand il en trouve une.
EDIT: 4 octets enregistrés grâce à @NoOneIsHere
EDIT 2: 51 (!) Octets enregistrés grâce à @ValueInk
la source
except:pass
et supprimer l'espace[ (p//(len(o)**i))%len(o)]
.__future__
, la mise à niveau vers Python 3 fonctionnerait-elle mieux dans votre situation? De plus, je ne comprends pas pourquoi vous inversezo
lorsque vous créez cette liste d'opérateurs avec parenthèses que vous avez.o=([[x,x+'(',x+')']for x in",+,-,==,*,/,**".split(',')])
pour 2 octets