Setiap segi enam biasa dapat diberi ubin dengan berlian, misalnya seperti:
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
Kami akan mempertimbangkan ubin di atas ukuran 1
(karena sisi berlian terbuat dari satu /
atau \
masing - masing). Ukuran ubin yang sama 2
akan terlihat seperti:
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
Tugas Anda adalah untuk menerima ubin seni ASCII (ukuran 1
) seperti input, bersama dengan bilangan bulat positif N
(dalam desimal atau unary), menentukan ukuran output yang diinginkan. Anda kemudian harus menampilkan versi yang ditingkatkan dari ubin yang sama.
Perhatikan bahwa segi enam bisa berukuran berapa saja dan sekecil 1x1x1 (mengandung tiga berlian).
Baik input maupun output tidak boleh mengandung spasi tambahan, atau spasi lebih banyak dari yang diperlukan untuk menyelaraskan bentuk segi enam. Baik input dan output secara opsional dapat memuat satu baris baru (pilihan ini tidak harus sama untuk input dan output).
Anda dapat menulis sebuah program atau fungsi, mengambil input melalui STDIN (atau alternatif terdekat), argumen baris perintah atau argumen fungsi dan mengeluarkan hasilnya melalui STDOUT (atau alternatif terdekat), nilai pengembalian fungsi atau parameter function (out).
Ini adalah kode golf, jadi jawaban tersingkat (dalam byte) dalam kemenangan.
Contoh Memiringkan
Berikut ini beberapa masukan yang dapat Anda gunakan untuk menguji kiriman Anda.
__
/_/\
\_\/
____
/_/\_\
/\_\/_/\
\/_/\_\/
\_\/_/
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
________
/_/\_\_\_\
/\_\/\_\_\_\
/\/_/\/_/_/\_\
/\/\_\/_/_/\/\_\
\/\/_/\_\_\/\/_/
\/\_\/_/\_\/_/
\/\_\_\/_/_/
\/_/_/_/_/
Cuplikan berikut berisi keluaran yang sesuai untuk input yang N = 1
masuk N = 6
.
__
/_/\
\_\/
____
/ /\
/___/ \
\ \ /
\___\/
______
/ /\
/ / \
/_____/ \
\ \ /
\ \ /
\_____\/
________
/ /\
/ / \
/ / \
/_______/ \
\ \ /
\ \ /
\ \ /
\_______\/
__________
/ /\
/ / \
/ / \
/ / \
/_________/ \
\ \ /
\ \ /
\ \ /
\ \ /
\_________\/
____________
/ /\
/ / \
/ / \
/ / \
/ / \
/___________/ \
\ \ /
\ \ /
\ \ /
\ \ /
\ \ /
\___________\/
____
/_/\_\
/\_\/_/\
\/_/\_\/
\_\/_/
________
/ /\ \
/___/ \___\
/\ \ / /\
/ \___\/___/ \
\ / /\ \ /
\/___/ \___\/
\ \ / /
\___\/___/
____________
/ /\ \
/ / \ \
/_____/ \_____\
/\ \ / /\
/ \ \ / / \
/ \_____\/_____/ \
\ / /\ \ /
\ / / \ \ /
\/_____/ \_____\/
\ \ / /
\ \ / /
\_____\/_____/
________________
/ /\ \
/ / \ \
/ / \ \
/_______/ \_______\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \_______\/_______/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\/_______/ \_______\/
\ \ / /
\ \ / /
\ \ / /
\_______\/_______/
____________________
/ /\ \
/ / \ \
/ / \ \
/ / \ \
/_________/ \_________\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \_________\/_________/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\/_________/ \_________\/
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\_________\/_________/
________________________
/ /\ \
/ / \ \
/ / \ \
/ / \ \
/ / \ \
/___________/ \___________\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \___________\/___________/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\/___________/ \___________\/
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\___________\/___________/
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
__________________
/ / /\ \
/ / / \ \
/_____/_____/ \_____\
/ /\ \ /\ \
/ / \ \ / \ \
/_____/ \_____\/ \_____\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \_____\/_____/ \/_____/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\/_____/ \_____\/_____/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\_____\/_____/ \_____\/
\ \ \ / /
\ \ \ / /
\_____\_____\/_____/
________________________
/ / /\ \
/ / / \ \
/ / / \ \
/_______/_______/ \_______\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/_______/ \_______\/ \_______\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \_______\/_______/ \/_______/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/_______/ \_______\/_______/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\_______\/_______/ \_______\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\_______\_______\/_______/
______________________________
/ / /\ \
/ / / \ \
/ / / \ \
/ / / \ \
/_________/_________/ \_________\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/_________/ \_________\/ \_________\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \_________\/_________/ \/_________/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/_________/ \_________\/_________/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\_________\/_________/ \_________\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\_________\_________\/_________/
____________________________________
/ / /\ \
/ / / \ \
/ / / \ \
/ / / \ \
/ / / \ \
/___________/___________/ \___________\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/___________/ \___________\/ \___________\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \___________\/___________/ \/___________/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/___________/ \___________\/___________/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\___________\/___________/ \___________\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\___________\___________\/___________/
________
/_/\_\_\_\
/\_\/\_\_\_\
/\/_/\/_/_/\_\
/\/\_\/_/_/\/\_\
\/\/_/\_\_\/\/_/
\/\_\/_/\_\/_/
\/\_\_\/_/_/
\/_/_/_/_/
________________
/ /\ \ \ \
/___/ \___\___\___\
/\ \ /\ \ \ \
/ \___\/ \___\___\___\
/\ / /\ / / /\ \
/ \/___/ \/___/___/ \___\
/\ /\ \ / / /\ /\ \
/ \/ \___\/___/___/ \/ \___\
\ /\ / /\ \ \ /\ / /
\/ \/___/ \___\___\/ \/___/
\ /\ \ / /\ \ / /
\/ \___\/___/ \___\/___/
\ /\ \ \ / / /
\/ \___\___\/___/___/
\ / / / / /
\/___/___/___/___/
________________________
/ /\ \ \ \
/ / \ \ \ \
/_____/ \_____\_____\_____\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \_____\/ \_____\_____\_____\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \/_____/ \/_____/_____/ \_____\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \/ \_____\/_____/_____/ \/ \_____\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\/ \/_____/ \_____\_____\/ \/_____/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\/ \_____\/_____/ \_____\/_____/
\ /\ \ \ / / /
\ / \ \ \ / / /
\/ \_____\_____\/_____/_____/
\ / / / / /
\ / / / / /
\/_____/_____/_____/_____/
________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/_______/ \_______\_______\_______\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \_______\/ \_______\_______\_______\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/_______/ \/_______/_______/ \_______\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \_______\/_______/_______/ \/ \_______\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/_______/ \_______\_______\/ \/_______/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \_______\/_______/ \_______\/_______/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \_______\_______\/_______/_______/
\ / / / / /
\ / / / / /
\ / / / / /
\/_______/_______/_______/_______/
________________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/_________/ \_________\_________\_________\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \_________\/ \_________\_________\_________\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/_________/ \/_________/_________/ \_________\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \_________\/_________/_________/ \/ \_________\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/_________/ \_________\_________\/ \/_________/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \_________\/_________/ \_________\/_________/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \_________\_________\/_________/_________/
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\/_________/_________/_________/_________/
________________________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/___________/ \___________\___________\___________\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \___________\/ \___________\___________\___________\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/___________/ \/___________/___________/ \___________\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \___________\/___________/___________/ \/ \___________\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/___________/ \___________\___________\/ \/___________/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \___________\/___________/ \___________\/___________/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \___________\___________\/___________/___________/
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\/___________/___________/___________/___________/
N-1
jalur kosong terdepan. :(Jawaban:
CJam,
85797672 byteUkurannya harus di baris pertama. Dan berliannya mengikuti.
Tidak bermain golf dengan baik ... Dan setengah dari karakter datang dari detail.
Penjelasan (dari versi sebelumnya)
sumber
Python 2, 164
Output pada kasus uji.
Jadi, apa yang terjadi di sini?
Gagasan utamanya adalah bahwa setiap karakter dalam dokumen asli meledak menjadi satu
n*n
blok. Misalnya, untuk n = 4,/
bisa jadiKarakter asli muncul sekali di setiap baris, dan ada padding di kedua sisi. Di sini,
di sebelah kiri,
dan
_
di sebelah kanan. Hanya baris bawah yang bisa diisi oleh'_'
; sisanya selalu' '
.Kesulitan utama adalah bahwa bantalan di sebelah kanan dapat bergantung pada simbol yang akan datang. Secara khusus,
'/ '
memiliki padding berbeda dari'/_'
, jadi kita perlu melihat ke depan. Selain itu, untuk menghindari spasi tambahan, kita harus mencatat bahwa kita berada pada simbol terakhir dan menahan diri dari bantalan di sebelah kanan.Kami mengatasi kedua masalah ini dengan hanya menempel di sebelah kiri karakter saat ini. Ketika kami melakukannya, kami juga melakukan padding kanan dari karakter sebelumnya menggunakan simbol padding saat ini. Jadi, kami mencetak padding kanan yang terutang dari char sebelumnya, padding kiri dari char saat ini, kemudian char saat ini. Kami juga menyimpan jumlah padding "hutang" yang harus dibayar oleh arang berikutnya.
Sekarang mari kita membahas kodenya.
String input adalah
s
dan faktor skala adalahn
. Kami pergi baris demi baris, mencetakn
baris untuk setiap baris inputW
, dengan salinan diindeksj=n,n-1,...,2,1
. Baris pertama hanya disalin sekali, yang kita capai dengan menginisialisasij
ke 1 tetapi mengubahnya ken
setiap loop.Kami beralih melalui jalur input, mengumpulkan jalur untuk dicetak
O
. Pertama, kami mencari karakter padding yang sesuaiq
, yang merupakan garis bawah jika kita berada di garis bawah dan karakter saat ini atau sebelumnya adalah garis bawah, dan sebaliknya spasi.Kemudian, kami memutuskan jumlah bantalan untuk diletakkan di sebelah kiri (
e
). Untuk/
, ituj-1
(berkurang dengan menurunnya jumlah baris-salinan), dan pelengkapn-j
untuk\
. Kami memperlakukan karakter lain dengan cara yang sama. Sebagai contoh, meskipun_
sepertinya memberikan deretann
garis bawah, sebenarnya memberi garis bawah tunggal, diisi oleh garis bawah di sebelah kiri dan kanan. Ini tampaknya tidak efisien, tetapi ini memungkinkan kita bekerja dengan_
dandalam kerangka kerja yang sama seperti
/
dan\
Posisi garis bawah "pusat" tidak masalah, jadi kami menyamakannya dandengan
\
; Pilihan ini juga membuat baris atas bekerja tanpa casing khusus.Selanjutnya, kita tambahkan ke string output. Kami telah menemukan simbol padding
q
, dan jumlah padding saat inie
, tetapi kami juga perlu mengingat hutang paddingd
dari simbol sebelumnya. Jadi, kami tambahkanq*(e+d)
. Kemudian, kita menambahkan simbol saat inic
, kecuali kita perlu menghindari garis bawah pada baris non-bawah, yang kita perbaiki dengan mengubah garis bawah menjadi simbol bantalan.Akhirnya, kami mencatat jumlah utang padding, yang melengkapi
n+~d
jumlah padding kiri saat ini. Kami juga merekam simbol saat inip
, sehingga nanti kami akan tahu apakah simbol sebelumnya adalah_
.sumber
JavaScript ( ES6 ) 274
281 289 338sumber
Python 2,
2172111951941906 byte berkat Sp3000.
Panggil
m
dengan argumen pertama menjadi berlian sebagai string, dan argumen kedua nomor pengulangan.Ini didasarkan pada urutan penggantian string 3 langkah:
/\
dengan/ \
, dengan jumlah ruang intervening dari 2 menjadi 2 * (n-1) melewati garis.\/
dengan\ /
, dengan jumlah ruang intervensi mulai dari 2 * (n-1) ke 2 di atas garis.Lalu, ada berbagai mucking tentang untuk mendapatkan ruang terdepan yang benar, dan untuk mendapatkan garis pertama yang benar.
Perhatikan bahwa baris terakhir dari program harus berupa tab, bukan 4 spasi. Penurunan harga tidak mendukung tab.
sumber
(i+(n-i+~i)*(d[-1]>f)) --> [i,n+~i][d[-1]>f]
dan Anda hanya menggunakan'_'
sekali, jadi Anda membuang satu byte untuk mendefinisikannya.Python,
272238228243 byteVersi yang diperbarui, sekarang mengambil string tunggal sebagai input, bukan urutan string. Juga menghapus spasi spasi yang ada di versi sebelumnya. Sayangnya perubahan ini menambah ukuran.
Versi dengan spasi putih, dan pernyataan dipecah menjadi unit yang lebih kecil untuk dibaca:
Pendekatan dasar di sini adalah:
N
, buat garis output di setiap iterasi loop. Ada kasus khusus untuk baris pertama, di mana hanya baris output terakhir yang dihasilkan, untuk menghindari menghasilkan baris kosong di awal output.N
karakter, di mana:N
spasi.N
spasi untukN -1
iterasi loop pertama , danN
menggarisbawahi untuk iterasi loop terakhir.N - 1
spasi atau garis bawah.Bagian yang paling sulit di sini adalah bahwa padding untuk garis miring / garis miring menggunakan spasi atau garis bawah tergantung pada karakter input berikutnya (untuk garis miring) atau sebelumnya (untuk garis miring terbalik). Itu tampaknya tidak cocok dengan strategi substitusi string.
Apa yang saya lakukan untuk menyelesaikan ini adalah saya pertama kali mengganti dua kombinasi karakter tertentu dengan karakter yang berbeda, sehingga saya dapat memperlakukannya secara berbeda selama penggantian yang sebenarnya. Misalnya,
/_
diganti dengan(_
. Setelah ini,(
secara efektif "garis miring diikuti oleh garis bawah", yang kemudian dapat diganti.Program utama yang digunakan untuk menguji fungsi:
sumber
n-1-k
adalahn+~k
.rstrip()
9 karakter lagi. Saya harap saya bisa melakukan yang lebih baik, dan juga menemukan cara untuk memotong 5 karakter.sys.stdin
bukan parameter input yang diijinkan - Anda perlu memanipulasi string itu sendiri.sys.stdin
danint(sys.argv[1])
tetapi Anda tidak akan mendapatkannya secara gratis dengan mengharapkan mereka akanrange
dimasukkan sebagai variabel (jika itu adalah permainan yang adil, maka Anda juga bisa mengharapkan alias untuk dan mengganti` dan apa pun yang Anda harus ditetapkan sebelumnya) .stdin
dan daftar string adalah urutan string.Perl, 132
Gabungan input STDIN dan ARGV. Contoh:
sumber
Ruby 236
237Tes online: http://ideone.com/e6XakQ
Ini adalah kode sebelum bermain golf:
sumber