Inspirado por este post sobre Puzzling. Spoilers para esse quebra-cabeça estão abaixo.
Dado três números inteiros positivos como entrada, (x, y, z)
construa o intervalo inclusivo [x, y]
, concatene esse intervalo e remova z
dígitos não necessariamente consecutivos para produzir o maior e o menor número inteiro positivo possível. Zeros à esquerda não são permitidos (ou seja, os números devem começar com [1-9]
). Saída esses dois números em qualquer ordem.
Para o exemplo do post Puzzling, para entrada (1, 100, 100)
, o maior número possível é 99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
e o menor número é 10000012340616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
seguindo a lógica abaixo da resposta da jafe publicada lá:
- Não podemos influenciar o comprimento do número (há um número fixo de dígitos); portanto, para maximizar o valor, usamos o primeiro dígito máximo, depois o segundo dígito etc.
- Remova os 84 primeiros não-noves (16 dígitos restantes para remover):
999995051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- O maior número dentro dos próximos 17 dígitos é 7, portanto, a partir daqui, o próximo dígito na resposta pode ter no máximo 7 (não podemos remover mais de 16 dígitos). Portanto, remova 15 não-7's ... (1 dígito para remover):
999997585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- A partir daqui, o próximo dígito pode ter no máximo 8, então remova um não-8 do meio:
99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Lógica semelhante, mas invertida (ou seja, queremos líderes
1
s em vez de líderes9
s) para o menor número.
Aqui está um exemplo menor: (1, 10, 5)
.
Construímos o intervalo 12345678910
e determinamos quais 5
dígitos podemos remover, deixando o maior número possível. Obviamente, isso significa que queremos maximizar o dígito inicial, pois não podemos influenciar o comprimento da saída. Então, se removermos 12345
, ficamos com 678910
, e é o maior que podemos fazer. Tornar o menor é um pouco mais complicado, pois podemos extrair números do meio, deixando 123410
o menor possível.
Pois (20, 25, 11)
, o resultado é bastante chato, como 5
e 1
.
Finalmente, descartar respostas que tentam zeros à esquerda, (9, 11, 3)
fornece as 91011
que, por sua vez, produzem 91
e 10
são as maiores e as menores.
E / S e regras
- Se for mais fácil / mais curto, você pode codificar dois programas / funções - um para o maior e outro para o menor -, nesse caso, sua pontuação é a soma das duas partes.
- A entrada e saída podem ser fornecidas por qualquer método conveniente .
- Pode-se presumir que a entrada se encaixa no tipo de número nativo do seu idioma, no entanto , nem o número concatenado nem a saída podem ser assumidos para isso.
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
9, 11, 3
que valeria a pena .