Creo que la mayoría de las personas de por aquí saben lo que es una pantalla de 7 segmentos para dígitos:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Podemos definir la diferencia de 7 segmentos (7SD) entre dos dígitos para que sea el número de segmentos que deben alternarse para cambiar de uno a otro. Por ejemplo, el 7SD entre 1
y 2
es 5 (los tres segmentos horizontales y los dos segmentos verticales inferiores deben alternarse), y el 7SD entre 6 y 8 es 1 .
Además, podemos definir el 7SD entre dos números para que sea la suma de 7SD entre sus dígitos correspondientes. Si un número es más largo que el otro, asumimos que están alineados a la derecha y agregamos el número de segmentos necesarios para mostrar los dígitos adicionales más significativos del número mayor. Como ejemplo, considere el 7SD entre 12345
y 549
:
x: 1 2 3 4 5
y: 5 4 9
7SD: 2+5+2+0+1 = 10
Su tarea es calcular 7SD entre n y n + 1 , dado n .
Para mayor comodidad, aquí está la tabla completa de 7SD entre dígitos individuales. La fila _
representa una posición vacía.
_ 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
Entrada
- La entrada es un solo entero positivo
n
. - Puede escribir un programa o función, tomando datos a través de STDIN (o la alternativa más cercana), argumento de línea de comandos o argumento de función.
- Puede suponer que la entrada es como máximo uno menos que el número más grande que puede ser representado por el tipo entero estándar de su idioma, siempre que ese tipo admita al menos valores hasta 127 inclusive.
Salida
- Debe imprimir un solo entero, el 7SD entre
n
yn+1
. - Puede enviar a través de STDOUT (o la alternativa más cercana), el valor de retorno de la función o el argumento de la función (fuera)
Tanteo
Se aplican las reglas estándar de código de golf , gana el código más corto (en bytes).
Casos de prueba
Por alguna oscura razón, esta secuencia aún no está en OEIS, aunque existe la secuencia estrechamente relacionada A123587 . Aquí están los primeros 100 números (comenzando con 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 primera entrada para la cual el 7SD es mayor que 9 es la 1999
que debería producir 11. Aquí hay algunos otros ejemplos más grandes:
n 7SD
1999 11
12345 1
999999 14
5699999 15
8765210248 1
Python,
5048 bytesExplicación
Esta función opera en el dígito menos significativo del número
n
, sumando el 7SD de los dígitos cuando se incrementa en uno hasta después del primer no9
dígito.26523308
es una máscara de bits que codifica la asignación de los dígitos0-8
. Cuandon=0
, que solo ocurre cuandon
comprende solo9
s, la respuesta se desactivará en dos. Esto se compensa con la expresión0**n*2
. En cuanto al dígito9
, la máscara de bits se evalúa a cero, lo que activará la llamada recursiva mientras se agrega2
al 7SD.fuente
05AB1E ,
3130282726 bytesCódigo:
Explicación ( obsoleta ):
Estamos cambiando lo siguiente al último dígito que no sea 9:
Para los casos especiales:
Utiliza la codificación CP-1252 . Pruébalo en línea! .
28 bytes alternativa:
D[¤©•2X›ùì•sès®9Ê#¨]\rÚ9Q4*O
.fuente
Java, 63 bytes
El mundo está enderezado cuando Python pasa a Java una vez más.
Porque, ya sabes, Java.
Véalo en ideone
Máximo en 2147483647, ya que es Java
Integer.MAX_VALUE
.Este es un puerto de mi respuesta Python que es un puerto de la respuesta ES6 .
fuente
MATL ,
613936 bytesPruébalo en línea!
Explicación
fuente
Julia, 44 bytes
Pruébalo aquí
¡Dennis salvó un byte!
fuente
Python,
7166 bytes48 bytes por xsot . ¡Aún más matemáticas mágicas!
Véalo en ideone
Porque la respuesta anterior de Python no funciona y está lejos de ser óptima. Un puerto simple de una versión ES6 anterior . ¡Ahora usando un poco de giro (de la formulación alternativa ES6) para cortar un yeso!
Se puede hacer que funcione con Python 3 usando explícitamente floordiv para +1 byte.
fuente
9
e
es una carta válida después de un num en, por ejemplo,9e9
.n%10==9
an%10<9
no se guarda ya que el if no necesita un espacio en este orden.Jolf, 32 bytes
Pruébalo aquí!
Explicación
Esta es una traducción de la respuesta de Neil.
fuente
Pyth -
783027 bytesEse primero fue vergonzoso.
Test Suite .
fuente
J, 53 bytes
Originalmente basado en la solución de @ Neil . Luego se mejoró guardando un byte usando la misma fórmula en la solución de @ Lynn .
La versión de 54 bytes basada en la cadena es
Uso
fuente
Retina , 34 bytes
Pruébalo en línea!(La primera línea solo permite el procesamiento de múltiples casos de prueba a la vez).
Explicación
Como la mayoría de las respuestas han descubierto hasta ahora, no necesitamos usar la tabla completa, ya que solo los
9
cambios sin dígitos menos significativos al incrementar. Así es también como funciona esta respuesta.Esto coincide (
M
) con la expresión regular,.9*$
es decir, el primer dígito que solo está separado por9
s desde el final. El!
le dice a Retina que reemplace la entrada con esta coincidencia, descartando todo lo que no afecta el 7SD.Si la entrada ahora comienza con un
9
eso, la entrada en sí consistió solo en9
s, por lo que la pantalla de 7 segmentos debe anteponer un1
costo2
. La forma más sencilla de manejar esto es reemplazar el líder9
en este caso con a0
, ya que el costo de incrementar a9
(to0
) es2
y el costo de incrementar0
(to1
) es4
, por lo que aumenta el costo general según2
sea necesario.Ahora tenemos una etapa de transliteración que reemplaza cada dígito con su costo para incrementarlo (ya que se
d
expande a0123456789
). Tenga en cuenta que este es el primer subdiagonal de la tabla 7SD.Esto reemplaza cada dígito
n
conn
copias de1
, es decir, convierte cada dígito en unario, y dado que no hay separadores, los agrega de inmediato.Finalmente, contamos el número de caracteres (es decir, número de coincidencias de
.
) en el resultado, que convierte la suma unaria de nuevo a decimal.fuente