Uno dei miei passatempi matematici preferiti è disegnare una griglia rettangolare, quindi trovare tutti i rettangoli che sono visibili in quella griglia. Ecco, prendi questa domanda e avventurati!
Riesci a contare il numero di rettangoli?
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
Il numero totale di rettangoli per questa scheda minichess 4 x 4 è esattamente
100
Eri corretto?
Matematica correlata: quanti rettangoli ci sono su una scacchiera 8 × 8?
La sfida
Scrivi la funzione / programma più breve che conta il numero totale di rettangoli visibili su una griglia / immagine non toroidale .
Sfide correlate: Count the Unique Rectangles! , Trova il numero di rettangoli in una matrice di byte 2D .
Formato di input
La tua funzione o programma può scegliere di lavorare con input basato su testo o input grafico.
Input basato su testo
La griglia sarà una griglia ASCII m -by- n ( m righe, n colonne) composta dai seguenti caratteri:
- spazi,
-
per parti di un segmento di linea orizzontale,|
per parti di un segmento di linea verticale e+
per gli angoli.
Puoi introdurre questa griglia ASCII come input / argomento nel tuo programma / funzione sotto forma di
- una singola stringa delimitata da interruzioni di riga,
- una stringa senza newline ma con uno o due numeri interi che codificano le dimensioni della griglia, oppure
- una matrice di stringhe.
Nota: l'input basato sul testo contiene almeno 1 riga e almeno 1 colonna.
Input grafico
In alternativa, le griglie sono codificate come immagini PNG in bianco e nero di 5 * n pixel di larghezza e 5 * m pixel di altezza. Ogni immagine è composta da blocchi di 5 px * 5 px che corrispondono all'ingresso ASCII di:
- Gli spazi vengono convertiti in blocchi bianchi. Questi blocchi sono chiamati blocchi di spazi bianchi .
- I segmenti di linea e gli angoli vengono convertiti in blocchi non bianchi. Il pixel centrale di tali blocchi è nero.
- Modifica: se due angoli (nell'ingresso ASCII) sono collegati da un segmento di linea, anche i centri di blocco corrispondenti (nell'ingresso grafico) devono essere collegati da una linea nera.
Ciò significa che ogni blocco può essere scelto solo (fare clic qui per ingrandire l'immagine) .
Nota: i confini blu sono solo a scopo illustrativo. L'input grafico è largo almeno 5 px e alto 5 px. È possibile convertire l'input grafico in qualsiasi immagine monocromatica, potenzialmente di altri formati di file immagine). Se si sceglie di convertire, si prega di specificare nella risposta. Non è prevista alcuna penalità per la conversione.
Formato di output
Se stai scrivendo un programma, deve visualizzare un numero non negativo che indica il numero totale di rettangoli nell'input.
Se stai scrivendo una funzione, dovrebbe anche restituire un numero non negativo che indica il numero totale di rettangoli nell'input.
Casi di esempio
Caso 1, Grafica: ( 30 px * 30 px), ASCII: ( 6 righe, 6 cols)
+--+
| |
| ++-+
+-++ |
| |
+--+
Uscita prevista: 3
Caso 2, Grafica: ( 20 px * 20 px), ASCII: ( 4 file, 4 colonne )
++-+
|+++
+++|
+-++
Uscita prevista: 6
Caso 3, Grafica: ( 55 px * 40 px), ASCII: ( 8 righe, 11 cols)
+++--+
+-+++ |
| | ++--+
+--+--++ ++
| ||
| ||
++ +--++
++
Uscita prevista: 9
Caso 4, Grafica: ( 120 px * 65 px), ASCII: ( 13 righe, 24 cols)
+--+--+ +--+ +--+ +--+
| | | | | | | | |
+--+--+ | | | | | |
| | | +--+--+--+--+--+
+--+--+ | | | |
| | | | ++
+-+-+-+-+ +--+ +--+ ++
| | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
Uscita prevista: 243
Caso 5, Grafica: ( 5 px * 5 px. Sì, è lì!), ASCII: solo un singolo spazio.
Uscita prevista: 0
Caso 6, Grafica: ( 35 px * 20 px), ASCII: ( 4 righe, 7 cols)
+--+--+
|++|++|
|++|++|
+--+--+
Uscita prevista: 5
ipotesi
Per semplificarti la vita, hai la garanzia che:
- Essendo non toroidale , la griglia non si avvolge né in orizzontale né in verticale.
- Non ci sono estremità libere, ad esempio
+---
o+- -+
. Tutti i segmenti di linea hanno due estremità. - In quel punto due linee che si incontrano
+
devono intersecarsi. - Non devi preoccuparti di input non validi.
Si applicano le regole contro le scappatoie standard. Si prega di trattare i quadrati come rettangoli. Facoltativamente, è possibile rimuovere gli spazi finali su ciascuna riga della griglia.
Si tratta di code-golf , quindi rendi il tuo ingresso il più breve possibile. Le soluzioni testuali e grafiche competeranno insieme.