Anda harus menulis program atau fungsi yang menerima string yang mewakili seni ASCII sebagai input dan output atau mengembalikan jumlah titik akhir dalam input.
Input akan terdiri dari karakter space - | +
(masing-masing dengan titik akhir 0, 2, 2 dan 4) dan linebreak. Misalnya:
-|++-
+
Dua karakter yang berdekatan terhubung dan karenanya masing-masing kehilangan 1 titik akhir dalam kasus berikut:
-- -+ +- | | + + ++
| + | +
Contoh pertama memiliki
2+2+2+2+1+
3 = 12
titik akhir.
Memasukkan
- Masukan akan menjadi string yang terdiri dari karakter ruang,
-
,|
,+
dan baris baru. - Panjang input dapat 0 panjang dan input apa pun yang cocok dengan uraian di atas valid (dalam input regex adalah
[ -+|\n]*
). - Mengejar baris baru adalah opsional.
Keluaran
- Bilangan bulat non-negatif tunggal, jumlah titik akhir.
Contohnya
Keluaran adalah setelah baris terakhir dari input mereka.
+
4
-|++-
+
12
+--+
| |
+--+
8
| |
+--+-- |||
12
--++
|||--
10
<empty input>
0
|
|
2
--
++--
++
--+
+++ ||
----
30
Ini adalah kode golf sehingga entri terpendek menang.
["",...s.split("\n"),""]
lebih lama @ETHproduksiPython 2, 123
Metode sekali jalan. Dibawa sebagai input string dengan linebreak.
Untuk horizontal, idenya adalah untuk menghitung jumlah segmen horisontal, yang masing-masing memiliki dua titik akhir. Segmen dimulai setiap kali karakter adalah salah satu dari
+-
(booleanh
) tetapi yang sebelumnya tidak (booleanp
).Untuk vertikal, kami ingin melakukan hal yang sama pada input yang ditransposisikan, dengan melihat run of
+|
. Sayangnya, transposing Python benar-benar kikuk. Membutuhkan sesuatu sepertimap(None,*s.split('\n'))
mengisi kekosongan denganNone
, yang juga harus ditangani sendiri.Sebagai gantinya, kami melakukan penghitungan vertikal sambil iterasi secara horizontal. Kami menyimpan daftar
l
indeks kolom mana yang masih "berjalan", yaitu di mana karakter sebelumnya dalam kolom itu terhubung. Kemudian, kami melakukan hal yang sama dengan horizontal, menghitung segmen vertikal yang baru mulai. Ketika kami mencapai baris baru, kami memotong daftar di mana kami berada, karena semua segmen ke kanan rusak, dan mengatur ulang indeks saat ini ke0
.sumber
CJam,
666261 byteCobalah online di penerjemah CJam .
Ide
Kami dapat menghitung titik akhir sebagai berikut:
-
s,|
s dan+
s di input.--
s,-+
s,+-
s dan++
s di baris.||
s.|+
s,+|
s dan++
s di kolom.Kode
sumber