Considera di rappresentare una curva bidimensionale semplice , aperta su una griglia di testo larga W per altezza in cui X
rappresenta parte della curva e .
rappresenta lo spazio vuoto e non vengono utilizzati altri caratteri.
Ogni spazio griglia ha 8 spazi griglia vicini, il suo quartiere Moore . Gli spazi griglia oltre i bordi sono considerati vuoti.
Una griglia contiene una curva se ne ha esattamente una X
O se ne ha più di una X
dove:
- Esattamente due
X
secondi hanno un solo vicinoX
. Questi sono gli endpoint della curva. - Ognuno
X
oltre agli endpoint vicini esattamente dueX
s. Questi formano il grosso della curva.
Ad esempio, questa griglia in cui W = 9 e H = 4 contiene una curva:
....X.... .X.X.X.X. X..X..X.X .XX.....X
Allo stesso modo, queste griglie (W = 4, H = 3) hanno curve:
.... .X.. .... .... .X.X .... X..X ..X. XX.. X.X. ..X. .XX. .X.. .... ....
Queste griglie, tuttavia, non contengono una curva:
.... .XX. ...X XX.. .... X.X. .... X..X ..XX XX.. .X.X .X.. .... .XX. .X.. .... ...X X.X.
Possiamo trovare la lunghezza di una curva sommando le distanze tra tutte le coppie vicine di X
s:
La distanza tra due
X
s ortogonalmente vicine è 1 unità.XX
X X
La distanza tra due
X
s diagonalmente vicine è di √2 unità.X. .X
.X X.
Ad esempio, la lunghezza della curva nella griglia
XXX. ...X ..X.
può essere visualizzato come
quindi possiamo vedere che è 1 + 1 + √2 + √2 = 4.828427 ...
La lunghezza di una curva con una sola X
è zero.
Quando una griglia non forma una curva, la sua lunghezza non è ben definita.
Sfida
Data una griglia di testo di X
s e .
s, uscita la lunghezza della curva che contiene, o qualcosa di uscita altro esempio -1
o Null
per indicare la griglia ha alcuna curva.
Per l'input è possibile utilizzare caratteri diversi da X
e, .
se lo si desidera, e H e W possono essere presi come input, se necessario. Anche l'inserimento come elenco nidificato o matrice riempito con 1 e 0 invece di una stringa va bene.
È possibile generare un valore float per la lunghezza della curva o in alternativa due numeri interi A e B dove length = A + B*√2
.
Vince il codice più breve in byte.
Casi test
XXX.
...X
..X.
2 + 2*√2 = 4.828427...
....X....
.X.X.X.X.
X..X..X.X
.XX.....X
3 + 8*√2 = 14.313708...
....
....
..X.
0 + 0*√2 = 0
.X..
X..X
.XX.
1 + 3*√2 = 5.242640...
....
..X.
.X..
0 + 1*√2 = 1.414213...
....
XX..
....
1 + 0*√2 = 1
.X.X
X.X.
....
0 + 3*√2 = 4.242640...
....
....
....
....
-1
.XX.
X..X
.XX.
-1
...X
..XX
.X..
-1
....
.X.X
...X
-1
X.X.
.X..
X.X.
-1
[x.x,...,.x.]
non è una curva valida, giusto?