Створюйте ледачий мікрохвильовий вхід


18

Пов'язане: Програмуйте мою мікрохвильову піч та створіть ліниві значення .

Мій колега настільки лінивий, що навіть не намагається рухати пальцем при програмуванні мікрохвильової печі. (Це насправді так!)

Допоможіть йому знайти мікрохвильовий вхід, який дає час, найближчий до того, що він хоче, але де всі цифри однакові. Якщо два входи призводять до однакової різниці в часі від бажаного часу, виберіть той, який має менше цифр. Якщо обидва мають однакову кількість цифр, виберіть меншу - так що йому не доведеться чекати так довго.

Вхід - це ціле число, яке введе перфекціоніст, наприклад, 430це 4 хвилини та 30 секунд, 100а 60кожен - 1 хвилина. Він буде більшим за 0 і не перевищить 9999.

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

І вхід, і вихід можуть бути лише за кілька секунд (без хвилин), якщо загальний час не перевищує 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 сек", поки вона не з’явиться: D
Geobits

@Geobits Жахлива кількість натискань до 11:30. У всякому разі, факт полягає в тому, що він використовує метод, про який я писав вище ... :-D
Adám

2
Так, зазвичай я просто набираю його протягом декількох хвилин. Це делікатний компроміс між кількістю натискань та дистанцією, що проходить пальцем;)
Геобіт

Чи дозволено введення / виведення за # секунд?
CalculatorFeline

2
Мій колега настільки лінивий, що навіть не намагається рухати пальцем при програмуванні мікрохвильової печі. Не очікував нічого від того, хто працює у штаб-квартирі Dyalog 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

Діалог APL , 37 байт

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

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

Дякую колезі, що йдеться, за те, що поголив один байт.


Примітка: На момент публікації ОП у мене не було рішення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.