电影的易读长度,以人类可读的格式


24

每当我在IMDb中搜索电影的播放时长时,它就会以分钟为单位显示。我将立即尝试将其转换为小时和分钟。如果我们可以自动化它会更好。

输入:

150 min

输出:

2 hours 30 minutes

输入:

90 min

输出:

1 hour 30 minutes

输入:

61 min

输出:

1 hour 1 minute

输入:

60 min

输出:

1 hour 0 minute or 1 hour 0 minutes

以下是条件:

  1. 输入和输出应采用此确切格式。

  2. 输入分钟数将在0到240之间。

  3. 您的答案可以接受命令行参数,也可以读取用户或函数的输入。

  4. 输出不应包含在引号中。

  5. 输出必须打印,不能返回。

排行榜:

结果:

它是CJam和Pyth之间的纽带。在Pyth的35字节代码之前提交CJam的答案。但是,请继续鼓励新的提交。


2
@quintopia根据站点规则,不可以。您可以根据需要使用功能。
门把手

1
从技术上讲,我(和我打赌其他人)可以读“ 150分钟”。
PyRulez 2015年

1
为什么限制为> 59分钟?另外,我更喜欢61分钟而不是1小时1分钟,而我真的很讨厌看到1小时0分钟
markshancock 2015年

6
您将输入范围更改为0-240,但未包含任何小于60的测试用例。鉴于已经发布了28个答案,我建议坚持使用原始范围。
Alex A.

2
看来您还更改了整个小时的可接受输出。除非挑战中包含需要解决的重大问题,否则请勿对挑战进行更改以使现有答案无效。
Alex A.

Answers:


10

CJam,39 35字节

ri60md]"hour minute"S/.{1$1>'s*+}S*

在线尝试

最新版本包括@MartinBüttner建议的改进,尤其是使用逐元素矢量运算符而不是转置两个列表。

说明:

ri    Get input and convert to integer.
60md  Split into hours and minutes by calculating moddiv of input.
]     Wrap hours and minutes in a list.
"hour minute"
      String with units.
S/    Split it at spaces, giving ["hour" "minute"]
.{    Apply block element-wise to pair of vectors.
  1$    Copy number to top.
  1>    Check for greater than 1.
  's    Push 's.
  *     Multiply with comparison result, giving 's if greater 1, nothing otherwise.
  +     Concatenate optional 's with rest of string.
}     End block applied to both parts.
S*    Join with spaces.

1
35 :(ri60md]r"utehour"+6/W%.{1$1>'s*+}S*看起来像这样,您在这场挑战中可以领先):)
马丁·恩德

@MartinBüttner r"utehour"+6/W%实际上与的长度相同"hour minute"S/,因此该部分最终无济于事。我想我以前看过.使用块,但是我再次忘记了它的支持。
Reto Koradi 2015年

嗯,对,我首先发布了一个36字节的版本,该版本实际上起了作用(但是后来删除了注释,并用不再需要的35字节的版本替换了该注释)。
马丁·恩德

19

Python 3中,50 67 119 116 112 111个 104 94个字节

我不喜欢返回%样式字符串格式,但是它在上节省了6个字节.format

编辑:忘记解析输入。

编辑:忘记处理复数。

编辑:是 lambdas!

编辑:添加取消高尔夫

编辑:该死。Lambdas没有帮助。

编辑:由于分钟数最多三位数,并且int()不介意字符串中的空格,因此我可以使用来节省一些字节input()[:3]

i,j=divmod(int(input()[:3]),60);print(str(i),"hour"+("s"[:i!=1]),str(j),"minute"+("s"[:i!=1]))

取消高尔夫:

string = input()[:3]
hours, minutes = divmod(int(string), 60)
a = string(div)
b = "hour" + ("s" if hours == 1 else "")
c = string(mod)
d = "minute" + ("s" if minutes == 1 else "")
print(a, b, c, d)

22
啊! 增加字节数!+1(不放弃);-)
敏捷

9

JavaScript,78个字节

