Генерировать ленивый микроволновый вход

18

Связанный: Запрограммируйте мою микроволновую печь и Сгенерируйте ленивые ценности .

Мой коллега настолько ленив, что даже не пытается пошевелить пальцем при программировании микроволновой печи. (Это на самом деле правда!)

Помогите ему найти микроволновый вход, который дает время, ближайшее к тому, что он хочет, но где все цифры одинаковы. Если два входа дают одинаковую разницу во времени с требуемым временем, выберите тот, который содержит меньше цифр. Если у обоих одинаковое количество цифр, выберите меньшее, чтобы ему не пришлось ждать так долго.

Ввод - это целое число, которое вводит перфекционист, например 430, 4 минуты и 30 секунд, 100а 60каждый - 1 минута. Это будет больше 0 и не будет превышать 9999.

Выходные данные должны быть целыми числами, например 444, 4 минуты и 44 секунды и 5555 секунд.

И ввод, и вывод могут быть в простых секундах (без минут), если общее время меньше 1 минуты и 40 секунд.

Это , поэтому ваш код должен быть максимально коротким.

Тестовые случаи:

  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
Мне нравится полуленивый подход. Просто продолжайте нажимать кнопку «добавить 30 секунд», пока она не
появится
@Geobits Ужасно много прессов до 11:30. Во всяком случае, дело в том, что он использует метод, который я написал выше ... :-D
Адам
2
Да, я обычно просто набираю что-нибудь в течение нескольких минут. Это тонкий баланс между количеством нажатий и расстоянием между пальцами;)
Geobits
Разрешен ли ввод / вывод в # секунд?
CalculatorFeline
2
Мой коллега настолько ленив, что даже не пытается пошевелить пальцем при программировании микроволновой печи. Ничего не ожидал от кого-то, кто работает в штаб-квартире APL в Дьялоге ... :)
Линн,

Ответы:

3

Желе, 26 байт

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

Объяснение:

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.

Попробуйте онлайн!

Линн
источник
2

JavaScript (ES6), 112 байт

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}

Использует вспомогательную функцию, cкоторая в пять раз вычисляет фактическое количество прошедших секунд.

Нил
источник
1

Дьялог АПЛ , 37 байт

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

⍳41 2 3 4
⎕D«0123456789»
∘./⍨таблица повторений (как таблица умножения, но где каждая ячейка содержит B повторений A вместо A × B)
,превращает таблицу в список строк,
⍎¨превращает каждую строку в число (теперь у нас есть список из всех возможных результаты.)
{}функция, в которой аргумент представлен
⎕⍵предшествующим аргументом с запросом ввода
(применяется к каждому из двух (аргумент и список) ...
0 100∘⊤преобразовать в base-100
60⊥преобразовать из base-60
-/вычислить разницу между двумя
|абсолютными
список извлечения значений (потому что -/инкапсулировал его результат)
порядок сортировки (не сортирует, возвращает только порядок, в котором необходимо разместить аргументы для достижения возрастающего порядка. Если два элемента равны, они остаются в текущем порядке. Так как в нашем списке есть элементы увеличивающейся длины, это заботится о связях.)
первый, то есть тот, который имеет наименьшее абсолютное отличие от входных данных, ⍵⊃⍨берет этот элемент из списка аргументов (списка возможных результатов)

Спасибо коллеге за то, что он сбрил один байт.


Примечание: у меня не было никакого решения на момент публикации ОП.

Адам
источник