समयक्षेत्र बदलें


20

चुनौती

इनपुट के रूप में एक समय और एक समयक्षेत्र को देखते हुए, उस समय क्षेत्र में समय का उत्पादन करते हैं।

समय

समय 24 घंटे के प्रारूप में दिया जाएगा जैसे:

hh:mm

जहां hh दो अंकों का घंटा है और mm दो अंकों का मिनट है। ध्यान दें कि घंटे और मिनट हमेशा शून्य की तरह गद्देदार होंगे:

06:09

दिए गए सभी समय UTC + 00: 00 पर हैं।

आपके आउटपुट में घंटों को wih zeroes गद्देदार होने की ज़रूरत नहीं है लेकिन आपका समय 24 घंटे के प्रारूप में होना चाहिए

समय क्षेत्र

निम्नलिखित प्रारूप में समय-सारणी दी जाएगी:

UTC±hh:mm

जहां Where या तो + या - a और hh होने वाला है, दो अंकों का घंटा है और mm दो अंकों का मिनट है (फिर, इन्हें शून्य से गद्देदार किया जाएगा)।

उस समयक्षेत्र में समय का पता लगाने के लिए, आप या तो जोड़ते हैं (यदि प्रतीक + है) या घटाना (यदि प्रतीक है -) इनपुट समय से यूटीसी ± के बाद का समय।

उदाहरण के लिए, यदि इनपुट था 24:56और UTC-02:50, आप 24:56 से 2 घंटे और 50 मिनट घटाएंगे:

24:56
02:50 -
-----
22:06

आउटपुट होगा 22:06

उदाहरण

शिकागो

Input:  08:50 and UTC-06:00
Output: 02:50

काठमांडू

Input:  09:42 and UTC+05:45
Output: 15:27

समोआ

Input:  06:42 and UTC+13:00
Output: 19:42

हवाई

Input:  02:40 and UTC-10:00
Output: 16:40

ध्यान दें कि यह पिछले दिन गया है।

टोक्यो

Input:  17:25 and UTC+09:00
Output: 02:25

ध्यान दें कि यह अगले दिन गया है।

नियम

आपको किसी भी कार्य दिनांक या लाइब्रेरी में निर्मित का उपयोग नहीं करना चाहिए।

मान लें कि सभी इनपुट मान्य समय और समय ऑफसेट होंगे।

समय क्षेत्र रेंज में हो जाएगा UTC-24:00करने के लिए UTC+24:00समावेशी।

आधी आधी रात के मामले में , सही प्रतिनिधित्व होना चाहिए 00:30, नहीं 24:30

जीतना

बाइट्स में सबसे छोटा कोड जीतता है।


TimeSpan / अवधि विधियों / कक्षाओं के बारे में क्या? मुझे लगता है कि उन लोगों को भी बाहर रखा गया है
Pinkfloydx33

क्या इनपुट वैल्यू हमेशा मान्य समय होगी? यानी 26:02और 08:74दिखाई नहीं होगा? UTC ऑफसेट के लिए समान है?
Pinkfloydx33

@ pinkfloydx33 1) हां, उन सभी को बाहर रखा गया है। 2) मान लें कि सभी इनपुट वैध हैं
बीटा डिके

क्या हमें शून्य के साथ आउटपुट को पैड करना है? (उदा। अंतिम परीक्षण केस आउटपुट कर सकते हैं 2:25)
लोजोवो

1
यदि आउटपुट को गद्देदार करने की आवश्यकता नहीं है 1:5, तो 1:05क्या इसके बदले एक समय मान्य होगा ? मुझे लगता है कि केवल घंटों को गद्देदार नहीं होना चाहिए। इसके अलावा आपके उदाहरण के साथ 24:56ऐसा नहीं होना चाहिए 00:56क्योंकि आपने 24:00अपने आधी रात के परिदृश्य में एक सीमा तक और एक्सप्रेस के समान बताया है?
Pinkfloydx33

जवाबों:


2

APL (Dyalog APL) , 45 बाइट्स

अभिव्यक्ति

सही तर्क के रूप में दो तार लेता है।

24 60⊤∘⍎∘⍕('+-'∩⍕),'/',(0 602':'VFI ¯5∘↑)¨

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

व्याख्या

24 60⊤संख्या-से-आधार- एक 24 बी 60 रूपांतरण

का

मूल्यांकन

का

स्वरूपित (यानी अलग-अलग रिक्त स्थान के साथ चपटा)