n=>(h=(n=parseInt(n))/60|0)+` hour${h-1?"s":""} ${m=n%60} minute`+(m-1?"s":"")
<!--                               Try the test suite below!                              --><strong id="bytecount" style="display:inline; font-size:32px; font-family:Helvetica"></strong><strong id="bytediff" style="display:inline; margin-left:10px; font-size:32px; font-family:Helvetica; color:lightgray"></strong><br><br><pre style="margin:0">Code:</pre><textarea id="textbox" style="margin-top:5px; margin-bottom:5px"></textarea><br><pre style="margin:0">Input:</pre><textarea id="inputbox" style="margin-top:5px; margin-bottom:5px"></textarea><br><button id="testbtn">Test!</button><button id="resetbtn">Reset</button><br><p><strong id="origheader" style="font-family:Helvetica; display:none">Original Code Output:</strong><p><div id="origoutput" style="margin-left:15px"></div><p><strong id="newheader" style="font-family:Helvetica; display:none">New Code Output:</strong><p><div id="newoutput" style="margin-left:15px"></div><script type="text/javascript" id="golfsnippet">var bytecount=document.getElementById("bytecount");var bytediff=document.getElementById("bytediff");var textbox=document.getElementById("textbox");var inputbox=document.getElementById("inputbox");var testbtn=document.getElementById("testbtn");var resetbtn=document.getElementById("resetbtn");var origheader=document.getElementById("origheader");var newheader=document.getElementById("newheader");var origoutput=document.getElementById("origoutput");var newoutput=document.getElementById("newoutput");textbox.style.width=inputbox.style.width=window.innerWidth-50+"px";var _originalCode=null;function getOriginalCode(){if(_originalCode!=null)return _originalCode;var allScripts=document.getElementsByTagName("script");for(var i=0;i<allScripts.length;i++){var script=allScripts[i];if(script.id!="golfsnippet"){originalCode=script.textContent.trim();return originalCode}}}function getNewCode(){return textbox.value.trim()}function getInput(){try{var inputText=inputbox.value.trim();var input=eval("["+inputText+"]");return input}catch(e){return null}}function setTextbox(s){textbox.value=s;onTextboxChange()}function setOutput(output,s){output.innerHTML=s}function addOutput(output,data){output.innerHTML+='<pre style="background-color:'+(data.type=="err"?"lightcoral":"lightgray")+'">'+escape(data.content)+"</pre>"}function getByteCount(s){return(new Blob([s],{encoding:"UTF-8",type:"text/plain;charset=UTF-8"})).size}function onTextboxChange(){var newLength=getByteCount(getNewCode());var oldLength=getByteCount(getOriginalCode());bytecount.innerHTML=newLength+" bytes";var diff=newLength-oldLength;if(diff>0){bytediff.innerHTML="(+"+diff+")";bytediff.style.color="lightcoral"}else if(diff<0){bytediff.innerHTML="("+diff+")";bytediff.style.color="lightgreen"}else{bytediff.innerHTML="("+diff+")";bytediff.style.color="lightgray"}}function onTestBtn(evt){origheader.style.display="inline";newheader.style.display="inline";setOutput(newoutput,"");setOutput(origoutput,"");var input=getInput();if(input===null){addOutput(origoutput,{type:"err",content:"Input is malformed. Using no input."});addOutput(newoutput,{type:"err",content:"Input is malformed. Using no input."});input=[]}doInterpret(getNewCode(),input,function(data){addOutput(newoutput,data)});doInterpret(getOriginalCode(),input,function(data){addOutput(origoutput,data)});evt.stopPropagation();return false}function onResetBtn(evt){setTextbox(getOriginalCode());origheader.style.display="none";newheader.style.display="none";setOutput(origoutput,"");setOutput(newoutput,"")}function escape(s){return s.toString().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}window.alert=function(){};window.prompt=function(){};function doInterpret(code,input,cb){var workerCode=interpret.toString()+";function stdout(s){ self.postMessage( {'type': 'out', 'content': s} ); }"+" function stderr(s){ self.postMessage( {'type': 'err', 'content': s} ); }"+" function kill(){ self.close(); }"+" self.addEventListener('message', function(msg){ interpret(msg.data.code, msg.data.input); });";var interpreter=new Worker(URL.createObjectURL(new Blob([workerCode])));interpreter.addEventListener("message",function(msg){cb(msg.data)});interpreter.postMessage({"code":code,"input":input});setTimeout(function(){interpreter.terminate()},1E4)}setTimeout(function(){getOriginalCode();textbox.addEventListener("input",onTextboxChange);testbtn.addEventListener("click",onTestBtn);resetbtn.addEventListener("click",onResetBtn);setTextbox(getOriginalCode())},100);function interpret(code,input){window={};alert=function(s){stdout(s)};window.alert=alert;console.log=alert;prompt=function(s){if(input.length<1)stderr("not enough input");else{var nextInput=input[0];input=input.slice(1);return nextInput.toString()}};window.prompt=prompt;(function(){try{var evalResult=eval(code);if(typeof evalResult=="function"){var callResult=evalResult.apply(this,input);if(typeof callResult!="undefined")stdout(callResult)}}catch(e){stderr(e.message)}})()};</script>

