pengantar
Anda duduk bersama rekan kerja, makan siang, dan membual kepadanya tentang proyek terbaru dan konon terbesar yang pernah Anda kerjakan. Menjadi muak dan lelah dengan pertunjukkan egoisme Anda yang terus-menerus, ia memberi Anda tantangan agar Anda bisa diam. Menjadi orang yang egois dan bahagia, Anda tentu saja menerima (karena Anda harus menerima setiap tantangan). The tantangan , karena ia / dia menjelaskan itu, diberi masukan dari blok teks yang mengandung 1 atau lebih dari masing-masing karakter di !@#$^&*
, keluaran dalam format wajar koordinat saklar (es) yang / yang "on".
Menurut rekan kerja Anda, sakelar adalah $
, dan sakelar diklasifikasikan sebagai "aktif" jika dan hanya jika memenuhi setidaknya 1 dari kriteria berikut:
Dikelilingi oleh semua
^
. Begitu...^^^ ^$^ ^^^
menghasilkan sakelar "on".
Dikelilingi oleh semua
&
. Begitu...&&& &$& &&&
menghasilkan sakelar "on".
Ini sepenuhnya tertutup pada setidaknya dua sisi dengan
*
. Contohnya,*** &$& ***
menghasilkan saklar "on", tetapi
&*& &$& &*&
tidak, karena saklar tidak sepenuhnya tertutup oleh dua sisi oleh
*
s.Setidaknya ada 1
!
dan / atau 1@
di setiap sudut di sekitarnya. Ini tidak masuk hitungan jika salah satu dari ini tidak ada di sudut. Begitu...!&& ^$@ @&!
menghasilkan sakelar "on", karena setidaknya ada 1
!
dan / atau@
di setidaknya 1 sudut (dalam kasus di atas, ada 2!
s valid dan 1 valid@
di 3 sudut). Dan...&!& ^$@ ^!&
tidak tidak , meskipun ada 2
!
dan 1@
, karena tidak satupun dari mereka berada di salah satu sudut.1 atau lebih tidak
#
berada di sisi mana pun di sekitar sakelar, kecuali setidaknya 1 mengelilingi sakelar. Dengan kata lain, jika ada setidaknya 1 hadiah di satu sisi, itu mengesampingkan semua aturan lain, kecuali ada juga hadiah. Karena itu:&
#
&
#&* *$* !**
menghasilkan "on" switch, meskipun
#
ada, karena ada di&
sekitar switch, dan mengikuti setidaknya 1 aturan di atas. Namun, jika tanda seru tidak ada seperti itu:#&* *$* ***
Switch akan dimatikan, karena tidak mengikuti setidaknya salah satu aturan di atas. Oleh karena itu, meskipun sebuah saklar mungkin dikelilingi oleh a
#
dan a&
, itu masih akan mati kecuali mengikuti satu atau lebih dari aturan-aturan ini. Selain itu, harus selalu ada rasio> = 1: 1 antara&
s dan#
s agar sakelar valid. Contohnya,#&! *$* **#
masih akan menjadi saklar yang tidak valid, meskipun mengikuti 1 dari aturan ini, karena ada 2
#
s, tetapi hanya 1&
, dan karenanya bukan rasio> = 1: 1 antara&
s dan#
s. Untuk membuat ini valid, Anda harus menambahkan 1 atau lebih tambahan&
ke tepi mana pun untuk menyeimbangkan jumlah keluar#
dan&
masuk, mungkin seperti:#&! *$& &*# 3:2 ratio between &s and #s
Akhirnya...
#^^ ^$* @^!
menghasilkan "off" switch, meskipun mengikuti 1 atau lebih dari aturan di atas, karena mengandung setidaknya 1
#
di sekitarnya, dan tidak ada&
untuk mengimbangi itu.Switch yang valid hanya akan berada di dalam input, dan oleh karena itu, setiap valid
$
harus dikelilingi sepenuhnya oleh 8 karakter yang valid. Misalnya, jika seluruh input adalah:*$* !$! !!!
bagian atas
$
jelas bukan saklar yang valid karena saklar berada di tepi, dan karena itu saklar tidak sepenuhnya dikelilingi oleh 8 karakter yang valid. Dalam hal ini, sakelar seharusnya tidak dipertimbangkan. Namun, sakelar di tengah benar-benar valid, dan nyatanya "aktif", karena sakelar tersebut memenuhi setidaknya satu dari persyaratan di atas.
Untuk menunjukkan, pertimbangkan blok karakter ini:
!@#^^$#!@
!@#$$*$&@
@$^!$!@&&
yang dapat kita beri label untuk koordinat seperti itu, memanggil sumbu vertikal y
dan sumbu horizontal x
:
y
3 !@#^^$#!@
2 !@#$$*$&@
1 @$^!$!@&&
123456789 x
Koordinat harus selalu dikembalikan dalam (x,y)
format, mirip dengan kotak koordinat dua dimensi. Sekarang, sakelar mana yang aktif? Baiklah, pertama mari kita temukan semuanya. Kita sudah dapat melihat bahwa ada 1 di baris paling atas, dan satu lagi di paling bawah. Namun, itu secara otomatis no-ops, karena mereka tidak sepenuhnya dikelilingi oleh 8 karakter.
Berikutnya adalah yang di baris 2. Secara khusus, yang ini:
#^^
#$$
^!$
Kita dapat melihat bahwa ada 3 $
tanda dalam hal ini, tetapi kami hanya ingin fokus pada yang di tengah, dan, seperti yang mungkin Anda lihat, itu sudah tidak valid, karena ada 2 #
s di sekitarnya tanpa &
s untuk menyeimbangkannya di luar. Selain itu, ini bahkan tidak mengikuti aturan apa pun, jadi meskipun itu adalah saklar yang valid, itu akan "tidak aktif".
Berikutnya adalah satu lagi di baris 2:
^^$
$$*
!$!
Sekali lagi, hanya fokus pada sakelar di tengah. Sakelar ini "aktif", karena memiliki setidaknya 1 !
di setidaknya 1 sudut. Koordinat yang satu ini adalah (5,2)
.
Pindah, kami akhirnya pindah ke saklar terakhir. Yang ini juga ada di baris kedua dan muncul seperti ini:
$#!
*$&
!@&
dan, seperti yang mungkin Anda lihat, yang ini juga merupakan saklar yang valid, meskipun ada yang #
mengelilinginya, karena ada 2 lainnya &
untuk mengimbangi itu #
. Selain itu, ia juga memiliki setidaknya 1 !
di setidaknya 1 sudut, dan karena itu tidak hanya saklar yang valid, tetapi juga "aktif". Koordinat sakelar ini adalah (7,2)
.
Kami akhirnya mencapai akhir, dan telah menemukan 2 sakelar "on" di seluruh blok pada teks. Koordinatnya adalah (5,2)
dan (7,2)
, yang merupakan jawaban terakhir kami, dan seperti apa hasilnya. Namun, input ini sangat sederhana. Input bisa menjadi jauh lebih besar, karena tidak ada batasan seberapa besar blok teks bisa didapat. Misalnya, inputnya bahkan bisa berupa 200x200
blok teks acak .
Pengaduan
Celah Standar dilarang.
Tidak mungkin ada built-in untuk ini, tapi kalau-kalau ada (melihat Anda Mathematica), penggunaan built-in yang secara langsung menyelesaikan ini dilarang.
Kasus uji:
Diberikan dalam format string input -> [array output]
:
@#$$&^!&!#
@*&!!^$&^@
$!#*$@#@$! -> [[7,3],[9,2]]
*@^#*$@&*#
#^&!$!&$@@#&^^&*&*&&
!^#*#@&^#^*$&!$!*^$$
#^#*#$@$@*&^*#^!^@&* -> [[19,3],[15,3],[8,2]]
#$@$!#@$$^!#!@^@^^*#
@!@!^&*@*@
*$*^$!*&#$
@$^*@!&&&#
**$#@$@@#! -> [[2,8],[5,8],[6,6],[9,3]]
##*&*#!^&^
$&^!#$&^&@
^^!#*#@#$*
$@@&#@^!!&
#@&#!$$^@$
!!@##!$^#!&!@$##$*$#
$^*^^&^!$&^!^^@^&!#!
@*#&@#&*$!&^&*!@*&** -> [[9,4],[9,3]]
^!!#&#&&&#*^#!^!^@!$
&$$^*$^$!#*&$&$#^^&$
Selebihnya datang segera
catatan tambahan
- Anda dapat mengasumsikan bahwa input akan selalu dalam bentuk blok lengkap (yaitu persegi panjang atau persegi)
- Tidak akan pernah ada karakter lain dalam input selain yang masuk
!@#$^&*
.
Ingat, ini adalah kode-golf sehingga kode terpendek menang!
Jawaban:
Haskell, 304 byte
Ini mendefinisikan fungsi
f
yang melakukan tugas yang diberikan.sumber
JavaScript (ES6),
363339312309298 byteIni adalah fungsi yang mengambil input sebagai string dan mengembalikan daftar koordinat. Ini dibagi menjadi 2 bagian utama: transformasi sakelar menjadi sepasang koordinat dan karakter sekitarnya, dan tanda centang 'is it on' berdasarkan aturan tantangan pada karakter sekitarnya.
sumber
Python 2 ,
299297279275261259 byteCobalah online!
Mengambil input sebagai daftar string
Mencetak output sebagai pasangan koordinat x, y pada setiap baris
sumber