Berikut adalah seni ASCII dari persimpangan 4 arah:
| | |
| |
| | |
| |
| | |
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
(Perhatikan bagaimana jalan horizontal setinggi 3 baris, sedangkan jalan vertikal selebar 5 kolom. Ini untuk alasan estetika, karena font segi empat.)
Tantangan Anda adalah untuk menghasilkan seni ASCII ini. Namun, karena saya yakin Anda semua tahu, tidak setiap persimpangan memiliki jalan yang melaju ke setiap arah. Persimpangan khusus ini berjalan NESW
, tetapi beberapa persimpangan mungkin berjalan, misalnya NW
,:
| | |
| |
| | |
| |
| | |
-----+-----+
| |
- - -| |
| |
-----+-----+
Atau mungkin SWE
:
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
Atau bahkan mungkin pergi E
, hanya satu arah (walaupun Anda tidak bisa menyebutnya persimpangan , tetapi cobalah untuk tidak terlalu bertele-tele):
+-----+-----
| |
| |- - -
| |
+-----+-----
Anda perlu menulis sebuah program atau fungsi yang dapat dengan mudah menghasilkan setiap kombinasi ini. Lebih khusus lagi, tantangan Anda adalah menulis sebuah program atau fungsi yang mengambil serangkaian arah, yang terdiri dari NESW
, sebagai input, dan menghasilkan atau mengembalikan seni persimpangan ASCII ini dengan jalan yang menunjuk ke arah itu. Arah ini dapat muncul dalam urutan apapun, tapi input tidak akan berisi karakter apapun kecuali untuk N
, E
, S
, atau W
. Jika Anda suka, Anda dapat meminta input berupa huruf kecil saja, tetapi Anda harus menentukan ini dalam jawaban Anda. Anda juga dapat mengasumsikan bahwa semua input akan mengandung setidaknya satu arah.
Contoh terakhir memiliki spasi di setiap baris, karena tidak ada jalan menuju barat. Jika Anda tidak memiliki jalan menuju barat, ruang utama ini adalah opsional. Ini:
+-----+-----
| |
| |- - -
| |
+-----+-----
Juga akan menjadi output yang dapat diterima. Demikian pula, jika N
atau S
hilang, baris kosong di tempat itu adalah opsional. Satu trailing newline diperbolehkan, dan trailing spasi diizinkan selama output secara visual sama.
Anda dapat mengambil input dan output dalam format yang masuk akal, seperti STDIN / STDOUT, argumen baris perintah, file, argumen fungsi / nilai pengembalian, dll.
Seperti biasa, ini adalah kode-golf , jadi cobalah untuk mendapatkan jawaban sesingkat mungkin dalam bahasa apa pun yang Anda gunakan!
Sampel IO:
NESW:
| | |
| |
| | |
| |
| | |
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
NS:
| | |
| |
| | |
| |
| | |
+-----+
| |
| |
| |
+-----+
| | |
| |
| | |
| |
| | |
S:
+-----+
| |
| |
| |
+-----+
| | |
| |
| | |
| |
| | |
EW:
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
SE:
+-----+-----
| |
| |- - -
| |
+-----+-----
| | |
| |
| | |
| |
| | |
E
, misalnya)? Apakah memimpin dan mengikuti garis kosong diperbolehkan jika tidak adaN
atauS
?Jawaban:
Javascript (ES6),
190187185 byteIni adalah upaya untuk membangun karakter seni ASCII ini per karakter dengan iterasi pada matriks 17x15. Oleh karena itu, output selalu dibuat dari 15 baris 17 kolom dengan persimpangan jalan berpusat di tengah.
Tidak diikat dan dikomentari
Matriks
Di bawah ini adalah matriks dengan koordinat yang digunakan dalam kode.
Demo
Cuplikan berikut memungkinkan untuk mencoba konfigurasi jalan apa pun.
sumber
PowerShell v3 +,
226204192191 byteMengambil input sebagai string huruf kapital, secara eksplisit melemparkannya sebagai
char
array. Buat segmen "Utara" melalui pengulangan dari0
ke4
. Setiap loop, membangun string 5 spasi (jikaW
/87
hadir dalam input), menyimpannya di$x
, lalu| |
(disimpan dalam$w
) atau| | |
, tergantung pada apakah kita saat ini genap atau ganjil. Array dari string disimpan ke dalam$n
, dan dikalikan dengan apakahN
/78
adalah-in
input. Itu akan menentukan apakah$n
ditempatkan pada pipa atau tidak.Kemudian, kami membangun bagian tengah. Baris pertama,
$z
adalah "puncak" dari rute timur-barat, menggunakan logika yang sama untukW
danE
/69
, dan dikelilingi dalam parens untuk juga menempatkan salinan pada pipa. Kami menggunakan variabel pembantu$y
untuk menyimpan byte di-----
bagian.Baris berikutnya adalah jumlah spasi yang sesuai (yaitu,
$x
) string-disatukan dengan pipa dengan lebar yang benar (yaitu,$w
). Kemudian, garis tengah bergaris, lagi denganW
danE
logika dan$w
mengisi di tengah. Kemudian$x+$w
dan$z
lagi.Akhirnya, karena jalan Selatan adalah sama dengan utara, menempatkan
$n
pada pipa jikaS
/83
adalah-in
$a
.Semua string yang dihasilkan dikumpulkan dari pipa dan output tersirat pada akhir pelaksanaan program. Menyalahgunakan
Write-Output
pembatas default untuk menyisipkan baris baru antar elemen.Contohnya
sumber
C ++
317280276 byteTidak Disatukan:
sumber
strchr
denganindex
akan mencukur lebih sedikit. Tentukanx
dany
bersama - samafor
loop luar .Python 3, 186 byte
Lambda anonim dipanggil dengan serangkaian arah, misalnya 'NWS'
Penjelasan untuk diikuti
sumber
sed 234
Itu hanya membangun bagian-bagian yang berbeda jika karakter yang tepat ada di telepon.
Gunakan
@
alih-alih\n
dan masuk\n
kembali di akhir.Bagian utara dan selatan identik, jadi saya menggunakan apa yang pada dasarnya fungsi untuk memasukkannya.
sumber
Batch,
351344341 byteCatatan: Garis
set t=
berakhir dalam lima spasi, dan garisif "%i:e=%"=="%i%" set r=
berakhir pada spasi. Mengambil input case-insensitive dari STDIN. Sunting: Disimpan 7 byte dengan menghilangkand
variabel. Disimpan 3 byte dengan menggunakanfor
loop untuk mencetak bagian tengah. Jika saya diperbolehkan parameter baris perintah yang terpisah, maka untuk326319316 byte:sumber
Python 2, 290 byte
sumber
m,t,s=[],[],[]
bisa jadim=t=s=[]
.range(5)
dapat disimpan ke dalam variabel dan digunakan dua kali, bukannya mengetikrange(5)
dua kali.m
?t=s=[]
mengacaukan semuanyam=t=s=[]
, mereka semua menunjuk ke referensi yang sama.GolfScript, 154 byte
Cobalah online!
sumber
Pyth (
385380373353 bytes)Golf:
Tidak Disatukan:
Tentu saja, jika ada perbaikan, tolong beri tahu saya.
Disimpan 5 byte berkat Maltysen
Anda bisa mencobanya di sini
sumber
K
alih-alihN
dan kemudian ketika menetapkan untuk pertama kalinya, Anda tidak harus menggunakan=
, menghemat satu byteN[:-1]
adalahP
Groovy (274 Bytes)
Tidak disatukan
Golf
Cobalah: https://groovyconsole.appspot.com/script/5082600544665600
sumber