对于测试套件,"61 min"在输入框中输入类似的输入。


说明

n=>                 //Define anonymous function w/ parameter n
(h=                 //start building the string to return with h, the # of hours
(n=parseInt(n))     //parse input for n
/60|0)+             //set h to floor(n / 60)
` hour              //add ' hour' to the string to return
${h-1?"s":""}       //add 's' to the string to return if h != 1, else add ''
                    //<--(a single space) add ' ' to the string to return
${m=n%60}           //set m, the # of miuntes, to n % 60, and add it to the string to return
 minute`+           //add ' minute' to the string to return
(m-1?"s":"")        //add 's' to the string to return if m != 1, else add ''
                    //implicitly return

好一个 意见建议:减少parseInt(n)+n
nicael

1
输入将不仅仅是一个整数。当我提供输入作为时,它将失败150 min
Vasu Adari

1
@VasuAdari,它正在为我工​​作,输出2 hours 30 minutes。请问您如何测试?
jrich

3
@ ev3commander使用测试代码段时,请将输入内容括在引号中,以便将其识别为字符串。例如"61 min"'61 min'
jrich,2015年

1
+1对于JavaScript。现在,你只需要使它成为一个bookmarlet ;)
MayorMonty


5

Vitsy57 54 52字节

哦,哇,我的语言甚至都没有整数。OO

