Considera di rappresentare una curva bidimensionale semplice , aperta su una griglia di testo larga W per altezza in cui Xrappresenta 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 Xdove:
- Esattamente due
Xsecondi hanno un solo vicinoX. Questi sono gli endpoint della curva. - Ognuno
Xoltre agli endpoint vicini esattamente dueXs. 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.....XAllo 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 Xs:
La distanza tra due
Xs ortogonalmente vicine è 1 unità.XXX XLa distanza tra due
Xs 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 Xs e .s, uscita la lunghezza della curva che contiene, o qualcosa di uscita altro esempio -1o Nullper indicare la griglia ha alcuna curva.
Per l'input è possibile utilizzare caratteri diversi da Xe, .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?
