Ini emoji peliharaan saya, Billy:
-_-
Emoji tidak suka berada di tengah hujan, jadi Billy sedih ... Mari kita ambilkan payung untuk membuatnya merasa lebih baik!
/\
/ \
/ \
-_-
Ini bagus, dia sepenuhnya tertutupi payungnya! Ini adalah contoh di mana hanya sebagian dari dirinya yang terlindungi:
/\
/ \
/ \
-_-
Dalam hal ini, bagian 2 dan 3 tubuhnya terkena hujan.
Payung datang dalam berbagai bentuk dan ukuran, tetapi mereka selalu terdiri dari serangkaian tebasan menaik /
diikuti oleh serangkaian backslash menurun \
. Misalnya, ini semua payung yang valid:
/\
/ \
/ \
/\
/\
/ \
/ \
/ \
/ \
Dan ini bukan:
/ \
\/
\
/ \
/ \
0\
/ \
//\\
/ \
Anda perlu menentukan bagian mana dari emoji saya yang terkena hujan.
Klarifikasi
Program Anda (atau fungsi) akan mengambil string 2d sebagai input. Ini bisa dalam format apa pun yang paling nyaman atau alami untuk bahasa Anda. Array string, array array karakter, string dengan baris baru di dalamnya, dll.
Anda harus menampilkan bagian emoji mana yang terkena hujan. Ini bisa diindeks nol atau diindeks satu, selama Anda membuatnya jelas. Output bisa dalam format yang masuk akal. Jika seluruh emoji terlindung dari hujan, tidak menghasilkan apa-apa (atau array kosong).
Anda dapat mengasumsikan bahwa semua input akan memiliki payung valid, dan emoji yang sama:
-_-
. Emoji akan selalu berada di baris terakhir dari input, namun mungkin ada beberapa baris kosong antara payung dan emoji.Segala sesuatu yang bukan bagian dari payung atau emoji akan menjadi
karakter ruang atau baris baru.
Input akan diisi dengan spasi sehingga panjang setiap baris adalah sama.
Celah standar berlaku, dan jawaban tersingkat dalam byte menang!
Tes IO:
Semua kasus sampel akan menggunakan pengindeksan satu.
/\
/ \
/ \
-_-
Outputs: []
----------------
/\
/ \
-_-
Outputs: [2, 3]
----------------
/\
-_-
Outputs: [1]
----------------
/\
/ \
/ \
/ \
/ \
/ \
-_-
Outputs: [1, 2, 3]
["_","-"]
.Jawaban:
05AB1E ,
181715 byteKode:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online! (pastikan untuk mengisi semua garis dengan spasi dengan panjang yang sama ..
sumber
JavaScript (ES6), 95 byte
Input harus berupa array string, dengan setiap baris diisi dengan spasi untuk membentuk persegi. Output adalah array angka 1-diindeks.
Penjelasan
sumber
JavaScript (ES6), 92 byte
Menerima larik garis yang acak-acakan dan mengembalikan hasil yang diindeks 1. Penjelasan:
sumber
Java 8 lambda,
241218201191185184 (atau 161) karakterKarena kamu tahu, Jawa juga butuh emoji kering.
Ini mengembalikan
ArrayLista HashSet Stack yang berisi bagian-bagian emoji yang terkena hujan (pengindeksan dimulai pada 0). Semuanya terbuka:Pembaruan
Saya melakukan beberapa golf dasar. Ini termasuk menempatkan deklarasi bersama-sama, bandingkan dengan nilai ascii untuk menyimpan beberapa karakter dan memperpendek loop.
Terima kasih kepada @ user902383 untuk menunjukkan kesalahan dump saya menggunakan ArrayLists bukan hanya Daftar. Saya mengganti ArrayLists / Lists dengan HashSets / Sets yang menyimpan lebih banyak karakter. Juga terima kasih atas tipnya untuk menggunakan loop foreach di loop batin! Melalui perubahan itu saya dapat membuat variabel untuk indeks baris grid terakhir yang lebih pendek. Keseluruhan 17 karakter telah disimpan!
@KevinCruijssen menyarankan untuk menghapus obat generik pada inisialisasi, saya melangkah lebih jauh: Hapus semua obat generik. Ini menyimpan 10 karakter lainnya.
Saya beralih kembali dari foreach loop ke for for. Ini memungkinkan untuk melewati membandingkan baris terakhir yang pada gilirannya memungkinkan saya untuk mempersingkat perbandingan nilai-nilai ascii. Dalam konteks ini hanya '/', '\' dan '_' memiliki nilai ascii lebih dari 46. Jika kita tidak memeriksa baris terakhir, kita dapat menggunakan a
> 46 check
sebagai gantinya untuk memeriksa nilai aktual.Terima kasih lagi kepada @ user902383 karena menunjukkan kepada saya bahwa saya menggunakan lambda dan dapat menggunakan Daftar + Stack alih-alih Set + HashSet untuk mencukur karakter lain.
Versi pengembalian string
@ user902383 menunjukkan saya malah bisa membuat sebuah String dengan digit. Ini kedengarannya sangat curang, tetapi yang lain tampaknya menyelesaikannya dengan cara ini jadi di sini adalah versi yang lebih pendek menggunakan pengembalian String:
Tidak Disatukan:
sumber
always program to an interface
, jika Anda menggunakanList
bukannyaArrayList
Anda dapat menyimpan 5 byte=new HashSet<>();
kemungkinan besar bisa bermain golf=new HashSet();
.<>
menghemat 2 byte. :)Set(3)
HashSet(7)
terhadapList
(4) danStack
(5).V ,
2019 byte (tidak bersaing)Alternatif, versi yang bersaing (21 byte):
Cobalah online! (Catatan, tryitonline.net menggunakan versi V. yang sedikit lama. Untuk mengimbanginya, ia menggunakan versi yang sedikit lebih lama ini)
Penjelasan:
Ini saja menghasilkan hasil yang benar dalam 17 byte. Namun, itu juga menciptakan ruang kosong ekstra. Saya tidak keberatan, tapi saya tidak ingin memberi diri saya keuntungan yang tidak adil, jadi saya menambahkan dua byte:
sumber
JavaScript (ES6),
117112 byteMenerima larik
stringarray karakter yang acak-acakan , dan mengembalikan hasil yang diindeks 0.Demo
sumber
Retina , 56 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online!
Ini adalah tahap substitusi tunggal, di mana regex cocok dengan salah satu karakter emoji, asalkan ada karakter non-spasi (yaitu a
/
atau\
) di suatu tempat di atas dalam posisi horizontal yang sama, dan kemudian kami menangkap jumlah karakter emoji hingga saat itu. titik. Pertandingan ini diganti dengan panjang tangkapan terakhir itu, yang memberi kami indeks karakter emoji yang tidak terselubung ini. Regex juga berisi|\D
untuk mencocokkan semua hal lain yang diganti dengan apa-apa, jadi kami menghapus semua karakter lainnya.sumber
/
atau\
, aku muncul dari kelompok itu lagi sembari menyamakan hal-hal sebelumnya yang , dan kemudian pastikan saya sudah benar-benar habis kelompok. Ini pada dasarnya memastikan bahwa posisi horizontal emoji dan karakter atap cocok.Pyth,
2723 byteDiindeks 0.
Cobalah online!
Penjelasan
Sejarah
27 byte:
sM:#"^ *\d"0.T:R"-_-"s`M3.z
( Coba online! )sumber
Matlab, 43 byte
Kode ini menemukan posisi kolom karakter non-spasi di baris akhir input, menjumlahkan jumlah karakter non-spasi di kolom tersebut, dan menemukan di mana hanya ada satu karakter seperti itu (karakter emoji, tidak terlindung oleh payung!) . Kode ini hanya mengembalikan hasil yang tepat untuk payung yang terbentuk dengan baik (kode ini mengasumsikan karakter apa pun di atas emoji kami adalah bagian dari payung yang terbentuk dengan baik).
Berikut ini sedikit kode utilitas untuk menulis kasus pengujian dan memeriksa pekerjaan saya:
Berlari
x = thrht(7)
memberiAtau
x = twht(0)
memberisumber
APL, 31 byte
Ini mengambil matriks karakter sebagai input.
Tes:
Penjelasan:
'-_-'⍷⍵
: dalam matriks nol ukuran input, tandai posisi awal'-_-'
dalam input dengan 1.+\+\
: Menjalankan jumlah di atas baris. Yang pertama merek0 0 0 1 0 0 ...
ke0 0 0 1 1 1 ...
, yang kedua kemudian membuatnya menjadi0 0 0 1 2 3 ...
.⍵∊'/\'
: tandai semua kemunculan '/' dan '\' pada input dengan 1s.∨⌿
:or
lebih dari kolom. Ini menandai 1 semua posisi pada baris terakhir yang dicakup oleh payung.~
:not
, karena kita membutuhkan yang sebaliknya(
...)/
...: Pilih semua kolom yang tidak tertutup dari matriks penjumlahan yang berjalan dari sebelumnya,
: Dapatkan daftar semua nilai dalam matriks yang dihasilkan.(⍳3)∩
: Persimpangan antara itu dan1 2 3
(ini menghilangkan 0s yang dipilih atau nilai yang lebih tinggi, yang akan menjadi spasi).sumber
Python 2,
114111 byteMenggunakan pengindeksan berbasis 0.
Coba di sini .
sumber