একটি মানব পাঠযোগ্য বিন্যাসে মুভিটির দৈর্ঘ্য চলমান


24

আমি যখনই আইএমডিবিতে কোনও চলমান দৈর্ঘ্যের সন্ধান করি তখন এটি কয়েক মিনিটের মধ্যে প্রদর্শিত হয়। তাত্ক্ষণিকভাবে আমি এটিকে ঘন্টা (ঘন্টা) এবং মিনিট (গুলি) রূপান্তর করার চেষ্টা করব। আমরা যদি এটি স্বয়ংক্রিয় করতে পারি তবে এটি আরও ভাল।

ইনপুট:

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. আউটপুট অবশ্যই মুদ্রিত করা উচিত, ফিরে আসেনি।

লিডারবোর্ড:

ফলাফল:

এটি সিজেম এবং পাইথের মধ্যে টাই। সিজামের উত্তরটি পাইথের 35 বাইট কোডের আগে জমা দেওয়ার কারণে তা গ্রহণ করা। তবে দয়া করে নতুন জমাগুলিকে উত্সাহিত করে চালিয়ে যান।


2
@ কুইন্টোপিয়া সাইটের নিয়ম অনুসারে , না। আপনি চাইলে একটি ফাংশন ব্যবহার করতে পারেন।
ডুরকনব

1
প্রযুক্তিগতভাবে, আমি (এবং আমি অন্যান্য মানুষের বাজি ধরে) "150 মিনিট" পড়তে পারি।
পাইরুলেজ

1
কেন> 59 মিনিটের মধ্যে সীমাবদ্ধ? এছাড়াও, আমি
minutes১

6
আপনি ইনপুট পরিসরটি 0-240 হিসাবে পরিবর্তন করেছেন তবে test০ টিরও কম পরীক্ষার কেস অন্তর্ভুক্ত করেননি 28 ২৮ টি উত্তর ইতিমধ্যে পোস্ট করা হয়েছে উল্লেখ করে আমি মূল সীমার সাথে লেগে থাকার পরামর্শ দিই।
অ্যালেক্স এ।

2
এটি প্রদর্শিত হয় আপনি পুরো ঘন্টা ধরে গ্রহণযোগ্য আউটপুটও পরিবর্তন করেছেন। যদি কোনও চ্যালেঞ্জের সমস্যাগুলির সমাধানের প্রয়োজন না থাকে তবে দয়া করে কোনও চ্যালেঞ্জের পরিবর্তন করবেন না যা বিদ্যমান উত্তরগুলিকে অকার্যকর করে দেয়।
অ্যালেক্স এ।

উত্তর:


10

সিজেম, 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*(দেখে মনে হচ্ছে এটি আপনাকে এই চ্যালেঞ্জের উপরে বেশ দৃ lead় নেতৃত্ব দেয় :))
মার্টিন এন্ডার

@ মার্টিনব্যাটনার r"utehour"+6/W%আসলে একই দৈর্ঘ্য "hour minute"S/, যাতে সেই অংশটি সাহায্য না করে। আমি মনে করি এর .আগে আমি একটি ব্লক ব্যবহার করে দেখেছি , তবে আমি এটি আবার সমর্থিত বলে ভুলে গিয়েছিলাম।
রেটো কোরাাদি

আহ, ঠিক আছে, আমি প্রথমে একটি 36-বাইট সংস্করণ পোস্ট করেছি যেখানে এটি আসলে সহায়তা করেছিল (তবে তারপরে মন্তব্যটি মুছে ফেলা হয়েছে এবং এটি 35-বাইট সংস্করণ দ্বারা প্রতিস্থাপন করা হয়েছে যেখানে এটি কোনও বিষয় নয়)।
মার্টিন এন্ডার

19

পাইথন 3, 50 67 119 116 112 111 104 94 বাইট

আমি %স্টাইল স্ট্রিং ফর্ম্যাটিংয়ে ফিরে যেতে পছন্দ করি না তবে এটি 6 বাইট সাশ্রয় করে .format

সম্পাদনা: ইনপুট পার্স করতে ভুলে গেছেন।

সম্পাদনা: বহুবচন পরিচালনা করতে ভুলে গেছেন।

সম্পাদনা: ইয়া লম্বাডাস!

সম্পাদনা করুন: যোগ করা উচ্ছৃঙ্খল

সম্পাদনা করুন: এটি ঘৃণা করুন লাম্বদাস সাহায্য করেনি।

সম্পাদনা: যেহেতু মিনিটের সর্বাধিক তিনটি অঙ্ক 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
আহ! বৃদ্ধি bytecount! +1
ছাড়ার

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
@ ভাসুআডারী এটি আমার জন্য কাজ করছে, ফলাফলগুলি 2 hours 30 minutes। আমি জিজ্ঞাসা করতে পারি আপনি এটি পরীক্ষা কিভাবে?
জ্রিখ

