Membaca buku itu mudah, tetapi mencetak buku bisa sedikit rumit. Saat mencetak buklet, printer harus mengatur halaman dengan cara tertentu agar dapat dibaca dari kiri ke kanan. Cara ini dilakukan adalah dengan menggunakan pola seperti di bawah ini
n, 1, 2, n-1, n-2, 3, 4, n-3, n-4, 5, 6, n-5, n-6, 7, 8, n-7, n-8, 9, 10, n-9, n-10, 11, 12, n-11…
Uji Kasus
Buklet 4 halaman: 4, 1, 2, 3
Buklet 8 halaman: 8,1,2,7,6,3,4,5
Buklet 12 halaman: 12,1,2,11,10,3,4,9,8,5,6,7
Buklet 16 halaman: 16,1,2,15,14,3,4,13,12,5,6,11,10,7,8,9
Buklet 20 halaman: 20,1,2,19,18,3,4,17,16,5,6,15,14,7,8,13,12,9,10,11
Tugas
Tugas Anda adalah, mengingat bilangan bulat n
yang merupakan kelipatan dari 4, menampilkan array angka yang dapat digunakan untuk mencetak buku n
halaman.
Catatan: Selama output menghasilkan angka yang benar, baik dibatasi oleh spasi, koma, tanda hubung, atau tanda kurung, metode apa pun untuk mendapatkan solusi dapat digunakan
Ini adalah pertanyaan kode-golf sehingga jawaban akan dinilai dalam byte, dengan kemenangan paling sedikit.
Jawaban:
05AB1E ,
987 byteCobalah online!
Penjelasan
sumber
JavaScript (ES6),
4945 byteDisimpan 4 byte dengan bantuan dari @RickHitchcock
Demo
Tampilkan cuplikan kode
Non-rekursif, 51 byte
Demo
Tampilkan cuplikan kode
sumber
f=(n,a=1)=>n<a+3?[]:[n,a,a+1,n-1,...f(n-2,a+2)]
n<a
sebenarnya cukup, jadi itu 4 byte yang disimpan. Terima kasih!Python 2,
999388585655 bytesCobalah online!
-6 byte dengan menghapus indentasi yang tidak dibutuhkan, terima kasih Oliver Ni
-5 byte dengan mengubah kondisional, terima kasih Luis Mendo
-30 byte dengan mengoptimalkan pernyataan cetak, terima kasih Arnold Palmer
-2 byte dengan meletakkan loop pada satu baris, terima kasih nedla2004
-1 byte dengan melakukan beberapa sihir, terima kasih Pak Xcoder
sumber
lambda
(walaupun ini mungkin cukup berbeda untuk menjamin jawaban yang terpisah).f-i+1,i,i+1,f-i
di setiap loop bukannya mencetak nilai terakhir dengan syarat. Ini juga memungkinkan menghapus inisialprint f,
.Python 2 , 46 byte
Cobalah online!
Menghasilkan kisaran
[1..n]
dan muncul dari depan dan belakang dalam pola berulangback, front, front, back, ...
Python 2 , 49 byte
Cobalah online!
Menghasilkan 4 elemen pertama, kemudian secara rekursif berlanjut dengan nilai atas
n
menurun 2 dan nilai lebih rendahk
meningkat 2.Python 2 , 49 byte
Cobalah online!
Langsung menghasilkan nilai
i
ke-10 dari daftar, menggunakan-i%4/2
sebagai Boolean untuk apakah akan mengambil nilai yang lebih rendah atau lebih tinggi.sumber
Python 3 ,
686362 byte−5 byte berkat @ notjagan (menghapus spasi dan menggunakan
[*...]
bukanlist()
).−1 byte berkat @ovs (
*1
bukan[:]
) .Cobalah online!
sumber
r*1
bukannyar[:]
untuk -1 byte`MATL ,
191710 byteCobalah online!
Penjelasan
sumber
Jelly ,
1211 byteDitingkatkan menjadi 11 byte, "Metode Kombinasi":
Cobalah online!
Bagaimana?
Ini menggunakan perhitungan permutasi dan sistem bilangan faktorial:
12 byter yang tidak ditingkatkan, "Pola Rajutan":
Cobalah online!
Bagaimana?
Ini adalah pendekatan sederhana, itu menciptakan dua helai, interleave mereka dan kemudian memotong ujung yang longgar:
sumber
Oktaf ,
4336 bytePort jawaban ini dalam C (gcc) dapat ditemukan di sini .
Penjelasan
k=1:2:n/2
: Menghasilkan urutan linear dari 1 hinggan/2
pada langkah 2. Perhatikan bahwa ini segera digunakan pada langkah berikutnya.[n-k+1;k;k+1;n-k]
: Menciptakan 4 baris matriks sehingga baris pertama menciptakan urutann, n-2, n-4...
ke bawahn-(n/2)+2
, baris kedua1, 3, 5...
hinggan/2 - 1
, baris ketiga adalah baris kedua yang ditambahkan oleh 1 dan baris keempat adalah baris pertama yang ditambahkan oleh 1.[n-k+1;k;k+1;n-k](:)'
: Ini menumpuk semua kolom matriks ini bersama-sama dari kiri ke kanan untuk membuat vektor kolom tunggal, dan kami memindahkannya ke vektor baris untuk tampilan yang mudah. Susun kolom bersama-sama dengan cara ini justru menciptakan urutan yang diinginkan.Perhatikan bahwa ini adalah fungsi anonim, sehingga Anda dapat menetapkannya ke variabel sebelum menggunakannya, atau Anda dapat menggunakan
ans
variabel bawaan yang akan dibuat setelah membuat fungsi.Cobalah online!
sumber
input
dan saya menyalahgunakan sintaks sedikit lebih dengan menyimpan basis vektor incremental ketika saya sedang membuat baris pertama dan mengambil inputn
dari input fungsi anonim yang sebenarnya itu sendiri sehingga saya sekarang dapat memasukkannya ke dalam satu pernyataan. Terima kasih!R , 48 byte (ditingkatkan)
Terima kasih kepada @Giuseppe untuk -7 byte!
Kuncinya adalah yang
x=1:n;x[order(x%%2)]
setara denganorder(1:n%%2)
.Cobalah online!
R , 55 byte (asli)
Golf
Tidak dikoleksi dengan komentar
Baca
n
dari stdin.Tetapkan
x
sebagai urutan halaman dari 1 hinggan
.Pesan halaman bahkan halaman sebelum halaman tidak rata.
Pesan halaman dengan urutan menurun sesuai dengan bagian tengah buku yang dihitung oleh
n/2+.5
.Contoh dengan 8 halaman:
Cobalah online!
sumber
(1:n)[order(1:n%%2)]
itu sama denganorder(1:n%%2)
Mathematica,
545345 bytePenjelasan
sumber
Python 2 ,
6463 byte-1 byte berkat ovs!
Cobalah online!
sumber
n-i-1
dapatn+~i
Haskell, 42 byte
Cobalah online!
Satu byte lagi:
Haskell, 43 byte
sumber
Java 8,
8472 byteatau
-12 byte berkat komentar @TheLethalCoder pada jawaban C #.
Jawaban lama (84 byte):
Penjelasan:
Coba di sini.
sumber
Perl 5 , 47 + 1 (-n) = 48 byte
Cobalah online!
sumber
Swift 3 , 74 byte
Cobalah online!
Swift 3 , 60 byte
Untuk beberapa alasan, ini tidak berfungsi di lingkungan online yang saya coba sejauh ini. Jika Anda ingin mengujinya, menempatkan
var g=
di depannya, dan menyebutnya denganprint(g(12))
di Xcode (Taman bermain) .Ini adalah gambar setelah saya menjalankannya di taman bermain Xcode, versi 8.3.1 (Running Swift 3.1):
sumber
QBIC , 25 byte
Meskipun inputnya adalah% 4, ritme sebenarnya adalah berbasis 2.
Penjelasan
sumber
C (gcc) , 66 byte
Port jawaban Octave saya untuk C (gcc):
Cobalah online!
sumber
cQuents , 21 byte
Cobalah online!
Penjelasan
sumber
R ,
6460 byteSangat dikalahkan oleh djhurio ! Jawabannya cukup elegan, jawablah.
Port dari Oktaf jawaban rayryeng .
Cobalah online!
solusi asli (64 byte):
Fungsi rekursif.
Cobalah online!
sumber
Bash + Perl + Groff + Psutils, 48 byte
Memperlihatkan output aktif
stderr
. Output berisi beberapa trailing sampah.Contoh penggunaan:
sumber
Pyth ,
2120 byteTest Suite.
Jika mengeluarkan sebagai daftar bersarang diperbolehkan:
Pyth ,
2019 byteTest Suite.
Penjelasan
sumber
Ruby , 40 byte
Cobalah online!
sumber
C #, 107 byte
Simpan dua penghitung, satu mulai dari 1, satu di p. Di setiap iterasi loop, tulis empat elemen dan hitung saja kenaikan atau penurunan setelah setiap entri. Ketika penghitung bertemu di tengah, berhenti.
sumber
p=>{var a=new int[p];for(int i=0,q=1;q<p;a[i++]=p--){a[i++]=p--;a[i++]=q++;a[i++]=q++;}return a;};
denganSystem.Func<int, int[]> f =
tidak memasukkannya ke dalam bytecount. Anda juga dapat menambahkan tautan ke TIO, yang sangat berguna ketika mencoba mengizinkan orang untuk mencoba kode Anda sendiri!q
ke0
dan pra kenaikan diq<p
->++q<p
dan kemudian hapus kenaikan pos kedua untuk menyimpan byte. Pindahkan kedua pernyataan trailing loop ke tahap terakhir dari for loop sehingga Anda dapat menghapus kurung kurawal.p=>{for(int q=0;++q<p;)System.Console.Write(p--+$",{q++},{q},{p--},");}
. TIO.Haskell , 58 byte
Cobalah online!
sumber
Pyth ,
272423 byte-3 byte dengan mencetak sepanjang alih-alih pada akhirnya.
-1 Terima kasih kepada Tn. Xcoder
Cobalah online!
Atau di Compiler / Executor online
Ini adalah program nyata pertama saya di Pyth, jadi mungkin ada metode yang lebih baik yang tidak saya ketahui.
Penjelasan
sumber
FN
denganV
untuk -1 byteC ++ (gcc) ,
898468 byteSebagai lambda generik yang tidak disebutkan namanya.
n
adalah #halaman (% 4 == 0) danC
merupakan parameter referensi untuk hasilnya, wadah kosong sepertivector<int>
(hanyapush_back
diperlukan).solusi sebelumnya:
Cobalah online!
Sedikit tidak berbulu:
solusi sebelumnya sedikit tidak diserang :
Itu cukup mudah dikembangkan dan ada beberapa optimisasi kecil di aritmatika.
Pemakaian:
Print-Variant, 77 byte ketinggalan zaman
Jika Anda bersikeras mencetak nilai, ada solusi ini:
Di mana
o
yang Anda inginkanstd::ostream
, sepertistd::cout
Penggunaan (jika 2nd lambda ditugaskan ke
g
):sumber
Gangguan Umum, 79 byte
Cobalah online!
sumber
Lua, 94 byte
Untuk tantangan ini saya benar-benar datang dengan 2 metode berbeda yang keduanya 94 byte.
Metode 1:
Kode yang dikomentari:
Metode 2:
Metode ini mirip dengan metode pertama namun saya malah mengembalikan string gabungan daripada string.format ()
Dalam kedua metode saya telah menggunakan konsep n dan saya semakin dekat bersama
sumber
PHP, 51 +1 byte
mencetak nomor halaman yang dipisahkan oleh garis bawah dengan pembatas trailing.
Jalankan sebagai pipa dengan
-nR
atau coba online .sumber
J , 22 byte
Cobalah online!
Penjelasan
sumber