Anda harus menulis sebuah program atau fungsi yang menghasilkan atau mengembalikan sebanyak mungkin Bab I dari Pangeran Kecil . Program atau fungsi Anda harus berupa blok kode M-by-N yang hanya berisi karakter ascii yang dapat dicetak (codepoint dari 32 hingga 126) dan baris baru di akhir setiap baris.
Anda hanya dapat menggunakan paling banyak 26 karakter pilihan Anda dari 96 karakter ascii yang dapat dicetak (dan baris baru di akhir baris).
Di setiap baris dan kolom setiap karakter harus berbeda mirip dengan teka-teki sudoku yaitu tidak boleh ada huruf di baris atau kolom dua kali.
Contoh kode kunci dengan M = 4
, N = 3
dan alphabet = {a,b,c,d,/,*}
:
abcd
bcd*
*/ac
Rincian kode
- Anda dapat memilih bentuk blok kode Anda (yaitu
M
danN
). - Blok harus diisi dengan karakter sepenuhnya yaitu setiap baris harus memiliki panjang yang sama.
- Baris tambahan di akhir baris terakhir adalah opsional.
- Seperti yang tertulis di atas pada setiap baris dan kolom setiap karakter harus berbeda.
Rincian keluaran
- Anda harus menampilkan atau mengembalikan awalan Bab I Pangeran Kecil tanpa output tambahan.
- Jika Anda mencapai baris baru dalam teks, Anda dapat menyatakannya sebagai varian umum apa pun (\ r, \ n, \ r \ n) tetapi gunakan hanya satu saja dan hitung sebagai 1 byte untuk skor.
- Baris tambahan tambahan tambahan bersifat opsional.
Skor Anda adalah panjang teks keluaran tidak termasuk baris baru jika ada. Skor yang lebih tinggi lebih baik.
Contoh jawaban
##Python3, score = 6
alphabet = `print('O\ce w)#X` (alphabet element count = 16)
print('O\
nce w')#X
Anda dapat memeriksa validitas kode Anda dengan program Python 3 (ideone) ini atau program CJam ini (online) yang disediakan oleh @ MartinBüttner.
Jawaban:
CJam, 47
Cobalah online
Alfabet:
"'*-/2INOSacdehilmnorswxy
Penjelasan:
sumber
Pip , skor = 38
Alfabet:
"'015:IMORXacdehilnorswxy
(Saya yakin akan benci untuk mencoba ini dalam bahasa pemrograman yang nyata .)
Penjelasan:
sumber
Python 3, skor = 11
Ini adalah masalah yang sangat sulit untuk Python, karena pembatasan pengulangan karakter pada garis atau kolom membuatnya hampir mustahil untuk membuat lebih dari satu string literal. Oleh karena itu, berbagai cara untuk menggabungkan string sama sekali tidak berguna, karena Anda tidak dapat memulai string dengan cara yang bermanfaat. Inilah upaya terbaik saya:
Perhatikan bahwa ada spasi di akhir baris pertama. Alias
x
untukchr
diperlukan untuk menghindari karakter yang sama berakhir di lebih dari satu kolom. Karakter komentar di bagian akhir bisa hampir apa saja.Alfabetnya adalah 21 karakter yang dapat dicetak, ditambah baris baru (perhatikan spasi di awal):
Output adalah:
sumber
CJam, skor = 21
Alfabet:
-;INOSacehinoswxy
Hanya untuk membuat bola bergulir; ini mungkin bisa dikalahkan dengan mudah.
sumber
CJam, skor = 15
Saya sudah memiliki ide ini untuk sementara waktu sekarang tetapi saya belum punya waktu untuk duduk dan mengacak-acak sampai saya mendapatkan keunikan kolom yang diperlukan, jadi inilah versi bayi untuk saat ini:
Alfabet (26):
" #)*+,0123456789:;=>Ibcef
Cobalah online .
Penjelasan
Ide dasarnya adalah menggunakan pengkodean dasar sehingga kita dapat mencetak lebih dari 26 jenis karakter. Kode intinya adalah
Perhatikan bahwa kami memperlakukan yang pertama
"O"
untuk"Once"
secara terpisah karena memasukkannya ke dalam string kami akan memakan terlalu banyak alfabet kami. Jika kita mau, kita bisa mencoba memperpanjang string pengindeksan kita, tetapi karena tidak ada karakter huruf besar terjadi untuk sementara waktu selain"I"
aku tidak terlalu peduli dengan ini.Kita kemudian perlu membangun angka besar di baris kedua. Pendekatan yang saya lakukan adalah berulang kali dikalikan dengan beberapa kekuatan, lalu tambahkan konstanta, dan ulangi, sehingga dalam kode di atas
85032995607801617394
diganti olehdi mana
)
increment dan#
exponentiation di CJam.Kemudian sisanya (bagian yang paling menjengkelkan) adalah melapisi setiap baris untuk memenuhi kriteria kolom. Untuk melakukan ini, kita membuang karakter dalam string dan menggunakannya
;
untuk meletuskannya. Sayangnya, sementara kami sangat ingin menggunakane#
komentar juga untuk mempermudah, fakta bahwa#
eksponensial melarang ini, jadi ini hanya dilakukan pada baris terakhir.Saya cukup yakin metode ini dapat diperpanjang hingga koma pada kalimat pertama, tetapi sayangnya mengacak hal-hal untuk memenuhi kriteria kolom terbukti sulit, jadi saya mungkin perlu metode lain untuk menghasilkan bilangan bulat yang dikodekan basis.
sumber
Python 2, skor = 13 (tidak valid)
Python bukan bahasa terbaik untuk ini .... Setelah pemeriksaan lebih lanjut, ada dua
n
s di baris pertama saya. Tidak ada obat yang berharga, dan saya akan berhenti membuang-buang waktu saya dengan Python. Saat ini saya sedang berupaya membuat solusi dalam bahasa lain, tetapi belum akan membagikan yang mana.Alfabet (22):
"#(),0167IOcehinprtw
Keluaran:
Once when I w
sumber
n
s. Masalah ini hampir tidak mungkin di Python, karena Anda hanya bisa menggunakan garis lanjutan garis miring terbalik sekali (karena garis miring terbalik harus di kolom terakhir) dan tidak ada garis yang dapat memiliki dua jenis tanda kutip yang sama.