Tantangan
Diberi waktu dan zona waktu sebagai input, output waktu di zona waktu itu.
Waktu
Waktu akan diberikan dalam format 24 jam seperti:
hh:mm
Di mana jam adalah jam dua digit dan mm adalah menit dua digit. Perhatikan bahwa jam dan menit akan selalu diisi dengan nol seperti:
06:09
Semua waktu yang diberikan berada di UTC + 00: 00.
Jam dalam output Anda tidak harus diisi dengan nol tetapi waktu Anda harus dalam format 24 jam
Zona waktu
Zona waktu akan diberikan dalam format berikut:
UTC±hh:mm
Di mana ± akan menjadi + atau a - dan hh, adalah dua digit jam dan mm adalah dua digit menit (sekali lagi, ini akan diisi dengan nol).
Untuk menemukan waktu di zona waktu itu, Anda dapat menambahkan (jika simbolnya +) atau mengurangi (jika simbolnya adalah -) waktu setelah UTC ± dari waktu yang dimasukkan.
Misalnya, jika inputnya adalah 24:56
dan UTC-02:50
, Anda akan mengurangi 2 jam dan 50 menit dari 24:56:
24:56
02:50 -
-----
22:06
Outputnya adalah 22:06
.
Contohnya
Chicago
Input: 08:50 and UTC-06:00
Output: 02:50
Kathmandu
Input: 09:42 and UTC+05:45
Output: 15:27
Samoa
Input: 06:42 and UTC+13:00
Output: 19:42
Hawaii
Input: 02:40 and UTC-10:00
Output: 16:40
Perhatikan bahwa ini sudah ke hari sebelumnya.
Tokyo
Input: 17:25 and UTC+09:00
Output: 02:25
Perhatikan bahwa ini telah pergi ke hari berikutnya.
Aturan
Anda tidak boleh menggunakan fungsi tanggal atau pustaka bawaan apa pun.
Asumsikan semua input akan menjadi waktu dan offset waktu yang valid.
Zona waktu akan berada dalam kisaran UTC-24:00
hingga UTC+24:00
inklusif.
Dalam kasus setengah lewat tengah malam , representasi yang benar seharusnya 00:30
, bukan 24:30
.
Kemenangan
Kode terpendek dalam byte menang.
26:02
dan08:74
tidak akan muncul? Sama untuk offset UTC?2:25
)1:5
valid, bukan1:05
? Saya pikir hanya jam tidak boleh empuk. Juga contoh Anda dengan yang24:56
seharusnya tidak00:56
karena Anda telah menyatakan rentang hingga24:00
dan mengungkapkan hal serupa dalam skenario tengah malam setengah Anda?Jawaban:
APL (Dyalog APL) , 45 byte
Ekspresi
Membawa dua string sebagai argumen yang benar.
Cobalah online!
Penjelasan
24 60⊤
konversi angka ke basis 24 b 60∘
dari⍎
evaluasi∘
dari⍕
yang diformat (yaitu diratakan dengan ruang pemisah)('+-'∩⍕)
persimpangan "+ -" dan input yang diformat (ini mengekstrak plus atau minus),
diikuti oleh(
...)¨
berikut ini untuk masing-masing input (waktu dan offset)0 60⊥
yang a ∞ b 60 konversi to-jumlah2⊃
elemen kedua dari':'⎕VFI
itu, menggunakan titik dua sebagai pemisah bidang, V erified dan F ixed I nput of¯5∘↑
lima karakter terakhir ("jj: mm")Selangkah demi selangkah pada "17:25" dan "UTC + 09: 00"
Ekspresi sisi kiri pada data sisi kanan, memberikan data pada baris berikutnya.
sumber
C, 109 byte
Ajukan sebagai berikut:
sumber
UTC-03:30
?JavaScript (ES6), 101 byte
Akan menjadi 121 byte jika saya mengisi waktu.
sumber
Python 2, 129 byte
Sebut sebagai
T("02:45", "UTC-05:33")
sumber
;
.Python 2, 84 byte
Semua test case ada di ideone
Format output dipisahkan dengan ruang, tanpa nol di depan.
sumber
Java 201 byte
Disebut sebagai T ("12:00", "UTC + 02: 40")
Tidak terkurung karena logika,
Bantuan apa pun untuk mendapatkannya di bawah 200 akan dihargai!
sumber
Integer i=1;
dan mengganti semua lainnyaInteger
olehi
, sehingga Anda memilikii.valueOf
bukanInteger.valueOf
.14:27
bukan15:27
.java.util.function.Function v=Integer::valueOf
. Tidak yakin apakah itu benar-benar menghemat banyak.Ruby, 95 byte
Pemakaian
Input (contoh)
sumber
Javascript (ES6),
9392 byteUji kasus
sumber
Jawa
156150149147142 byteUji kasus & tidak diserang
Serutan
a/H*60+b/H*60
->(a/H+b/H)*60
(T/H+Z/H)*60+1440
->(T/H+Z/H+24)*60
.z.replace(":","").substring(3)
->z.replaceAll("[UTC:]","")
sumber
C #
214205183 BytesVersi 205 byte
Tidak disatukan
Asli 214:
sumber
CJam , 40 byte
Cobalah online! (Sebagai suite uji.)
Penjelasan
sumber
Retina , 100 byte
Cobalah online!
Penjelasan
Ganti masing
:
- masing dengan 59 dari mereka dan koma sebagai pemisah.Gandakan berulang kali angka di depan a
:
. Jadi dua tahap pertama kalikan nilai jam dengan 60.Ubah setiap nomor menjadi unary.
Jika ada tanda minus pada input, maka tahap transliterasi ini mengubah semua
1
setelahnya menjadi0
s. Kami pada dasarnya menggunakan0
sebagai-1
angka unary di sini.Masukkan 1440
1
s (yaitu sehari penuh). Ini untuk memastikan bahwa waktunya tidak menjadi negatif.Ini berulang kali menghilangkan semua non-digit (yaitu spasi, the
UTC
,+
atau-
, serta semua yang,
telah kami sisipkan) dan10
kombinasinya, sehingga membatalkan digit positif dan negatif. Ini pada dasarnya mengurangi angka kedua dari angka pertama jika negatif, atau menambahkannya sebaliknya.Hapus 1440
1
s jika memungkinkan (pada dasarnya mengambil modulo 1440 hasil agar sesuai menjadi 24 jam tunggal).Uraikan angka menjadi beberapa jam dan menit dengan mencocokkan sebanyak mungkin potongan 60 digit (hitung dengan potongan
$#1
) diikuti oleh digit lainnya (yang panjangnya dihitung dengan$.2
).Jika ada satu digit dalam hasil, tambahkan nol.
sumber