产生惰性微波输入


18

相关:对我的微波炉编程生成惰性值

我的同事是如此懒惰,以至于在编程微波炉时他甚至都不想动手指。(实际上是这样!)

帮助他找到最接近他想要的时间的微波输入,但是所有数字都相同。如果两个输入导致与所需时间的时差相同,请选择一个数字少的输入。如果两者的位数相同,则选择较小的数字-这样他就不必等待那么长时间。

输入是完美主义者将输入的整数,例如4304分钟30秒,10060每一个都是1分钟。它将大于0且不超过9999。

输出必须为整数,例如4444分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秒”按钮,直到它出现为止:D
Geobits,2016年

@Geobits直到11:30为止,很多新闻。无论如何,事实是,他用我上面... :-D写的方法
亚当

2
是的,我通常会在几分钟内输入任何内容。这是按压次数和手指移动距离之间的微妙权衡;)
Geobits,2016年

是否允许输入/输出以秒为单位?
CalculatorFeline

2
我的同事是如此懒惰,以至于在编程微波炉时他甚至都不用动手指。没想到在Dyalog APL总部工作的人会再等... :)
林恩

Answers:


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

Dyalog APL,37个字节

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

⍳41 2 3 4
⎕D“ 0123456789”
∘./⍨重复表(类似于乘法表,但是每个单元格包含A的B个重复而不是A×B的重复)
,使表成为字符串列表,
⍎¨使每个字符串都变为数字(现在我们列出了所有可能的列表)结果。)
{}函数由
⎕⍵带有提示输入的在先参数表示的参数
(应用于两个参数(参数和列表)中的每一个…
0 100∘⊤转换为base-100
60⊥从base-60转换
-/计算两个
|绝对值之间的差值
提取列表(因为-/封装了其结果)
排序顺序(不排序,仅返回放置参数以实现升序的顺序。如果两个元素相等,则它们保持当前顺序。由于我们的列表中元素的长度不断增加,因此需要注意联系。)
第一个,即与输入绝对差最小的 ⍵⊃⍨那个,从参数列表(可能结果的列表)中获取该元素

感谢有问题的同事削减了一个字节。


注意:发布OP时,我没有任何解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.