টাইমজোন পরিবর্তন করুন


20

চ্যালেঞ্জ

ইনপুট হিসাবে একটি সময় এবং একটি সময় অঞ্চল দেওয়া, সেই সময় অঞ্চলে সময় আউটপুট।

সময়

সময়টি 24 ঘন্টা বিন্যাসে এভাবে দেওয়া হবে:

hh:mm

যেখানে এইচএইচ হ'ল দুই অঙ্কের ঘন্টা এবং মিমি হল দুই অঙ্কের মিনিট। নোট করুন যে ঘন্টা এবং মিনিট সর্বদা এর মত শূন্য সঙ্গে প্যাড করা হবে:

06:09

প্রদত্ত সমস্ত সময় UTC + 00: 00 এ দেওয়া হয়।

আপনার আউটপুটে থাকা ঘন্টাগুলি জিরো দিয়ে প্যাড করতে হবে না তবে আপনার সময়টি অবশ্যই 24 ঘন্টা ফর্ম্যাটে থাকতে হবে

সময় অঞ্চল

সময় অঞ্চলটি নিম্নলিখিত বিন্যাসে দেওয়া হবে:

UTC±hh:mm

যেখানে either হয় হয় + বা a - এবং এইচ, দুটি অঙ্কের ঘন্টা এবং মিমি হল দুটি অঙ্কের মিনিট (আবার, এগুলি শূন্যের সাথে প্যাড করা হবে)।

সেই টাইমজোনটিতে সময় সন্ধানের জন্য, আপনি হয় ইনপুট সময় থেকে ইউটিসি-এর পরে সময়টি (যদি প্রতীকটি + হয়) যোগ করুন বা বিয়োগ করুন (প্রতীকটি যদি থাকে)।

উদাহরণস্বরূপ, যদি ইনপুটটি ছিল 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

জয়লাভ

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


টাইমস্প্যান / সময়কাল পদ্ধতি / ক্লাস সম্পর্কে কি? আমি ধরে
নিলাম

এছাড়াও ইনপুট মানগুলি কি সর্বদা বৈধ সময় হবে? Ie 26:02এবং 08:74হাজির হবে না? ইউটিসি অফসেটের জন্য একই?
গোলাপিফ্লোয়েডএক্স 33

@ পিঙ্কফ্লয়েডএক্স 33 1) হ্যাঁ, বাদ দেওয়া সমস্তই। 2) ধরে নিন যে সমস্ত ইনপুট বৈধ
বিটা ডেসে

আমাদের কি জিরো দিয়ে আউটপুট প্যাড করতে হবে? (উদাহরণস্বরূপ, শেষ পরীক্ষার কেস আউটপুট নিতে পারে 2:25)
লুভজো

1
যদি আউটপুটটি প্যাড করার প্রয়োজন না হয় তবে কি কোনও সময় 1:5তার পরিবর্তে বৈধ হবে 1:05? আমি ভাবতাম কেবল ঘন্টা প্যাড করা উচিত নয়। এছাড়াও আপনার উদাহরণটি 24:56কি এমনটি হওয়া উচিত নয় 00:56যেহেতু আপনি 24:00আপনার অর্ধেক মধ্যরাতের দৃশ্যে একটি পরিসীমা বর্ণনা করেছেন এবং একইরকম প্রকাশ করেছেন?
গোলাপিফ্লোয়েডএক্স 33

উত্তর:


2

এপিএল (ডায়ালগ এপিএল) , 45 বাইট

অভিব্যক্তি

সঠিক যুক্তি হিসাবে দুটি স্ট্রিং নেয়।

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

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

24 60⊤নম্বর-থেকে-বেস- একটি 24 60 রূপান্তর

এর

মূল্যায়ন

এর

বিন্যাসিত (অর্থাত্ পৃথক স্থান দিয়ে সমতল)

('+-'∩⍕) "+ -" এর ছেদ এবং ফর্ম্যাট ইনপুট (এটি প্লাস বা বিয়োগটি বের করে)

, অনুসরণ করেছে

