Inspirado en esta publicación sobre Puzzling. Spoilers de ese rompecabezas están a continuación.
Dados tres enteros positivos como entrada, (x, y, z)
construya el rango inclusivo [x, y]
, concatene ese rango juntos, luego elimine z
dígitos no necesariamente consecutivos para producir los enteros positivos más grandes y más pequeños posibles. Los ceros iniciales no están permitidos (es decir, los números deben comenzar con [1-9]
). Emite esos dos números en cualquier orden.
Para el ejemplo de la publicación Puzzling, para la entrada (1, 100, 100)
, el número más grande posible es 99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
y el número más pequeño es 10000012340616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
siguiendo la lógica a continuación de la respuesta de jafe publicada allí:
- No podemos influir en la longitud del número (hay un número fijo de dígitos), por lo que para maximizar el valor tomamos el primer dígito máximo, luego el segundo dígito, etc.
- Elimine los 84 primeros no nueves (quedan 16 dígitos para eliminar):
999995051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- El número más grande dentro de los siguientes 17 dígitos es 7, por lo que a partir de aquí, el siguiente dígito en la respuesta puede ser como máximo 7 (no podemos eliminar más de 16 dígitos). Entonces, elimine 15 no 7 ... (queda 1 dígito para eliminar):
999997585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- A partir de aquí, el siguiente dígito puede ser como máximo 8, así que elimine uno que no sea 8 del medio:
99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Lógica similar, pero invertida (es decir, queremos una
1
s principal en lugar de una9
s inicial ) para el número más pequeño.
Aquí está un ejemplo más pequeña: (1, 10, 5)
.
Construimos el rango 12345678910
y determinamos qué 5
dígitos podemos eliminar dejando el mayor número posible. Obviamente, eso significa que queremos maximizar el dígito inicial, ya que no podemos influir en la longitud de la salida. Entonces, si eliminamos 12345
, nos quedamos 678910
, y eso es lo más grande que podemos hacer. Hacer el más pequeño es un poco más complicado, ya que podemos extraer los números del medio en su lugar, dejando 123410
el más pequeño posible.
Para (20, 25, 11)
, el resultado es bastante aburrido, como 5
y 1
.
Finalmente, descartar respuestas que intentan poner ceros a la izquierda, (9, 11, 3)
da lo 91011
que a su vez rinde 91
y 10
es el más grande y el más pequeño.
E / S y reglas
- Si es más fácil / más corto, puede codificar dos programas / funciones, uno para el más grande y otro para el más pequeño, en cuyo caso su puntaje es la suma de ambas partes.
- La entrada y salida se pueden dar por cualquier método conveniente .
- Se puede suponer que la entrada encaja en el tipo de número nativo de su idioma, sin embargo , no se puede suponer que el número concatenado ni la salida lo hagan.
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
9, 11, 3
lo haría.