Berikut ini diilhami oleh pertanyaan yang muncul di Stack Overflow hari ini .
Diberikan sejumlah mikrodetik, 0 <= n <= 86400000000
(misalnya 12345678900
), menghasilkan string yang diformat hh:mm:ss:000:000
, misalnya 03:25:45:678:900
.
0 -> '00:00:00:000:000'
12345678900 -> '03:25:45:678:900'
86400000000 -> '24:00:00:000:000'
Saya punya solusi dalam Python dalam 209 byte, tetapi bisakah itu lebih rendah?
hh:mm:ss.000000
mungkin akan lebih baik (dan lebih mudah). Tetap saja, tidak bisa mengubahnya sekarang.Jawaban:
Python 2,
8279 byteMembangun string, iterasi melalui serangkaian divmod. Satu-satunya bit mewah adalah
%7/2
, yang memetakan1000 -> 3
dan60 -> 2
.sumber
Pyth, 31 byte
Cobalah online: Demonstrasi
Penjelasan:
sumber
Bash + coreutils, 61
Bahasa "arus utama" terpendek sejauh ini ...
Output tes:
sumber
CJam,
37 3534 byteIni cukup bagus .. Golf sekarang ..
PEMBARUAN: 1 byte disimpan berkat @ Sp3000
Cobalah online di sini
sumber
C, 97 byte
Kode Tes:
sumber
q (34)
Saya yakin itu bisa lebih pendek
misalnya
sumber
":"sv 0 8 11__[;8]15$2_($)"n"$1e3*
Julia,
1109695 byteIni menciptakan fungsi tanpa nama yang menerima integer sebagai input dan mengembalikan string. Untuk menyebutnya, berikan nama, mis
f=t->...
.Penjelasan + tidak dikumpulkan:
Contoh:
sumber
C #,
179175 BytesKetika Anda memiliki builtin yang Anda inginkan, mengapa tidak menggunakannya?
Dengan pemformatan yang lebih baik:
sumber
Unggul,
6563 karakterDengan asumsi mikrodetik Anda ada di A1 :
Keluaran:
sumber
Perl,
14178 byte77 byte kode, +1 untuk
-n
bendera. Jalankan dengan:Terima kasih kepada Thomas Kwa dan chilemagic untuk memotong ukuran kode saya hampir setengah.
sumber
3600000000
bisa36e8
.chomp($n=<STDIN>);
Anda dapat menjalankannya sebagai satu-liner dengan-n
bendera (yang dihitung sebagai 1 karakter). Anda juga tidak perlu diint(..)
sekitar masing-masing$_
. Menerapkan tip Thomas juga bisa kita turunkanecho 12345678900 | perl -ne'printf"%02d:%02d:%02d:%03d:%03d\n",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_%1e3'
dan mungkin ada cara yang lebih pendek juga!\n
dalam string keluaran juga. Anda juga dapat mengganti string dengan"%02d:"x3 ."%03d:%03d"
printf"%02d:%02d:%02d:%03d:%03d\n",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_%1e3
dan kemudian Anda menambahkan byte tambahan untuk-n
bendera. Jika Anda menggunakan-nle
misalnya, itu akan dihitung sebagai tambahan 2 (untukn
danl
). Anda mendapatkan-
dane
(atauE
jika perlu menggunakansay
) secara gratis.Matlab - 88
89byteMemperoleh satu byte dengan solusi tanpa menggunakan fungsi bawaan:
Buat fungsi sebaris yang mengambil argumen input numerik
t
dan mengembalikan string.ia menggunakan kombinasi vektor
fix
danmod
untuk memisahkan elemen waktu, lalu ditampilkan.itu agak frustasi bahwa pemformatan string output mengambil begitu banyak, lebih dari perhitungan sendiri ...
Uji:
Versi 89 byte:
Membagi angka, menggunakan fungsi bawaan untuk bagian hh: mm: ss, yang tidak dapat menangani mikrodetik sehingga string dilengkapi dengan kombinasi
fix
danmod
operasisumber
JavaScript (ES6),
128118116111 byteMungkin ada beberapa potensi golf dalam hal ini.
Demo
ES6 jadi Firefox saja, untuk saat ini:
sumber
C,
113103105 byteEDIT: menyingkirkan beberapa byte lagi
FIX: dihapus tipe lama, terima kasih kepada beberapa pengguna
Bukan jawaban C terpendek, tapi saya bersenang-senang dengan carriage return jadi saya merasa seperti seseorang mungkin suka ini.
Sebut saja seperti:
sumber
CoffeeScript, 127 byte
Mengambil pendekatan dalam jawaban ASCIIThenANSI . Sayang sekali bahwa API Konsol JavaScript tidak memiliki penampung format untuk nomor padding.
sumber
Powershell, 153
Pemakaian
sumber
F #,
111 92102 byteIterasi pertama: Ide dasar.
Iterasi kedua: Konstanta yang lebih kecil
Iterasi ketiga: Pemformatan yang benar untuk bagian satu digit.
Perhatikan bahwa fungsi ini harus diberi int64 agar berfungsi.
Output contoh:
sumber
PHP -
115102 byteSolusi dalam 155 byte (dibungkus di sini pada 3 baris untuk dibaca):
Baris kedua menghitung (dari dalam ke luar) nilai yang tepat dari komponen yang dimulai dengan mikrodetik.
Versi lebih pendek (115 byte, terbungkus dua baris agar mudah dibaca):
Ini juga menggunakan tugas yang tertanam untuk menghitung konversi jumlah input mikrodetik dalam milidetik, detik, menit dan jam menggunakan angka floating point. Operator modulus (
%
) dan format angka desimal (%d
) dariprintf()
kemudian digunakan untuk memaksa mereka ke angka integer (bagian fraksional diabaikan).Solusi lain yang menggunakan fungsi tanggal (102 byte)
Jam: menit: bagian detik ditangani oleh fungsi tanggal PHP
gmdate()
danstrtotime()
, mili- dan mikro-detik diekstraksi sebagai string dari nilai input.Pemakaian:
sumber
Java, 215 byte
Metode
f
melakukan beberapa perhitungan untuk menghitungn
jam, menit dll. Dan mendelegasikan ke metodep
untuk memformat setiap nilai dengan benar.Diformat:
Pemakaian:
sumber
Ruby - 82 Bytes
sumber