('+-'∩⍕) "+" का प्रतिच्छेदन और स्वरूपित इनपुट (यह प्लस या माइनस निकालता है)

, के बाद

(... प्रत्येक इनपुट के लिए निम्नलिखित (समय और ऑफसेट)

0 60⊥एक 60 की करने वाली संख्या रूपांतरण

2⊃ का दूसरा तत्व

':'⎕VFIका उपयोग करते हुए, क्षेत्र विभाजक के रूप में बृहदान्त्र का उपयोग करके, वी erified और एफ ixed I nput

¯5∘↑ अंतिम पाँच वर्ण ("hh: mm")

"17:25" और "UTC + 09: 00" पर चरण-दर-चरण

दाईं ओर के डेटा पर बाईं ओर की अभिव्यक्ति, अगली पंक्ति का डेटा देती है।

                       '17: 25 '' यूटीसी + 09: 00 '
                      / / \ \
(...)) दोनों इनपुटों के लिए फंक्शन ट्रेन लागू करता है
                    / / \ \
¯5 U ¯ '17: 25 '' यूटीसी + 09: 00 '
':' :VFI '17: 25 ''09: 00' 
2 (1 1) (17 25) (1 1) (9 0)
० ६० 0 १⊥ २५ ९ ०
                      1045 540 है
                       \ _ / /
यह वह जगह है जहां is बंद हो जाता है, और परिणामी सूची पर निष्पादन जारी रहता है
                         \ _ / /
'/', 1045 540
('+ -' ∩⍕), '/' 1045 540
⍕ '+' '/' 1045 540
10 '+ / 1045 540'
24 60 1585
                              २ २५

3

सी, 109 बाइट्स

a,b,c;f(char*t,char*z){for(c=0;z[3];t=z+=3)sscanf(t,"%d:%d",&a,&b),c+=b+a*60;printf("%d:%02d",c/60%24,c%60);}

निम्नानुसार आह्वान करें:

int main() { f("17:25", "UTC+09:00"); }

1
यह नकारात्मक समय ऑफसेट उदाहरण के लिए कैसे काम करता है UTC-03:30?
नील

उफ़, मैं उन के बारे में भूल गया, लेकिन शुक्र है, यह एक आसान तय है।
लिन

3

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

(t,z,g=s=>+(s[3]+s[7]+s[8])+s.slice(3,6)*60,m=g('UTC+'+t)+g(z)+1440)=>(m/60%24|0)+':'+(m/10%6|0)+m%10

अगर मैं घंटों गद्देदार रहूँगा तो 121 बाइट्स होंगे।


3

पायथन 2, 129 बाइट्स

def T(t,a):f=[int.__add__,int.__sub__]["-"in a];m=f(int(t[3:5]),int(a[7:9]));print`f(int(t[0:2])+m/60,int(a[4:6]))%24`+":"+`m%60`

के रूप में बुलाओ T("02:45", "UTC-05:33")


1
स्वरूपित आउटपुट में अग्रणी शून्य। शीर्षक में पायथन 2 कहना चाहिए। के साथ एक लाइन फ़ंक्शन को कम कर सकता है ;
जोनाथन एलन


आह, शांत, उस बिट को याद किया! साभार
जोनाथन एलन

2

पायथन 2, 84 बाइट्स

def f(t,z):i=int;r=60*(i(t[:2])+i(z[3:6]))+i(t[3:])+i(z[3]+z[7:]);print r/60%24,r%60

सभी परीक्षण के मामले विचारधारा पर हैं

आउटपुट स्वरूप को अंतरिक्ष से अलग किया गया है, जिसमें कोई अग्रणी शून्य नहीं है।


2

जावा 201 बाइट्स

String T(String t,String z){return(24+Integer.valueOf(t.substring(0,2))+Integer.valueOf((String)z.subSequence(3,6)))%24+":"+(60+Integer.valueOf(t.substring(3,5))+Integer.valueOf(z.substring(7,9)))%60;}

T के रूप में कहा जाता है ("12:00", "UTC + 02: 40")

तर्क के लिए अनियंत्रित,

String T(String t, String z) { 
    int i = (24 + Integer.valueOf(t.substring(0, 2)) + Integer.valueOf((String) z.subSequence(3, 6))) % 24;
    int j = (60 + Integer.valueOf(t.substring(3, 5)) + Integer.valueOf(z.substring(7, 9))) % 60;
    return i + ":" + j;
}

200 के तहत इसे पाने के लिए किसी भी मदद की सराहना की जाएगी!


