Awalnya diposting (dan dihapus) oleh @Tlink , yang kemungkinan besar terinspirasi dari pertanyaan StackOverflow ini .
Karena itu memalukan karena terhapus, karena sepertinya tantangan yang bagus secara umum, saya pikir saya akan memposting ulang dengan format dan aturan yang tepat. (Saya sudah mencoba menghubungi @Tlink dan mendapatkan izin untuk mempostingnya, tetapi dia tidak merespons lagi, itulah sebabnya saya memutuskan untuk mempostingnya sendiri sekarang.)
Input: Enam digit.
Keluaran: Baik waktu valid pertama atau terakhir dalam format 24 jam ( 00:00:00
sampai 23:59:59
). (Anda dapat memilih sendiri apakah Anda menampilkan waktu valid pertama atau terakhir.)
Contoh:
Ketika input 1,8,3,2,6,4
, waktu berikut dapat dibuat:
12:36:48 12:38:46 12:46:38 12:48:36
13:26:48 13:28:46 13:46:28 13:48:26
14:26:38 14:28:36 14:36:28 14:38:26
16:23:48 16:24:38 16:28:34 16:28:43
16:32:48 16:34:28 16:38:24 16:38:42
16:42:38 16:43:28 16:48:23 16:48:32
18:23:46 18:24:36 18:26:34 18:26:43
18:32:46 18:34:26 18:36:24 18:36:42
18:42:36 18:43:26 18:46:23 18:46:32
21:36:48 21:38:46 21:46:38 21:48:36
23:16:48 23:48:16
Jadi kita akan menampilkan salah satu 12:36:48
atau 23:48:16
dalam hal ini, menjadi yang pertama / terakhir.
Aturan tantangan:
- Nyatakan apakah Anda menampilkan waktu valid pertama atau terakhir dalam jawaban Anda.
- I / O fleksibel. Input dapat berupa enam bilangan bulat yang terpisah; string yang berisi enam digit; daftar / array bilangan bulat; satu nomor (mungkin oktal); dll. Keluaran dapat berupa daftar / array angka yang dipesan dengan benar; sebuah String dalam format
HH:mm:ss
/HHmmss
/HH mm ss
; setiap digit dicetak dengan pembatas baris baru; dll. Panggilan Anda. - Anda diizinkan untuk mengambil digit dalam urutan apa pun yang Anda inginkan, sehingga mereka sudah dapat diurutkan dari terendah ke tertinggi atau sebaliknya.
- Jika tidak ada waktu yang valid dapat dibuat dengan angka yang diberikan (yaitu
2,5,5,5,5,5
), jelaskan dengan cara apa pun yang Anda inginkan. Dapat mengembalikannull
/false
;"Not possible"
; crash dengan kesalahan; dll. (Anda tidak dapat menampilkan waktu yang tidak valid seperti55:55:52
, atau waktu yang valid seperti lainnya00:00:00
.) Sebutkan bagaimana ia menangani input yang tidak dapat dibuat waktu yang valid. - Anda tidak boleh menampilkan semua waktu yang valid yang mungkin. Hanya yang paling awal / terbaru yang akan di-output / dikembalikan.
24
untuk jam (yaitu24:00:00
), atau60
untuk menit / detik (yaitu00:60:60
) tidak valid. Kisarannya adalah[00-23]
untuk jam dan[00-59]
untuk menit dan detik.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
Kasus uji:
Input: Earliest output: Latest output:
1,2,3,4,6,8 12:36:48 23:48:16
2,5,5,5,5,5 None possible None possible
0,0,0,1,1,1 00:01:11 11:10:00
1,1,2,2,3,3 11:22:33 23:32:11
9,9,9,9,9,9 None possible None possible
2,3,5,5,9,9 23:59:59 23:59:59
1,2,3,4,5,6 12:34:56 23:56:41
0,0,0,0,0,0 00:00:00 00:00:00
1,5,5,8,8,8 18:58:58 18:58:58
1,5,5,5,8,8 15:58:58 18:58:55
1,1,1,8,8,8 18:18:18 18:18:18
23:48:16
keluaran yang valid untuk contoh?06:08:60
valid, mengingat ada lompatan kedua pada menit itu?60
selama menit dan detik tidak valid. Rentang adalah[00-23]
,[00-59]
, dan[00-59]
. Akan mengklarifikasi ini dalam tantangan.Jawaban:
C (gcc) ,
186174 byteCobalah online!
-12 byte terima kasih kepada Kevin Cruijssen
Mungkin tidak optimal, tetapi berhasil. Anehnya untuk beberapa alasan dengan 7 argumen implementasi gcc pada TIO mengharuskan Anda benar-benar menyediakannya atau segfaults. Di komputer saya itu tidak perlu.
Format: G (X, 0,6) -> Y di mana X adalah angka 6 digit yang digitnya akan digunakan dan Y adalah angka 6 digit yang bila diambil sebagai waktu (dengan memasukkan: dengan tepat) minimal.
sumber
{0,1,10,100,1000,10000,100000}
ke{0,1,10,100,1e3,1e4,1e5}
. Juga, Anda dapat golffor(I=0;I<F;++I){E=O%10;M=G(O/10,L*10+E,F-1);T=T>M?M:T;O=(O/10)+E*D[F];}
untukfor(I=0;I++<F;M=G(O/10,L*10+E,F-1),T=T>M?M:T,O=(O/10)+E*D[F])E=O%10;
, dan menghapus tanda kurung di sekitarif
. Cobalah online 174 byte . Saya juga sukaG(O,L,F,T,I,M,E)
. :)...1e3,1e4,1e5}
tidak berhasil. Terima kasih untuk sarannya.Haskell ,
1149686 byteSekarang dengan output yang kurang ketat. Mengambil input sebagai string angka dan membandingkan permutasi terhadap batas dengan perbandingan daftar. Dengan menit dan detik hanya digit pertama yang diperiksa. Hancur dan terbakar jika tidak ada permutasi yang valid.
Cobalah online!
sumber
Python 2 ,
131115112 11210910588 byteCobalah online!
I / O adalah daftar bilangan bulat
Melempar kesalahan jika tidak ada waktu yang memungkinkan
Alternatif:
Python 2 , 88 byte
Cobalah online!
Mengembalikan waktu terbaru
Mengembalikan tuple kosong untuk waktu yang tidak valid
Disimpan
sumber
05AB1E ,
2015 byteMasukan sebagai string yang diurutkan.
Output adalah waktu terkecil sebagai string.
Dalam hal tidak ada solusi, daftar kosong adalah output.
Cobalah online!
sumber
JavaScript (ES6),
938988 byteMengharapkan array 6 digit, diurutkan dari terendah ke tertinggi. Mengembalikan string 6 digit pada waktu valid pertama, atau
false
jika tidak ada solusi.Cobalah online!
Berkomentar
Kami mencoba semua permutasi input secara rekursif hingga kami menemukan yang lulus tes hibrid menggunakan aritmatika dan ekspresi reguler.
sumber
Japt , 17 byte
Mengambil input sebagai string digit dan output waktu valid pertama; loop tak terhingga jika tidak ada waktu yang valid.
Cobalah
Penjelasan
sumber
Retina ,
7774696562 byteCobalah online! Output waktu paling awal, atau string kosong jika tidak ada waktu dapat ditemukan. Edit: Disimpan
58 byte berkat @TwiNight Penjelasan:Hasilkan semua permutasi. Cara
:
kerjanya melalui string sebagai permutasi dihasilkan, berakhir di awal.Urutkan waktu ke dalam urutan.
Keluarkan waktu valid pertama.
sumber
L0
0G
sebenarnya.Merah ,
157124 byteTerima kasih kepada Kevin Cruijssen karena mengingatkan saya untuk membaca descritions lebih cermat!
Cobalah online!
Mengambil string yang diurutkan sebagai input. Kembali
none
jika tidak memungkinkan untuk meluangkan waktu.Penjelasan:
sumber
sort
pada awalnya perlu? Dalam tantangan saya nyatakan: " Anda diizinkan untuk mengambil angka dalam urutan apa pun yang Anda inginkan, sehingga mereka sudah dapat diurutkan dari terendah ke tertinggi atau sebaliknya. "Python 2 , 78 byte
Cobalah online!
Arnauld menyimpan satu byte. Terima kasih!
Mengharapkan daftar seperti
['1','2','3','4','6','8']
dalam urutan:123648
Menghasilkan bilangan bulat seperti untuk 12:36:48. Saya harap itu bisa diterima.sumber
62**3
bukan240000
?Jelly , 15 byte
Cobalah online!
Diposting setelah permintaan. Pendekatannya sama dengan jawaban yang lain, namun jawaban ini dikembangkan secara mandiri.
sumber
Japt ,
3923 byteCukup yakin ada cara yang lebih pendek untuk melakukan ini, tetapi saya ingin mencoba menggunakan objek Date di Japt.
Mengambil input sebagai susunan angka yang diurutkan, mengembalikan waktu valid terbaru atau output kosong jika tidak ada.
Kehilangan 10
poundbyte berkat Shaggy .Coba di sini .
sumber
Ruby ,
68 67 62 5655 byteCobalah online!
Input: array angka yang diurutkan (sebagai bilangan bulat).
Output: Array digit atau
nil
jika tidak ada solusi yang ditemukansumber
eval "
saya pikir.a*9+b<22
untuk satu byte.Jelly , 17 byte
Saya hampir yakin ini bukan pendekatan terpendek ... akan melihat ini lagi nanti :)
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) , 63 byte
Cobalah online!
Mengambil daftar digit yang diurutkan sebagai input. Pengembalian
Missing[NotFound]
untuk input yang tidak valid.Penjelasan
Temukan semua permutasi dari input. Karena input diurutkan, dijamin bahwa semua waktu yang valid dalam urutan meningkat.
Temukan daftar pertama yang cocok ...
Unsur pertama, diberi label
a
, adalah 0, 1, atau 2, dan label kedua, ketiga, dan elemen kelimab
,c
dand
masing-masing ...... sedemikian rupa sehingga
a*b
kurang dari 10, dand
danc
kurang dari 6, dengand >= c
.Caranya adalah bahwa untuk semua nomor
00
untuk24
, produk dari dua digit adalah paling 9, dan angka-angka tidak valid mungkin25
untuk29
(karena kita memaksa digit pertama menjadi 0, 1, atau 2) memiliki produk dari setidaknya 10.sumber
Pyth , 37 byte
Suite uji
Penjelasan:sumber
Perl 5 dengan
-palF
, 73 byteCobalah online!
Output suka
HHmmss
dan output baris kosong untuk entri yang tidak valid.Setiap jawaban yang saya buat baru-baru ini telah digunakan
glob
untuk permutasi ... Aneh!sumber
Bash + GNU sed,
83,72, 69 byteseq 0 86399|sed "s/^/date +%T -ud@/e;h;`printf s/%d//\; $@`/\w/d;x;q"
Bagaimana itu bekerja
Pra-hasilkan semua string waktu yang mungkin, untuk cap waktu di kisaran 0 hingga 86399, menggunakan perintah GNU-sed e (xecute) +
date
.%seq 0 86399|sed "s/^/date +%T -ud@/e;h;"
Hasilkan
sed
skrip dengan 6 perintah substitusi berurutan, untuk setiap digit input.%echo sed `printf s/%d//\; $@`
Kemudian, terapkan substitusi, hapus semua jalur input yang memiliki setidaknya satu digit tersisa, cetak baris yang cocok pertama (string waktu asli diekstraksi dari ruang penahanan dengan
x
).Uji
Cobalah secara Online!
sumber
Kotlin ,
396391389 byteTidak ada petunjuk bagaimana membuat ini lebih kecil. Saya pikir itu dua kali lipat dari apa yang mungkin. Menghasilkan waktu paling awal. Terima kasih kepada Kevin untuk 7 byte!
Cobalah online!
sumber
var l=0>1
danvar e=1>0
? Juga, mengapal=l
dane=e
perlu? Dua hal yang tampaknya berhasil untuk golf adalahvar e=1>0
untukvar e=!l
dan menghilangkan ruang sebelumnya"None"
. Juga, semua falsey-output baik-baik saja, jadi"None"
bisa juga adil0
."0"
bisa saja0
0
tanpa kesalahan .. Dan fungsi Anda saat ini tidak menentukan tipe kembali sejauh yang saya tahu, jadi bukankah itu akan secara implisit kembali sebagai objek? PS: Saya sama sekali tidak kenal Kotlin, baru mencobanya tanpa tanda kutip dan hasilnya sama. ;) Mungkin sesuatu yang lain tidak berfungsi karena itu, yang saya tidak sadari.MATL ,
3130 byteCobalah online!
Input adalah 6 bilangan bulat, output adalah jam minimum, menit, dan detik dalam sebuah array. Gangguan input yang tidak memungkinkan waktu seperti itu.
(-1 byte terima kasih kepada @Luis Mendo.)
sumber
2&A
dengan!A
, karena matriks biner tidak akan pernah menjadi vektor barisPerl 6 , 43 byte
Cobalah online!
Mengharapkan array input yang diurutkan. Pengembalian
Nil
untuk input yang tidak valid.sumber
Stax , 15 byte
Jalankan dan debug itu
Dibutuhkan serangkaian digit yang diurutkan untuk input. Ini mengembalikan permutasi pertama yang memenuhi beberapa kriteria.
sumber
Retina ,
5847 byteCobalah online!
Input adalah 6 digit dalam urutan terurut. Output adalah 6 digit yang menunjukkan waktu valid paling awal, atau string kosong jika tidak ada waktu yang valid.
EDIT: Saya idiot, -9 byte
Penjelasan
Algoritma
Untuk singkatnya, mari tentukan digit rendah sebagai 0-5, dan digit tinggi sebagai 6-9.
Pertama, atur ulang digit sehingga "low-ness" atau "high-ness" dari setiap posisi benar. Pengaturan yang benar, untuk setiap jumlah digit tinggi pada input:
Karena penataan ulang akan gagal pemeriksaan akhir dalam input memiliki 4+ digit tinggi, kita dapat mengabaikan kasus itu sepenuhnya.
Kemudian, sortir posisi terendah dan tertinggi secara terpisah. Dikombinasikan dengan penataan ulang, ini memberikan nilai terendah yang memenuhi batasan menit dan kedua. Jadi ini memberikan waktu valid paling awal, jika ada.
Akhirnya, periksa apakah kami memiliki waktu yang valid. Jika tidak, buang string.
Program
Cocokkan
LHH
dan tukarkan dua digit pertama dalam (menjadiHLH
) itu, dan ulangi sampai tidakLHH
ada lagi . Ini memberikan pengaturan yang benar.Sebenarnya saya berbohong. Tidak diperlukan penyortiran karena 1) swapping hanya terjadi antara digit yang berdekatan dan hanya antara yang rendah dan yang tinggi; dan 2) input diurutkan. Jadi posisi terendah dan tertinggi secara individual sudah dalam urutan diurutkan.
Hanya menyimpan string jika itu adalah waktu yang valid
sumber