Thời lượng của bộ phim ở định dạng dễ đọc


24

Bất cứ khi nào tôi tìm kiếm thời lượng chạy của một bộ phim trong IMDb, nó sẽ được hiển thị trong vài phút. Ngay lập tức tôi sẽ cố gắng chuyển đổi nó thành giờ và phút. Sẽ tốt hơn nếu chúng ta có thể tự động hóa việc này.

Đầu vào:

150 min

Đầu ra:

2 hours 30 minutes

Đầu vào:

90 min

Đầu ra:

1 hour 30 minutes

Đầu vào:

61 min

Đầu ra:

1 hour 1 minute

Đầu vào:

60 min

Đầu ra:

1 hour 0 minute or 1 hour 0 minutes

Sau đây là các điều kiện:

  1. Đầu vào và đầu ra phải ở định dạng chính xác này.

  2. Số phút nhập sẽ từ 0 đến 240.

  3. Câu trả lời của bạn có thể chấp nhận đối số dòng lệnh hoặc đọc đầu vào từ người dùng hoặc hàm.

  4. Đầu ra không nên được đính kèm trong dấu ngoặc kép.

  5. Đầu ra phải được in, không được trả lại.

Bảng xếp hạng:

Kết quả:

Đó là một sự ràng buộc giữa CJam và Pyth. Chấp nhận câu trả lời của CJam vì nó đã được gửi trước mã 35 byte của Pyth. Tuy nhiên, xin vui lòng tiếp tục khuyến khích đệ trình mới.


2
@quintopia Theo quy định của trang web , không. Bạn có thể sử dụng một chức năng nếu bạn muốn.
Doorknob

1
Về mặt kỹ thuật, tôi (và tôi cá là những người khác) có thể đọc "150 phút".
PyRulez

1
Tại sao hạn chế đến> 59 phút? Ngoài ra, tôi thích 61 phút đến 1 giờ 1 phút và thực sự ghét nhìn thấy 1 giờ 0 phút
markshancock

6
Bạn đã thay đổi phạm vi đầu vào thành 0-240 nhưng chưa bao gồm bất kỳ trường hợp thử nghiệm nào dưới 60. Tôi khuyên bạn nên gắn bó với phạm vi ban đầu với 28 câu trả lời đã được đăng.
Alex A.

2
Có vẻ như bạn cũng thay đổi đầu ra chấp nhận được trong cả giờ. Trừ khi một thách thức có những vấn đề đáng trách cần được khắc phục, xin vui lòng không thực hiện các thay đổi đối với một thách thức làm mất hiệu lực các câu trả lời hiện có.
Alex A.

Câu trả lời:


10

CJam, 39 35 byte

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

Dùng thử trực tuyến

Phiên bản mới nhất bao gồm các cải tiến được đề xuất bởi @ MartinBüttner, đặc biệt là sử dụng toán tử vectơ phần tử thay vì hoán vị hai danh sách.

Giải trình:

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*(Có vẻ như điều này mang lại cho bạn một sự dẫn dắt khá vững chắc trong thử thách này :))
Martin Ender

@ MartinBüttner r"utehour"+6/W%thực sự có cùng độ dài "hour minute"S/, do đó phần cuối không giúp được gì. Tôi nghĩ rằng tôi đã thấy .được sử dụng với một khối trước đây, nhưng tôi đã quên một lần nữa rằng nó được hỗ trợ.
Reto Koradi

À, đúng rồi, lần đầu tiên tôi đã đăng một phiên bản 36 byte, nơi nó thực sự có ích (nhưng sau đó đã xóa bình luận và thay thế nó bằng phiên bản 35 byte trong đó nó không còn quan trọng nữa).
Martin Ender

19

Python 3, 50 67 119 116 112 111 104 94 byte

Tôi không thích quay lại %định dạng chuỗi kiểu, nhưng nó tiết kiệm được 6 byte .format.

Chỉnh sửa: Quên phân tích cú pháp đầu vào.

Chỉnh sửa: Quên xử lý số nhiều.

Chỉnh sửa: Yay lambdas!

Chỉnh sửa: Đã thêm tính năng

Chỉnh sửa: Chết tiệt. Lambdas đã không giúp đỡ.

Chỉnh sửa: Vì các phút có tối đa ba chữ số và int()không nhớ khoảng trắng trong chuỗi, tôi có thể lưu một vài byte bằng cách sử dụng input()[:3].

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

Ung dung:

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
À! Tăng bytecount! 1 vì đã không từ bỏ ;-)
agtoever

