इष्टतम क्रूज नियंत्रण विकल्प निर्धारित करें


10

एक क्रूज नियंत्रण के पास गति को स्थानांतरित करने के लिए 3 अलग-अलग विकल्प हैं, जिस गति को आप ड्राइव करना चाहते हैं।

  • आप की ओर: 1 गति जोड़ता है।
  • ऊपर की ओर: 10 के अगले कई की गति बढ़ जाती है (जैसे 20 -> 30, 32 -> 40)
  • नीचे की ओर: 10 की अगली कई की गति को घटाता है (जैसे 20 -> 10, 32 -> 30)

इनपुट

  • 2 पूर्णांक: पहला प्रारंभिक गति है और दूसरा आपकी इच्छित गति है, दोनों गैर-नकारात्मक और किसी भी रूप में आपको पसंद है (सरणी, दो तर्क आदि)

कार्य

  • वांछित गति तक पहुंचने के लिए हैंडल का उपयोग करने का इष्टतम तरीका निर्धारित करें और सही क्रम में चालें प्रिंट करें।

नियम

  • यदि आपके पास आपकी ओर खींचने और ऊपर की तरफ जाने (जैसे 39 से 40 तक) के बीच विकल्प है, तो आप या तो विकल्प चुन सकते हैं, लेकिन जो भी आप समान मामलों के लिए चुनते हैं, उसके साथ बने रहें
  • आप आउटपुट में चालों के बीच अंतर करने के लिए किसी भी 3 अलग (अधिमानतः दृश्यमान) प्रतीकों का उपयोग कर सकते हैं (उदाहरण के लिए टी, यू और डी)।
  • प्रतीकों को नई लाइनों, रिक्त स्थान, आदि द्वारा अलग किया जा सकता है, लेकिन होना नहीं है

यहाँ कुछ परीक्षण मामले हैं:

start speed, desired speed  -->  output
30, 40  -->  U
30, 43  -->  UTTT
43, 30  -->  DD
51, 39  -->  DDDTTTTTTTTT
29, 30  -->  T or U
29, 50  -->  TUU or UUU
12, 12  -->  

यह इसलिए बाइट्स जीत में सबसे छोटा जवाब है।


किसी के लिए जो आश्चर्यचकित था, आज मैंने देखा कि मेरे क्रूज़ कंट्रोल में वास्तव में 1. "स्पीड" को कम करने के लिए एक "छिपा हुआ" बटन है। मैं पूरे समय गलत काम कर रहा था ...
aTastyT0ast

जवाबों:


1

जावास्क्रिप्ट (ईएस 6), 91 84 75 बाइट्स

@Neil के लिए 4 बाइट्स को सहेजा गया

f=(s,d)=>s-d?(q=s+10-s%10)>d?s>d?0+f(s-(s%10||10),d):1+f(s+1,d):2+f(q,d):""

के 0लिए D, के 1लिए T, और के 2लिए उपयोग करता है U


(s/10+1|0)*10 == (s/10|0)*10+10 == s-s%10+10
नील

1
@ नील धन्यवाद, कि एक और जगह में भी मदद करता है!
ETHproductions

आप टूट गए f(37,43), 2111लेकिन आपका नया कोड वापस आ गया 111111
नील

@ बाइट 2 बाइट्स की कीमत पर फिक्स्ड।
ETHproductions

1

जावा, 144 139

केविन की बदौलत 5 बाइट्स बची।

void o(int s,int e){int t=10,x=s/t;System.out.print(s>e?"D":s<e?x<e/t?"U":"T":"");if‌​(s!=e)o(s>e?x*t-(s%t‌​<1?t:0):s<e?x<e/t?(x‌​+1)*t:s+1:0,e);

Ungolfed

public static void optimalCruise(int start, int end){

    if(start > end) {
        System.out.print("D");
        optimalCruise(start/10*10-(start%10<1?10:0), end);
    } else if(start < end){
        if(start/10 < end/10){
            System.out.print("U");
            optimalCruise(((start/10)+1)*10, end);
        } else {
            System.out.print("T");
            optimalCruise(start+1, end);
        }
    }
}

के लिए दो intचर बनाकर 10और s/10आप इसे 5 बाइट्स से छोटा कर सकते हैं:void o(int s,int e){int t=10,x=s/t;System.out.print(s>e?"D":s<e?x<e/t?"U":"T":"");if(s!=e)o(s>e?x*t-(s%t<1?t:0):s<e?x<e/t?(x+1)*t:s+1:0,e);
केविन क्रूज़सेन

@ केविनक्रूजसेन का अच्छा कैच, मैं इसे संपादित
करूंगा

0

बैच, 175 बाइट्स

@set/as=%1,d=%2,e=d/10*10
:d
@if %s% gtr %d% echo d&set/as=~-s/10*10&goto d
:u
@if %s% lss %e% echo u&set/as=s/10*10+10&goto u
:t
@if %s% neq %d% echo t&set/as+=1&goto t

इस समय बहुत सीधा है। इनपुट को कमांड-लाइन मापदंडों के रूप में लेता है, जिसे वह सहेजता है sऔर deहै d10 तो पिछले कई को गोल नीचे sसे अधिक है dतो हम स्पष्ट रूप से लागू करने की जरूरत है, dजब तक sकी तुलना में कम हो जाता है d। अन्यथा, हमें यह जांचने की आवश्यकता है कि क्या इससे sकम है e; यदि हां, तो हम बराबरी uतक का आह्वान कर सकते हैं । इस बिंदु पर के बीच अब है और और हम बस आह्वान कर सकते हैं जब तक हम तक पहुँचने । मैंने लूप में देखा, लेकिन वे समावेशी समापन बिंदुओं का उपयोग करते हैं, इसलिए बहुत अधिक क्रिया हो जाती है।sesedtdfor



0

सी, 156 बाइट्स

t,x,y;main(int s,char**a){x=(s=atoi(a[1]))/10,y=(t=atoi(a[2]))/10;if(s^t){for(;y>x;++x)puts("U");for(x+=(s-t>10);x>y;--x)puts("D");for(;t--%10;)puts("T");}}

Ungolfed:

#include <stdio.h>
#include <stdlib.h>
int t, x, y;
int main(int s, char **a)
{
    x = (s = atoi(a[1])) / 10,
    y = (t = atoi(a[2])) / 10;

    if (s ^ t) {
        for ( ; y > x; ++x)
            puts("U");

        for (x += (s - t > 10) ; x > y; --x)
            puts("D");

        for ( ; t-- % 10; )
            puts("T");
    }
    return 0;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.