(... প্রতিটি ইনপুট (সময় এবং অফসেট) এর জন্য নিম্নলিখিত

0 60⊥একটি 60 এর -to-নম্বর রূপান্তর

2⊃ দ্বিতীয় উপাদান

':'⎕VFIফিল্ড বিভাজক হিসাবে কোলন ব্যবহার করে, ভি ইরিফাইড এবং এফ ixed I nput

¯5∘↑ শেষ পাঁচটি অক্ষর ("এইচএইচ: মিমি")

"17:25" এবং "ইউটিসি + 09: 00" এ ধাপে ধাপে

ডান পাশের ডেটাতে বাম দিকের অভিব্যক্তি, পরবর্তী লাইনের ডেটা দেয়।

                       '17: 25 '' ইউটিসি + 09: 00 '
                      / / \ \
(...) both উভয় ইনপুটগুলিতে ফাংশন ট্রেন প্রয়োগ করে
                    / / \ \
¯5∘ 17 '17: 25 '' ইউটিসি + 09: 00 '
':' ⎕VFI '17: 25 ''09: 00' 
2⊃ (1 1) (17 25) (1 1) (9 0)
0 60⊥ ​​17 25 9 0
                      1045 540
                       \ \ / /
এখানেই ¨ থেমে যায়, এবং ফলাফল কার্যকর তালিকায় কার্যকর হয়
                         \ \ / /
'/', 1045 540
('+ -' ∩⍕), '/' 1045 540
⍕ '+' '/' 1045 540
+ '+ / 1045 540'
24 60⊤ 1585
                              2 25

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

জাভাস্ক্রিপ্ট (ES6), 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;}

টি হিসাবে পরিচিত ("12:00", "ইউটিসি + 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
অলিভিয়ার গ্রাগোয়ার

@ OlivierGrégoire অই ভাল পয়েন্ট
Womba

বা এমনকি 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

জাভাস্ক্রিপ্ট (ES6), 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);
        }

    }
}

shavings

  • 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

বারবার A এর সামনে নম্বরটি নকল করে :। সুতরাং প্রথম দুটি পর্যায় ঘন্টা-মানকে 60 দ্বারা গুণ করে।

\d+
$*

প্রতিটি সংখ্যা আনারিতে রূপান্তর করুন।

T`1`0`-.+

যদি ইনপুটটিতে একটি বিয়োগ চিহ্ন থাকে তবে এই লিখিত লিখিত লিখিত লিখনটি সমস্ত 1গুলি এর পরে এসকে রূপান্তরিত করে 0। আমরা মূলত এখানে 0অবিচ্ছিন্ন -1অঙ্ক হিসাবে ব্যবহার করছি ।

^
1440$*

1440 1গুলি (যেমন একটি পুরো দিন) .োকান । সময়টি নেতিবাচক না হয় তা নিশ্চিত করার জন্য এটি।

+`10|\D

এটি বারবার সমস্ত অ-অঙ্কগুলি সরিয়ে দেয় (অর্থাত্ স্পেস, দি UTC, +বা বা -পাশাপাশি সমস্তগুলি, আমরা sertedোকানো সমস্ত) এবং 10সংমিশ্রণটি সরিয়ে দেয়, যার ফলে ইতিবাচক এবং নেতিবাচক অঙ্কগুলি বাতিল হয়ে যায়। এটি প্রথমে দ্বিতীয়টিটি নেতিবাচক হলে দ্বিতীয়টি বিয়োগ করে বা অন্যথায় যুক্ত করে।

1{1440}

1440 অপসারণ করে 1সম্ভব হলে টি (মূলত ফলাফলটি মডুলোকে 1440 এ একক 24 ঘন্টা ফিট করার জন্য এটি নেওয়া হয়)।

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

যতগুলি সম্ভব 60 টি সংখ্যার অংশকে সাথে মিলিয়ে ঘন্টা এবং মিনিটের মধ্যে সংখ্যাটি বিভক্ত করুন (এর সাথে অংশগুলি গণনা করা $#1) তারপরে বাকী অঙ্কগুলি (যার দৈর্ঘ্যের সাথে গণনা করা হবে)$.2 )

\b\d\b
0$&

ফলাফলটিতে যদি কোনও একক সংখ্যা থাকে তবে একটি শূন্য প্রিপেন্ড করুন।

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