Inspiré par cette question qui a ensuite été inspirée par celle-ci , écrivez un programme qui prend deux entiers et les ajoute de manière unique, en effectuant une opération OU sur les segments utilisés pour les afficher dans un affichage à 7 segments. Pour référence, les chiffres sont représentés de la manière suivante:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Notez que le 1 utilise les deux segments à droite, pas à gauche. Il y a deux caractères spéciaux qui peuvent être produits de cette façon qui ne sont pas des nombres. Voir le tableau d'addition ci-dessous:
| 0 1 2 3 4 5 6 7 8 9
--+--------------------
0 | 0 0 8 8 8 8 8 0 8 8
1 | 0 1 a 3 4 9 8 7 8 9
2 | 8 a 2 a 8 8 8 a 8 8
3 | 8 3 a 3 9 9 8 3 8 9
4 | 8 4 8 9 4 9 8 Q 8 9
5 | 8 9 8 9 9 5 6 9 8 9
6 | 8 8 8 8 8 6 6 8 8 8
7 | 0 7 a 3 Q 9 8 7 8 9
8 | 8 8 8 8 8 8 8 8 8 8
9 | 8 9 8 9 9 9 8 9 8 9
Observations utiles:
- Tout chiffre plus lui-même est égal à lui-même
- 8 plus n'importe quel chiffre est égal à 8
- 2 plus 1, 3 ou 7 est égal à la lettre 'a' (doit être en minuscule)
- 4 plus 7 est égal à 'q' ou 'Q', votre choix
- Les chiffres doivent être alignés à droite, de sorte que les chiffres doivent être ajoutés de droite à gauche. Si un numéro a plus de chiffres que l'autre, les chiffres supplémentaires au début doivent être inchangés. Il n'y a pas de 0 en tête, sauf si le nombre est exactement 0.
- Tous les nombres seront 0 ou plus. Vous n'avez pas besoin de gérer un signe «-». (Principalement parce qu'il n'y a pas de bon ajustement pour la somme d'un «-» et d'un «1» ou «7».)
Votre programme doit accepter 2 entiers dans le format de votre choix et produire une chaîne contenant leur "somme" lorsqu'elle est calculée de cette manière. Il s'agit de code-golf, donc votre programme doit être aussi petit que possible.
Exemples:
- Entrée: 12345, 123. Sortie: 12389
- Entrée: 88888, 42. Sortie: 88888
- Entrée: 0, 23. Sortie: 28
- Entrée: 120, 240. Sortie: a80
- Entrée: 270, 42. Sortie: 2Q8 (ou 2q8)
- Entrée: 1234567890, 1234567890. Sortie: 1234567890
la source
Q
être en minuscules? La forme réelle ressemble à unq
plutôt qu'à unQ
a
devrait certainement être en minuscules, car ilA
semble complètement différent.Réponses:
Utilitaires Bash + Common Linux, 80
Notez que
^?
dans la source doit être remplacé par un caractère ASCII 0x7f.La chaîne
s
est chaque chiffre de 7 segments0-9, a, Q
codé avec chaque segment correspondant à un bit d'un caractère ASCII.le
h()
fonction translitère le nombre d'entrée de décimal au codage spécifié pars
, puis sort le résultat sous la forme d'une chaîne hexadécimale brute.Les deux chaînes hexadécimales résultantes sont
OR
éditées ensemble à l'aide de l'arithmétique bash régulière, puis sorties pardc
laP
commande de sous la forme d'un bytestream. Ce bytestream est ensuite translittéré en décimal + a + Q et en sortie.Notez également que lorsque vous utilisez la
<<<
construction bash herestring dansh()
une fonction, une nouvelle ligne est implicitement ajoutée à la chaîne redirigée. Cela n'a pas d'importance - il est simplement traduit en0x0a
à la fin de chaque chaîne hexadécimale; lorsque les deux nombres hexadécimaux sontOR
ed ensemble, le résultat est toujours0x0a
dans le dernier caractère qui n'est pas translittéré et se traduit donc simplement par une nouvelle ligne qui est sortie après le résultat.Sortie de test:
la source
Python 2, 155 octets
Remplacez le
♥
par unDEL
caractère (0x7F).Appel d'
f("12345", "123")
impressions12389
.la source
%13
astuce fonctionne. Évidemment, vous avez opté pour l'ensemble qui n'avait pas de caractères inférieurs à 40, mais pour ma traduction JavaScript, j'ai choisi l'ensemble le plus court. Le troisième ensemble est le plus long en JavaScript, il l'aurait été111,5,118,117,29,121,123,37,127,125
.JavaScript (ES6),
158144 octetsEnregistré 14 octets en volant sans vergogne le
%13
tour de @ Lynn .la source
Java, 170 octets
C'est terriblement long ... mais c'est de toute façon Java.
Programme complet, avec code non golfé
Toutes les sorties (toutes dupliquées une fois)
la source