人間が読める形式の映画の長さ


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

1
59分以上に制限するのはなぜですか?また、私は61分から1時間1分を好み、1時間0分を見ることを本当に嫌います
マルシャンコック

6
入力範囲を0〜240に変更しましたが、60未満のテストケースは含まれていません。28の回答が既に投稿されているので、元の範囲に固執することをお勧めします。
アレックスA.

2
また、1時間の許容出力も変更したようです。課題に修正が必要な明白な問題がない限り、既存の回答を無効にする課題に変更を加えないでください。
アレックスA.

回答:


10

CJam、39 35バイト

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

オンラインで試す

最新バージョンには、@MartinBüttnerによって提案された改善が含まれています。特に、2つのリストを転置する代わりに要素単位のベクトル演算子を使用しています。

説明:

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/ので、その部分は役に立たなくなります。.以前にブロックで使用されたことを見たことがありますが、サポートされていることを忘れていました。
レトコラディ

ああ、私は最初に実際に役立つ36バイトバージョンを投稿しました(しかし、コメントを削除し、それが重要ではない35バイトバージョンに置き換えました)。
マーティンエンダー

19

Pythonの3、50 67 119 116 112 111の 104 94のバイト

%スタイルの文字列フォーマットに戻るのは好きではありませんが、で6バイト節約できます.format

編集:入力の解析を忘れました。

編集:複数形を処理するのを忘れました。

編集:イェーラムダ!

編集: ungolfingを追加

編集:くそー。ラムダスは助けにならなかった。

編集:分は最大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
あ!バイト数を増やしています!
givingめ

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
ニカエル

1
入力は単なる整数ではありません。入力をとして提供すると失敗します150 min
ヴァスアダリ

1
@VasuAdariそれは私のために働いています、出力2 hours 30 minutes。どのようにテストしましたか?
-jrich

3
@ ev3commanderテストスニペットを使用する場合、入力を引用符で囲み、文字列として認識されるようにします。例"61 min"または'61 min'
jrich

1
+1 JavaScriptの場合。今、あなたはそれを小冊子にする必要があります;)
MayorMonty

6

Pyth、39 38バイト

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

5

Vitsy57 54 52バイト

ああ、すごい、自分の言語には整数すらありません。ああ

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の「デコード」フォームであることに気付きました。値を文字列の所定の位置にスロットするために、引数リストを関数に適用し、リストを個々のパラメーターに展開する「ドット適用」プリミティブを使用しました。

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

ここには余計な冗長性はありません。複数形が追加されたとき、私はこの主要な匿名関数を、次のように各数値に適用できる変換に分解しました。

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

参加していないxyと、いずれかのsかどうかに応じて、または何もxISが「1」に等しいです。最終的に、この関数への引数の順序を逆にする方がうまく機能しました。

編集2:

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

ここでいくつかの小さな改善。「s」または空の文字列を選択するより良い方法、限られた入力範囲を反映する「デコード」の短い定数、および「最小」を破棄するより簡単な方法。


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

デゴルフデモ(すべてのブラウザーがまだ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すでに試しましたが、何らかの理由で機能しませんでした。再試行します。
ニカエル

1
@Downgoatどうやら以前は間違いを犯していたようですが、今では正しく動作します。ありがとう:)
nicael

テンプレート文字列を使用します。$ {} !!!
ママファンロール

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


2

MATLAB、111 108 106バイト

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

ハスケル、 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 入力の最初の3文字を受け取り、整数に変換する関数です。 p#qは、1に等しくないq場合に複数になる関数pです。引用符で囲まずに結果を返すためにputStr、結果をSTDOUTに出力していました。

助けてくれたnimiに感謝します!


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文字は、単純に整数として解析されます。これが機能するのは、2桁の入力の3番目の文字がスペースであり、int変換中に無視されるためです。


私はあなたがちょうどできると思うし"hour"+m/120*"s"、同様に数分間。
xnor

m=240残念ながら失敗します。
xsot


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前に付加をnするためにs、追加'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 cat()関数を使用して修正しました。
syntonicC

1
単に複数を処理s し、条件を変更することでバイトを節約でき ます。
ヴァスアダリ

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は引用符で囲まないでください。
ヴァスアダリ

@VasuAdariは固定
Sherlock9

divmodmethod の中括弧を失う可能性があります。また、文字列補間を使用すると、数バイトを節約できます。
ヴァスアダリ

@VasuAdari文字列の補間が重要であることは承知していますが、それが何であるか、どのように機能するかはわかりません。助けてくれてありがとう
Sherlock9

@VasuAdariおっと、待って。Googleは私が知っておくべきことを教えてくれました。編集させてください。
Sherlock9

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はNotice"s"[$h<2]

実行するには:php -r 'CODE' '150 minutes'
もちろん、エラー報告をオフ/標準出力からオフにします!

編集:assignで-1byte assign(クレジット:insertusernamehere)

とてもsoいので、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];
ここにユーザー名を挿入します

@insertusernamehereいいね、ありがとう!クレイジー
CSᵠ

どういたしまして。でも、4バイトの小さい方(昨日の通知にあまりにも疲れていました): $m=($i=$argv[1])%60;echo$h=$i/60|0," hour",s[$h<2]," $m minute",s[$m<2];
insertusernamehere

5.3から5.5のために、本当に嫌な古いものだが、それは、PHP 5.6から7の作品を信じることができないといない@insertusernamehere
CSᵠ

PHP 5.6.10(OS X)でテストしましたが、ここで動作します。:)
ユーザー名をここに挿入します

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

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

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%)だけでなく、短縮された時間と分ではなく時間と分を印刷する際により正確であるためです。Interfacesのメソッド実装はJava 8の新機能です。したがって、これはコンパイル/実行に必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.