Genera input a microonde pigro


18

Correlati: programma il mio forno a microonde e genera valori pigri .

Il mio collega è così pigro che non si preoccupa nemmeno di muovere un dito durante la programmazione del forno a microonde. (Questo è effettivamente vero!)

Aiutalo a trovare l'ingresso a microonde che dà il tempo più vicino a quello che vuole, ma dove tutte le cifre sono uguali. Se due ingressi generano la stessa differenza di orario rispetto al tempo desiderato, scegliere quello con meno cifre. Se entrambi hanno lo stesso numero di cifre, scegli il minore, quindi non deve aspettare così tanto.

L'input è il numero intero che un perfezionista sarebbe entrato, ad esempio, 430è di 4 minuti e 30 secondi, mentre 100e 60ciascuno è di 1 minuto. Sarà maggiore di 0 e non supererà 9999.

L'output deve essere un numero intero, ad esempio 4444 minuti e 44 secondi e 5555 secondi.

Sia l'input che l'output possono essere solo in pochi secondi (senza minuti) se il tempo totale è inferiore a 1 minuto e 40 secondi.

Questo è , quindi il tuo codice deve essere il più corto possibile.

Casi test:

  30 →   33
  60 →   55
  70 →  111
  90 →   88
 100 →   55
 101 →   66
 120 →   77
 130 →   88
 200 →   99
 201 →  222
 500 →  444
 700 →  666
1000 →  888
1055 →  999
1056 → 1111
1090 → 1111

3
Mi piace l' approccio mezzo pigro . Continua a premere il pulsante "aggiungi 30 sec" fino a quando non è lì: D
Geobits

@Geobits Un sacco di macchine da stampa fino alle 11:30. Ad ogni modo, il fatto è che usa il metodo che ho scritto sopra ...
MrGreen

2
Sì, di solito lo digito per qualche minuto. È un delicato compromesso tra numero di presse e distanza percorsa dalle dita;)
Geobits

Sono consentiti input / output in # di secondi?
Calcolatrice

2
Il mio collega è così pigro che non si preoccupa nemmeno di muovere un dito durante la programmazione del forno a microonde. Non mi aspettavo di meno da qualcuno che lavorava nella sede dell'APL di Dyalog ... :)
Lynn,

Risposte:


3

Gelatina, 26 byte

bȷ2ḅ60
³ÇạÇ,
9Rẋ€4R¤ḌFÇ€ṂṪ

Spiegazione:

bȷ2ḅ60             f(x) = x tobase 100 frombase 60
³ÇạÇ,              g(x) = (abs(f(arg) - f(x)), x)
9Rẋ€4R¤            main(arg) = [1..9] repeat each with [1..4],
       ḌF           then get digits and flatten,
         ǀ         then map g,
           Ṃ        then minimum,
            Ṫ       then last element.

Provalo online!


2

JavaScript (ES6), 112 byte

n=>{c=n=>n*3+n%100*2;d=n=c(n);for(r=i=0;i<1e4;i++)/^(.)\1*$/.test(i)&(m=c(i)-n,m<0?m=-m:m)<d&&(d=m,r=i);return r}

Utilizza una funzione di supporto cche calcola cinque volte il numero effettivo di secondi trascorsi.


1

Dyalog APL , 37 byte

{⍵⊃⍨⊃⍋⊃|-/(60⊥0 100∘⊤)¨⎕⍵}⍎¨,⎕D∘./⍨⍳4

⍳41 2 3 4 La tabella di ripetizione
⎕D"0123456789"
∘./⍨(come una tabella di moltiplicazione, ma dove ogni cella contiene B ripetizioni di A anziché A × B)
,trasforma la tabella in un elenco di stringhe e
⍎¨trasforma ogni stringa in numero (Ora abbiamo un elenco di tutte le possibili risultati.)
{... }funzione in cui l'argomento è rappresentato
⎕⍵dall'argomento precedente con input richiesto
(... si applica a ciascuno dei due (l'argomento e l'elenco) ...
0 100∘⊤converti in base-100
60⊥converti da base-60
-/calcola la differenza tra i due
|assoluti
elenco di estrazione valore (perché -/incapsulato il suo risultato)
ordinamento (Non ordina, restituisce solo l'ordine in cui posizionare gli argomenti per raggiungere l'ordine crescente. Se due elementi sono uguali, rimangono nell'ordine corrente. Poiché la nostra lista ha elementi di lunghezza crescente, questo si occupa dei legami.)
il primo, ovvero quello con la minima differenza assoluta dall'input, ⍵⊃⍨prende quell'elemento dalla lista degli argomenti (la lista dei possibili risultati)

Grazie al collega in questione per la rasatura di un byte.


Nota: al momento della pubblicazione dell'OP non avevo alcuna soluzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.