VVa6*Dv/D1M-D1m'ruoh 'Z' 'OVvM1m'etunim 'Z
N1-(['s']
VV                                      Capture the input as a final global 
                                        variable, and push it again.
  a6*Dv/1M-                             Get floor(input/60), capturing 60 as a 
                                        temp variable in the process.
           DN                           Duplicate and output it as a number.
             1-(['s']                   If it is only one, push 's'.

            'ruoh '                     Push ' hour'
                   Z                    Output everything.
                    ' 'O                Output a space.
V                                       Push the input.
 v                                      Get the temp variable (60).
  M                                     Modulo.
            N                           Output as a number.
             1-(['s']                   If it is only one, push 's'.

             'ruoh '                    Push ' hour'
                    Z                   Output everything.

在线尝试!


4

K5,55 51个字节的

" "/(" hour";" minute"){y,x,("s";"")1=.y}'$25 60\.*" "\

这比严格要求的要笼统。可能仍会进一步打下去。

实际上:

  f: " "/(" hour";" minute"){y,x,("s";"")1=.y}'$25 60\.*" "\;

  f'("61 min";"120 min";"150 min")
("1 hour 1 minute"
 "2 hours 0 minutes"
 "2 hours 30 minutes")

编辑:

该程序在开发过程中经历了几次非常不同的迭代,我认为显示一些中间步骤可能会更有启发性。

在引入多元化要求之前,这是我对这个问题的第一次尝试。这里有明显的重复:

{($_x%60)," hours ",($_60!x)," minutes"}@.*" "\

我意识到处理投出地点的一般方法是K5的“解码”形式。为了将值放入字符串中,我使用了“ dot-apply”原语,该原语将参数列表应用于函数并将列表解压缩为各个参数:

{x," hours ",y," minutes"}.$25 60\.*" "\

这里没有太多冗余。添加复数后,我将领先的匿名函数分解为可以应用于每个数字的转换,如下所示:

{x,y,("s";"")1=.x}

连接xy和,s或不连接,取决于是否x等于“ 1”。最终,将参数的顺序颠倒到此函数的效果更好。

编辑2:

" "/(" hour";" minute"){y,x,("s";"")1=.y}'$25 60\.*" "\
" "/(" hour";" minute"){y,x,(~1=.y)#"s"}'$5 60\.-4_

这里有几个小改进。选择“ s”或空字符串的更好方法,“ decode”的常数较短,反映了有限的输入范围,而丢弃“ min”的方法更简单。


4

Pyth,46个字节

jKdm++J.v+++hd:z03K60K+td*\s>J1c"/hour %minute

将输入作为x min输出x hours y minutes

在这里尝试

说明:

   m~~~~~~~~~~~~~~~~~~~~~~~~~~~c"/hour %minute - map(func, "/hour %minute".split(" "))
            hd                                 - Get the first character of the string (/ or %)
              :z03                             - Get the first 3 characters of input
         +++      K60                          - Join them together and add a space and 60 to the end
      J.v                                      - Evaluate it and set result to J
                       td                      - Get all the characters of the string but the first (hour, minute)
                      +  *\s>J1                - If the result of the evaluated expression is less than 1, add an 's' character to the string
    ++               K                         - Join the results seperated with a space
jKd                                            - Join the 2 halves together with a space

3

Perl 6的80 73个字节

80字节原始

{my$h=$_ div 60;my$m=$_%60;"$h hour{'s'x?($h-1)}"~" $m minute{'s'x?($m-1)}"x?$m}

用法:

.say for (150,90,61,60).map:
  {my$h=$_ div 60;my$m=$_%60;"$h hour{'s'x?($h-1)}"~" $m minute{'s'x?($m-1)}"x?$m}
2 hours 30 minutes
1 hour 30 minutes
1 hour 1 minute
1 hour

由于问题的变化,我可以x?$m从函数末尾删除,这使我可以再减少3个字节。

{my$h=$_ div 60;my$m=$_%60;"$h hour{'s'x?($h-1)} $m minute{'s'x?($m-1)}"}
2 hours 30 minutes
1 hour 30 minutes
1 hour 1 minute
1 hour 0 minutes

3

JavaScript(ES6),100 94 89 81字节

t=>(h=0|(t=parseInt(t))/60)+' hour'+(h>1?'s ':' ')+t%60+' minute'+(t%60>1?'s':'')

脱机演示(已转换为ES5,因为并非所有浏览器都支持ES6)

function s(t) {
  return (h = 0 | (t = parseInt(t)) / 60) + ' hour' + (h > 1 ? 's ' : ' ') + t % 60 + ' minute' + (t % 60 > 1 ? 's' : '');
}

alert(s(prompt()))


你可以包装t=parseInt(t)和括号,然后把那个在任何你第一次使用t这样:(h=0|(t=parseInt(t))/60)。这样,您可以删除收益和{}
Downgoat

@Downgoat我已经尝试过了,但是由于某种原因它没有起作用。会再试一次。
nicael

1
@Downgoat显然我以前犯了一个错误,现在它可以正常工作了。谢谢:)
nicael

使用模板字符串。$ {} !!!
Mama Fun Roll 2015年

3

C#,127个字节

var i=int.Parse(Console.ReadLine().Split(' ')[0]);Console.Write(i/60+" hour"+(i/60>1?"s ":" ")+i%60+" minute"+(i%60>1?"s":""));

可以将其放入文件中,并使用默认配置通过Mono随附的C#交互式外壳运行。

[这是我第一次尝试打高尔夫。我希望我的贡献不会违反任何规则。]


3

C,89字节

main(n){scanf("%d",&n);printf("%d hour%s %d minute%s",n/60,"s"+119/n,n%60,"s"+(n%60<2));}

3

Ruby,75个字节

a,b=gets.to_i.divmod 60;$><<"#{a} hour#{a>1??s:''} #{b} minute#{b>1??s:''}"

有时,即使是空字符串也太长。''p
manatwork

2

MATLAB,111108106字节

i=sscanf(input(''),'%d');h=fix(i/60);m=i-h*60;fprintf('%d hour%c %d minute%c\n',h,'s'*(h~=1),m,'s'*(m~=1))

这也适用于Octave,可以在这里尝试。链接指向一个工作区,该工作区已经包含名为的文件中的代码runningLength.m。因此,要进行测试,只需runningLength在提示符下输入,然后输入输入字符串,例如'123 mins'它将显示输出。

将输入作为字符串,例如'123 mins',将其转换为数字(隐式忽略该mins位)。

i=sscanf(input(''),'%d');

然后计算分钟和小时

h=fix(i/60);m=i-h*60;

然后显示输出字符串

fprintf('%d hour%c %d minute%c',h,'s'*(h~=1),m,'s'*(m~=1));

计算并正确处理了输出的“ s”位-每当数字不为1时都会添加“ s”。


2

Python 2,96字节

i=int(raw_input().split()[0])
print"%d hour%s %d minute%s"%(i/60,"s"*(i>120),i%60,"s"*(i%60!=1))

7
这似乎不能正确处理复数。
门把手

@Doorknob这是在发布答案后更改规则时发生的事情:)
quintopia

2

Haskell,117 109字节

f x|(d,m)<-divMod(read$take 3 x)60=putStr$u[d#"hour",m#"minute"];u=unwords;1#q=u["1",q];p#q=u[show p,q++"s"]

少打高尔夫球的版本:

f :: String -> IO ()
f x = putStr (unwords [(n`div`60)#"hour",(n`mod`60)#"minute"])
  where
  n :: Int
  n = take 3 (read x)

  (#) :: Int -> String -> String
  1#q = unwords ["1",q]
  p#q = unwords [show p,q++"s"]

f是一个函数,它将输入的前三个字符转换为整数。 p#q是一个函数,q如果p不等于1,该函数将复数。为了返回不带引号的结果,我通常putStr将结果打印到STDOUT。

感谢妮米的帮助!


2

Python 2,79 77字节

m=int(raw_input()[:3])
print m/60,"hours"[:4+m/120],m%60,"minutes"[:6+m/2%30]

输入的前3个字符被简单地解析为整数。这仅起作用,因为两位数输入中的第三个字符是空格,int在转换期间将忽略该空格。


我认为您可以这样做"hour"+m/120*"s",而且几分钟也可以。
xnor 2015年

m=240不幸的是,它将失败。
xsot

2

LabVIEW,50字节

这是根据我对Meta的建议计算的。

该代码非常简单,将输入Modulo的数字减去60,然后在s处加上分钟!= 1。

在此处输入图片说明


2

Scala,135个字节

var a=(i:String)=>{var (v,b)=(i.split(" ")(0).toInt,(i:Int)=>if(i<2)""else"s");printf(v/60+" hour"+b(v/60)+" "+v%60+" minute"+b(v%60))}

用法:

a("120 min")
2 hours 0 minute

2

哈斯克尔, 107 101字节

g=putStr.f.read.take 3;s!1='1':s;s!n=show n++s++"s";f x|(a,b)<-divMod x 60=" hour"!a++' ':" minute"!b

取消高尔夫:

g :: String -> String
g = putStr . f . read . take 3 
  where
    (!) :: String -> Int -> String
    s!1 = '1':s
    s!n = show n++s++"s"

    f :: Int -> String;
    f x
      | (a,b) <- divMod x 60 = " hour"!a ++ ' ':(" minute"!b)

s!n预规划ns,加入's'到如果端n /= 1

f x使用后进行格式化divMod

既然我们可以假设的最大输入240take 3足以只需要数。

(不得不努力击败@Craig Roy的成绩...)


2

R,112字节

编辑:修复了范围界定错误,然后解决了报价输出问题。

g=function(x){h=floor(x/60);m=x%%60;cat(paste(h,ifelse(h==1,"hour","hours"),m,ifelse(m==1,"minute","minutes")))}

测试用例

> g(150)
2 hours 30 minutes
> g(90)
1 hour 30 minutes
> g(61)
1 hour 1 minute
> g(60)
1 hour 0 minutes

我试图通过设法找到一种必要的方式来增加或减少“ s”,从而节省了空间,但是我不得不弄乱sep =函数中的paste()参数,这似乎并没有为我节省很多空间。有什么建议么?

不打高尔夫球

g=function(x){
    h=floor(x/60);
    m=x%%60;
    cat(paste(h,
              ifelse(h==1,"hour","hours"),
              m,
              ifelse(m==1,"minute","minutes")))
}

用input / 60或input %% 60(mod)四舍五入分别给出小时和分钟。用一条ifelse()语句将它们链接在一起,该语句指定单位是小时还是分钟。


输出不应包含在引号中。
Vasu Adari

@Vasu Adari使用cat()功能修复了该问题。
syntonicC 2015年

1
您可以通过用just处理复数s 并更改条件来节省字节 。
Vasu Adari 2015年

1

Ruby,97 100 99 88字节

编辑:固定输出。

编辑:从中删除大括号divmod

编辑:是的字符串插值!感谢Vasu Adari。此外,更好的解球。

i,j=gets.split[0].to_i.divmod 60;puts"#{i} hour#{i==1?"":"s"} #{j} minute#{j==1?"":"s"}"

取消高尔夫:

input = gets                            Input
number = input.split[0].to_i            Get number, convert to int
hours, minutes = number.divmod 60       hours == s / 60, minutes == s % 60
result = hours.to_s+" hour"             Start with the hours
result += {hours == 1 ? "" : "s"}       Put in the first "s" if plural
result += minutes.to_s+" minute"        Add the minutes
result += {minutes == 1 ? "" : "s"}     Put in the second "s" if plural
puts result                             Output

o / p不应包含在引号内。
Vasu Adari

@VasuAdari固定
Sherlock9年9

您可能会失去divmod方法的花括号。同样,通过使用字符串插值,您可以节省一些字节。
Vasu Adari

@VasuAdari我知道字符串迭代是一回事,但我不确定它是什么或如何工作。感谢您的帮助
Sherlock9 2015年

@VasuAdari糟糕,等等。Google教会了我我需要知道的内容。让我开始编辑。
Sherlock15年

1

Go,177字节

(它仅包含函数和导入语句)

import("fmt";c"strconv";t"strings")
func f(s string){p,_:=c.Atoi(t.Split(s," ")[0]);t:=fmt.Printf;h:=p/60;m:=p%60;t("%d Hour",h);if h>1{t("s")};t(" %d Minute",m);if m>1{t("s")}}

漂亮的解决方案-

func f(s string) {
    p, _ := c.Atoi(t.Split(s, " ")[0])
    t := fmt.Printf
    h := p / 60;m := p % 60
    t("%d Hour", h)
    if h > 1 {
        t("s")
    }
    t(" %d Minute", m)
    if m > 1 {
        t("s")
    }
}

测试-

func main() {
    ip_list := []string{
        "120 min",
        "150 min",
        "60 min",
    }

    for _, ip_val := range ip_list {
        f(ip_val)
        fmt.Println("")
    }
}

/* OUTPUT
2 Hours 0 Minute
2 Hours 30 Minutes
1 Hour 0 Minute
*/


1

AutoHotkey的174个 170 160字节

x::Send,% !i?"x" i:=SubStr(clipboard,1,(Clipboard~="\s")):"{Backspace "StrLen(i)"}" i//60 " Hour"(i//60!=1?"s ":" ")Mod(i,60)" Minute"(Mod(i,60)!=1?"s":"")i:=""

笔记:

  1. 剪贴板输入
  2. 按下可将打印输出到任何形式 x
  3. 正确处理复数
  4. 可以更小一些,但我想提供一个内衬。

1

PHP,77 76字节

$m=($i=$argv[1])%60;echo$h=$i/60|0," hour","s"[$h<2]," $m minute","s"[$m<2];

太棒了,太棒了!
PHP仅对发出几个Notices"s"[$h<2]

要运行:php -r 'CODE' '150 minutes'
当然要从标准输出关闭/关闭错误报告!

编辑:在分配中分配了-1个字节(分配:此处为insertusername)

太丑了,我必须为Linux用户提供一个运行助手:

php -c /usr/share/php5/php.ini-production.cli -r 'CODE' '61 min'

1个字节$m=($i=$argv[1])%60;echo$h=$i/60|0," hour","s"[$h<2]," $m minute","s"[$m<2];
2015年

@insertusername这里很好,谢谢!疯狂
CSᵠ

别客气。即使是4个字节较小(太累了,昨天的通知)$m=($i=$argv[1])%60;echo$h=$i/60|0," hour",s[$h<2]," $m minute",s[$m<2];
2015年

@insertusernamehere这是一个非常讨厌的旧人,但不能认为它适用于PHP 5.6-7而不是为5.3-5.5
CSᵠ

我已经使用PHP 5.6.10(OS X)对其进行了测试,并且可以在此处使用。:)
2015年

1

Arcyóu(非竞争性),93个字节

该提交使用的是此挑战后创建的语言版本。

(: x(#((v(l))0)))(: h(#/ x 60))(: m(% x 60))(% "%d hour%s %d minute%s"(' h(* s([ h))m(* s([ m

!此语言需要更好的字符串操作。

说明:

(: x              ; Set x
  (#              ; Cast to int
    ((v (l)) 0))) ; First element of input split on spaces
(: h (#/ x 60))   ; Set h to the hours
(: m (% x 60))    ; Set m to the minutes
(%                ; String format
  "%d hour%s %d minute%s"
  ('              ; List
    h             ; Hours
    (* s([ h))    ; Evaluates to 's' if h is not 1
    m             ; Minutes 
    (* s([ m      ; Evaluates to 's' is m is not 1

1

Ruby,74 73 71字节

->i{puts"#{i=i.to_i;h=i/60} hour#{h>1??s:''} #{m=i%60} minute#{m>1??s:''}"}

73字节

->i{puts"#{h,m=i.to_i.divmod 60;h} hour#{h>1??s:''} #{m} minute#{m>1??s:''}"}

74个字节:

->i{h,m=i.to_i.divmod 60;puts "#{h} hour#{h>1??s:''} #{m} minute#{m>1??s:''}"}

用法:

->i{puts"#{i=i.to_i;h=i/60} hour#{h>1??s:''} #{m=i%60} minute#{m>1??s:''}"}[61]

1 hour 1 minute

1

Kotlin,132个字节

val m={s:String->val j=s.split(" ")[0].toInt();print("${j/60} hour${if(j/60==1)"" else "s"} ${j%60} minute"+if(j%60==1)"" else "s")}

非高尔夫版本:

val m = { s: String -> 
    val j = s.split(" ")[0].toInt();
    print("${j / 60} hour${if(j / 60 == 1) "" else "s"} ${j % 60} minute" + if(j % 60 == 1) "" else "s")
}

用以下方法进行测试:

fun main(args: Array<String>) {
    for(i in arrayOf(150, 90, 61, 60)) {
        m("$i min")
        println()
    }
}

输出示例:

2 hours 30 minutes
1 hour 30 minutes
1 hour 1 minute
1 hour 0 minutes

1
欢迎来到PPCG.SE!我对您的帖子进行了编辑,使它看起来更加美观。玩得开心!
GamrCorps,2015年

1

认真地,77个字节

ε" min",Æ≈;:60:@\@:60:@%'sε(;)1≥I"%d hour"+(#@%'sε(;)1≥I"%d minute"+(#@%@k' j

严重严重不擅长字符串操作。在线尝试完整说明(您需要手动输入输入内容,"210 mins"因为永久链接不喜欢引号)。

快速而肮脏的解释:

ε" min",Æ≈            get input, replace " min" with the empty string, convert to int
;:60:@\@:60:@%        calculate divmod
'sε(;)1≥I"%d hour"+   push "%d hour" or "%d hours", depending on whether pluralization is needed
(#@%                  format "%d hour(s)" with the # of hours calculated earlier
'sε(;)1≥I"%d minute"+ same as above, but with minutes
(#@%                  same as above, but with minutes
@k' j                 swap the order and join with a space to get "X hour(s) X minute(s)"

您的链接不起作用
TanMath

1

Java 8,148字节

interface S{static void main(String[]b){int a=new Integer(b[0]),h=a/60,m=a%60;System.out.printf(h+" hour%s "+m+" minute%s",h>1?"s":"",m>1?"s":"");}}

我选择发布@TheAustralianBirdEatingLouse的替代方法,因为它不仅缩短了很多时间(〜10%),而且在打印小时和分钟上也更正确,而不是缩写小时和分钟。接口中的方法实现是Java 8的新增功能-因此需要编译/运行

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.