Tarea:
Dado un número entero en el sistema de números decimales, reduzca a un solo dígito decimal de la siguiente manera:
- Convierta el número en una lista de dígitos decimales.
- Encuentra el dígito más grande, D
- Eliminar D de la lista. Si hay más de una aparición de D, elija la primera desde la izquierda (en la posición más significativa), todas las demás deben permanecer intactas.
- Convierta la lista resultante en un número decimal y multiplíquelo por D.
- Si el número es mayor que 9 (tiene más de 1 dígito decimal), repita todo el procedimiento, ingresando el resultado. Deténgase cuando obtenga un resultado de un solo dígito.
- Muestra el resultado.
Ejemplo:
26364 ->
1. 2 6 3 6 4
2. The largest digit is 6, so D=6
3. There are two occurrences or 6: at positions 1 and 3 (0-based). We remove the left one,
at position 1 and get the list 2 3 6 4
4. we convert the list 2 3 6 4 to 2364 and multiply it by D:
2364 * 6 = 14184
5. 14184 is greater than 9 so we repeat the procedure, feeding 14184 into it.
Continuamos repitiendo el procedimiento para 14184 y así sucesivamente y pasamos por los siguientes resultados intermedios, llegando finalmente a 8:
11312
3336
1998
1782
1376
952
468
368
288
224
88
64
24
8
Entonces el resultado para 26364 es 8.
Entrada: un entero / una cadena que representa un entero
Salida: un solo dígito, el resultado de la reducción aplicada al número.
Casos de prueba:
9 -> 9
27 -> 4
757 -> 5
1234 -> 8
26364 -> 8
432969 -> 0
1234584 -> 8
91273716 -> 6
Este es el código de golf , por lo que ganan las respuestas más cortas en bytes en cada idioma.
code-golf
arithmetic
integer
Galen Ivanov
fuente
fuente
10 -> 10
?Respuestas:
05AB1E , 6 bytes
Código:
Utiliza la codificación 05AB1E . Pruébalo en línea!
Explicación
fuente
JavaScript (ES6), 49 bytes
Toma la entrada como una representación de cadena de un entero, como
f("26364")
.Casos de prueba
Mostrar fragmento de código
fuente
Jalea , 13 bytes
Pruébalo en línea!
-1 gracias a un truco que encontré en Jonathan Allan's respuesta de .
Programa completo
fuente
Pyth , 16 bytes
Toma la entrada como una cadena. Pruébalo aquí! (Alternativa:
.WtH`*s.-ZeSZseS
)Pyth , 18 bytes
Toma la entrada como un entero. Pruébalo aquí!
Cómo funciona
16 byter
18 byter
Estar tan cerca de Jelly en este tipo de desafío es muy bueno para Pyth IMO :-)
fuente
Casco ,
141312 bytesGracias Zgarb por guardar 1 byte.
Pruébalo en línea!
Explicación:
fuente
R ,
9995 bytesPruébalo en línea!
Una función recursiva. Agregar
f(number)
en el pie de página se puede utilizar para probar otros valores denumber
. Implementación sencilla,d
es la lista de dígitos y10^(n:2-2)%*%d[-M]
calcula el número con el dígito más grande eliminado.fuente
Python 2 , 72 bytes
Pruébalo en línea!
fuente
432969
. "ValueError: literal no válido para int () con base 10: ''"n
fuera 0n*(n<=9)
, todavía se evaluaría a un valor falso, 0, haciendo que la recursión continúe y causando un error, mientras que la cadena'0'
es un valor verdadero y, por lo tanto, la recursión se detiene.Ruby , 59 bytes
Pruébalo en línea!
Función lambda recursiva llamada like
f[26364]
.fuente
Jalea , 15 bytes
Pruébalo en línea! o ver el conjunto de pruebas .
¿Cómo?
fuente
Haskell ,
706766 bytesGuardado
34 bytes gracias a nimi!Pruébalo en línea!
fuente
until
. Pruébalo en línea! ....span=<<(>).maximum...
.C # (.NET Core) , 126 bytes
Pruébalo en línea!
fuente
if(n<10)return n;...return F(...);
a un solo retorno con ternary-if, así:int F(int n){var x=(n+"").ToList();var m=x.Max(d=>d);x.RemoveAt(x.IndexOf(m));return n<10?n:F(int.Parse(string.Concat(x))*(m-48));}
( 131 bytes )using System.Linq;
(18 bytes) en el bytecount.APL (Dyalog) ,
363533 bytes-1 debido a las especificaciones OP actualizadas. -2 gracias a ngn.
Función de prefijo tácito anónimo. Toma un entero como argumento.
Pruébalo en línea!
{
...}
una función donde⍵
está el argumento:⍵>9:
si el argumento es mayor que 9, entonces:⍕⍵
formatear (stringify) el argumento⍎¨
ejecutar (evaluar) cada uno (esto nos da los dígitos como números)(
...)
aplique la siguiente función tácita en aquellos⌈/
el dígito más grande×
veces10⊥
la decodificación de base 10 de (recoge dígitos)⊂
todos los dígitos⌷⍨¨
indexado por cada uno de⍳∘≢
los i ndices del número de dígitos≠
difiere de⊢⍳⌈/
el más grande de dígitos i ndice de toda la lista de dígitos∇
recurse (es decir, llamarse a sí mismo) en ese⋄
más⍵
devolver el argumento sin modificarfuente
>10
ser>9
?>9
ahorraría un byte.Perl 6 ,
4541 bytesPruébalo
Pruébalo
Expandido:
fuente
Retina , 67 bytes
Pruébalo en línea! Link incluye los casos de prueba lo suficientemente rápido como para no dañar el servidor de Dennis. Explicación:
Para números de dos dígitos, esto duplica el número con un
;
separador, prefijando un 1 al duplicado. Para números de un dígito, este prefijo1;
al número.Ordenar los dígitos del duplicado. (Para números de un dígito, esto no tiene efecto).
Encuentre la primera aparición del dígito más grande y elimínelo, y también los otros dígitos en el duplicado, y el 1 adicional que se agregó anteriormente. (Para números de un dígito, la coincidencia falla, por lo que esto no hace nada).
Multiplica el número por el dígito. Para números de un dígito, esto da como resultado el número original y el ciclo termina. De lo contrario, el programa se repite hasta que se alcanza un solo dígito.
fuente
C # (.NET Core) ,
177164+ 18 bytes¡Guardado 13 bytes gracias a @raznagul!
Pruébalo en línea!
fuente
s.Length<2
an<10
. Además, puede eliminar el operador ternario y soloreturn f(y)
al final, ya que el caso se manejaif
en el siguiente paso de la recursión.Java 8,
126104bytes-22 bytes gracias a @ OlivierGrégoire .
Explicación:
Pruébalo aquí.
fuente
n>9
y revierte las condiciones en lugar den<10
).Jq 1.5 , 86 bytes
Expandido
Pruébalo en línea!
fuente
Perl 5 , 41 + 1 (
-p
) = 42 bytesPruébalo en línea!
fuente
9
. :( pero jugó un poco y logró obtener 41 bytes con una solución: ¡ Pruébelo en línea!Lua,
137108bytesGracias a Jonathan S por jugar golf en 29 bytes.
Pruébalo en línea!
fuente
D ,
188186185 bytesPruébalo en línea!
Odio la evaluación perezosa, mucho. Cualquier consejo es bienvenido!
fuente
Lua, 154 Bytes
Debería tener algunas formas de jugar golf, estoy experimentando ahora mismo.
Pruébalo en línea!
Explicaciones
fuente
PowerShell , 123 bytes
Pruébalo en línea!
Ooof Las matrices de PowerShell son inmutables, por lo que debemos usar la larga
[Collections.ArrayList]
conversión aquí para poder llamar.remove()
más tarde.Toma entrada
$args
, la convierte en una cadena, luego unachar
matriz, luego unArrayList
. Almacena eso en$a
. Luegowhile
giramos hasta que estamos en o debajo9
. En cada iteración, invocamos.remove
el elemento más grande de$a
(hecho porsort
y tomando el último elemento[-1]
), almacenando el elemento más grande en$b
al mismo tiempo. Esto sucede porque los valores ASCII se ordenan de la misma manera que los dígitos literales.A continuación, volvemos a calcular
$a
, nuevamente como unachar
matriz (eArrayList
implícitamente), lanzando nuestro$b
(que actualmente es achar
) a una cadena, luego un int con+
, y multiplicando eso por$a
-join
ed en una cadena (implícitamente convertido a int). Esto satisface la parte "multiplicar por D" del desafío.Finalmente, una vez que estamos fuera del ciclo, lo colocamos
$a
en la tubería y la salida es implícita.fuente
Pip ,
2221 bytesToma entrada como argumento de línea de comando. Verifique todos los casos de prueba: ¡ Pruébelo en línea!
Explicación
Sin golf, con comentarios:
En la versión de golf, el cuerpo del bucle se condensa en una sola expresión:
fuente
do
103,95, 90 bytesPruébalo en línea!
fuente
Java 8: 115 bytes
-10 bytes gracias a Jo King
Desafortunadamente no se puede llamar a una función lambda de forma recursiva, por lo que se necesitan 11 bytes adicionales para el encabezado del método. Soy consciente de que hay una respuesta Java más corta que se repite en su lugar, pero decidí proponer esto por mi cuenta.
Pruébalo en línea
fuente
-48
mapa al final de lam
definición. Pruébalo en línea! También tiene espacio en blanco adicional en su enlace TIOJ, 40 bytes
Pruébalo en línea!
explicación
fuente
PowerShell , 230 bytes
Pruébalo en línea!
Se desperdicia demasiado en todo el tipo de fundición.
fuente
PHP,
8277 + 1 bytesEjecutar como tubería
-nR
o probarlo en línea .fuente
dc ,
9885 bytesMuchas gracias a esta respuesta por la idea de utilizar
~
en la extracción de dígitos de un número, lo que resulta en dos bytes guardados sobre la versión original del código.Esto fue bastante bien para completar en
dc
con sus capacidades inexistentes de manipulación de cadenas.Pruébalo en línea!
fuente
Bash, 80 bytes
Utiliza paquetes Core Utilities (para
sort
ytail
) ygrep
.¿Como funciona?
fuente