Générer une entrée micro-ondes paresseux

18

Connexes: Programmer mon four à micro-ondes et générer des valeurs paresseuses .

Mon collègue est tellement paresseux qu'il ne prend même pas la peine de bouger son doigt lors de la programmation du four à micro-ondes. (C'est en fait vrai!)

Aidez-le à trouver l'entrée micro-ondes qui donne l'heure la plus proche de ce qu'il veut, mais où tous les chiffres sont les mêmes. Si deux entrées entraînent le même décalage horaire par rapport à l'heure souhaitée, choisissez celle avec le moins de chiffres. Si les deux ont le même nombre de chiffres, choisissez le moindre - pour qu'il n'ait pas à attendre aussi longtemps.

L'entrée est l'entier que saisirait un perfectionniste, par exemple 4304 minutes et 30 secondes 100et 601 minute chacun. Il sera supérieur à 0 et ne dépassera pas 9999.

La sortie doit être un entier, par exemple 4444 minutes et 44 secondes et 5555 secondes.

L'entrée et la sortie ne peuvent se faire qu'en quelques secondes (pas de minutes) si le temps total est inférieur à 1 minute et 40 secondes.

C'est du , donc votre code doit être aussi court que possible.

Cas de 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
Adam
la source
3
J'aime l' approche à moitié paresseuse . Continuez à écraser le bouton "ajouter 30 secondes" jusqu'à ce qu'il soit là: D
Geobits
@Geobits Beaucoup de presses jusqu'à 11h30. Quoi qu'il en soit, le fait est qu'il utilise la méthode que j'ai écrite ci-dessus ... :-D
Adám
2
Oui, je le tape généralement pendant plus de quelques minutes. C'est un compromis délicat entre le nombre de presses et la distance parcourue par les doigts;)
Geobits
L'entrée / sortie en nombre de secondes est-elle autorisée?
CalculatorFeline
2
Mon collègue est tellement paresseux qu'il ne prend même pas la peine de bouger son doigt lors de la programmation du four à micro-ondes. Je n'en attendais pas moins de quelqu'un qui travaille au siège de Dyalog APL ... :)
Lynn le

Réponses:

3

Gelée, 26 octets

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

Explication:

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.

Essayez-le en ligne!

Lynn
la source
2

JavaScript (ES6), 112 octets

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}

Utilise une fonction d'assistance cqui calcule cinq fois le nombre réel de secondes écoulées.

Neil
la source
1

Dyalog APL , 37 octets

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

⍳41 2 3 4
⎕D"0123456789"
∘./⍨table de répétition (comme une table de multiplication, mais où chaque cellule contient B répétitions de A au lieu de A × B)
,faire du tableau une liste de chaînes
⍎¨faire de chaque chaîne un nombre (Maintenant, nous avons une liste de tous les possibles résultats.)
{}fonction où l'argument est représenté par un
⎕⍵argument précédé d'une entrée demandée
(s'applique à chacun des deux (l'argument et la liste) ...
0 100∘⊤convertit en base 100
60⊥convertit en base 60
-/calcule la différence entre les deux
|absolus
liste d'extraits de valeur (car -/encapsulé son résultat)
ordre de tri (ne trie pas, renvoie uniquement l'ordre dans lequel placer les arguments pour atteindre l'ordre croissant. Si deux éléments sont égaux, ils restent dans l'ordre actuel. Puisque notre liste contient des éléments de longueur croissante, cela prend soin des liens.)
le premier, c'est-à-dire celui avec la plus petite différence absolue par rapport à l'entrée, ⍵⊃⍨prend cet élément de la liste d'arguments (la liste des résultats possibles)

Merci au collègue en question d'avoir rasé un octet.


Remarque: je n'avais aucune solution au moment de la publication de l'OP.

Adam
la source