यह त्रुटिपूर्ण है। दूसरा परीक्षण पूरा नहीं करता (जहां घंटा बढ़ा है)। इसके अलावा, कम करने के लिए, आप सबस्ट्रिंग के बजाय सबसेंसेस का उपयोग क्यों करते हैं? गोल्फ के लिए और अधिक, की घोषणा Integer i=1;और अन्य सभी को बदलने के Integerद्वारा i, तो आप i.valueOfके बजाय Integer.valueOf
ओलिवियर ग्रेगोइरे

@ ओलिवियरग्रैगियर हुह? क्या आप कृपया दूसरे परीक्षण पर विस्तार से बता सकते हैं!
विंबा

काठमांडू परीक्षण मामले के लिए, आप के 14:27बजाय उत्पादन 15:27
ओलिवियर ग्रेगोइरे

@ ओलिवियरग्रैगियर आह अच्छा बिंदु
गर्भ

या भी java.util.function.Function v=Integer::valueOf। यकीन नहीं होता कि वास्तव में ज्यादा बचत होगी।
रॉबर्ट फ्रेजर

1

रूबी, 95 बाइट्स

g=->s{"60*"+s.scan(/\d+/).map(&:to_i)*?+}
f=->t,z{r=eval(g[t]+z[3]+g[z]);print r/60%24,?:,r%60}

प्रयोग

f[gets,gets]

आदानों (उदाहरण)

08:50
UTC-06:00

1

जावास्क्रिप्ट (ईएस 6), 93 92 बाइट्स

t=>((t=eval(t.replace(/.*?(.)?(..):(..)/g,'$1($2*60+$3)+720')))/60%24|0)+':'+(t/10%6|0)+t%10

परीक्षण के मामलों

let f =
t=>((t=eval(t.replace(/.*?(.)?(..):(..)/g,'$1($2*60+$3)+720')))/60%24|0)+':'+(t/10%6|0)+t%10

console.log(f("08:50 UTC-06:00")); //  2:50
console.log(f("09:42 UTC+05:45")); // 15:27
console.log(f("06:42 UTC+13:00")); // 19:42
console.log(f("02:40 UTC-10:00")); // 16:40
console.log(f("17:25 UTC+09:00")); //  2:25


0

जावा 156 150 149 147 142 बाइट्स

t->z->{Integer H=100,T=H.valueOf(t.replace(":","")),Z=H.valueOf(z.replace(":","").substring(3)),c=(T/H+Z/H+24)*60+T%H+Z%H;return c/60%24+":"+c%60;}

परीक्षण के मामले और अपुष्ट

import java.util.function.BiFunction;

public class Main {
    public static void main(String[] args) {

        BiFunction<String,String,String> f = (t,z)->{
            Integer H = 100, // Hundred, used several times, shorter as variable
                    T = H.valueOf(t.replace(":","")), // as int (HHMM)
                    Z = H.valueOf(z.replaceAll("[UTC:]","")), // as int (-HHMM)
                    c = (T/H + Z/H + 24) * 60 + T%H + Z%H; // transform into minutes
            return c/60%24+":"+c%60;
        };

        test(f, "08:50", "UTC-06:00", "02:50");
        test(f, "09:42", "UTC+05:45", "15:27");
        test(f, "03:42", "UTC-05:45", "21:57");
        test(f, "06:42", "UTC+13:00", "19:42");
        test(f, "02:40", "UTC-10:00", "16:40");
        test(f, "17:25", "UTC+09:00", "02:25");
    }

    private static void test(BiFunction<String,String,String> f, String time, String zone, String expected) {
        // Padding is allowed. Make sure the padding is skipped for the test, then.
        String result = String.format("%2s:%2s", (Object[])f.apply(time, zone).split(":")).replace(" ","0");
        if (result.equals(expected)) {
            System.out.printf("%s + %s: OK%n", time, zone);
        } else {
            System.out.printf("%s + %s: Expected \"%s\", got \"%s\"%n", time, zone, expected, result);
        }

    }
}

दाढ़ी बनाना

  • 150 -> 149: a/H*60+b/H*60->(a/H+b/H)*60
  • 149 -> 147: (T/H+Z/H)*60+1440-> (T/H+Z/H+24)*60
  • 147 -> 142: z.replace(":","").substring(3)->z.replaceAll("[UTC:]","")

0

सी # 214 205 183 बाइट्स

string f(char[]t,char[]u){int s=~(u[3]-45),z=48,m=(t[3]-z)*10+t[4]-z+((u[7]-z)*10+u[8]-z)*s,h=(t[0]-z)*10+t[1]-z+((u[4]-z)*10+u[5]-z)*s+m/60+(m>>8)+24;return$"{h%24}:{(m+60)%60:D2}";}

