Reto
Dado un número entero divisible por 9 y un dígito faltante, encuentre el dígito faltante.
El dígito faltante puede estar representado por cualquier carácter que no sean los dígitos 0-9 siempre que sea coherente.
Si el dígito faltante puede ser 0 o 9, muestre algo para indicarlo.
Suponga que el usuario es lo suficientemente inteligente como para poner solo un dígito faltante y un número, etc.
Casos de prueba
En los casos de prueba, el dígito faltante se representa con un signo de interrogación.
123? -> 3
?999 -> 0 or 9
?0023 -> 4
000?1 -> 8
code-golf
math
arithmetic
NK1406
fuente
fuente
0
? ¿Qué pasa con[0, 9]
(matriz o lista de 2 números)??
una entrada posible?Respuestas:
Python , 21 bytes
Pruébalo en línea!
Solía
I
representar un dígito faltante.fuente
Alice , 12 bytes
Pruébalo en línea!
Emite
0
si el resultado puede ser 0 o 9.Explicación
fuente
&
puede eliminar, ya que el modo cardinal interpreta la entrada original como máximo 2 enteros.JavaScript (ES6), 40 bytes
Salidas 9 si podrían ser 0 o 9.
fuente
f=
; Las funciones anónimas son perfectamente válidas.Japt, 7 bytes
Intenté algunas soluciones, pero la más corta fue similar a la mayoría de las demás, excepto que no necesitamos reemplazarla
?
al principio.Puede tomar cualquier carácter no numérico como el dígito faltante. Salidas
0
cuando la solución puede ser eso o9
.Intentalo
Explicación
Entrada implícita de cadena
U
.¬
se divide en una matriz de caracteres individuales,x
reduce la matriz al ignorar los elementos no numéricos,*J
multiplica cada elemento por -1 yu9
obtiene el módulo positivo del resultado.fuente
JavaScript (ES6), 18 bytes
Espera a
+
como el dígito faltante. Devuelve9
para 0 o 9 .Casos de prueba
Mostrar fragmento de código
fuente
05AB1E ,
76 bytesUna salida de
0
significa que el resultado podría ser 0 o 9 .Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
Python 2 ,
444135 bytes-6 bytes gracias a RiaD
Pruébalo en línea!
Usuarios
]
por dígitos faltantes.Emite
0
si el dígito faltante podría ser 0 o 9.fuente
0
para un caso ambiguo, lo cual tiene sentido ya que9%9 == 0
Pyth,
97 bytesUtiliza el espacio como delimitador y devuelve 0 si el resultado podría ser 0 o 9.
Pruébalo en línea
Explicación
fuente
Prólogo (SWI) , 59 bytes
Pruébalo en línea!
¡Yay para la programación lógica!
Explicación
Primero hacemos un predicado
*
, que se mantiene cuando se aplica a cero y la lista vacía. Nuestro predicado también se cumple cuando el frente de la lista está entre 0 y 9 y cuando agregamos el dígito principal mod 9 se mantiene el predicado.Luego definimos
+
simplemente ser este predicado con0
el primer argumento. Es decir, queremos que la suma digital sea un múltiplo de 9.Prolog hace todo el trabajo de encontrar soluciones para nosotros.
fuente
Befunge-93 , 16 bytes
Pruébalo en línea!
Una versión de una línea de la respuesta Befunge de James Holderness que logra reducir dos bytes. Esto esencialmente comprime el código en una línea, invierte la dirección y aprovecha el hecho de que Befunge no salta al final de la línea. Me sugirió que publicara una respuesta separada con una explicación. El código toma un * como representación del dígito faltante y genera un 9 para 0 o 9.
Cómo funciona
*
(Valor ASCII 42) fue elegido como el carácter faltante porque contrarresta el valor inicial del dígito, 3.fuente
Látex, muchos bytes (
1000628614)LaTeX, ilegible (
348334 bytes)LaTeX, 132 bytes
Solo se permite espacio como dígito desconocido en este código.
fuente
J ,
1412 bytes-2 bytes gracias a @BolceBussiere
Sinceramente, no sé por qué
"."0
interpreta?
como 0, pero lo hace en mi intérprete y en TIO, así que no voy a cuestionarlo. (Actualización: ver comentarios para una explicación de por qué).Este enfoque simplemente toma la suma de los dígitos, lo niega restando de 9 y lo toma el módulo 9.
Pruébalo en línea!
fuente
Gelatina ,
1196 bytesExplicación
Una salida de 0 significa que el resultado podría ser 0 o 9.
Pruébalo en línea!
Guardado 2 bytes gracias al Sr. Xcoder . Cuando se utiliza el cada rápido (
€
) durante la evaluación, la división del número en dígitos era redundante.Guardado 3 bytes gracias a Dennis . Puede bit a bit O la entrada con 0 en lugar de analizar manualmente la entrada como un número mientras elimina los ceros iniciales y los no dígitos.
fuente
|0
funciona en lugar defØDV€
.Swift , 51 bytes
Pruébalo en línea!
fuente
Befunge-93 (PyFunge) ,
2221 bytesMe di cuenta de que no necesito usar
?
para representar el dígito ausente, así que usé uno que es un múltiplo de 9 después de restar 48:x
Esto me permitió jugar golf
3+
, pero solo me ahorró 1 byte debido a la longitud del primera línea antes del condicional :(Un puerto de mi respuesta Befunge-98:
5 bytes más para verificar si hemos alcanzado EOF,
1 byte más para presionar 48 (
"0"
vs'0
),1 byte más a imprimir con la respuesta
.@
,y 1 byte más, ya que el segundo La línea tiene un espacio
para un total de 8 bytes más.
Pruébalo en línea!
Emite
0
si el dígito faltante podría ser 0 o 9.Esto solo funciona en el intérprete de PyFunge por las razones que se explican a continuación.
Explicación
Gran parte de esta explicación está copiada de mi explicación de Befunge-98 , ya que ese programa es muy similar a este.enchufe descarado
En la primera línea del programa, sumamos los dígitos, incluida la x, que se trata como un 72 debido a su valor ASCII. Sin embargo, la suma será la misma una vez que hayamos modificado por 9, así que esto es irrelevante.
Si solo modificáramos por 9, nos quedaríamos con el dígito incorrecto, porque queremos
9 - (sum % 9)
. Sin embargo, podemos hacerlo mejor que9\-
, lo que restaría el resto de 9: si hacemos que la suma sea negativa antes de modificar por 9, obtendremos un resultado positivo, equivalente al9 - (sum % 9)
de algunos intérpretes. Esto es lo que nos obliga a usar los intérpretes de PyFunge para Befunge 93 y 98, ya que es el único en TIO que hace esto. Los otros nos dan un valor entre -8 y 8 en lugar de 0 y 8fuente
Befunge-98 (PyFunge) ,
1513 bytesMe di cuenta de que no necesito usar
?
para representar el dígito ausente, así que usé uno que es un múltiplo de 9 después de restar 48:x
Esto me permitió jugar golf
3+
.Pruébalo en línea!
Usa un
x
como el dígito que falta, porque su valor ASCII es divisible por 9 después de restar 48 (y es bueno porque se usa comúnmente como una variable en matemáticas).Salidas a través del código de salida (porque
q
es un byte más corto que.@
)Salidas
0
si el dígito faltante podría ser 0 o 9.Esto solo funciona en el intérprete de PyFunge por las razones que se explican a continuación.
Explicación
En la primera línea del programa, sumamos los dígitos, incluido el
x
, que se trata como un 72 debido a su valor ASCII. Sin embargo, la suma será la misma una vez que hayamos modificado por 9, por lo que esto es irrelevante.Si solo modificáramos por 9, nos quedaríamos con el dígito incorrecto, porque queremos
9 - (sum % 9)
. Sin embargo, podemos hacerlo mejor que9\-
, lo que restaría el resto de 9: si hacemos que la suma sea negativa antes de modificar por 9, obtendremos un resultado positivo, equivalente al9 - (sum % 9)
de algunos intérpretes . Esto es lo que nos obliga a usar los intérpretes de PyFunge para Befunge 93 y 98, ya que es el único en TIO que hace esto. Los otros nos dan un valor entre -8 y 8 en lugar de 0 y 8.fuente
Ruby , 22 bytes
Usos
'
(cualquier carácter que tenga una distancia0
divisible por "0" servirá, incluido él0
mismo).Una salida de
0
significa ya sea0
o9
.Pruébalo en línea!
Explicación
fuente
Ruby ,
46, 41 bytes-5 gracias a @Unihedron
Pruébalo en línea!
fuente
chars
lugar de.split(//)
, 2.'<'
se puede reemplazar con?<
chars
Befunge-93,
28271918 bytesEl crédito debe ir a Mistah Figgins , cuya respuesta de PyFunge me mostró que no necesitaba una verificación especial para el carácter del dígito faltante, si solo se aseguró de que el valor ASCII fuera un múltiplo de nueve.
Un agradecimiento adicional a Jo King que demostró que no era necesario convertir completamente los caracteres a su equivalente numérico, y que simplemente podría restar 3 para obtener un valor relativo a la base 9 (ASCII
0
menos 3 es 45, un múltiplo de 9) .Pruébalo en línea!
Para que esto funcione, debe usar el carácter
*
para el dígito faltante (hay otros que también podrían funcionar, pero eso es lo mejor).Emite
9
si el dígito faltante podría ser 0 o 9.Explicación
Esencialmente estamos calculando la suma de todos los dígitos, más 45 por dígito (que finalmente se cancelará cuando modifiquemos con 9). Esta suma se resta de 3 (nuestro total inicial), y 39 adicionales se restan por el dígito faltante (ASCII
*
menos tres). De nuevo, 3 menos 39 es un múltiplo de 9, por lo que se cancela cuando modificamos con 9.Así que al final estamos calculando la suma negativa de todos los dígitos, mod 9, más 9, es decir
Y eso nos da el dígito faltante.
fuente
Befunge-98 (PyFunge) , 8 bytes
Pruébalo en línea!
Salidas a través del código de salida. Al igual que con la respuesta de Mistah Figgin , solo funciona con Pyfunge, donde un número negativo mod 9 se vuelve positivo. Utiliza una x como el dígito faltante.
fuente
PowerShell , 40 bytes
Pruébalo en línea!o Verificar todos los casos de prueba
Toma entrada como
'123x'
en$a
. Construye un rango0
ay9
usaWhere-Object
(aquí abreviado como|?
) para extraer esos enteros que coinciden con la cláusula. La cláusula toma$a
, realiza una expresión regular-replace
para reemplazar elx
con el dígito actual$_
y obtiene el mod 9 con%9
. Por lo tanto, si 9 se divide de manera uniforme, será cero. Tomamos el booleano-no del mismo, que hace que los ceros sean verdaderos y todo lo demás falsey, de modo que satisfaga la cláusula Where-Object. Esos resultados se dejan en la tubería y la salida es implícita.fuente
Haskell , 35 bytes
Pruébalo en línea!
fuente
Retina ,
353425 bytesSi
?
puede ser0 or 9
, el resultado se muestra como9
.Pruébalo en línea
Explicación
fuente
\d
se puede cambiar a justo.
y a la siguiente línea$*
.?
cuando escribí eso.Perl 5 , 23 bytes
Pruébalo en línea!
No le importa qué carácter significa el dígito faltante siempre que no sea un dígito.
fuente
Tcl, 53 bytes
Al igual que con otras respuestas, esto se acorta al no decir explícitamente "0 o 9".
En cambio, un resultado de "9" significa 0 o 9.
Pruébalo en línea!
Explicación
Funciona bastante simple. Emplea una expresión regular para:
signo de interrogaciónno sea dígito (s)Luego evalúa 9 - (sum_of_digits mod 9) para llegar a un valor final en 1..9, que luego
puts
.Se
0$argv
requiere el 0 inicial (en ) en caso de que el signo de interrogación aparezca primero en la entrada; Un signo más a la izquierda en la secuencia transformada no es un problemaexpr
.fuente
Pyth , 8 bytes
Pruébalo en línea!
Usos en
I
lugar de?
.fuente
APL (Dyalog) , 13 bytes
Pruébalo en línea!
El dígito que falta es
⍬
.fuente
brainfuck , 50 bytes
Pruébalo en línea!
Imprime un 9 para 0 o 9. El carácter perdido se representa con:
Cómo funciona
El carácter que falta debe ser un carácter que tenga un mod 9 de 4, +3 porque restamos 3 de los dígitos normales y +1 para la inicialización del total como 1.
Como nota al margen, hay una gran ineficiencia en el código por el bien del golf, ya que cada dígito restablecerá el total 5 veces cada uno, en lugar de solo una vez si resté 48 en lugar de 3.
fuente
> <> ,
3533252115 bytesUna salida de
0
significa que el resultado podría ser 0 o 9 .Pruébalo en línea!
Ahorró 6 bytes gracias a Jo King al usar
'
para representar dígitos faltantes.fuente
'
personaje en lugar de un?
Java 8,
3634 bytesRegresa
9
cuando ambos0
y9
son válidos.Explicación:
Pruébalo en línea.
fuente