कार्यक्रम मेरे माइक्रोवेव ओवन [बंद]


12

मैं बहुत आलसी हूं इसलिए मैं हमेशा अपने माइक्रोवेव को सबसे कम संभव बटन प्रेस के साथ प्रोग्राम करने की कोशिश करता हूं । मेरे माइक्रोवेव में निम्नलिखित बटन हैं:

  • एक "मिनट प्लस" बटन जो केवल पहले दबाया जा सकता है और इसका मतलब है "प्रारंभ"। इसे कई बार कई मिनट के लिए दबाया जा सकता है, लेकिन यह मैन्युअल रूप से दर्ज किए गए समय में एक मिनट नहीं जोड़ेगा। उत्पादन+
  • 0-9 बटन का एक सेट। समय प्रविष्टि एमएमएसएस (यानी "130" का अर्थ है 1 मिनट 30 सेकंड)। सेकंड 0..99 तक हो सकते हैं। तो "130" और "90" समान प्रविष्टियां हैं। जाहिर है कि प्रत्येक मिनट 60 सेकंड है भले ही प्रवेश का सेकंड हिस्सा 59 से अधिक हो। आउटपुट 0।।9
  • एक "स्टार्ट" बटन जिसे माइक्रोवेव को शुरू करने के लिए दबाया जाना चाहिए यदि समय मैन्युअल रूप से दर्ज किया गया है। उत्पादनS

मेरे भोजन पैकेज एमएम: एसएस में समय निर्दिष्ट करते हैं और इसलिए कार्यक्रम को उस इनपुट को स्वीकार करना चाहिए।

उदाहरण

  • 1:00 है +(याद रखें "मिनट प्लस" का अर्थ है प्रारंभ)
  • 1:01 है 61S(सेकंड 59 से अधिक हो सकता है, लेकिन "मिनट प्लस" अंक के साथ काम नहीं करता है - मुझे लगता है कि यह मेरे माइक्रोवेव में एक डिजाइन दोष है)
  • 9:00 है 900S(से कम +++++++++)

6
क्या उत्तर आपके रात्रिभोज से सत्यापित होंगे?
arnnew

1
भी जो पूर्वता लेता है: 400Sया ++++?
1

1
@ardnew: मेरा मानना ​​है कि टाईब्रेक में न्यूनतम उंगली की गति होनी चाहिए, इस प्रकार ++++जीत होती है। :)
बेन जैक्सन

उंगली आंदोलन? इतना 888Sछोटा है 928S, लेकिन इससे 900Sछोटा है 860S? मुझे आपके बटनों और उनकी प्रत्येक स्थिति के सटीक ज्यामिति की आवश्यकता है।
arnnew

4
अगर मुझे 1:59 के लिए अपना "पेडेंट का भोजन" माइक्रोवेव करना पड़ा, तो मैं ++ (1:59 के लिए प्रतीक्षा) दबाऊंगा और फिर समाप्ति से एक सेकंड पहले "रद्द" दबाऊंगा। तीन बटन दबाते हैं, मान लें कि आपके पास "रद्द" बटन है और टाइमर पर खड़े होने को एक सस्ती प्रक्रिया मानते हैं। शायद आप बाद के भोजन के लिए इस विकल्प पर विचार कर सकते हैं! (या बाद की चुनौती के लिए)
जॉनो

जवाबों:


3

एपीएल

एपीएल की एक खराब प्रतिष्ठा है कि यह अपठनीय है, जो पूरी तरह से मामला नहीं है अगर यह गोल्फ नहीं है।

नियम:

  • पूरे मिनट <= 4 मिलता है +, ++, +++, और ++++
  • 960-999 को 1000-1039 से ऊपर पसंद किया जाता है। 9960-9999 को 10000-10039, आदि से ऊपर पसंद किया जाता है।
  • यदि समय को फिर से लिखा जा सकता है जैसे कि सेकंड 66, 77, 88, या 99 हैं तो यह किया जाता है। (यह कभी भी बदतर समाधान नहीं देता है और आमतौर पर 928 के बजाय एक बेहतर यानी 888 देता है।)