3
@ ev3commander পরীক্ষার স্নিপেট ব্যবহার করার সময়, ইনপুটটি উদ্ধৃতিতে মুড়ে দিন যাতে এটি স্ট্রিং হিসাবে স্বীকৃত হয়। যেমন "61 min"বা'61 min'
জিরিক

1
জাভাস্ক্রিপ্টের জন্য +1। এখন আপনাকে কেবল এটি একটি বুকমারলেট তৈরি করতে হবে ;)
মেয়রমন্টি


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

কে 5, 55 51 বাইট

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

এটি কঠোরভাবে হওয়ার চেয়ে সাধারণ is এখনও এটি আরও নিচে গল্ফ হতে পারে।

পদক্ষেপে:

  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"}@.*" "\

আমি বুঝতে পেরেছিলাম যে জায়গাগুলি থেকে কাস্টিং হ্যান্ডল করার সাধারণ উপায়টি কে 5 এর "ডিকোড" ফর্ম। স্ট্রিংয়ের মানগুলিকে স্থানে স্লট করতে আমি "ডট-প্রয়োগ" আদিম ব্যবহার করেছি, যা কোনও ফাংশনে আর্গুমেন্ট তালিকা প্রয়োগ করে এবং তালিকাটিকে পৃথক প্যারামিটারে আনপ্যাক করে:

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

এখানে খুব বেশি অপ্রয়োজনীয়তা বাকি নেই। যখন বহুবচন যুক্ত করা হয়েছিল, তখন আমি বিরক্ত করেছিলাম যে বেনামে ফাংশনকে রূপান্তর হিসাবে নেতৃত্ব দিয়ে আমি প্রতিটি সংখ্যায় এটি প্রয়োগ করতে পারি:

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

"1" এর সমান কিনা তার উপর নির্ভর করে যোগ দিন x, yএবং হয় sবা কিছুই নয় x। শেষ পর্যন্ত এটি এই ফাংশনে আর্গুমেন্টের ক্রমটিকে বিপরীত করতে আরও ভাল কাজ করেছে।

সম্পাদনা 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

জাভাস্ক্রিপ্ট (ES6), 100 94 89 81 বাইট

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

ডি-গল্ফড ডেমো (ES5 তে রূপান্তরিত, সমস্ত ব্রাউজারগুলি এখনও ES6 সমর্থন করে না)

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

alert(s(prompt()))


আপনি মোড়ানো পারে t=parseInt(t)এবং প্রথম বন্ধনী, এবং তারপর করা যেখানে কখনও আপনি প্রথম ব্যবহারের tতাই হয়: (h=0|(t=parseInt(t))/60)। এইভাবে, আপনি {}
রিটার্নটি

@ ডাউনগোট আমি ইতিমধ্যে চেষ্টা করেছি কিন্তু এটি কোনও কারণে কার্যকর হয়নি। আবার চেষ্টা করবে।
নিকেল

1
@ ডাউনগোট দৃশ্যত আমি আগে ভুল করেছি, এখন এটি সঠিকভাবে কাজ করে। ধন্যবাদ :)
নিকেল

নমুনা STRINGS ব্যবহার করুন। $ {} !!!
মামা ফান রোল

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

এটি একটি ফাইলে রাখা যেতে পারে এবং সি # ইন্টারেক্টিভ শেলের মাধ্যমে চলতে পারে যা ডিফল্ট কনফিগারেশন ব্যবহার করে মনো এর সাথে আসে।

[কোড গল্ফে এটি আমার প্রথম চেষ্টা। আমি আশা করি যে আমার অবদান কোনও নিয়ম লঙ্ঘন করছে না]]


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

ম্যাটল্যাব, 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
এটি বহুবচনগুলি সঠিকভাবে পরিচালনা করতে দেখা যাচ্ছে না।
ডুরকনব

@ ডুরকনব উত্তর পোস্ট করার পরে নিয়মগুলি পরিবর্তিত হলে এটি ঘটেছিল :)
কুইন্টোপিয়া

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 টি অক্ষর নেয় এবং তাদের পূর্ণসংখ্যায় রূপান্তর করে। 1 এর সমান না হলে p#qবহুবচনগুলি এমন একটি ফাংশন যা আশেপাশের উদ্ধৃতিগুলি ছাড়াই ফলাফলটি ফেরত দেওয়ার জন্য, আমি ফলাফলটি STDOUT এ মুদ্রণ করতাম ।qpputStr

সাহায্যের জন্য নিমিকে ধন্যবাদ!


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

Haskell,, 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

আমি প্রয়োজন হিসাবে কেবল "s" যোগ বা বিয়োগের উপায় অনুসন্ধান করার চেষ্টা করে স্থান বাঁচানোর চেষ্টা করেছি তবে আমাকে ফাংশনে 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()বিবৃতি দিয়ে চেইন করুন যা ইউনিটগুলি ঘন্টা (গুলি) বা মিনিট (গুলি) হয় কিনা তা নির্দিষ্ট করে।


