The prinsip mengesampingkan menyatakan bahwa
Jika N item dimasukkan ke dalam kotak M , dengan N > M , maka setidaknya satu kotak harus berisi lebih dari satu item.
Bagi banyak orang, prinsip ini memiliki status khusus dibandingkan dengan pernyataan matematika lainnya. Sebagai EW Dijkstra menulis ,
Dikelilingi oleh beberapa mistik. Bukti menggunakannya sering dianggap sebagai sesuatu yang istimewa, sesuatu yang sangat cerdik.
Tantangan
Tujuan dari tantangan ini adalah untuk menggambarkan prinsip pigeonhole menggunakan representasi seni ASCII. Secara khusus:
- Ambil sebagai input
N
(jumlah item) danM
(jumlah kotak), denganN
non-negatif danM
positif.N
mungkin lebih kecil dariM
(bahkan jika prinsipnya tidak berlaku dalam kasus itu). - Pilih secara acak salah satu penugasan item yang mungkin untuk kotak. Setiap penugasan harus memiliki probabilitas yang tidak nol untuk dipilih.
Menghasilkan representasi seni ASCII dari penugasan sebagai berikut:
- Ada
M
garis, masing-masing sesuai dengan kotak. - Setiap baris dimulai dengan karakter non-spasi, seperti
|
. - Mengikuti karakter itu adalah karakter non-spasi putih lainnya, seperti
#
, diulang sebanyak yang ada item dalam kotak itu.
- Ada
Pertimbangkan misalnya N = 8
, M = 5
. Jika Assigment yang dipilih item untuk kotak adalah 4
, 1
, 0
, 3
, 0
, representasi adalah
|####
|#
|
|###
|
Proses yang berbeda (menghasilkan tugas yang berbeda) dari program yang sama dapat memberikan
|#
|##
|#
|#
|###
Ada beberapa fleksibilitas mengenai representasi; Lihat di bawah.
Aturan khusus
Kode harus secara teoritis menjalankan untuk setiap nilai-nilai dari N
dan M
. Dalam praktiknya mungkin dibatasi oleh ukuran memori atau batasan tipe data.
Karena mengamati output tidak cukup untuk menentukan apakah semua tugas memiliki probabilitas non-nol , setiap pengiriman harus menjelaskan bagaimana kode mencapai itu, jika tidak jelas.
Variasi representasi berikut diizinkan:
- Pasangan karakter yang berbeda dan bukan spasi dapat dipilih. Mereka harus konsisten di seluruh eksekusi program.
- Rotasi representasi 90 derajat dapat diterima. Sekali lagi, pilihan harus konsisten.
- Trailing atau memimpin spasi putih diizinkan.
Sebagai contoh dengan format representasi yang berbeda, untuk N = 15
, M = 6
hasil dari dua eksekusi program bisa
VVVVVV
@@@@@@
@@ @@@
@ @@
@
atau
VVVVV
@@@ @
@@@ @
@ @ @
@ @ @
@
Demikian juga, N = 5
, M = 7
bisa memberikan, menggunakan variasi lain dari representasi,
*
* * * *
UUUUUUU
atau
*** **
UUUUUUU
atau
*
* *
* *
UUUUUUU
Perhatikan bagaimana prinsip ini tidak berlaku dalam kasus ini, karena N
< M
.
Aturan umum
Program atau fungsi diizinkan, dalam bahasa pemrograman apa pun . Celah standar dilarang.
Masukan dapat diambil dengan cara apa pun yang wajar ; dan dengan format apa pun, seperti array dua angka atau dua string yang berbeda.
Cara dan format keluaran juga fleksibel. Sebagai contoh, output dapat berupa daftar string atau string dengan baris baru; dikembalikan sebagai argumen keluaran fungsi atau ditampilkan dalam STDOUT. Dalam kasus terakhir tidak perlu khawatir tentang pembungkus garis yang disebabkan oleh lebar tampilan yang terbatas.
Kode terpendek dalam byte menang.