∇ माइक्रोवेव; समय; सेकेंड; मिनट; fmt; timeML

 ⎕ML ← 3

 Enter Enter 'समय दर्ज करें (m +: ss)'
 समय ← ⍞
 मिनट्स s ⍎¨ (समय '': ') ←time

Minutes 'मिनट प्लस' का उपयोग केवल पूरे मिनट '4 पर किया जा सकता है
 : यदि (सेकंड = 0) ((mins )4)
     ⎕ ← mins⍴ '+'
     :वापसी
 :अगर अंत
⍝ यदि संभव हो, तो एक कुंजी को सेकंड> 60 का उपयोग करके सहेजें
Is यदि टकसाल दस की शक्ति है
 : अगर (मिनट> 0)
     : यदि ((⍟10⍟mins) = (⍟10insmins)) ((secs <40)
         ⎕ '(' BI2'⎕FMT मिनट -1), (←FMT सेकंड + 60), 'S'
         :वापसी
     :अगर अंत
 :अगर अंत
⍝ 'उंगली आंदोलन' आवश्यकता के लिए हम कई चाहते हैं
⍝ कुंजी के समान हो।
⍝ तो 888S आईपीवी 928 एस।
 : यदि sec∊∊66 77 88 99-60
     ⎕ '(' BI2'⎕FMT मिनट -1), (←FMT सेकंड + 60), 'S'
     :वापसी
 :अगर अंत
⍝ अन्यथा, सिर्फ आउटपुट एमएमएसएस, कोई बेहतर विकल्प नहीं था।
 : अगर मिनट> 0
    अग्रणी शून्य के साथ leading आउटपुट सेकंड
     T '(' BI2'⎕FMT मिनट), ('G⊃99←'⎕FMT सेकंड),' S '
 :अन्य
    । केवल आउटपुट सेकंड, अग्रणी शून्य के साथ नहीं
     ⎕ '(' BI2'⎕FMT सेकंड्स ',' S '
 :अगर अंत
∇

मैंने एक जीतने के मानदंड को निर्दिष्ट नहीं किया, इसलिए मैं एपीएल के बारे में सबसे ज्यादा सिखाने वाले को पीछे छोड़ दूंगा।
बेन जैक्सन

@BenJackson चुनौतियां एक उद्देश्य जीतने की कसौटी की आवश्यकता है। आपके द्वारा उपयोग किए गए [कोड-चैलेंज] टैग का विवरण देखें।
mbomb007

4

जावास्क्रिप्ट

var x = /(\d+):(\d\d)/.exec('<time here>');
x[1] === '0' ? +x[2] + 'S' :
x[1] < 4 && x[2] === '00' ? (
    x[1] === '1' ? '+' :
    x[1] === '2' ? '++' : '+++') :
x[2] < 40 ?
    (x[1] - 1 ? x[1] - 1 : '') + '' + (6 + +x[2][0]) + x[2][1] + 'S' :
x[1] + x[2] + 'S'

3

पर्ल

आवश्यकताओं को पूरा करता है, लेकिन यह नहीं है कि मैं बटन कैसे दर्ज करूंगा (जैसे "860S" बनाम "900S") एक विशेष मामले के रूप में ठीक 60 सेकंड संभालता है

use strict;
use warnings;

sub cook
{
  my ($mins, $secs) = @_;

  my $plus = $secs =~ /00/ ? $mins : undef;

  my $secs_total = $mins * 60 + $secs;
  my $mins_total = 0;

  while ($secs_total > 99)
  {
    ++$mins_total;
    $secs_total -= 60;
  }

  $plus = "+" x $plus if defined $plus;

  my $nums = "";
  my $even = ($mins_total > 0 and $secs_total == 60);

  $secs_total *= not $even;
  $mins_total += $even;

  if ($mins_total > 0)
  {
    $nums = sprintf "%s%02dS", $mins_total, $secs_total;
  }
  else
  {
    $nums = sprintf "%2dS", $secs_total;
  }

  return ($nums, $plus)
    [defined $plus and length $plus < length $nums];
}

die "usage:$/\tperl $0 <MINUTES>:<SECONDS>$/"
  unless @ARGV > 0 and shift =~ /([0-9]{1,2}):([0-9]{1,2})/;

print cook($1, $2), $/;

उत्पादन

andrew@gidget:~$ perl mic.pl 9:00
900S
andrew@gidget:~$ perl mic.pl 1:00
+
andrew@gidget:~$ perl mic.pl 1:01
61S
andrew@gidget:~$ perl mic.pl 1:30
90S
andrew@gidget:~$ perl mic.pl 0:07
 7S
andrew@gidget:~$ perl mic.pl 4:00
400S

1

माणिक

#Build a string for the microwave
def build_result(minutes, seconds)
  duration = minutes * 60 + seconds  
  if duration < 99
    result = "%iS" % [ duration]    #shortcut '90S' instead '130S'
  else
    result = "%i%02iS" % [ minutes, seconds]
  end  
  result
end

#Call microwave optimizer
def microwave( input )
  minutes  = input.split(/:/).first.to_i 
  seconds = input.split(/:/).last.to_i

  #build result
  result = build_result(minutes, seconds)
  #try a shorter result, make 999S out of '10:39':
  if seconds < 40 and minutes > 0
    result2 = build_result(minutes - 1, seconds + 60)   #try a 
    result = ( result.size <= result2.size ? result : result2 )
  end

  #Check if a version with only '+' is shorter
  if seconds == 0 and minutes <= result.size
    result = '+' * minutes
  end
  result
end

#Test if called with an argument
if ARGV.empty?
  require 'test/unit'   #Exceute a test
  class MicrowaveTest < Test::Unit::TestCase
    def test_007
      assert_equal('7S', microwave('0:07'))
    end  
    def test_100
      assert_equal('+', microwave('1:00'))
    end
    def test_101
      assert_equal('61S', microwave('1:01'))
    end  
    def test_130
      assert_equal('90S', microwave('1:30'))
    end  
    def test_400
      #~ assert_equal('400S', microwave('4:00'))
      assert_equal('++++', microwave('4:00'))
    end  
    def test_500
      assert_equal('500S', microwave('5:00'))
    end  
    def test_900
      assert_equal('900S', microwave('9:00'))
    end 
    def test_1000
      #~ assert_equal('1000S', microwave('10:00'))
      assert_equal('960S', microwave('10:00'))
    end 
    def test_1015
      #~ assert_equal('1015S', microwave('10:15'))
      assert_equal('975S', microwave('10:15'))
    end 
    def test_1039
      #~ assert_equal('1039S', microwave('10:39'))
      assert_equal('999S', microwave('10:39'))
    end 
  end
else  #started via shell, evaluate input
  puts microwave(ARGV.first)
end

टिप्पणियों:

  • इसके साथ शुरू करें ruby program-my-microwave-oven.rbऔर एक इकाई परीक्षण का मूल्यांकन किया जाता है।
  • इसके साथ शुरू करो ruby program-my-microwave-oven.rb 10:00और यह लिखता है960S

नियमों पर कुछ टिप्पणी (और मेरी व्याख्या):

  • के लिए कम से कम 10:00है 960S(9 मिनट और 60 सेकंड -> 10 मिनट)।
  • सबसे छोटा 10:39है 999S(9 मिनट और 99 सेकंड -> 10 मिनट और 39 सेकंड)।
  • इसके लिए 4:00प्राथमिकता ++++(कम उंगली आंदोलनों)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.