Wygeneruj leniwe wejście mikrofalowe

18

Powiązane: Zaprogramuj moją kuchenkę mikrofalową i wygeneruj leniwe wartości .

Mój kolega jest tak leniwy, że nawet nie stara się poruszać palcem podczas programowania kuchenki mikrofalowej. (To jest rzeczywiście prawda!)

Pomóż mu znaleźć wejście mikrofalowe, które daje czas najbliższy temu, czego chce, ale gdzie wszystkie cyfry są takie same. Jeśli dwa wejścia powodują taką samą różnicę czasu w stosunku do żądanego czasu, wybierz jedno z mniejszą liczbą cyfr. Jeśli obie mają taką samą liczbę cyfr, wybierz mniejszą - aby nie musiał czekać tak długo.

Dane wejściowe to liczba całkowita, którą wprowadziłby perfekcjonista, np. 4304 minuty i 30 sekund, 100a 60każda z nich to 1 minuta. Będzie większy niż 0 i nie przekroczy 9999.

Wyjście musi być liczbą całkowitą, np. 444Wynosi 4 minuty i 44 sekundy oraz 5555 sekund.

Zarówno wejście, jak i wyjście mogą odbywać się w ciągu zaledwie kilku sekund (bez minut), jeśli całkowity czas jest poniżej 1 minuty i 40 sekund.

To jest , więc twój kod musi być jak najkrótszy.

Przypadki testowe:

  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ám
źródło
3
Lubię na wpół leniwe podejście. Po prostu mashuj przycisk „dodaj 30 sekund”, aż się pojawi: D
Geobits
@Geobits Strasznie dużo pras do 11:30. W każdym razie faktem jest, że używa metody, którą napisałem powyżej ... :-D
Adám
2
Tak, zwykle po prostu wpisuję go przez kilka minut. To delikatny kompromis między liczbą naciśnięć a odległością przesuwania palca;)
Geobits
Czy dozwolone jest wejście / wyjście w # sekundach?
CalculatorFeline
2
Mój kolega jest tak leniwy, że nawet nie stara się poruszać palcem podczas programowania kuchenki mikrofalowej. Nie spodziewałam się nic więcej od kogoś pracującego w siedzibie Dyalog APL ... :)
Lynn

Odpowiedzi:

3

Galaretka, 26 bajtów

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

Wyjaśnienie:

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.

Wypróbuj online!

Lynn
źródło
2

JavaScript (ES6), 112 bajtów

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}

Korzysta z funkcji pomocnika, cktóra oblicza pięciokrotność rzeczywistej liczby upływających sekund.

Neil
źródło
1

Dyalog APL , 37 bajtów

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

⍳41 2 3 4 Tabela powtórzeń
⎕D„0123456789”
∘./⍨(jak tabliczka mnożenia, ale w której każda komórka zawiera B powtórzeń A zamiast A × B)
,ułóż tabelę w listę ciągów,
⍎¨zamień każdy ciąg w liczbę (teraz mamy listę wszystkich możliwych wyników.)
{}funkcja, w której argument jest reprezentowany przez
⎕⍵argument poprzedzony argumentem z monitem o wprowadzenie
(stosuje się do każdego z dwóch (argument i lista) ...
0 100∘⊤konwertuj na base-100
60⊥konwertuj z base-60
-/oblicz różnicę między dwoma
|absolutami wartość
lista wyciągów (ponieważ -/zawarto w niej wynik)
sort sort (nie sortuje, zwraca tylko kolejność umieszczania argumentów w celu osiągnięcia porządku rosnącego. Jeśli dwa elementy są równe, pozostają w bieżącej kolejności. Ponieważ nasza lista zawiera elementy o coraz większej długości, to dba o więzi.)
pierwszy, tzn. ten z najmniejszą bezwzględną różnicą od danych wejściowych, ⍵⊃⍨bierze ten element z listy argumentów (listy możliwych wyników)

Dzięki koledze, o którym mowa, za zgolenie jednego bajtu.


Uwaga: w momencie publikowania PO nie miałem żadnego rozwiązania.

Adám
źródło