首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的微波炉要用多久?

我的微波炉要用多久?
EN

Code Golf用户
提问于 2021-12-06 13:16:21
回答 6查看 2.6K关注 0票数 14

按照奇怪的厨房用具的主题,让我们谈谈我的微波炉。

Introduction

我的微波炉有一个键盘,布局如下:

代码语言:javascript
复制
30  >  15
1   2   3
4   5   6
7   8   9
+/- 0 S/M
  • 我可以按+/-和S/M键在加减分钟或秒之间切换。
  • 微波以添加分钟模式启动。
  • 0-9键加或减1-10分钟/秒到时间(0加10)。
  • 30和15键总是加或减30或15秒。
  • >键开启微波炉.
  • 时间不能低于0秒。

示例

如果我按下0 3 +/- 15 S/M 4 >,我会用微波炉加热我的食物12分钟41秒:

  1. 0:加10分钟
  2. 3:加3分钟
  3. +/-:切换到减法模式
  4. 15:减去15秒
  5. S/M:切换到秒
  6. 4:减去4秒
  7. 启动微波炉

其他测试用例:

  • 0 3 +/- 15 S/M 4 S/M 1 S/M +/- 0 S/M 7 -/+ 30 > = 1101

挑战

给我写一个程序,以按钮按下的字符串作为输入(分离器不重要),并输出我的微波炉运行多长时间(以秒计)。这是代码-高尔夫,所以最短的字节代码获胜!

按钮码

这些是您的程序应该接受的按钮代码:(我应该能够准确地输入这些字符串):

  • 0 1 2 3 4 5 6 7 8 9 (0等于10)
  • 30
  • 15
  • +/-
  • S/M
  • >
EN

回答 6

Code Golf用户

发布于 2021-12-06 16:03:22

JavaScript (ES6),68字节

期望命令列表。返回数秒。假设最后一个命令是>,如注释中所述。

代码语言:javascript
复制
a=>a.map(c=>1/c?t+=s*(+c||10)*(c>9|a||60):c<','?s=-s:a^=1,t=0,s=1)|t

在网上试试!

评论

代码语言:javascript
复制
a =>               // a[] = input array, reused as a flag to figure out
                   //       if we are in 'seconds' mode
a.map(c =>         // for each command c in a[]:
  1 / c ?          //   if c is numerical:
    t +=           //     add to t:
      s *          //       the sign multiplied by
      (+c || 10) * //       either c, or 10 if c is 0
      (            //       multiplied by
        c > 9      //       1 if c is 15 or 30
        | a        //       or we are in seconds mode
        || 60      //       otherwise 60
      )            //
  :                //   else:
    c < ',' ?      //     if c is '+/-':
      s = -s       //       invert the sign
    :              //     else:
      a ^= 1,      //       switch between 'seconds' and 'minutes' mode
                   //       (c is either 'S/M' or '>')
  t = 0,           //   start with t = 0
  s = 1            //   start in 'add' mode
) | t              // end of map(); return t
票数 4
EN

Code Golf用户

发布于 2021-12-06 20:49:38

批处理,192个字节

代码语言:javascript
复制
@set/at=0,s=1,m=60
:l
@set/pb=
@if "%b%"==">" echo %t%&exit/b
@if %b%==+/- set/as=-s
@if %b%==S/M set/am=60/m
@if %b%==0 set b=10
@if %b% gtr 10 (set/at+=s*b)else set/at+=s*m*b
@goto l

在STDIN上接受以新行结尾的输入,因为在命令行上使用>是很棘手的.解释:

代码语言:javascript
复制
@set/at=0,s=1,m=60

初始化总数并签名和分钟标志。

代码语言:javascript
复制
:l

开始循环。

代码语言:javascript
复制
@set/pb=

读入下一个按钮。

代码语言:javascript
复制
@if "%b%"==">" echo %t%&exit/b

如果这是>按钮,则输出总计和完成。

代码语言:javascript
复制
@if %b%==+/- set/as=-s
@if %b%==S/M set/am=60/m

更新+/-S/M按钮的标志。

代码语言:javascript
复制
@if %b%==0 set b=10

0算作10

代码语言:javascript
复制
@if %b% gtr 10 (set/at+=s*b)else set/at+=s*m*b
@goto l

更新秒数并返回循环。请注意,非数字字符串静默地计算为0,从而使整个字符串不受干扰。

票数 4
EN

Code Golf用户

发布于 2021-12-07 06:52:17

Python 3,112个字节

代码语言:javascript
复制
c=60
t=0
for k in input().split():
	try:t+=c*int(k)/abs(c)**~-len(k)or 10*c
	except:c=(k>'0')*60/c or-c
print(t)

在网上试试!

票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/238134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档