Ispirato da questo post su Puzzling. Gli spoiler per quel puzzle sono qui sotto.
Dati tre interi positivi come input, (x, y, z)
costruisci l'intervallo inclusivo [x, y]
, concatena quell'intervallo insieme, quindi rimuovi z
le cifre non necessariamente consecutive per produrre gli interi positivi più grandi e più piccoli possibili. Gli zeri iniziali non sono consentiti (ovvero, i numeri devono iniziare con [1-9]
). Emetti quei due numeri in entrambi gli ordini.
Per l'esempio dal posto imbarazzo, per l'ingresso (1, 100, 100)
, il maggior numero possibile è 99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
e il numero più piccolo è 10000012340616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
seguendo la logica seguito da di jafe risposta PUBBLICATE:
- Non possiamo influenzare la lunghezza del numero (c'è un numero fisso di cifre), quindi per massimizzare il valore prendiamo la prima cifra massima, quindi la seconda cifra ecc.
- Rimuovi le prime 84 non-nove (16 cifre rimaste per rimuovere):
999995051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Il numero più grande entro le successive 17 cifre è 7, quindi da qui la cifra successiva nella risposta può essere al massimo 7 (non possiamo rimuovere più di 16 cifre). Quindi rimuovi 15 non-7 ... (1 cifra rimasta per rimuovere):
999997585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Da qui, la cifra successiva può essere al massimo 8, quindi rimuovi una non-8 dal centro:
99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Logica simile, ma invertita (vale a dire, desideriamo
1
s iniziali anziché iniziali9
s) per il numero più piccolo.
Ecco un esempio più piccolo: (1, 10, 5)
.
Costruiamo l'intervallo 12345678910
e determiniamo quali 5
cifre possiamo rimuovere lasciando il numero più grande possibile. Ovviamente, ciò significa che vogliamo massimizzare la cifra iniziale, poiché non possiamo influenzare la lunghezza dell'output. Quindi, se rimuoviamo 12345
, ci rimane 678910
, e questo è il più grande che possiamo fare. Rendere il più piccolo è un po 'più complicato, dal momento che possiamo cogliere i numeri dal centro, lasciando 123410
il più piccolo possibile.
Perché (20, 25, 11)
, il risultato è piuttosto noioso, come 5
e1
.
Infine, per escludere le risposte che provano a condurre gli zeri, si (9, 11, 3)
ottiene 91011
che a sua volta produce 91
e10
come il più grande e il più piccolo.
I / O e regole
- Se è più facile / più breve, puoi codificare due programmi / funzioni - uno per il più grande e uno per il più piccolo - nel qual caso il tuo punteggio è la somma di entrambe le parti.
- L'input e l'output possono essere forniti con qualsiasi metodo conveniente .
- Si può presumere che l'input si adatti al tipo di numero nativo della tua lingua, tuttavia , né il numero concatenato né l'output possono essere considerati come tali.
- È accettabile un programma completo o una funzione. Se una funzione, è possibile restituire l'output anziché stamparlo.
- Sono vietate le scappatoie standard .
- Si tratta di code-golf, quindi si applicano tutte le normali regole del golf e vince il codice più breve (in byte).
9, 11, 3
lo farebbe.