Generieren Sie faulen Mikrowelleneingang

18

Verwandte: Programmieren Sie meine Mikrowelle und Generieren Sie faule Werte .

Mein Kollege ist so faul, dass er sich beim Programmieren der Mikrowelle nicht einmal die Mühe macht, den Finger zu bewegen. (Das ist tatsächlich wahr!)

Helfen Sie ihm, den Mikrowelleneingang zu finden, der die Zeit angibt, die dem am nächsten kommt, was er will, aber bei dem alle Ziffern gleich sind. Wenn zwei Eingaben zur gleichen Zeitdifferenz von der gewünschten Zeit führen, wählen Sie die mit weniger Stellen. Wenn beide die gleiche Anzahl von Ziffern haben, wählen Sie die kleinere - damit er nicht so lange warten muss.

Die Eingabe ist die Ganzzahl, die ein Perfektionist eingeben würde, z. B. 4304 Minuten und 30 Sekunden, während 100und 60jede Minute 1 Minute ist. Es wird größer als 0 sein und 9999 nicht überschreiten.

Die Ausgabe muss eine ganze Zahl sein, z. B. 4444 Minuten und 44 Sekunden und 5555 Sekunden.

Sowohl Eingabe als auch Ausgabe dürfen nur in einfachen Sekunden (keine Minuten) erfolgen, wenn die Gesamtzeit unter 1 Minute und 40 Sekunden liegt.

Das ist , also muss Ihr Code so kurz wie möglich sein.

Testfälle:

  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
quelle
3
Ich mag den halb faulen Ansatz.
Drücke
@ Geobits Schrecklich viele Pressen bis 11.30 Uhr. Tatsache ist jedenfalls, dass er die Methode verwendet, die ich oben geschrieben habe ... :-D
Adám
2
Ja, ich tippe es normalerweise nur für ein paar Minuten ein. Es ist ein heikler Kompromiss zwischen der Anzahl der
Druckvorgänge
Ist die Eingabe / Ausgabe in Sekunden zulässig?
CalculatorFeline
2
Mein Kollege ist so faul, dass er sich beim Programmieren der Mikrowelle nicht einmal die Mühe macht, den Finger zu bewegen. Ich habe nicht weniger von jemandem erwartet, der in der Dyalog APL-Zentrale arbeitet ... :)
Lynn

Antworten:

3

Gelee, 26 Bytes

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

Erläuterung:

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.

Probieren Sie es online!

Lynn
quelle
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}

Verwendet eine Hilfsfunktion, cdie das Fünffache der tatsächlichen Anzahl der verstrichenen Sekunden berechnet.

Neil
quelle
1

Dyalog APL , 37 Bytes

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

⍳41 2 3 4 Wiederholungstabelle
⎕D"0123456789"
∘./⍨(wie eine Multiplikationstabelle, wobei jedoch jede Zelle B Wiederholungen von A anstelle von A × B enthält)
,Tabelle in Liste von Zeichenfolgen
⍎¨umwandeln Jede Zeichenfolge in Zahl umwandeln (Jetzt haben wir eine Liste aller möglichen Ergebnisse.)
{}Funktion, bei der das Argument durch
⎕⍵vorangestelltes Argument mit Eingabeaufforderung dargestellt wird.
(auf jedes der beiden Argumente (das Argument und die Liste) anwenden. ...
0 100∘⊤auf Basis 100
60⊥konvertieren. Von Basis 60 konvertieren.
-/Die Differenz zwischen den beiden
|Absoluten berechnen Wert
Extraktes Liste (weil -/gekapselt sein Ergebnis)
Sortierreihenfolge (Sortiert nicht, gibt nur die Reihenfolge zurück, in der die Argumente platziert werden müssen, um eine aufsteigende Reihenfolge zu erreichen. Wenn zwei Elemente gleich sind, bleiben sie in der aktuellen Reihenfolge. Da unsere Liste Elemente mit zunehmender Länge enthält, werden Bindungen berücksichtigt.)
der erste, dh der mit der geringsten absoluten Abweichung von der Eingabe, ⍵⊃⍨nimmt das Element aus der Argumentliste (der Liste der möglichen Ergebnisse)

Vielen Dank an den fraglichen Kollegen für das Abschneiden eines Bytes.


Hinweis: Ich hatte zum Zeitpunkt der Veröffentlichung des OP keine Lösung.

Adam
quelle