사람이 읽을 수있는 형식으로 영화의 길이


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 사이트 규칙에 따라 아니오. 원하는 경우 기능을 사용할 수 있습니다.
Doorknob

1
기술적으로, 나는 (그리고 다른 사람들에게 내기를 걸었다) "150 분"을 읽을 수있다.
PyRulez

1
왜> 59 분으로 제한합니까? 또한, 나는 61 분에서 1 시간 1 분을 선호하고 실제로 1 시간 0 분을 보는 것을 싫어합니다
markshancock

6
입력 범위를 0-240으로 변경했지만 60보다 작은 테스트 사례는 포함하지 않았습니다. 28 개의 답변이 이미 게시되어 있으므로 원래 범위를 고수하는 것이 좋습니다.
Alex A.

2
전체 시간 동안 허용되는 출력도 변경 한 것으로 보입니다. 문제를 해결 해야하는 문제가 해결 되지 않으면 기존 답변을 무효화하는 문제를 변경하지 마십시오.
Alex A.

답변:


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*(이것이 당신에게이 도전에 대한 확실한
Martin Ender

@ MartinBüttner의 r"utehour"+6/W%길이는 실제로와 동일 "hour minute"S/하므로 부분이 도움이되지 않습니다. 나는 .이전에 블록과 함께 사용 된 것을 보았지만 그것이 지원되었다는 것을 다시 잊어 버렸습니다.
레토 코라디

아, 맞아, 나는 실제로 도움이되는 36 바이트 버전을 게시했다 (그러나 주석을 삭제하고 더 이상 중요하지 않은 35 바이트 버전으로 대체했다).
Martin Ender

19

파이썬 3 50 67 119 116 112 111 104 94 바이트

%스타일 문자열 형식으로 돌아가는 것을 좋아하지 않지만 6 바이트를 절약합니다 .format.

편집 : 입력 구문 분석을 잊었습니다.

편집 : 복수를 처리하는 것을 잊었습니다.

편집 : 예 람다!

편집 : 언 골프 추가

편집 : Darn it. 람다는 도움이되지 않았습니다.

편집 : 분은 최대 3 자릿수를 가지며 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 ;-)
agtoever

9

자바 스크립트, 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

1
JavaScript의 경우 +1 이제 당신은 그것을 bookmarlet 으로 만들어야합니다 ;)
MayorMonty

6

Pyth, 39 38 바이트

jd.iJ.Dv-zG60+Vc"hour minute")m*\s>d1J

5

Vitsy , 57 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}

가입하지 x, y그리고 두 s여부에 따라, 또는 아무것도 xIS가 "1"로 동일. 궁극적 으로이 함수의 인수 순서를 반대로하는 것이 좋습니다.

편집 2 :

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

몇 가지 작은 개선 사항이 있습니다. "s"또는 빈 문자열을 선택하는 더 좋은 방법, 제한된 입력 범위를 반영하는 "디코딩"의 짧은 상수 및 "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

펄 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

자바 스크립트 (ES6), 100 94 89 81 바이트

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

디 골프 데모 (모든 브라우저가 아직 ES6를 지원하지는 않으므로 ES5로 변환)

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

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

루비, 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

파이썬 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

이 @Doorknob 규칙이 답변이 게시 된 후 : 변경 얻을 때 발생하는 것입니다
quintopia

2

하스켈, 117109 바이트

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입력의 처음 3자를 가져 와서 정수로 변환하는 함수입니다. 1과 같지 않은 경우 p#q복수형 함수입니다 . 따옴표없이 결과를 반환하기 위해 STDOUT에 결과를 인쇄하는 데 사용 했습니다.qpputStr

도움을 주신 nimi에게 감사드립니다!


2

파이썬 2, 79 77 바이트

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

입력의 처음 3자는 정수로 구문 분석됩니다. 이것은 2 자리 입력의 세 번째 문자가 공백이므로 int변환 중에 무시 되기 때문에 작동합니다 .


나는 당신이 몇 "hour"+m/120*"s"분 동안 할 수 있다고 생각합니다 .
xnor

m=240불행히도에 실패합니다 .
xsot

2

LabVIEW, 50 바이트

이것은 메타 에 대한 나의 제안에 따라 계산됩니다 .

코드는 매우 간단하며 입력 Modulo에서 60만큼 숫자를 가져 와서 s를 몇 분 동안 추가하십시오! = 1. 케이스의 다른면은 문자열을 통과시킵니다.

여기에 이미지 설명을 입력하십시오


2

스칼라, 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앞에 추가는 n하는 s하는 추가 's'하면 끝 n /= 1.

f x를 사용한 후 서식을 지정 divMod합니다.

우리의 최대 입력을 가정 할 수 있기 때문에 240, take 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

1
복수를 처리 s 하고 조건을 변경하여 바이트를 절약 할 수 있습니다 .
Vasu Adari

1

루비, 97 100 99 88 바이트

편집 : 출력 수정.

편집 : 에서 중괄호 제거 divmod.

편집 : 예이 문자열 보간! Vasu Adari 에게 감사합니다 . 또한 더 나은 ungolfing.

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

divmod메소드 의 중괄호를 잃을 수 있습니다 . 또한 문자열 보간을 사용하면 몇 바이트를 절약 할 수 있습니다.
Vasu Adari

@VasuAdari 나는 문자열 iterpolation이 무엇인지 알고 있지만 그것이 무엇인지 또는 어떻게 작동하는지 잘 모르겠습니다. 도움을 주셔서 감사합니다
Sherlock9

@VasuAdari 죄송합니다. Google은 내가 알아야 할 것을 가르쳐주었습니다. 편집 할게요
Sherlock9

1

177 바이트

(함수와 import 문만 포함합니다)

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는 몇 가지 문제 Notice들에 대한을"s"[$h<2]

실행하려면 php -r 'CODE' '150 minutes'
물론 stdout에서 오류보고를 끄거나 끕니다!

편집 : -1byte assign에서 할당 (credit : insertusernamehere)

리눅스 사용자에게 실행 도우미를 제공해야합니다.

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];.
insertusername 여기

@insertusername 여기 감사합니다! 미친
CSᵠ

천만에요. 심지어 4 바이트도 줄었습니다 (어제 눈치 채기가 너무 피곤했습니다) $m=($i=$argv[1])%60;echo$h=$i/60|0," hour",s[$h<2]," $m minute",s[$m<2];.
insertusername 여기

@insertusername 여기서 정말 오래된 것이지만, PHP 5.6-7에서는 작동하지만 5.3-5.5에서는 작동하지 않는다고 믿을 수는 없습니다
CS

PHP 5.6.10 (OS X)으로 테스트했으며 여기에서 작동합니다. :)
insertusernamehere

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

루비, 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

코 틀린, 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

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

자바 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에 새로 도입되었으므로 컴파일 / 실행에 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.