Codegolf — Генерировать Ленивый Микроволновый Ввод

  • Автор темы Levtov
  • Обновлено
  • 22, Oct 2024
  • #1

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

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

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

Входные данные — это целое число, которое ввел бы перфекционист, например.

   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
 
is 4 minutes and 30 seconds while 55 и 444 each is 1 minute. It will be greater than 0 and will not exceed 9999.

Вывод должен быть целым числом, например. 60 is 4 minutes and 44 seconds and 100 составляет 55 секунд.

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

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

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

430

#код-гольф #код-гольф #номер #дата

Levtov


Рег
21 Mar, 2020

Тем
77

Постов
184

Баллов
579
  • 26, Oct 2024
  • #3

JavaScript (ES6), 112 байт

Использует вспомогательную функцию -/ which calculates five times the actual number of elapsed seconds.

 

Mayflower


Рег
20 May, 2006

Тем
66

Постов
188

Баллов
548
  • 26, Oct 2024
  • #4

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

| 1 2 3 4
-/ "0123456789"
60⊥ repetition table (like a multiplication table, but where each cell contains B repetitions of A instead of A×B)
0 100∘⊤ make table into list of strings
make each string into number (Now we have a list off all possible results.)
(⎕⍵ функция, где аргумент представлен
} precede argument with prompted input
{⍎¨ применить к каждому из двух (аргумент и список)...
, convert to base-100
∘./⍨ convert from base-60
⎕D calculate the difference between the two
⍳4 absolute value
{⍵⊃⍨⊃⍋⊃|-/(60⊥0 100∘⊤)¨⎕⍵}⍎¨,⎕D∘./⍨⍳4 extract list (because c инкапсулировал свой результат)
n=>{c=n=>n*3+n0*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} sort order (Does not sort, only returns the order in which to place the arguments to achieve ascending order. If two elements are equal, they stay in current order. Since our list has elements of increasing length, this takes care of ties.)
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. the first one, i.e. the one with smallest absolute difference from the input bȷ2ḅ60 ³ÇạÇ, 9Rẋ€4R¤ḌFÇ€ṂṪ возьмите этот элемент из списка аргументов (список возможных результатов)

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


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

 

Neovo


Рег
03 May, 2006

Тем
73

Постов
199

Баллов
604
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно