Ikhtisar
Diberikan sejumlah segi enam, mengatur mereka menjadi bentuk yang terhubung dalam batas-batas gambar seni 50 oleh 50 ASCII. Bentuk yang Anda pilih bisa sewenang-wenang - apa pun yang menurut Anda paling cocok untuk bermain golf - asalkan tetap terhubung. Mungkin ada lubang asalkan lebih besar dari satu segi enam (jika tidak, jumlah segi enam akan ambigu).
Tata letak
Semua segi enam harus dalam bentuk berikut (hanya ukuran dan orientasi ini yang valid):
__
/ \
\__/ Note there are 2 underscores per horizontal edge.
Dua segi enam terhubung langsung jika mereka berbagi keunggulan:
__ __
/ \__ / \
\__/ \ \__/
\__/ or / \
\__/
Dua heksagon tidak terhubung jika mereka hanya berbagi titik:
__ __
/ \/ \
\__/\__/
Berbagi setengah sisi juga tidak dihitung sebagai terhubung:
__
/ \
\__/
/ \
\__/
Kumpulan hexagon terhubung jika ada jalur dari hexagon mana saja ke yang lain hanya menggunakan hexagon yang terhubung langsung .
Lubang
Sebuah lubang berukuran heksagon dalam kumpulan heksagon yang terhubung dianggap sebagai segi enam, sehingga setiap karya seni ASCII yang diberikan memiliki jumlah heksagon yang jelas.
Ini tidak dihitung sebagai lubang karena lubang prospektif adalah segi enam tunggal:
__
__/ \__
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/ 7 hexagons (not 6 with a hole)
Ini tidak dihitung sebagai lubang karena tidak sesuai dengan segi enam tunggal:
__
__/ \__
/ \__/ \__
\__/ \__/ \
/ \__ \__/
\__/ \__/ \
\__/ \__/
\__/ 8 hexagons with a hole
Masukan dan keluaran
Memasukkan
Integer dari 1 hingga 255.
Keluaran
String seni ASCII yang mewakili jumlah input heksagon terhubung seperti dijelaskan di atas.
- Jumlah baris (substring yang dipisahkan baris baru) paling banyak 50, ditambah tambahan baris tambahan opsional.
- Baris tidak harus memiliki panjang yang sama, tetapi masing-masing harus memiliki panjang paling banyak 50.
- Baris panjang nol dapat ada di atas atau di bawah bentuk yang terhubung asalkan jumlah baris tidak melebihi 50.
- Baris spasi saja bisa ada di atas atau di bawah bentuk yang terhubung asalkan jumlah baris tidak melebihi 50.
- Spasi dapat muncul di sebelah kiri bentuk asalkan panjang baris tidak melebihi 50 (bentuk tidak perlu disejajarkan ke kiri).
- Spasi dapat muncul di sebelah kanan bentuk asalkan panjang baris tidak melebihi 50.
- Setiap karakter yang tidak membentuk bagian dari bentuk yang terhubung harus berupa spasi atau baris baru.
Asalkan outputnya benar, tidak harus konsisten dari satu putaran ke putaran berikutnya.
Contohnya
Memasukkan: 6
Output yang valid:
__ __ __
/ \__/ \__/ \__
\__/ \__/ \__/ \
\__/ \__/ \__/
__ __
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/
__
__ / \
/ \__ \__/
\__/ \__/ \
\__/ \__/
\__/
/ \
\__/
Output Tidak Valid:
__
__/ \__
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/ Invalid for 6 as the centre hole counts as a 7th hexagon.
__ __ __ __
/ \__/ \__/ \ / \
\__/ \__/ \__/ \__/
\__/ \__/ Invalid as the 6 hexagons are not connected.
__ __ __ __
/ \__/ \__/ \/ \
\__/ \__/ \__/\__/
\__/ \__/ Invalid as vertex touching does not count as connected.
__ __ __
/ \__/ \ / \
\__/ \__/ \__/
/ \__/ \
\__/ \__/
\__/ Invalid as the 6 connected hexagons are not the only visible characters.
Kemenangan
Jawaban valid terpendek dalam byte menang.
Papan peringkat
(menggunakan potongan leaderboard Martin )
sumber
6
. Untuk input255
baris horizontal segi enam tidak akan cocok dengan 50 oleh 50 ASCII art.Jawaban:
CJam,
645755 byteUji di sini.
Ini akan menghasilkan pola berikut, berdasarkan kolom :
Penjelasan
Ini didasarkan pada tip Dennis yang luar biasa , yang digunakan
.e>
untuk merakit output seni ASCII dari beberapa bagian. Seperti yang dikatakannya,.e>
ambil maksimum elemen-elemen dari dua array (atau string), dan karena spasi memiliki kode karakter terendah, kita dapat menggunakan ini untuk memaksakan karakter lain pada string grid. Lebih jauh, jika dua array tidak memiliki panjang yang sama, elemen-elemen asing dari array yang lebih panjang disalin tidak berubah. Ini berarti bahwa pola yang berbeda bahkan tidak perlu memiliki ukuran yang sama. Untuk menerapkan ini ke array dua dimensi (karena kami tidak ingin menyisipkan baris baru sampai akhir), kami menerapkan.e>
berpasangan ke garis, yang memberi..e>
.Ide dasar dari kode ini adalah untuk menghasilkan
N
salinan segi enam tunggal yang dipindahkan ke posisi yang tepat. Kami "memindahkan" segi enam secara vertikal dengan menambahkan baris kosong dan secara horizontal dengan menambahkan spasi. Setelah selesai, kita lipat semua salinan menjadi satu, menggunakan yang cantik:..e>
(mungkin operator terpanjang yang pernah saya gunakan dalam program CJam).Ini kodenya:
sumber
Python 2,
219207 karakterMengambil input pada stdin.
Cukup banyak hanya membuat kotak 50x50 ruang dan menjatuhkan segi enam di mana sesuai. Setelah segi enam-16, saya tidak perlu baris pertama
h
(segi enam sebagai array 2D) jadi saya menggunakani>15
untuk memulai kisaran pada 1 bukan 0.c=i*3%48+1;r=(i*3+1)/48*2+i%2
menghitung dengan c olumn dan r ow saya harus mulai.n
adalah boolean tetapi digunakan sebagai bilangan bulat untuk memperbaiki batas (karenah[0]
hanya 3 karakter untuk menghindari menimpa barang).Saya cukup senang dengan yang satu ini, saya mencukur sekitar 50 byte sejak versi awal, terutama ketika saya ingat
a[x:y]=b
sintaksnya.Output (n = 30):
Karena garis trailing spasi putih diizinkan, saya mengubah pembuatan
g
untuk hanya membuat 50bytearray
detik3+(x>1)+x/16*2
, yang merupakan jumlah tepat baris yang diperlukan, mengurangi 12 byte.sumber
Swift 2.0,
601591 byteUntuk berlari:
swift hexagons.swift 21
Keluaran:
Swift
substringToIndex
danstringByReplacingOccurencesOfString
mengambil begitu banyak karakter ...sumber
stringByPaddingToLength
, namun dalam hal ini akan menjadi 11 karakter lebih lama daripada mengetikkan string penuh.stringByAppendingString
di Objective-C tapi masih ...C, 238 byte
Hanya spasi dan baris baru yang perlu dipertimbangkan untuk penghitungan karakter.
Ini hanya membuat matriks karakter, mengisinya dengan urutan terbalik, dan kemudian mencetak semuanya.
sumber
JavaScript (ES6), 265 byte
Tessellates hexagon berturut-turut, dari kiri ke kanan, bergantian naik-turun — seperti sarang madu — hingga akhir baris tercapai.
Tidak digabungkan dengan deskripsi (berfungsi di firefox):
sumber
Ruby, 120
membuat array 50 string 50 spasi, kemudian mengganti 4 karakter dalam 3 baris untuk menambahkan segi enam:
Karena baris pertama berisi spasi, begitu sebuah segi enam telah diplot, kita tidak dapat memplot yang lain di bawahnya, karena spasi akan menimpa hexagon sebelumnya.
Oleh karena itu hexagon ditambahkan dalam bentuk belah ketupat 16x16 (persegi panjang terdistorsi) dari bawah ke atas, dan miring dari kiri bawah ke kanan atas.
String
" __ "
kemudian akan ditimpa dengan tambahan\
dan di/
mana diperlukan.Tidak digabungkan dalam program uji
Output khas (n = 250)
Seharusnya ada beberapa baris spasi putih di bagian atas di sini, untuk membuat total 50, tapi saya tidak tahu apakah ada cara untuk mendapatkan format Stackexchange untuk memasukkan mereka.
sumber