9

JavaScript, 78 byte

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>

Đối với bộ kiểm tra, nhập dữ liệu đầu vào như "61 min"vào hộp đầu vào.


Giải trình

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

Tốt một. Gợi ý: giảm parseInt(n)xuống +n.
nicael

1
Đầu vào sẽ không chỉ là một số nguyên. Nó thất bại khi tôi cung cấp đầu vào như 150 min.
Vasu Adari

1
@VasuAdari Nó hoạt động với tôi, đầu ra 2 hours 30 minutes. Tôi có thể hỏi làm thế nào bạn kiểm tra nó?
jrich

3
@ ev3commander Khi sử dụng đoạn kiểm tra, hãy bọc đầu vào trong dấu ngoặc kép để nó được nhận dạng dưới dạng chuỗi. ví dụ "61 min"hoặc'61 min'
jrich

1
+1 cho JavaScript. Bây giờ bạn chỉ cần làm cho nó một bookmarlet ;)
MayorMonty

6

Bình thường, 39 38 byte

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

5

Vitsy , 57 54 52 byte

Ồ, wow, tôi thậm chí không có số nguyên trong ngôn ngữ của mình. 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.

Hãy thử trực tuyến!


4

K5, 55 51 byte

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

Điều này là tổng quát hơn nó phải hoàn toàn; vẫn có thể đánh gôn xuống hơn nữa.

Trong hành động:

  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")

Chỉnh sửa:

Chương trình này đã trải qua một số lần lặp rất khác nhau trong quá trình phát triển và tôi nghĩ rằng nó có thể được chiếu sáng hơn để hiển thị một số bước trung gian.

Đây là cú đâm đầu tiên của tôi vào vấn đề này, trước khi yêu cầu số nhiều được đưa ra. Có sự lặp lại rõ ràng ở đây:

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

Tôi nhận ra rằng cách chung để xử lý việc bỏ ra khỏi các vị trí là dạng "giải mã" của K5. Để đặt các giá trị vào vị trí trong chuỗi, tôi đã sử dụng nguyên hàm "dot-áp dụng", áp dụng danh sách đối số cho hàm và giải nén danh sách thành các tham số riêng lẻ:

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

Không có nhiều dư thừa ở đây. Khi số nhiều được thêm vào, tôi đã phân tách hàm ẩn danh hàng đầu đó thành một phép biến đổi mà tôi có thể áp dụng cho mỗi số, như sau:

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

Tham gia x, yvà một trong hai shoặc không có gì, tùy thuộc vào việc xcó bằng "1" hay không. Cuối cùng, nó hoạt động tốt hơn để đảo ngược thứ tự của các đối số cho hàm này.

Chỉnh sửa 2:

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

Một số cải tiến nhỏ ở đây. Cách tốt hơn để chọn "s" hoặc chuỗi rỗng, hằng số ngắn hơn cho "giải mã" phản ánh phạm vi đầu vào hạn chế và cách đơn giản hơn để loại bỏ "min".


4

Bình thường, 46 byte

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

Đưa đầu vào x minvà đầu rax hours y minutes

Dùng thử tại đây

Giải trình:

   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 byte

Bản gốc 80 byte

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

Sử dụng:

.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

Do một sự thay đổi trong câu hỏi tôi có thể loại bỏ x?$mtừ cuối hàm, điều này cho phép tôi giảm thêm 3 byte nữa.

{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 byte

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

Bản demo khử golf (được chuyển đổi thành ES5, vì chưa phải tất cả các trình duyệt đều hỗ trợ 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()))


Bạn có thể gói t=parseInt(t)và ngoặc đơn, và sau đó đặt nó ở bất cứ nơi nào bạn sử dụng lần đầu tiên tnhư vậy : (h=0|(t=parseInt(t))/60). Bằng cách này, bạn có thể xóa phần hoàn trả và{}
Downgoat

@Downgoat Tôi đã thử nhưng nó không hoạt động vì một số lý do. Sẽ thử lại lần nữa.
nicael

1
@Downgoat Rõ ràng trước đây tôi đã mắc lỗi, bây giờ nó hoạt động tốt. Cảm ơn :)
nicael

SỬ DỤNG MẠNH M TEM. $ {} !!!
Mama Fun Roll

3

C #, 127 byte

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

Điều này có thể được đặt trong một tệp và chạy qua trình vỏ tương tác C # đi kèm với Mono, sử dụng cấu hình mặc định.

