Dalam tantangan ini, Anda akan menghitung seberapa hebat tanah Anda.
Tulis program atau fungsi yang menghitung ukuran tanah Anda, mengingat tembok yang telah Anda bangun. Anda diberi string input non-kosong yang berisi sekumpulan 4 karakter berbeda pilihan Anda yang mewakili empat arah "naik", "turun", "kiri" dan "kanan" (saya akan gunakan ^ v < >
dalam tantangan ini). Tidak mungkin untuk berbelok 180 derajat ( <>
atau ^v
), tetapi Anda dapat melewati dinding Anda.
Cara Anda "menangkap" tanah adalah dengan melingkari tanah itu dengan dinding Anda. Tembok itu sendiri juga dianggap bagian dari tanahmu. Beberapa contoh akan membuatnya lebih jelas. Saya akan menggunakan o
untuk tanah yang telah dikelilingi oleh tembok, x
untuk tembok itu sendiri, dan S
untuk titik awal dinding, hanya untuk menggambarkan bagaimana tembok itu dibangun. Outputnya haruslah ukuran total tanah Anda (jumlah o
, x
dan S
dalam kasus uji di bawah).
Input: >>>>
Land: Sxxxx
Output: 5
Input: <<<^^^>>>vv
Land:
xxxx
xoox
xoox
xxxS
Output: 16
Input: <<<^^^>>>v
Land:
xxxx
x x
x
xxxS
Output: 11
Input: <
Land: xS
Output: 2
Input: >>>>>>vvvvvvvvv<<<<<^^^^>>>>>>>>vvvvvvvvvv<<<<<<<<<<<<<<<^^^^^^^^^>>>vvvvvv<<<<<
Land:
Sxxxxxx
x
x
x
x
xxxxxxxxx
xxxx xoooox x
xoox xoooox x
xoox xoooox x
xoox xxxxxx x
xoox x
xoox x
xxxxxx x
x x
x x
xxxxxxxxxxxxxxxx
Output: 101
Input: >>vvvv>>^^<<<<^
Land:
Sxx
xox
xxxxx
xox
xxx
Output: 17
Input: <<^^^>>>vv
Land:
xxxx
x x
x x
xxS
Output: 11 <- Note, diagonal edges do not close the "loop"
Klarifikasi:
- Anda tidak perlu menggambar dinding, output seharusnya hanya berupa bilangan bulat
- Format input adalah opsional. Anda dapat mengambil string dengan
<>^v
, daftar angka,,(1, -1, i, -i)
daftar karakterABCD
dll.
Ini adalah kode-golf sehingga kode terpendek dalam setiap bahasa menang. Ingat, penjelasan itu penting, bahkan dalam bahasa "biasa"!
Jawaban:
Python 2 ,
385345332 byteCobalah online! atau Coba semua test case
Input berupa angka, 0 ~ 3, indeks-0 dari simbol-simbol di sini:
>v<^
Ini adalah matriks yang dihasilkan:
sumber
Oktaf,
83858379 byteCobalah di Octave Online!
Fungsi yang mengambil input kolom yang berisi vektor
(1, -1, i, -i)
Menggunakan pendekatan @ lanlock4's Mathematica answer menambahkan panjang input ke koordinat untuk menghindari koordinat yang tidak positif, bukannya mengurangi min dari koordinat dari mereka. Disimpan 4 byte.
Jawaban sebelumnya:
Cobalah di Octave Online!
Berubah untuk visualisasi yang lebih baik.
Penjelasan:
sumber
Haskell,
579530 bytem
adalah fungsi utama, yang mengambil stringv^<>
, dan mengembalikan integer yang sesuai.Tidak Disatukan:
sumber
Mathematica, 124 byte
Anda mungkin tidak akan terkejut mengetahui bahwa Mathematica memiliki fungsi bawaan untuk mengukur area yang dikelilingi oleh dinding. Sayangnya, itu cukup bytey:
ComponentMeasurements[..., "FilledCount", CornerNeighbors -> False]
.Dengan mengingat hal itu, inilah jawaban lengkap saya. Ini adalah fungsi yang mengambil daftar 1, i, -1 atau -i:
Penjelasan:
FoldList[#+#2&,2(1+I)Length@#,#]
membangun dinding dengan mulai dari koordinat 2 (1 + i) (panjang dinding) dan berturut-turut menambahkan elemen daftar input. (Kita harus mulai dari koordinat 2 besar yang sangat besar (1 + i) (panjang dinding) untuk memastikan bahwa koordinat dinding tetap positif, jika tidak hal-hal pecah.)SparseArray[{Re@#,Im@#}&/@...->1]
mengubah koordinat ini dari bilangan kompleks menjadi pasangan bilangan bulat, dan membuat larik dengan 1s di mana dinding berada dan 0s di tempat lain.1/.ComponentMeasurements[...,"FilledCount",CornerNeighbors->1<0]&
menggunakan built-in Mathematica magic untuk mengukur area yang tertutup oleh dinding.sumber
PHP> = 5.6.2, 888 Bytes
Versi Online
sumber