Generar entrada de microondas diferida

18

Relacionado: Programar mi horno microondas y Generar valores diferidos .

Mi colega es tan vago que ni siquiera se molesta en mover el dedo cuando programa el horno de microondas. (¡Esto es realmente cierto!)

Ayúdelo a encontrar la entrada de microondas que le da el tiempo más cercano a lo que quiere, pero donde todos los dígitos son iguales. Si dos entradas resultan en la misma diferencia horaria con respecto al tiempo deseado, elija la que tenga menos dígitos. Si ambos tienen el mismo número de dígitos, elija el menor, para que no tenga que esperar tanto.

Entrada es el número entero que un perfeccionista entraría, por ejemplo, 430es de 4 minutos y 30 segundos, mientras que 100y 60cada uno es de 1 minuto. Será mayor que 0 y no excederá de 9999.

La salida debe ser un número entero, por ejemplo, 4444 minutos y 44 segundos y 5555 segundos.

Tanto la entrada como la salida solo pueden estar en segundos simples (sin minutos) si el tiempo total es inferior a 1 minuto y 40 segundos.

Este es el , por lo que su código debe ser lo más corto posible.

Casos de prueba:

  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
Adán
fuente
3
Me gusta el enfoque medio vago . Sigue presionando el botón "agregar 30 segundos" hasta que esté allí: D
Geobits
@Geobits Impresionante cantidad de prensas hasta las 11:30. De todos modos, el hecho es que él usa el método que escribí arriba ... :-D
Adám
2
Sí, generalmente lo escribo para cualquier cosa durante unos minutos. Es una delicada compensación entre el número de prensas y la distancia de desplazamiento de los dedos;)
Geobits
¿Se permite la entrada / salida en # de segundos?
CalculatorFeline
2
Mi colega es tan vago que ni siquiera se molesta en mover el dedo cuando programa el horno de microondas. No esperaba menos de alguien que trabajaba en la sede de Dyalog APL ... :)
Lynn

Respuestas:

3

Jalea, 26 bytes

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

Explicación:

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.

Pruébalo en línea!

Lynn
fuente
2

JavaScript (ES6), 112 bytes

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}

Utiliza una función auxiliar cque calcula cinco veces el número real de segundos transcurridos.

Neil
fuente
1

Dyalog APL , 37 bytes

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

⍳41 2 3 4 Tabla de repetición
⎕D"0123456789"
∘./⍨(como una tabla de multiplicación, pero donde cada celda contiene B repeticiones de A en lugar de A × B),
,haga que la tabla se convierta en una lista de cadenas y
⍎¨haga que cada cadena se numere (ahora tenemos una lista de todas las posibles resultados.)
{... }función donde el argumento está representado por
⎕⍵ argumento anterior con entrada solicitada
(... se aplica a cada uno de los dos (el argumento y la lista) ...
0 100∘⊤convertir a base-100
60⊥convertir de base-60
-/calcular la diferencia entre los dos
|absolutos
lista de extracción de valor (porque -/encapsuló su resultado)
orden de clasificación (No se ordena, solo devuelve el orden en el que se colocan los argumentos para lograr un orden ascendente. Si dos elementos son iguales, permanecen en el orden actual. Dado que nuestra lista tiene elementos de longitud creciente, esto se encarga de los lazos).
el primero, es decir, el que tiene la menor diferencia absoluta de la entrada, ⍵⊃⍨toma ese elemento de la lista de argumentos (la lista de resultados posibles)

Gracias al colega en cuestión por eliminar un byte.


Nota: No tenía ninguna solución al momento de publicar el OP.

Adán
fuente