pengantar
Papan catur normal berisi 8 x 8 = 64 kotak:
Anda dapat melihat bahwa secara total, ada 12 keping putih . Hitam dan putih selalu memiliki jumlah potongan yang sama. Jika ada potongan lagi di papan tulis, potongan akan bertetangga, yang tidak diperbolehkan untuk tantangan ini. Untuk memperjelas beberapa hal, berikut adalah beberapa contoh:
Papan terkecil yang memungkinkan untuk tantangan ini adalah 3 x 3 :
Anda dapat melihat bahwa jumlah maksimum potongan sama dengan 2 . Jadi, ketika diberi N = 3 , Anda perlu output 2 . Jika inputnya adalah N = 4 , kita mendapatkan yang berikut:
Anda dapat melihat bahwa jumlah maksimum juga 2. Jadi untuk N = 4 , output harus 2 . Untuk N = 5 , output harus sama dengan 5 :
Contohnya
STDIN: 3
STDOUT: 2
STDIN: 4
STDOUT: 2
STDIN: 5
STDOUT: 5
STDIN: 6
STDOUT: 6
STDIN: 8
STDOUT: 12
Aturan
- Kiriman Anda harus berupa program, atau fungsi dll. Yang mengambil satu bilangan bulat dan menampilkan atau mengembalikan jumlah potongan di papan tulis
- Anda dapat dengan aman berasumsi bahwa inputnya adalah bilangan bulat non-negatif> 2
- Ini adalah kode-golf , sehingga program dengan jumlah byte terkecil menang!
- Perhatikan bahwa kotak di bagian kiri bawah papan selalu gelap. Potongan hanya ditempatkan di kotak gelap
- Anda harus menempati barisan penuh dengan potongan-potongan
code-golf
game
grid
board-game
Adnan
sumber
sumber
Jawaban:
Par , 8 byte
Satu byte digunakan per karakter.
Penjelasan
sumber
Hexagony , 19 byte
Cobalah online.
Penjelasan
Ini masih perhitungan yang sama seperti yang saya gunakan dalam jawaban CJam dan Labyrinth saya, tetapi karena model memori Hexagony ... khusus, agak sulit untuk memeras perhitungan menjadi 19 byte (sehingga pas di dalam sebuah panjang sisi 3 hexagon).
Seperti jawaban Labyrinth saya, ini diakhiri dengan kesalahan pembagian-oleh-0.
Ini kode yang tidak dilipat:
Seperti yang saya katakan kode sepenuhnya linier. Anda dapat menyatukan jalur yang dieksekusi bersama-sama dalam urutan abu-abu-ungu-hijau-merah-biru. Jalan itu sebenarnya berlanjut sedikit lebih jauh sampai menyentuh
:
di sebelah kiri. Menghapus/
(yang hanya mengarahkan kontrol aliran), seluruh program membuka gulungan secara linear adalah:Jadi pertanyaannya adalah bagaimana cara kerjanya. Memori Hexagony adalah grafik garis dari kisi heks, di mana setiap tepi kisi berisi nilai integer (awalnya nol). Memory pointer (MP) selalu berada di satu sisi dan menunjuk ke arah tertentu di sepanjang sisi itu. Operasi aritmatika umumnya diterapkan pada dua sisi menunjuk pada dan disimpan di tepi MP aktif.
Untuk program ini, kita akan menggunakan tiga sisi berlabel A , B , C , dengan MP dimulai seperti yang ditunjukkan di sini:
Jadi, inilah cara kerjanya:
sumber
{
, IP melompat ke2
sudut kiri. Setelah)
di sudut kanan, IP melompat ke'
di sudut kiri bawah. Kemudian IP melewati garis 2 dan 4 dengan cara membungkus yang aneh secara siklikal.LabVIEW,
2820 LabVIEW Primitifsumber
CJam, 10 byte
Uji di sini.
Penjelasan
sumber
Labirin , 11 byte
Woohoo, hanya satu byte di belakang CJam .
Cobalah online.
Ini pada dasarnya hal yang sama:
Namun, pada saat ini program belum berakhir. Sebaliknya, penunjuk instruksi telah menemui jalan buntu dan berbalik. Tetapi sekarang
/
mencoba untuk menghitung0/0
yang berakhir dengan kesalahan .sumber
Serius , 8 byte
Serius memiliki yang praktis
½
(float divide by 2), danK
(ceiling), jadi kita tidak perlu menambahkan satu sebelum pembagian.Coba di sini dengan penjelasan.
sumber
Python 2,
2221 byteSaya pertama kali berpisah dalam dua kasus, N aneh dan bahkan N.
Dengan N aneh kita dapat mengisi (N - 1) / 2 baris, yang berisi rata-rata N / 2 buah. Karena baris pertama selalu memiliki lebih banyak bagian, kita harus menghentikan hasil ini. Jadi ketika N aneh, kami memiliki potongan ceil ((N-1) / 2 * N / 2).
Dengan bahkan N kita dapat mengisi baris N / 2 - 1, atau lantai ((N - 1) / 2), setiap baris berisi potongan N / 2.
Kita dapat menggabungkan dua ekspresi ini dengan ceil (floor ((N-1) / 2) * N / 2). Sejak ceil (x / 2) = lantai ((x + 1) / 2) kita bisa menggunakan lantai divisi:
((N - 1) // 2 * N + 1) // 2
.sumber
JavaScript,
3735 bytePenjelasan
Gunakan teknik yang mirip dengan jawaban lainnya. Ini adalah algoritma ungolfed:
sumber
dc, 12
Hasil tes:
sumber
Pyth, 9 byte
Algoritma yang sama dengan jawaban Python 2 saya.
sumber
Japt ,
1614 byteCobalah online!
Bagaimana itu bekerja
Cukup mudah:
Saya berharap ada beberapa cara untuk memperhitungkan bahwa dua bagian dari kode sangat mirip. Saran diterima!
Versi lama (16 byte):
sumber
Jawa,
23015552Golf:
Tidak Disatukan:
Output program:
sumber
throws Exception
diizinkan.Scanner
kelas untuk input. Itu akan menghemat banyak byte, saya pikir. (TheBufferedReader
/InputStreamReader
combo mungkin lebih baik dalam penggunaan umum, tapi ini adalah kode golf, danScanner
bekerja dengan baik untuk input sederhana.)Kode mesin Zilog ez80, 9 byte
Dalam hex:
Dalam perakitan:
Input dalam register
h
, dan output dalaml
.Zilog ez80 adalah prosesor 8-bit dengan akumulator 8 bit dan register 24-bit. Berbeda dengan z80, ia memiliki
mlt
instruksi (multiply 8-bit), yang, dalam mode 16-bit, mengalikan byte tinggi dan rendah dari pasangan register, di sinihl
, dan menyimpan kembalihl
.Ini hanya berfungsi untuk nilai yang hasilnya dua kali pas dalam 8 bit; yaitu, n≤23.
sumber
TI-BASIC, 13 byte
Penggandaan implisit TI-BASIC membantu, tetapi tidak memiliki divisi integer.
⁻int(⁻X
adalah bentuk ceil yang lebih pendek (x).sumber
vba, 46
Panggil dengan? F (x), atau = f (A1) dalam formula
sumber
Pyth,
171413 byte-3 byte terima kasih kepada Ypnypn ! Mengatur ulang jumlah operator * untuk menghemat 1 byte.
Penjelasan:
Ketika n adalah genap, kita dapat menempati baris n / 2-1 dengan potongan n / 2, sehingga menghasilkan total n * (n / 2-1) / 2 buah. Ungkapan ini setara dengan (n * (n / 2-1) +1) / 2
Ketika n ganjil, kita dapat menemukan bagaimana dua kali jumlah potongan akan terlihat, dua kali jumlah potongan akan merentang n-1 baris, dan jika saya mengambil satu potong, kita dapat membagi n-1 baris menjadi (n- 1) / 2 grup yang terdiri dari 2 baris sehingga setiap grup memiliki n buah, sehingga ekspresi untuk kasus ini adalah (n * (n / 2) +1) / 2
Sekarang kedua ekspresi sangat mirip, kita dapat menulis kode.
Pertama kali saya menggunakan bahasa golf.
sumber
Javascript, 33 byte
Jika fungsi ES6 diizinkan maka 18 byte:
sumber
MATLAB,
3725 byteSaya percaya ini harus berhasil, tidak untuk semua kasus uji.
Ini juga berfungsi pada Oktaf . Anda dapat mencoba online di sini .
Untuk kode lama saya menambahkan program ke ruang kerja itu dalam file bernama
checkerboard.m
. Anda dapat menjalankannya dengan hanya memasukkancheckerboard
pada prompt, lalu ketika mulai, masukkan ukuran yang diperlukan pada prompt. Hasilnya akan dicetak.Untuk kode baru, cukup masukkan kode yang diposting di sini ke prompt, lalu panggil fungsi anonim sebagai
ans(n)
.sumber
Retina , 18 byte
Input dan output di unary .
Cobalah online!
Versi terbaru dari Retina (lebih baru dari tantangan ini) dapat menangani I / O desimal untuk empat byte tambahan:
Cobalah online!
Dengan input unary dan output desimal, kita dapat melakukan 16 byte, tetapi sepertinya sedikit peregangan:
Penjelasan
Masih pendekatan yang sama seperti orang lain, tetapi menggunakan penggantian regex pada representasi nomor unary.
Ini menghitung
n*((n-1)/2)
. Kami melakukan ini dengan mencocokkan dua karakter sekaligus (pembagian dua) dan menggantinya dengan seluruh string (dikalikan dengann
). Penguraiann
dilakukan dengan melewatkan sisa string, jika hanya satu atau dua karakter yang tersisa.Ini adalah pembagian integer dengan 2, dibulatkan ke atas. Kami hanya mengganti dua karakter dengan satu (pembagian dengan 2), tetapi memungkinkan pertandingan terakhir hanya terdiri dari satu karakter (pembulatan ke atas).
sumber
Python 3, 39 byte
Ini sedikit membengkak, tapi saya tidak yakin saya bisa bermain golf lebih jauh dari ini. Tautan untuk pengujian.
sumber
Prolog,
3938 byteKode:
Penjelasan:
Contoh:
Cobalah online di sini
Sunting: Disimpan 1 byte dengan mengganti ceil / 2 dengan + 1 // 2
sumber
Mumps, 17 byte
Terima kasih kepada Emigna untuk penjelasan algoritma sederhana. Ini mengeksploitasi "kekurangan" matematika Mumps bahwa operasi dijalankan secara ketat dari kiri ke kanan (bukan PEMDAS) sehingga tanda kurung tidak diperlukan. :-)
Output memang terlihat agak aneh, namun, sebagai Cache's Ensemble (lingkungan Mumps yang saya akses) tidak secara otomatis menampilkan carriage return bahkan ketika ditekan pada input. Jika Anda menginginkannya lebih cantik, tambahkan 4 karakter untuk pengembalian kereta sebelum / sesudah:
Terima kasih!
sumber
Bash, 32 byte
sumber
Pyke, 8 byte, tidak bersaing
dup, dec, half, mult, inc, half
Coba di sini!
sumber
Batch, 30 byte
38 byte jika input pada stdin diperlukan:
sumber