205 बाइट संस्करण

string f(string t,string u){Func<string,int>P=int.Parse;var T=t.Split(':');int s=u[3]<45?1:-1,m=P(T[1])+P(u.Substring(7))*s,h=P(T[0])+P($"{u[4]}"+u[5])*s+m/60+(m<0?-1:0)+24;return$"{h%24}:{(m+60)%60:D2}";}

Ungolfed

string f(char[] t, char[] u)
{
    int s = ~(u[3]-45),
        z = 48,
        m = (t[3] - z) * 10 + t[4] - z + ((u[7] - z) * 10 + u[8] - z) * s,
        h = (t[0] - z) * 10 + t[1] - z + ((u[4] - z) * 10 + u[5] - z) * s + m / 60 + (m>>8) + 24;
    return $"{h % 24}:{(m + 60) % 60:D2}";
}

मूल 214:

string f(string t,string u){Func<string,int>P=int.Parse;var T=t.Split(':');int h=P(T[0]),m=P(T[1]),s=u[3]<45?1:-1;m+=P(u.Substring(7))*s;h+=P($"{u[4]}"+u[5])*s+m/60+(m<0?-1:0)+24;return$"{h%24:D2}:{(m+60)%60:D2}";}

0

सीजेएम , 40 बाइट्स

r{':/60b}:F~r3>(\F\~1440,=60b{s2Te[}%':*

इसे ऑनलाइन आज़माएं! (एक परीक्षण सूट के रूप में।)

व्याख्या

r           e# Read first input (time).
{':/60b}:F  e# Define a function F, which splits a string around ':' and
            e# treats the two elements as base-60 digits.
~           e# Run that function on the first input.
r3>         e# Read the second input and discard the 'UTC'.
(           e# Pull off the +-.
\F          e# Apply F to the timezone offset.
\~          e# Execute the + or - on the two amounts of minutes.
1440,=      e# Modulo 1440 to fit everything into the 24-hour format.
60b         e# Obtain base 60 digits again.
{s2Te[}%    e# Convert each digit to a string and pad it to 2 decimal digits.
':*         e# Join them with a ':'.

0

रेटिना , 100 बाइट्स

:
59$*:,
+`(\d+):
$1,$1
\d+
$*
T`1`0`-.+
^
1440$*
+`10|\D

1{1440}

^(1{60})*(.*)
$#1:$.2
\b\d\b
0$&

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

व्याख्या

:
59$*:,

उनमें :से प्रत्येक के साथ 59 और एक विभाजक के रूप में अल्पविराम की जगह।

+`(\d+):
$1,$1

बार-बार एक के सामने संख्या डुप्लिकेट करता है :। तो पहले दो चरण 60 से घंटे के मूल्य को गुणा करते हैं।

\d+
$*

प्रत्येक संख्या को एकात्मक में बदलें।

T`1`0`-.+

यदि इनपुट में माइनस साइन होता है, तो यह लिप्यंतरण चरण उसके 1बाद सभी s बदल जाता है 0। हम मूल 0रूप से यहां एक अनियत -1अंक के रूप में उपयोग कर रहे हैं।

^
1440$*

1440 1एस (यानी एक पूरा दिन) डालें । यह सुनिश्चित करने के लिए है कि समय नकारात्मक न हो।

+`10|\D

यह बार-बार सभी गैर-अंक (यानी अंतरिक्ष को निकाल देता है UTC, +या -, साथ ही साथ सभी, हम डाला है) और 10संयोजन, जिससे सकारात्मक और नकारात्मक अंक रद्द। यह मूल रूप से ऋणात्मक होने पर दूसरे नंबर को पहले से घटाता है, या अन्यथा जोड़ता है।

1{1440}

1440 निकालता है 1यदि संभव हो तो एस है (मूल रूप से परिणाम मॉड्यूल 1440 को एक एकल 24 घंटों में फिट करने के लिए ले रहा है)।

^(1{60})*(.*)
$#1:$.2

60 अंकों की जितनी संभव हो उतनी संख्याओं का मिलान करके घंटों और मिनटों में संख्या का विघटन करें और $#1शेष अंकों की गणना करें (जिनकी लंबाई के साथ गिनती की जाती है$.2 )।

\b\d\b
0$&

यदि परिणाम में कोई एकल अंक हैं, तो शून्य को पूर्व निर्धारित करें।

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