एक मानव पठनीय प्रारूप में फिल्म की लंबाई


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 के बीच एक टाई है। पायम के 35 बाइट्स कोड से पहले CJam के जवाब को स्वीकार कर लिया गया था। हालाँकि, कृपया नए सबमिशन को प्रोत्साहित करना जारी रखें।


2
@quintopia साइट नियमों के अनुसार , नहीं। आप चाहें तो किसी फंक्शन का इस्तेमाल कर सकते हैं।
दरवाज़े

1
तकनीकी रूप से, मैं (और मैं अन्य मनुष्यों को शर्त लगाता हूं) "150 मिनट" पढ़ सकते हैं।
21

1
> 59 मिनट तक ही सीमित क्यों? इसके अलावा, मैं 61 मिनट से 1 घंटा 1 मिनट पसंद करता हूं और वास्तव में 1 घंटे 0 मिनट देखकर घृणा
करूंगा

6
आपने इनपुट रेंज को 0-240 में बदल दिया है, लेकिन 60 से कम किसी भी परीक्षण के मामलों को शामिल नहीं किया है। मैं मूल सीमा के साथ चिपके रहने की सलाह देता हूं कि 28 उत्तर पहले ही पोस्ट किए जा चुके हैं।
एलेक्स ए।

2
ऐसा प्रतीत होता है कि आपने पूरे घंटे के लिए स्वीकार्य आउटपुट बदल दिया है। एक चुनौती के मुद्दों blaring है जब तक कि जरूरत को ठीक किया जाना, एक चुनौती के लिए परिवर्तन है कि अमान्य मौजूदा जवाब नहीं बनाते हैं तो कृपया।
एलेक्स ए।

जवाबों:


10

CJam, 39 35 बाइट्स

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

इसे ऑनलाइन आज़माएं

नवीनतम संस्करण में @ मार्टिनबटनर द्वारा सुझाए गए सुधार शामिल हैं, विशेष रूप से दो सूचियों को स्थानांतरित करने के बजाय तत्व-वार वेक्टर ऑपरेटर का उपयोग करना।

स्पष्टीकरण:

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*(ऐसा लगता है कि आपको इस चुनौती पर बहुत ठोस बढ़त मिलती है :))
मार्टिन एंडर

@ मार्टिनबटनर r"utehour"+6/W%वास्तव में उसी तरह की लंबाई है "hour minute"S/, जिससे वह हिस्सा समाप्त हो जाता है और मदद नहीं करता है। मुझे लगता है कि मैंने .पहले एक ब्लॉक के साथ उपयोग किया था , लेकिन मैं फिर से भूल गया था कि इसका समर्थन किया गया था।
रेटो कोराडी

आह, ठीक है, मैंने पहली बार एक 36-बाइट संस्करण पोस्ट किया था जहां यह वास्तव में मदद करता था (लेकिन फिर टिप्पणी को हटा दिया और इसे 35-बाइट संस्करण से बदल दिया, जहां यह कोई और बात नहीं है)।
मार्टिन एंडर

19

पायथन 3, 50 67 119 116 112 111 104 94 बाइट्स

मैं %-स्टाइल स्ट्रिंग फॉर्मेटिंग में वापस जाने का शौकीन नहीं हूं , लेकिन यह 6 बाइट्स बचाता है .format

संपादित करें: इनपुट पार्स करना भूल गए।

संपादित करें: बहुवचन को संभालना भूल गए।

संपादित करें: याय लंबदा!

संपादित करें: जोड़ा गया ungolfing

संपादित करें: यह मुश्किल है। लंबोदर ने मदद नहीं की।

संपादित करें: चूँकि मिनटों में अधिकतम तीन अंक होते हैं, और int()स्ट्रिंग में रिक्त स्थान नहीं होता है, इसलिए मैं कुछ बाइट्स का उपयोग करके बचा सकता हूं input()[:3]

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

Ungolfed:

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 नहीं देने के लिए ;-)
17

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
निकेल