উদ্ধৃতিগুলির মধ্যে আউটপুট আবদ্ধ করা উচিত নয়।
ভাসু আদারি

@ ভাসু আদারী cat()ফাংশনটি ব্যবহার করে এটি স্থির করেছেন ।
সিনোটোনিক

1
ন্যায়বিচারের সাথে বহুবচন পরিচালনা s করে এবং আপনার অবস্থার পরিবর্তন করে আপনি বাইটগুলি সংরক্ষণ করতে পারেন ।
ভাসু আদারি 4'15

1

রুবি, 97 100 99 88 বাইট

সম্পাদনা করুন: আউটপুট স্থির করা

সম্পাদনা করুন: থেকে বন্ধনীগুলি সরানো হচ্ছে divmod

সম্পাদনা: ইয়ে স্ট্রিং অন্তরঙ্গকরণ! ধন্যবাদ ভাসু আদারীকে । এছাড়াও, আরও ভাল ওলোফুলিং।

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

o / p উদ্ধৃতিগুলির মধ্যে আবদ্ধ করা উচিত নয়।
ভাসু আদারী

@ ভাসুআডারি স্থির
শার্লক 9

আপনি divmodপদ্ধতির জন্য ধনুর্বন্ধনী হারাতে পারেন । এছাড়াও স্ট্রিং ইন্টারপোলেশন ব্যবহার করে আপনি কয়েকটি বাইট সংরক্ষণ করতে পারেন।
ভাসু আদারী

@ ভাসুআডারী আমি জানি যে স্ট্রিংয়ের বিস্তৃতি একটি জিনিস, তবে আমি নিশ্চিত নই যে এটি কী বা এটি কীভাবে কাজ করে। সহায়তার জন্য ধন্যবাদ
শেরলক 9

@ ভাসুআডারী ওপ, অপেক্ষা করুন গুগল আমাকে যা শিখতে হবে তা শিখিয়েছে। আমাকে সম্পাদনা করা যাক।
শার্লক 9

1

যান, 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

অটোহটকি , 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

পিএইচপি, 77 76 বাইট

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

ভয়াবহ, ভয়াবহ, ভয়াবহ!
পিএইচপি শুধুমাত্র একটি দম্পতি প্রকাশ Noticeজন্য গুলি"s"[$h<2]

চালানোর জন্য: php -r 'CODE' '150 minutes'
এবং অবশ্যই স্ট্যান্ডআউট থেকে দূরে / দূরে ত্রুটি প্রতিবেদন করুন!

সম্পাদনা করুন: -1 নির্ধারিত বরাদ্দ (ক্রেডিট: সন্নিবেশকারী নাম)

এটি খুব কুৎসিত আমাকে লিনাক্স ব্যবহারকারীদের জন্য একটি রান সহায়ক দিতে হবে:

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];
সন্নিবেশকারী নাম এখানে

@ অন্তর্ভুক্তকারীর নাম এখানে সুন্দর, ধন্যবাদ! পাগল
CSᵠ

আপনাকে স্বাগতম. এমনকি 4 বাইট ক্ষুদ্রতর (বিজ্ঞপ্তির খুব ক্লান্ত ছিল গতকাল): $m=($i=$argv[1])%60;echo$h=$i/60|0," hour",s[$h<2]," $m minute",s[$m<2];
সন্নিবেশকারী নাম এখানে

@ অন্তর্ভুক্ত ব্যবহারকারীর নাম এখানে সত্যই বাজে পুরানো, তবে বিশ্বাস করতে পারছেন না এটি পিএইচপি 5.6-7 এর জন্য কাজ করে 5.3-5.5

আমি এটি পিএইচপি 5.6.10 (ওএস এক্স) দিয়ে পরীক্ষা করেছি এবং এটি এখানে কাজ করে। :)
সন্নিবেশকারী নাম এখানে

1

আরসিও (অ-প্রতিযোগিতামূলক), 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")}

অবরুদ্ধ সংস্করণ:

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
পিপিসি.এসই তে স্বাগতম! আমি আপনার পোস্টটি সম্পাদনা করেছি যাতে দেখতে আরও নান্দনিকভাবে আনন্দিত হয়। আনন্দ কর!
গ্যামারকম্পস

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

আপনার লিঙ্কটি কাজ করে না
তানমাথ

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

আমি @ অস্ট্রেলিয়ান বার্ডইটিংএলাউসের বিকল্প পোস্ট করা বেছে নিয়েছি কারণ এটি কেবলমাত্র ভাল চুক্তি দ্বারা (10%) কম হয় না তবে সংক্ষিপ্ত ঘন্টা এবং মিনিটের পরিবর্তে মুদ্রণের সময় (মিনিট) এবং মিনিট (গুলি) -এর চেয়ে আরও সঠিক। ইন্টারফেসে পদ্ধতি বাস্তবায়ন জাভা 8-তে নতুন - সুতরাং এটি সংকলন / চালানোর প্রয়োজন হবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.