Hari ini adalah Purim di mana satu kebiasaan adalah untuk memberikan kue berbentuk segitiga dengan isian yang disebut hamantaschen (tunggal: hamantasch ). Kebiasaan lain adalah minum banyak.
Saya bukan tukang roti yang paling sempurna .... Saya memiliki begitu banyak hamantaschen berukuran tidak teratur untuk diberikan dan begitu banyak teman untuk diberikan kepada mereka! Jika saya mengirimi Anda gambar cookie saya, dapatkah Anda memberi tahu saya berapa banyak ukuran dan isinya? Tetapi karena Purim dan saya terlalu mabuk untuk membaca banyak kode, perlu kode sekecil yang Anda bisa.
Definisi
Ukuran
Hamantasch bisa berukuran berapa saja . Hamantasch terkecil adalah ukuran 1 dan terlihat seperti ini:
/\ --
-- \/
Terkadang, beberapa hamantaschen bisa tumpang tindih . Bentuk di bawah ini dihitung sebagai dua hamantaschen (satu ukuran 1, satu ukuran 2):
/\
/\ \
----
Beberapa hamantaschen telah diisi . Ini akan ditunjukkan dengan mengisi semua spasi putih di dalam dengan karakter. Perhatikan bahwa hamantaschen ukuran 1 tidak dapat diisi.
Kami akan memberi nama hamantaschen berdasarkan pengisian dan ukuran. Mari kita gunakan format <filling> <size>
dan jika tidak terisi, - <size>
(Anda bisa menggunakan spasi alih-alih -
, tetapi penurunan harga tidak seperti itu).
Inilah a . 2
, a . 4
, dan a - 3
:
/\
/./\
---- /./ \
\../ /./ \
\/ --------
Ini adalah @ 3
, a . 2
dan a - 4
:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
Ini sesuatu yang lebih sulit. Lihat bagaimana & 2
pengisian kurang dari yang Anda harapkan karena miring dari tumpang tindih - 3
? Memiliki - 1
, sebuah & 2
sebuah - 3
dan & 4
:
--------
\ \/&/
\ /\/
\/&/
\/
Memasukkan
Anda akan diberikan file teks atau string tunggal hamantaschen (opsional trailing newline dan opsional spasi tambahan spasi kosong untuk menjadi rata).
Batas
- Anda dapat mengharapkan string valid - yaitu, setiap karakter non-spasi putih berkontribusi pada hamantasch yang manis dan manis (mengapa membuang-buang adonan?).
- Anda juga dapat berharap itu diisi dengan benar atau tidak - yaitu, setiap hamantasch itu akan sepenuhnya diisi dengan karakter ASCII yang konsisten - ASCII 32 untuk tidak terisi, atau apa pun 32..127 untuk diisi (tidak termasuk
/
,\
dan-
). - Hamantaschen ini tidak ditumpuk dalam 3 ruang. Semua
/
dan\
akan terlihat. Semua-
yang tidak diblokir oleh/
dan\
akan terlihat. Pengisian terakhir datang. - Semua hamantaschen akan memiliki setidaknya setengah dari garis horizontal mereka (pembulatan ke atas) terlihat.
- Blok pengisian yang berdekatan hanya mengisi hamantasch terkecil yang mengelilinginya.
Keluaran
Kembalikan daftar "nama" semua hamantaschen yang dapat ditemukan memenuhi kriteria di atas. Outputnya bisa dalam bentuk apa pun yang Anda suka (string, hash, stdout, dll).
Uji kasus
Uji kasus # 1
Input # 1:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
/\
/**\
/*/\*\
/*/..\*\
--------
Output # 1:
. 2
. 2
- 4
@ 3
* 4
Test Case # 2
Input # 2:
/\----
/\/\*\/
/ /\d\/
------
Output # 2:
- 3
- 2
d 2
- 1
* 2
- 1
Tes # 3
Input # 3:
----
\/\/
/\/\ /\
---- /::\
----
Output # 3:
- 1
- 1
- 2
- 1
- 1
- 2
: 2
Tes # 4
Input # 4:
/\/\
/ /\$\
-/--/\\
--/--\
/xxx/\
/xxx/##\
---/----\
/ \
--------
Keluaran # 4:
$ 2
x 4
- 3
- 2
- 4
- 1
- 1
# 2
Kasus Uji Tidak Valid # 5
Memasukkan:
/\
\/
Keluaran:
Anda tidak perlu menangani ini.
sumber
/
dan\
, dan-
akan selalu mengisi truf.(1,0)
, mati oleh+1
. Tetap saja, saya tahu apa yang Anda maksud, dan saya tidak setuju. Indikasi apa yang ada(2, 2)
di tengah atas- 2
dan bukan hanya kanan atas dan kiri atas- 1
? Tidak ada yang bisa saya lihat. Dan logika yang sama berlaku untuk(3, 2)
. Kecuali Anda ingin menambahkan aturan untuk mengasumsikan maksimum hamantaschen ...Jawaban:
C #,
496452 byteSunting: menemukan bug dengan batas memeriksa ... tetapi juga menggarisbawahi byte yang dipaksa untuk memahami kode saya sendiri. Membuka gulungan fungsi lokal sedikit membantu, dan menghapus kode khusus C # 7. Pertanyaan ini sangat menyenangkan.
Cobalah secara Online
Program lengkap, mengharapkan input ruang-empuk ke standar masuk, keluaran standar keluar. Outputnya adalah satu entri per baris, dengan trailing line feed. Cookie dikeluarkan dalam urutan ukuran yang meningkat, paling kiri atas terlebih dahulu. Butuh waktu cukup lama bagi saya untuk memahami aturan, tetapi saya pikir itu melewati semua contoh yang diberikan.
Ini bekerja dengan berulang kali mencari seluruh kotak untuk Hamantaschen yang valid, menambah ukuran 'diizinkan'. Untuk setiap sel, ia memeriksa ke atas dan ke bawah, mengikuti
\
dan/
di kedua sisi sejauh mungkin. Jika pemberitahuan bahwa baris berikutnya memiliki banyak-
, dan ukuran saat ini adalah ukuran 'diizinkan', maka itu menentukan pengisian dan mencetak entri.Isi ditemukan dengan menjelajahi seluruh ruang cookie, mencari sel 'tidak terpakai'. Ketika sel yang tidak digunakan ditemukan, itu ditandai sebagai digunakan (karena kami meningkatkan ukuran yang diizinkan, kami tahu kami adalah cookie terkecil yang mengandungnya), dan kami mencatat isinya.
Kode yang diformat dan dikomentari:
Output untuk 4 kasus uji:
sumber