1
इनपुट सिर्फ एक पूर्णांक नहीं होगा। जब मैं इनपुट प्रदान करता हूं तो यह विफल हो जाता है 150 min
वासु आदारी

1
@VasuAdari यह मेरे लिए काम कर रहा है, आउटपुट 2 hours 30 minutes। क्या मैं पूछ सकता हूं कि आपने इसका परीक्षण कैसे किया?
जून

3
@ ev3commander परीक्षण स्निपेट का उपयोग करते समय, इनपुट को उद्धरणों में लपेटें ताकि यह एक स्ट्रिंग के रूप में पहचाना जाए। जैसे "61 min"या'61 min'
jrich

1
जावास्क्रिप्ट के लिए +1। अब आपको बस इसे एक पुस्तिका बनाना है ;)
मेयोरमोनी

6

पायथ, 39 38 बाइट्स

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

5

विटसी , 57 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}

शामिल हों x, yऔर या तो sया कुछ भी नहीं, जो इस पर निर्भर xहै "1" के बराबर। अंततः इस समारोह के तर्कों के क्रम को उलटने के लिए बेहतर काम किया।

2 संपादित करें:

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

कई छोटे सुधार यहाँ। एक "एस" या एक खाली स्ट्रिंग का चयन करने का एक बेहतर तरीका, "डीकोड" के लिए एक छोटा निरंतर जो इनपुट की सीमित सीमा को दर्शाता है, और "मिनट" को छोड़ने का एक सरल तरीका है।


4

पायथ, 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

जावास्क्रिप्ट (ईएस 6), 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 मैं पहले ही कोशिश कर चुका हूं, लेकिन यह किसी कारण से काम नहीं आया। फिर से कोशिश करेंगे।
निकेल

1
@Downgoat जाहिरा तौर पर मैंने पहले एक गलती की है, अब यह ठीक से काम करता है। धन्यवाद :)
nicael

उपयोग की संरचना का उपयोग करें। $ {} !!!
मामा फन रोल

3

सी #, 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":""));

इसे एक फ़ाइल में डाला जा सकता है और डिफ़ॉल्ट कॉन्फ़िगरेशन का उपयोग करके मोनो के साथ आने वाले C # इंटरेक्टिव शेल के माध्यम से चलाया जा सकता है।

[यह कोड गोल्फ में मेरा पहला प्रयास है। मुझे उम्मीद है कि मेरा योगदान किसी भी नियम का उल्लंघन नहीं कर रहा है।]


3

सी, 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))

यह ऑक्टेव के साथ भी काम करता है , और यहाँ कोशिश की जा सकती है । लिंक एक कार्यक्षेत्र में है जिसमें पहले से ही एक फ़ाइल नाम का कोड है 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));

आउटपुट की 'बिट' की गणना की जाती है और सही ढंग से नियंत्रित किया जाता है - जब भी संख्या 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 ऐसा तब होता है जब उत्तर पोस्ट किए जाने के बाद नियम बदल जाते हैं :)
क्विंटोपिया

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एक फ़ंक्शन है जो बहुवचन है qयदि p1 के बराबर नहीं है। आसपास के उद्धरणों के बिना परिणाम वापस करने के लिए, मैंने उपयोग कियाputStr परिणाम को STU के लिए प्रिंट करता था।

मदद के लिए मिमी के लिए धन्यवाद!


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

लैब व्यू, 50 बाइट्स

यह मेटा पर मेरे सुझाव के अनुसार गिना जाता है

कोड बहुत सीधे आगे है, 60 से इनपुट मोडुलो से नंबर लें और मिनटों के लिए एक एस जोड़ें! = 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

Ungolfed:

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केवल संख्या लेने के लिए पर्याप्त है।

(@ क्रेग रॉय के स्कोर को हराने के लिए वास्तव में कड़ी मेहनत करनी पड़ी ...)


2

आर, 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