[Đây là nỗ lực đầu tiên của tôi tại mã golf. Tôi hy vọng rằng sự đóng góp của tôi không vi phạm bất kỳ quy tắc nào.]


3

C, 89 byte

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


2

MATLAB, 111 108 106 byte

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))

Điều này cũng hoạt động với Octave , và có thể được thử ở đây . Liên kết là một không gian làm việc đã chứa mã trong một tệp có tên runningLength.m. Vì vậy, để kiểm tra nó chỉ cần nhập runningLengthtại dấu nhắc, sau đó nhập chuỗi đầu vào, vd'123 mins' và nó sẽ hiển thị đầu ra.

Lấy đầu vào dưới dạng một chuỗi, ví dụ '123 mins', chuyển đổi nó thành một số (mà hoàn toàn bỏ qua minsbit).

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

Phút và giờ được tính

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

Sau đó hiển thị chuỗi đầu ra

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

Bit của đầu ra được tính toán và xử lý chính xác - một 's' được thêm vào bất cứ khi nào số không phải là 1.


2

Python 2, 96 byte

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
Điều này dường như không xử lý chính xác số nhiều.
Doorknob

@Doorknob Đây là những gì xảy ra khi các quy tắc được thay đổi sau khi câu trả lời được đăng :)
quintopia

2

Haskell, 117 109 byte

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"]

Phiên bản ít chơi gôn hơn:

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"]

flà một hàm lấy 3 ký tự đầu tiên của đầu vào và chuyển đổi chúng thành một số nguyên. p#qlà một hàm số nhiều qnếu pkhông bằng 1. Để trả về kết quả mà không có dấu ngoặc kép, tôi đã sử dụngputStr để in kết quả sang STDOUT.

Cảm ơn nimi đã giúp đỡ!


2

Python 2, 79 77 byte

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

3 ký tự đầu tiên của đầu vào được phân tích cú pháp đơn giản là một số nguyên. Điều này chỉ hoạt động vì ký tự thứ ba trong đầu vào 2 chữ số là khoảng trắng, intsẽ bỏ qua trong quá trình chuyển đổi.


Tôi nghĩ bạn có thể làm "hour"+m/120*"s"và tương tự như vậy trong vài phút.
xnor

Thật không m=240may, nó sẽ thất bại .
xsot

2

LabVIEW, 50 byte

Điều này được tính theo đề xuất của tôi trên Meta .

Mã này khá đơn giản, lấy số từ Modulo đầu vào bằng 60 và thêm một giây trong vài phút! = 1. Mặt khác của trường hợp chỉ cần đặt chuỗi qua.

nhập mô tả hình ảnh ở đây


2

Scala, 135 byte

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))}

Sử dụng:

a("120 min")
2 hours 0 minute

2

Haskell, 107 101 byte

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

Ung dung:

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!nprepends ntới s, thêm một 's'đến hết nếu n /= 1.

f xđịnh dạng sau khi sử dụng divMod.

Vì chúng ta có thể giả sử đầu vào tối đa là 240, take 3chỉ đủ để lấy số.

(Phải cố gắng rất nhiều để đánh bại điểm số của @Craig Roy ...)


2

R, 112 byte

Chỉnh sửa : Đã sửa lỗi phạm vi và sau đó giải quyết vấn đề đầu ra báo giá.

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

Các trường hợp thử nghiệm

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

Tôi đã cố gắng tiết kiệm không gian bằng cách cố gắng tìm cách thêm hoặc bớt "s" khi cần thiết nhưng tôi phải làm rối với sep =đối số trong paste()hàm và có vẻ như nó sẽ không tiết kiệm cho tôi nhiều không gian. Bất kỳ đề xuất?

Bị đánh cắp

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

Làm tròn xuống với đầu vào / 60 hoặc đầu vào %% 60 (mod) cho giờ và phút tương ứng. Xâu chuỗi chúng lại với nhau bằng một ifelse()câu lệnh chỉ định xem các đơn vị là giờ (s) hay phút (s).


Đầu ra không nên được đính kèm trong dấu ngoặc kép.
Vasu Adari

@Vasu Adari Đã sửa nó bằng cat()chức năng.
cú pháp

1
Bạn có thể lưu byte bằng cách xử lý số nhiều chỉ s và bằng cách thay đổi điều kiện của bạn.
Vasu Adari

1

Ruby, 97 100 99 88 byte

Chỉnh sửa: Sửa lỗi đầu ra.

