Je pense que la plupart des gens d'ici savent ce qu'est un affichage à 7 segments pour les chiffres:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Nous pouvons définir la différence à 7 segments (7SD) entre deux chiffres comme étant le nombre de segments qui doivent être basculés pour passer de l'un à l'autre. Par exemple, le 7SD entre 1
et 2
est 5 (les trois segments horizontaux et les deux segments verticaux inférieurs doivent être basculés), et le 7SD entre 6 et 8 est 1 .
De plus, nous pouvons définir le 7SD entre deux nombres comme étant la somme des 7SD entre leurs chiffres correspondants. Si un nombre est plus long que l'autre, nous supposons qu'ils sont alignés à droite et ajoutons le nombre de segments nécessaires pour afficher les chiffres supplémentaires les plus significatifs du plus grand nombre. Par exemple, considérons le 7SD entre 12345
et 549
:
x: 1 2 3 4 5
y: 5 4 9
7SD: 2+5+2+0+1 = 10
Votre tâche consiste à calculer 7SD entre n et n + 1 , étant donné n .
Pour plus de commodité, voici le tableau complet des 7SD entre les chiffres individuels. La ligne _
représente une position vide.
_ 0 1 2 3 4 5 6 7 8 9
_ 0 6 2 5 5 4 5 6 3 7 6
0 6 0 4 3 3 4 3 2 3 1 2
1 2 4 0 5 3 2 5 6 1 5 4
2 5 3 5 0 2 5 4 3 4 2 3
3 5 3 3 2 0 3 2 3 2 2 1
4 4 4 2 5 3 0 3 4 3 3 2
5 5 3 5 4 2 3 0 1 4 2 1
6 6 2 6 3 3 4 1 0 5 1 2
7 3 3 1 4 2 3 4 5 0 4 3
8 7 1 5 2 2 3 2 1 4 0 1
9 6 2 4 3 1 2 1 2 3 1 0
Contribution
- L'entrée est un seul entier positif
n
. - Vous pouvez écrire un programme ou une fonction, en prenant des entrées via STDIN (ou l'alternative la plus proche), un argument de ligne de commande ou un argument de fonction.
- Vous pouvez supposer que l'entrée est au plus un de moins que le plus grand nombre qui peut être représenté par le type entier standard de votre langue, tant que ce type prend en charge au moins des valeurs allant jusqu'à 127 inclus.
Sortie
- Vous devez imprimer un seul entier, le 7SD entre
n
etn+1
. - Vous pouvez sortir via STDOUT (ou l'alternative la plus proche), la valeur de retour de fonction ou l'argument de fonction (out).
Notation
Les règles de code-golf standard s'appliquent, le code le plus court (en octets) l'emporte.
Cas de test
Pour une raison obscure, cette séquence n'est pas encore dans OEIS, bien qu'il existe la séquence étroitement liée A123587 . Voici les 100 premiers chiffres (commençant par n = 1, 2, 3, ...
):
5, 2, 3, 3, 1, 5, 4, 1, 4, 4, 5, 2, 3, 3, 1, 5, 4, 1, 7, 4, 5, 2, 3, 3, 1,
5, 4, 1, 4, 4, 5, 2, 3, 3, 1, 5, 4, 1, 5, 4, 5, 2, 3, 3, 1, 5, 4, 1, 5, 4,
5, 2, 3, 3, 1, 5, 4, 1, 3, 4, 5, 2, 3, 3, 1, 5, 4, 1, 7, 4, 5, 2, 3, 3, 1,
5, 4, 1, 6, 4, 5, 2, 3, 3, 1, 5, 4, 1, 3, 4, 5, 2, 3, 3, 1, 5, 4, 1, 6, 4
La première entrée pour laquelle le 7SD est supérieur à 9 est celle 1999
qui devrait donner 11. Voici quelques autres exemples plus importants:
n 7SD
1999 11
12345 1
999999 14
5699999 15
8765210248 1
Python,
5048 octetsExplication
Cette fonction fonctionne sur le chiffre le moins significatif du nombre
n
, en additionnant le 7SD des chiffres lorsqu'il est incrémenté de un jusqu'à la fin du premier non-9
chiffre.26523308
est un masque de bits qui code le mappage des chiffres0-8
. Lorsquen=0
, ce qui ne se produit que lorsquen
ne comprend que9
s, la réponse sera désactivée par deux. Ceci est compensé par l'expression0**n*2
. Quant au chiffre9
, le bitmask est évalué à zéro, ce qui déclenchera l'appel récursif lors de l'ajout2
au 7SD.la source
05AB1E ,
3130282726 octetsCode:
Explication ( obsolète ):
Nous modifions ce qui suit au dernier chiffre non 9:
Pour les cas particuliers:
Utilise l' encodage CP-1252 . Essayez-le en ligne! .
Alternatif 28 octets:
D[¤©•2X›ùì•sès®9Ê#¨]\rÚ9Q4*O
.la source
Java, 63 octets
Le monde a raison quand Python passe de nouveau à Java.
Parce que tu sais, Java.
Voir sur ideone
Maximise à 2147483647, car il s'agit de Java
Integer.MAX_VALUE
.Il s'agit d'un port de ma réponse Python qui est un port de la réponse ES6 .
la source
MATL ,
613936 octetsEssayez-le en ligne!
Explication
la source
Julia, 44 octets
Essayez-le ici.
Dennis a sauvé un octet!
la source
Python,
7166 octets48 octets par xsot . Encore plus de maths magiques!
Voir sur ideone
Parce que la réponse Python précédente ne fonctionne pas et est loin d'être optimale. Un simple port d' une précédente version ES6 . Maintenant, utilisez le bit twiddling (de la formulation alternative ES6) pour découper un plâtre!
Peut être fait fonctionner avec Python 3 en utilisant explicitement floordiv pour +1 octet.
la source
9
e
une lettre valide après un num, par exemple,9e9
.n%10==9
àn%10<9
n'enregistre pas car if n'a pas besoin d'espace dans cet ordre.Jolf, 32 octets
Essayez-le ici!
Explication
Ceci est une transpilation de la réponse de Neil.
la source
Pyth -
783027 octetsCe premier était embarrassant.
Suite de tests .
la source
J, 53 octets
Initialement basé sur la solution de @ Neil . Amélioré ensuite en enregistrant un octet en utilisant la même formule dans la solution de @ Lynn .
La version de 54 octets basée sur la chaîne est
Usage
la source
Rétine , 34 octets
Essayez-le en ligne!(La première ligne permet simplement le traitement de plusieurs cas de test à la fois.)
Explication
Comme la plupart des réponses l'ont découvert, nous n'avons pas besoin d'utiliser le tableau complet, car seuls les changements non
9
numériques les moins significatifs changent lors de l'incrémentation. C'est aussi ainsi que cette réponse fonctionne.Cela correspond à (
M
) l'expression régulière,.9*$
c'est-à-dire le premier chiffre qui n'est séparé que par9
s de la fin. Le!
dit à Retina de remplacer l'entrée par cette correspondance, en rejetant tout ce qui n'affecte pas le 7SD.Si l'entrée commence maintenant par ce
9
qui signifie, l'entrée elle-même n'était composée que de9
s, de sorte que l'affichage à 7 segments doit ajouter un1
qui coûte2
. La manière la plus simple de gérer cela est de remplacer le début9
dans ce cas par un0
, car le coût de l'incrémentation de a9
(à0
) est2
et le coût de l'incrémentation0
(à1
) est4
, donc cela augmente le coût global selon2
les besoins.Nous avons maintenant une étape de translittération qui remplace chaque chiffre par son coût pour l'incrémenter (puisque le se
d
développe en0123456789
). Notez qu'il s'agit de la première sous-diagonale du tableau 7SD.Cela remplace chaque chiffre
n
par desn
copies de1
, c'est-à-dire qu'il convertit chaque chiffre en unaire, et puisqu'il n'y a pas de séparateurs, il les ajoute immédiatement ensemble.Enfin, nous comptons le nombre de caractères (c'est-à-dire le nombre de correspondances de
.
) dans le résultat, qui convertit la somme unaire en décimale.la source