मैंने "एस" को आवश्यक रूप से जोड़ने या घटाने का एक तरीका खोजने की कोशिश करके अंतरिक्ष को बचाने की कोशिश की, लेकिन मुझे फ़ंक्शन sep =में तर्क के साथ गड़बड़ करना पड़ा paste()और यह वास्तव में ऐसा नहीं लगता था कि यह मुझे बहुत अधिक स्थान बचाने जा रहा था। कोई सुझाव?

Ungolfed

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

इनपुट / 60 या इनपुट %% 60 (मॉड) के साथ राउंडिंग क्रमशः घंटे और मिनट देता है। उन्हें एक ifelse()बयान के साथ मिलाएं जो यह निर्दिष्ट करता है कि इकाइयाँ घंटे या मिनट (मिनट) हैं या नहीं।


आउटपुट उद्धरणों के भीतर संलग्न नहीं होना चाहिए।
वासु अडारी

@Vasu Adari ने इसे cat()फंक्शन का उपयोग करके तय किया ।
SyntonicC

1
आप बस के साथ बहुवचन को संभालने s और अपनी स्थितियों को बदलकर बाइट्स बचा सकते हैं।
वासु अडारी

1

रूबी, 97 100 99 88 बाइट्स

संपादित करें: आउटपुट को ठीक करना।

संपादित करें: से ब्रेसिज़ निकाल रहा है divmod

संपादित करें: याय स्ट्रिंग प्रक्षेप! आभार वासु अडारी ने माना । इसके अलावा, बेहतर ungolfing।

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

Ungolfed:

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

ओ / पी को उद्धरणों के भीतर संलग्न नहीं किया जाना चाहिए।
वासु अडारी

@VasuAdari फिक्स्ड
शर्लक

आप divmodविधि के लिए ब्रेसिज़ खो सकते हैं । इसके अलावा स्ट्रिंग प्रक्षेप से आप कुछ बाइट्स बचा सकते हैं।
वासु अडारी

@VasuAdari मुझे पता है कि स्ट्रिंग पुनरावृत्ति एक बात है, लेकिन मुझे यकीन नहीं है कि यह क्या है या यह कैसे काम करता है। मदद के लिए धन्यवाद
शर्लक

@VasuAdari ऊप, रुको। Google ने मुझे वही सिखाया है जो मुझे जानना आवश्यक है। मुझे एडिटिंग करने दो।
शरलॉक

1

गो, १testes बाइट्स

(इसमें केवल फ़ंक्शन और आयात कथन शामिल हैं)

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

ऑटोहॉटकी , 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. सही ढंग से plurals संभालती है
  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'
और निश्चित रूप से स्टडआउट से दूर / दूर रिपोर्टिंग त्रुटि!

संपादित करें: -1byte असाइनमेंट में असाइन किया गया है (क्रेडिट: इन्सर्टसर्नमेयर)

यह बहुत बदसूरत है मुझे लिनक्स उपयोगकर्ताओं के लिए एक रन हेल्पर देना चाहिए:

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];:।
१.२ern पर निवसुर्नमेर्इ

@insertusernamehere अच्छा है, धन्यवाद! क्रेज़ी
CSᵠ

आपका स्वागत है। यहां तक ​​कि 4 बाइट्स कम (कल नोटिस करने के लिए बहुत थक गया था) $m=($i=$argv[1])%60;echo$h=$i/60|0," hour",s[$h<2]," $m minute",s[$m<2];:।
सम्मिलित

@insertusernamehere यह वास्तव में बहुत पुराना है, लेकिन विश्वास नहीं कर सकता कि यह php 5.6-7 के लिए काम करता है और 5.3-5.5 के लिए नहीं
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

Yeesh! इस भाषा को बेहतर स्ट्रिंग हेरफेर की आवश्यकता है।

स्पष्टीकरण:

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

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

इसके साथ परीक्षण करें:

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%) से कम है, बल्कि संक्षिप्त घंटे और मिनटों के बजाय मुद्रण घंटे (मिनटों) और मिनटों में अधिक सही है। इंटरफेस में विधि कार्यान्वयन जावा 8 के लिए नए हैं - इसलिए इसे संकलित / चलाने के लिए आवश्यक होगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.