Chỉnh sửa: Loại bỏ niềng răng từ divmod.

Chỉnh sửa: Nội suy chuỗi Yay! Cảm ơn Vasu Adari . Ngoài ra, tốt hơn vô lương tâm.

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

Ung dung:

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 không nên được đặt trong dấu ngoặc kép.
Vasu Adari

@VasuAdari Đã sửa lỗi
Sherlock9

Bạn có thể mất niềng răng cho divmodphương pháp. Cũng bằng cách sử dụng phép nội suy chuỗi, bạn có thể tiết kiệm vài byte.
Vasu Adari

@VasuAdari Tôi biết rằng iterpolation chuỗi đó là một thứ, nhưng tôi không chắc nó là gì hoặc nó hoạt động như thế nào. Cảm ơn sự giúp đỡ
Sherlock9

@VasuAdari Oop, đợi đã. Google đã dạy tôi những gì tôi cần biết. Hãy để tôi chỉnh sửa.
Sherlock9

1

Đi, 177 byte

(Nó chỉ bao gồm chức năng và báo cáo nhập khẩu)

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")}}

Giải pháp khá -

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")
    }
}

Kiểm tra nó -

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 byte

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:=""

Ghi chú:

  1. Nhập từ Clipboard
  2. Đầu ra in ra dưới mọi hình thức bằng cách nhấn x
  3. Xử lý chính xác số nhiều
  4. Có thể nhỏ hơn nhưng tôi muốn cung cấp One liner.

1

PHP, 77 76 byte

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

kinh khủng, kinh khủng, kinh hoàng!
PHP chỉ phát hành một vài Notices cho"s"[$h<2]

Để chạy: php -r 'CODE' '150 minutes'
và tất nhiên tắt báo cáo lỗi / tắt khỏi thiết bị xuất chuẩn!

Chỉnh sửa: -1byte gán trong gán (tín dụng: insertusernamehere)

Thật xấu xí, tôi phải cung cấp một trình trợ giúp chạy cho người dùng linux:

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

Ít hơn 1 byte : $m=($i=$argv[1])%60;echo$h=$i/60|0," hour","s"[$h<2]," $m minute","s"[$m<2];.
insertusernamehere

@insertusernamehere tốt, cảm ơn! điên rồ
CSᵠ

Không có gì. Ngay cả 4 byte ít hơn (đã quá mệt mỏi để thông báo ngày hôm qua) : $m=($i=$argv[1])%60;echo$h=$i/60|0," hour",s[$h<2]," $m minute",s[$m<2];.
insertusernamehere

@insertusername Ở đây là một cái cũ thực sự khó chịu, nhưng không thể tin rằng nó hoạt động cho php 5.6-7 và không phải cho 5.3-5.5
CSᵠ

Tôi đã thử nghiệm nó với PHP 5.6.10 (OS X) và nó hoạt động ở đây. :)
insertusernamehere

1

Arcyóu (không cạnh tranh), 93 byte

Trình này sử dụng một phiên bản của ngôn ngữ đã được tạo ra sau thử thách này.

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

Các bạn! Ngôn ngữ này cần thao tác chuỗi tốt hơn.

Giải trình:

(: 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 byte

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

73 byte

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

74 byte:

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

Sử dụng:

->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 byte

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")}

Phiên bản Ungolfed:

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")
}

Kiểm tra nó với:

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

Kết quả ví dụ:

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

1
Chào mừng bạn đến với PPCG.SE! Tôi đã chỉnh sửa bài viết của bạn để làm cho trông thẩm mỹ hơn. Chúc vui vẻ!
GamrCorps

1

Nghiêm túc , 77 byte

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

Nghiêm túc là nghiêm túc không tốt trong thao tác chuỗi. Hãy thử trực tuyến với lời giải thích đầy đủ (bạn sẽ cần nhập thủ công như đầu vào "210 mins"vì permalinks không thích dấu ngoặc kép).

Giải thích nhanh và bẩn:

ε" 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)"

Liên kết của bạn không hoạt động
TanMath

1

Java 8, 148 byte

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":"");}}

Tôi đã chọn đăng một bài thay thế cho @TheAustralianBirdEatingLouse vì điều này không chỉ ngắn hơn bởi một thỏa thuận tốt (~ 10%) mà còn chính xác hơn trong giờ in và phút thay vì viết tắt giờ và phút. Việc triển khai phương thức trong Giao diện là mới đối với Java 8 - vì vậy điều này sẽ cần thiết để biên dịch / chạy

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.