(dengan permintaan maaf kepada Jim West untuk judul, dan secara acak terinspirasi oleh representasi tekstual dari logo mereka: .:|:.:|:.
untuk konsep)
Diberikan integer input 1 <= n <= 255
, output representasi seni ASCII dari jembatan gantung jarak n
mengikuti aturan konstruksi di bawah ini:
- Awal dan akhir jembatan (tidak dihitung dalam
n
jarak) selalu-|
dan|-
, sehingga jembatan dapat terhubung dengan tepat ke jalan raya di sebelahnya. - Jembatan tidak memanjang ke bawah (tingkat jalan, terdiri dari
-
baris, adalah baris bawah). - Paling tidak ada dua potongan jalan
--
dalam satu baris, setiap rentang yang lebih panjang membutuhkan kabel suspensi untuk penyangga. - Kabel suspensi
\
memanjang dari jalan raya ke menara|
dalam garis lurus. - Menara
|
harus cukup tinggi untuk menopang kabel suspensi yang berdekatan, tetapi tidak lebih tinggi. - Jembatan harus seimbang dari kiri ke kanan tentang titik tengah, mendukung bagian tengah bila memungkinkan.
- Semua hal di atas harus menghasilkan minimalisasi kabel, tetapi hanya untuk menjadi jelas, jumlah kabel suspensi harus diminimalkan sambil tetap mengikuti aturan di atas.
Untuk memberikan representasi visual, berikut adalah output yang diharapkan untuk n = 1, 2, 3, ... 15
-
1
-|-|-
2
-|--|-
3
-|\-/|-
4
-|\--/|-
5
|\ /|
-|-\-/-|-
6
|\ /|
-|-\--/-|-
7
|\ /|
| \ / |
-|--\-/--|-
8
|\ /|
| \ / |
-|--\--/--|-
9
|\ /|
| \ / |
| \ / |
-|\--\-/--/|-
10
|\ /|
| \ / |
| \ / |
-|\--\--/--/|-
11
|\ /|
| \ / |
| \ / |
|\ \ / /|
-|-\--\-/--/-|-
12
|\ /|
| \ / |
| \ / |
|\ \ / /|
-|-\--\--/--/-|-
13
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
-|--\--\-/--/--|-
14
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
-|--\--\--/--/--|-
15
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
| \ \ / / |
-|\--\--\-/--/--/|-
Memasukkan
Sebuah bilangan bulat positif dalam format yang nyaman , n > 9
.
Keluaran
Jembatan ASCII-art mengikuti teknik konstruksi di atas.
Aturan
- Leading atau trailing newlines atau whitespace semuanya opsional, selama karakter bridge itu sendiri berbaris dengan benar.
- Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
- Jika memungkinkan, harap sertakan tautan ke lingkungan pengujian online sehingga orang dapat mencoba kode Anda!
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
Jawaban:
05AB1E ,
795958 byteCobalah online! .
Penjelasan:
Menemukan solusi yang lebih baik, kuncinya adalah mengembalikan array berikut untuk setiap nomor sebagai berikut:
sumber
Python 2, 173 byte
Cermin nilai b dan tambahkan pusat "-"
f=lambda b:'-|'+b[::-1].replace('/','\\')+-~(~i%2)*'-'+b+'|-'
Pola dasar (setengah kanan dari garis bawah)
b=(i*'/--')[:~-i/2]
Lingkaran untuk lapisan non-bawah
for x in range(1,~-i/2):
Dapatkan karakter x pertama dari pola dasar dan lengkapi dengan "-"
(len(b)-x)*'-'+b[:x]
Ganti semua - dengan spasi untuk mencetak semua lapisan (kecuali bagian bawah)
print f().replace('-',' ')
Cetak lapisan bawah
print f(b)
sumber
Befunge, 150 byte
Cobalah online!
Saya juga menyediakan versi kode yang tidak disunat yang lebih baik menunjukkan arsitektur yang digunakan dalam pembangunan jembatan.
Cobalah online!
Menara menangani inisialisasi input dan parameter. Dek terdiri dari dua loop yang menghitung bagian-bagian jembatan yang perlu menjadi output untuk setiap koordinat x, y. Dan yayasan memegang tabel karakter untuk bagian-bagian jembatan, serta beberapa kode yang sama sekali tidak terkait.
Penjelasan detail
Kita mulai dengan menghitung lebar dan tinggi area keluaran yang perlu diulang untuk membuat jembatan.
Perhatikan bahwa rentang y bukan berbasis nol. Nilai awal adalah
5 - (h<5)
dan iterasi hingga h (nilai saat ini disimpan pada 2,0). Nilai x diulang dari w ke 0 dan disimpan di stack.Lingkaran dalam hanyalah serangkaian kondisi boolean yang menentukan apakah koordinat x , y cocok dengan salah satu lokasi yang memerlukan karakter non-spasi. Perhitungan ini didasarkan pada dua offset geser yang mengikuti jalur kabel suspensi.
Berbagai kondisi kemudian ditentukan sebagai berikut:
Untuk menerjemahkan kondisi ini ke offset karakter yang benar, kita hanya perlu mengalikan masing-masing dengan offset yang sesuai dan menjumlahkan hasilnya. Perhitungan ini dilakukan saat kondisi dievaluasi. Jadi terlihat seperti ini:
Perhatikan bahwa nilai bridge_deck digabungkan berdasarkan apakah ada kondisi lain yang telah dipenuhi, karena karakter suspensi atau menara akan diutamakan di atas geladak.
Hasil akhirnya adalah offset ke dalam tabel karakter pada baris terakhir dari playfield. Kami cukup menampilkan karakter itu dan mengulangi loop.
sumber
Batch, 241 byte
Catatan: Trailing space on line 5. Mulai dengan membangun deretan ruang, kemudian tambahkan kabel seperlunya, ulangi untuk membangun menara dengan ketinggian yang diinginkan, diakhiri dengan mengganti ruang yang tersisa dengan jalan.
sumber
WinDbg, 312 byte
Input dilakukan dengan mengatur pseudo-register
$t0
.Saya merasa harus ada cara untuk menggabungkan keduanya
for
loop menjadi satu ... mungkin beberapa peluang golf lainnya juga ...Yang ini bekerja dengan mengisi seluruh area dengan jalan, lalu mengganti semua kecuali baris terakhir dengan ruang, dan akhirnya membangun kolom dan kabel.
Contoh hasil 1-15:
sumber
Java 8,
423, 412 byte11 byte disimpan berkat Kritixi Lithos
golf:
ungolfed:
sumber
int i,j,k,t=n/2+n%2,u=t-2,q=0
dan alih-alih memilikichar v="-";
Anda dapat menggunakanchar v=45;
dan Anda dapat mengubahabc%xyz==0
s keabc%xyz<1
(belum mengujinya)