Biasanya perlu membuat antarmuka pemilihan halaman. Biasanya terlihat seperti ini:
prev 1 ... 3 4 [5] 6 7 ... 173 next
Yang berarti ada total 173 halaman, dan Anda berada di halaman ke-5 saat ini.
Tantangan ini mengharuskan Anda mengambil jumlah total halaman dan nomor halaman saat ini sebagai input, dan menghasilkan string (atau array) untuk "menampilkan" pemilih halaman.
Memasukkan
2 bilangan bulat positif
- nomor halaman saat ini
- hitungan halaman
Dijamin bahwa 1 <= saat ini <= total.
Keluaran
Keluarkan string atau array yang mewakili ui untuk pemilih halaman.
- Jika output sebagai string, spasi tunggal (U + 0020) harus digunakan di antara setiap halaman.
- Jika output sebagai array, array harus menghasilkan hasil yang sama seperti string setelah mengkonversi setiap item menjadi string dan bergabung dengan mereka dengan satu spasi.
- Tiga titik (
...
) bukan opsional untuk output array.
- Tiga titik (
Detail
- Jika saat ini == 1, tidak ada "prev" yang akan ditampilkan, jika tidak, "prev" yang lebih dulu.
- Jika current == total, "next" tidak akan dihasilkan, jika tidak, "next" adalah yang terakhir.
- Halaman pertama (1) dan halaman terakhir (total) harus selalu ditampilkan.
- Halaman saat ini, halaman (saat ini - 1), halaman (saat ini - 2), halaman (saat ini + 1), halaman (saat ini + 2) harus ditampilkan selama berada dalam kisaran [1..total].
- Tidak ada nomor halaman lain yang harus dikeluarkan.
- Halaman yang dikeluarkan harus diurutkan dalam urutan menaik.
- Keluaran tidak boleh berisi nomor halaman duplikat.
- Halaman saat ini harus disorot dengan membungkusnya menjadi sepasang
[]
. - Jika ada celah di antara tetangga, tiga titik (
...
) harus dimasukkan.
Uji Kasus
Current Total Output
1 1 [1]
1 2 [1] 2 next
1 10 [1] 2 3 ... 10 next
3 3 prev 1 2 [3]
3 6 prev 1 2 [3] 4 5 6 next
4 6 prev 1 2 3 [4] 5 6 next
4 7 prev 1 2 3 [4] 5 6 7 next
3 10 prev 1 2 [3] 4 5 ... 10 next
5 10 prev 1 ... 3 4 [5] 6 7 ... 10 next
10 10 prev 1 ... 8 9 [10]
52 173 prev 1 ... 50 51 [52] 53 54 ... 173 next
Aturan
- Ini kode-golf, kode terpendek menang!
4 , 6
sebagai test case. Mirip dengan3, 6
kasing, tetapi pastikan titik tidak ditambahkan ke sisi kiri.4,7
test case akan sangat dihargai - akan memastikan bahwa kedua case batas yang mengecualikan elips dapat secara bersamaan bertemuJawaban:
Retina ,
125113109107 byteCobalah online! Tautan termasuk kasus uji. Disimpan 12 byte berkat @MartinEnder. Penjelasan:
Konversikan ke unary.
Hasilkan semua nomor halaman dalam urutan terbalik.
Hapus baris baru yang memisahkan input. (Lagi pula, ada ruang dari pembuatan nomor halaman.)
Urutkan halaman kembali ke urutan menaik. Ini juga mengurutkan halaman saat ini, yang sekarang digandakan.
Tidak menggandakan dan membungkus
[]
sekitar halaman saat ini.Tambahkan elipsis jika halaman saat ini setidaknya 5, atau jika ada setidaknya 4 halaman setelah halaman saat ini. (Perhatikan spasi tambahan, untuk menghindari menyertakan halaman terakhir di elipsis.)
Tambahkan prev jika halaman saat ini bukan 1.
Tambahkan berikutnya jika halaman saat ini bukan halaman terakhir.
Konversi kembali ke desimal.
sumber
JavaScript (ES6),
130122121 byteAktifkan dengan sintaks currying, mis
f(3)(10)
.Tampilkan cuplikan kode
Cobalah online!
-1 byte (Arnauld): Diatur
X
keX-x
.sumber
.join
bukan bagian dari hitungan Anda! Saya jadi gila mencoba mencari tahu mengapa kode Anda akan bekerja tanpa bergabung, sedangkan kode yang sama tidak. Maka saya katakan Anda tidak memasukkannya ke dalam solusi Anda, tetapi memasukkannya ke dalam cuplikan Anda!6502 kode mesin (C64), 160 byte
Demo online - Penggunaan:,
sys49152,[current],[total]
missys49152,5,173
.Angka-angka harus dalam kisaran [1..255] dengan arus <= total. Karena ini tidak ditentukan sebaliknya, ini adalah rentang integer unsigned "alami" pada prosesor 8bit.
Penjelasan sebagai komentar daftar pembongkaran:
sumber
R ,
214 byte,168 byteCobalah online!
Terima kasih kepada @ user2390246 untuk beberapa kiat bermain golf yang hebat
sumber
c()
, yang menghilangkan kebingungan mengerikan dengan objek yang dipanggilc
.APL (Dyalog) ,
8382 byteFungsi infix anonim mengambil argumen saat ini sebagai kiri dan total sebagai argumen benar.
Cobalah online!
{
...}
lambda eksplisit di mana⍺
dan⍵
mewakili argumen kiri dan kanan:⍺<⍵
apakah saat ini lebih kecil dari total?' next'/⍨
Jika demikian (lit. gunakan itu untuk mereplikasi) teks(
...),
tambahkan yang berikut:⍳⍵
egmemulai 1 hingga total'x'@(
...)
ganti denganx
pada posisi di mana item berada ...~
tidak∊
anggota dari1
satu,
diikuti oleh⍵
jumlah seluruhnya,
diikuti oleh⍳5
lima ɩ ntegers pertama ([1,2,3,4,5]
)3-
dikurangi dari tiga ([2,1,0,-1,-2]
)⍺+
ditambahkan ke saat ini ([⍺+2,⍺+1,⍺,⍺-1,⍺-2]
)⊢
hasil yang (berfungsi untuk memisahkan⍺
dari'x'
)(
...)
terapkan fungsi diam-diam berikut pada posisi saat ini:⍕
format (stringify)'][',
tambahkan teks`1⌽
putar satu langkah ke kiri (pindahkan]
ke ujung)⊂
melampirkan (sehingga skalar yang sesuai dengan posisi yang ditunjukkan)∊
ϵ nlist (ratakan - karena kami membuatnya bersarang ketika kami memasukkan tanda kurung)⍕
format (stringify - 1 spasi yang memisahkan angka dari satu sama lain dan dari prosesx
)'x+'⎕R'...'
PCRE R eplacex
berjalan dengan tiga periode(
...),
tambahkan yang berikut:⍺>1
apakah saat ini lebih besar dari 1?'prev '/⍨
Jika demikian (lit. gunakan itu untuk mereplikasi) tekssumber
Bahasa Wolfram (Mathematica) ,
131114109 byteCobalah online!
Bagaimana itu bekerja
Banyak penggantian. Dimulai dengan daftar semua halaman, ganti, secara berurutan:
#->"["<>(t=ToString)@#<>"]"
: halaman saat ini dengan string yang diberi tanda kurung,1->"prev 1"
: halaman 1 dengan stringprev 1
,#2->t@#2<>" next"
: halaman terakhir dengan string(number) next
, dengan#-3|#+3:>"..."
: halamancurrent-3
dan halamancurrent+3
dengan string"..."
,x_/;Abs[x-#]>2:>Nothing
: semua halaman (integer) lain di bawahcurrent-2
atau di atascurrent+2
tanpa apa-apa. (Ya,Nothing
adalah built-in.)sumber
Funky ,
218210 byteMenyimpan beberapa byte, beberapa di antaranya berkat tsh
Cobalah online!
sumber
i<=p+2
bisa main golfi<p+3
, dant[2]="["+t[2]+"]"
mungkint[2]="["+p+"]"
?Python 2 ,
136130 byteCobalah online!
Cobalah online! dalam bentuk prettified, di mana Anda dapat melihat footer menerjemahkan secara harfiah untuk "mengkonversi masing-masing menjadi string, bergabung di spasi".
Ini merupakan alternatif dari pendekatan Lynn.
sumber
i or'...'
dan nol (seperti ini )Python 2 , 135 byte
Cobalah online!
Pertama-tama kita membuat string seperti
prev 1 3 4 [5] 6 7 10 next
, yang memiliki "celah" yang disebabkan oleh menghapus beberapa angka tetapi bukan ruang pembatasnya. Lalu kami mengganti setiap menjalankan 2+ spasi dengan...
menggunakan regex.sumber
(-3<x-c<3or x%t<2)
ke(x%t<2or-3<x-c<3)
-1, kedua argumen kepadaor
operator akan mengembalikan nilai boolean.Java 8,
201200197 bytePenjelasan:
Coba di sini.
sumber
Java (OpenJDK 8) ,
218179177167166 byteCobalah online!
sumber
"["+c+"] ";
: 172 bytep+=
sebelum for-loop di dalam deklarasi for-loop: 171 byteJelly , 59 byte
Program lengkap * mencetak hasilnya ke STDOUT. Membawa argumen
current
dantotal
dalam urutan itu.Cobalah online! atau lihat test-suite .
Bagaimana?
* Sebagai tautan diadik yang mengambil
current
di kiri dantotal
di kanan ini mengembalikan daftar dengan campuran karakter dan bilangan bulat; daftar ini termasuk spasi. ByteK
tidak dapat dengan mudah dihapus untuk mematuhi spesifikasi, karena hasilnya kemudian akan diberi tanda kurungcurrent
sebagai karakter yang terpisah (seperti[...'[','5','2',']'...]
) sehingga "mengkonversi setiap item menjadi string dan bergabung dengan mereka dengan satu spasi" akan gagal menghasilkan hasil yang diinginkan )sumber
Python 2 ,
178170 byteCobalah online!
Upaya kedua setelah membaca aturan lebih hati-hati.
-8 dengan kehilangan beberapa tanda kurung yang tidak dibutuhkan.
sumber
Oktaf ,
169 196 190 181 175 169166 byteCobalah online!
Saya akan menambahkan penjelasan nanti.
Hmm, sepertinya ada beberapa masalah dengan format output. Ini sekarang telah diselesaikan - semua output sudah benar. Namun sayang harganya 27 byte. Berhasil mencakar semua kembali meskipun dengan sedikit pemangkasan lemak.
*
bukan.*
- terima kasih @StewieGriffinsprintf
bukannum2str
karena saya sudah memiliki pegangan itus
.[]
ke dalamsprint
panggilan.strtrim()
tanpa menyebabkan spasi tambahan.sumber
C # (.NET Core) ,
195192 byteDisimpan 3 byte berkat Kevin Cruijssen.
Cobalah online!
sumber
c=>t=>
. Cobalah di sini: 192 byteC ++ - 247 byte
Cobalah online!
sumber
Python 2 ,
128124 byte-4 byte terima kasih kepada Jonathan Allan !
Cobalah online!
Keluaran sebagai daftar, tetapi tautan tio menyertakan cetak cantik.
sumber
while ~0:
adalah hal yang aneh untuk digunakan ketikawhile 1:
berfungsi dengan baik.[[c]]
keluar (seperti ini ) EDIT - begitu jugawhile 2*3*4*5*6*7*8*9*'I know a song that will get on your nerves, get on your nerves, get on your nerves;\n':
: pPHP,
157150 bytemengambil rincian secara harfiah ternyata menjadi pendekatan terpendek:
Jalankan dengan
php -nr '<code>' <curpage> <numpages>
atau coba online .sumber
CJam, 74
Output sebagai array. Cobalah online
Ganti final
p
denganS*
output sebagai string.Penjelasan:
sumber
Haskell,
145129 byteCobalah online!
Sunting: @ Ørjan Johansen menyimpan 16 byte. Terima kasih!
sumber
unwords$
, output array diizinkan. (2)s x=show x; ... s[a]
lebih pendek, setelah itu dapat digabung dengan yang berikutnya dengan:
danmap
, dan kemudianid=<<
menjadi lebih lama dari hanya menggunakan++
s. (3)max 4a-2
danmin(a+3)t-1
lebih pendek. Cobalah online!Script Golf - 104 karakter
Tidak disatukan
sumber
Perl 5,
113 + 1 (-p)109 +3 (-pal) byteCobalah online
sumber
$'
! Sudah sedikit bermain dengan ini, tetapi tidak bisa turun banyak, tetapi dengan menggunakan<>
alih-alih regex dan menggunakan-a
untuk menyimpan referensi$_
, saya bisa turun ke 111: Cobalah online! (-l
ditambahkan untuk dibaca)"@F"
input tunggal, ini solusi yang bagus! Tidak-l
diperlukan dalam hitungan byte, hanya untuk menjalankan semua tes sekaligus :). Saya tidak mengatakannya, tetapi validasi elipsis Anda sangat bagus!Ruby , 127 byte
Saya tidak terlalu senang dengan ini, terutama logika prev / next.
Cobalah online!
Tidak disatukan
sumber
PHP (Browser), 267 Bytes
Cobalah online!
Jelas tidak sekecil yang seharusnya, dan seperti yang ditunjukkan di atas, menggunakan PHP di command line bisa jauh lebih kecil. Inputnya adalah melalui permintaan GET, a adalah nomor yang dipilih, b adalah batasnya. Ini seperti
foo.bar.com/index.php?a=2&b=12
Tidak disatukan
Saya cukup yakin operator ternary saya dapat ditingkatkan, jangan ragu untuk mencoba.
sumber
[,$k,$n]=$argv;
-><?[$k,$n]=$_GET;
jika saya bersikeras halaman saat ini menjadi argumen pertama dan jumlah halaman yang kedua;<?extract($_GET);
jika saya ingin menggunakan argumen bernama.$a<$b-2
dengan$a<$b-3
untuk memperbaiki.<?=($a=$_GET['a'])>1?'prev 1 ':'[1] ',$a>4?'... ':'';for($i=$a>4?$a-3:1;$i<$a+3&++$i<$b=$_GET['b'];)echo$a-$i?"$i ":"[$i] ";echo$a<$b-3?"... ":"",$a<$b?"$b next":"[$b]";
(169 bytes)IBM / Lotus Notes Formula,
217211 Bytes-2 dengan terima kasih kepada @KevinCruijssen
-4 dengan menggunakan variabel untuk nilai-nilai @Teks
Pada dasarnya port jawaban Python 2 saya hanya untuk bersenang-senang mencoba mengingat bagaimana menggunakan Formula.
Tidak ada TIO untuk Formula jadi inilah tangkapan layar dari beberapa kasus uji:
sumber
x>a-3 & x<a+3
dalam Lotus Notes Formula? Apakah&x
dicadangkan untuk sesuatu, atau tidak ada alasan khusus mengapa ruang di kedua belah pihak wajib? Saya tidak pernah memprogram dalam bahasa ini btw, hanya ingin tahu. :)Excel VBA,
202201 BytesFungsi jendela langsung VBE anonim yang mengambil input dari jarak
A1:A2
dan keluaran ke jendela langsung VBE.Versi Subrutin
Termasuk untuk kesesuaian
sumber
PowerShell , 237 byte
Cobalah online!
Satu rangkaian string raksasa dengan tanda dolar terlalu banyak.
Berusaha bermain golf lebih jauh.Tidak, saya pikir ini sesingkat pendekatan ini bisa berjalan.sumber
Javascript (ES6),
265263258240239220194193182178 byte-2 dari menghapus alat debug
-5 dari menyadari bahwa saya menggunakan ES6 dan kadang-kadang bisa menghilangkan kurung
-18 dari menghapus sesuatu dari versi sebelumnya yang sekarang sudah usang
-1 dari melakukan beberapa hal licik
-19 dari menghapus variabel yang tidak perlu
-26 byte menghapus semua nilai falsey penghapusan yang terlalu rumit. Saya baru mengenal ES6
-1 dari menggunakan perbandingan yang lebih pendek
-11 dari menggunakan fungsi rekursif
* -4 dari penggantian
?...:0
dengan&&...
, dan... ${t}
dengan...+t
Ini terlalu banyak mengambil hidup saya, dan tidak memberikan cukup suara.
tapi saya sangat senang kode terakhir adalah kekuatan 2 (2 ^ 8)Saya tahu ada jawaban JavaScript lain yaitu sekitar 120 byte.tapi saya masih suka kode iniEDIT: saya tidak tahu apa yang saya pikirkan. 265 bukan 2 ^ 8 ...
Sambil membuat ini, saya berhasil memecahkan versi yang ungolfed. Ya Tuhan, aku benci kode yang tidak disukai.
EDIT 2: sekarang tampak seperti solusi 121 byte yang lebih baik
Penjelasan:
datang tetapi pada dasarnya y adalah
range(end, start)
dan itu melakukan beberapa hal keren seperti:page
1page > 4
total - page < 4
total - page == 0
dan hal-hal seperti itu dan hanya bergabung dengan ''. Saya tahu Anda tidak harus tetapi saya suka fakta yang semi-konvensional. Saya tidak tahu Nikmati.
Cobalah online!
Validasikan secara online!
Berikut ini adalah solusi
186185174170 byte yang tidak saya sukai: Cobalah online!sumber
PowerShell , 141 byte
Cobalah online!
Kurang bermain golf:
sumber