Ce défi vous est apporté par une inspiration réelle (et tragique). Récemment, la rangée de chiffres sur mon clavier a été un peu sporadique. Les touches 1-9
fonctionnent parfois - mais parfois elles n'ont aucun résultat. En tant que programmeur passionné, c'est horrible! (Voir ce point d'exclamation? C'est ainsi que vous savez qu'ils fonctionnent en ce moment.) Non seulement j'ai souvent besoin des chiffres eux-mêmes, mais des symboles!@#$%^&*(
sont également totalement inefficaces la moitié du temps! En tant que programmeur C, plutôt que de prendre du temps sur mon emploi du temps chargé de griffonner du code pour réparer mon ordinateur portable, je suis plus intéressé à contourner le problème. Au cours des dernières semaines, lentement, tous les littéraux numériques de mon code ont été remplacés par des hexadécimaux afin que je n'aie pas à chercher des nombres à copier et coller. Cependant, certains chiffres ne sont pas faciles à taper sans les clés 1-9
. Par exemple, le nombre 1
ne peut pas être écrit si simplement en hexadécimal, et j'ai eu recours à remplacer 1
s dans mon code par 0xF - 0xE
. Les seules touches qui sont touchées sont 1-9
, donc je maintiens la pleine utilisation de symboles tels que +
, -
et /
. Cependant, je ne peux pas utiliser de multiplication ou de parenthèses, car*
et(
sont souvent cassés. Cela mène à votre défi.
Contribution
Un nombre entier, n
à stdin ou l'équivalent de votre langue. Si vous le souhaitez, l'entier peut être précédé ou suivi d'une nouvelle ligne ou d'un autre caractère d'espacement. Vous pouvez également recevoir une entrée via un argument de ligne de commande.
Votre programme doit répondre correctement aux entrées négatives et être capable de gérer au moins des entiers signés 32 bits.
Sortie
Votre programme doit générer, sous une forme observable, la manière la plus courte (en caractères non blancs) d'écrire le nombre n
sous la forme d'une somme, d'une différence ou d'une division d'une ou plusieurs valeurs hexadécimales. Il existe plusieurs façons de résoudre ce problème, et il n'est pas nécessaire de privilégier une sortie de longueur égale par rapport à une autre.
La sortie doit être sous la forme A % A % A...
où A
est une valeur hexadécimale après 0x
ne contenant que des chiffres A-F a-f
, et %
est l'un des symboles-+/
. Laissez /
décrire la division entière, sans virgule flottante.
(Notez que votre sortie devrait entraîner n
lors de l'évaluation des divisions en premier, de gauche à droite, puis des ajouts et soustractions, de gauche à droite, comme c'est la convention.)
Cas de test
Entrée sortie
1
0xF - 0xE
(ou0xF-0xE
ou0xB-0xA
ou0xd - 0xc
ou0xF/0xF
)15
0xF
255
0xFF
30
0xF + 0xF
Scoring et règles
C'est du code-golf. Votre score préliminaire est le nombre d'octets dans votre fichier source.
Vous ne pouvez utiliser aucun des chiffres 1-9
de votre source.
Vous pouvez utiliser des symboles !@#$%^&*(
dans votre source, mais chacun vient à une pénalité de +20 à votre score.
Votre programme peut être remplacé par une fonction qui prend n
comme argument tant que cette fonction produit une forme de sortie lisible par l'homme. La valeur de retour de votre fonction ne compte PAS comme sortie.
Les échappatoires standard ne sont pas autorisées.
Le score le plus bas gagne! Bonne chance!
Ai-je fait quelque chose de formatage / questionnement / clarté? Faites le moi savoir! Ceci est ma première soumission sur ce site!