0votos

Recorrido en forma de caracol en C#

por josejuan hace 5 años

Este desafío es el mismo que "Matriz Caracol" salvo pequeñas transformaciones irrelevantes. Aquí uso *exactamente* mi solución del otro desafío y aplico dos transformaciones inmediatas para obtener el desafío solicitado.

Desarrollar un algoritmo en JAVA en donde la persona ingrese 25 valores de un array bidimensional 5*5, luego imprimir dichos números pero en forma de caracol de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Usando la misma función caracol `coords` de la solución: 
//     http://www.solveet.com/exercises/Matriz-Caracol/48/solution-331 
 
 
// Solución que calcula cada celda con coste constante O(1) (es decir, sin iterar) 
// y que permite transformar cualquier caracol. 
 
// En este caso, se trata únicamente de recorrerlo de dentro a fuera y de rotar la 
// matriz caracol 90º. 
 
Func<int, IEnumerable<Point>> NuevoCaracol = 
    N => Enumerable.Range(0, N * N)                            // Para cada celda n-ésima 
                    .Select(k => coords(k + 1, N))              // obtenemos la coordenada caracol 
                    .Reverse()                                  // de dentro a fuera 
                    .Select(p => new Point(N - p.X, p.Y - 1));  // y rotando 90º 
 
 
 
 
 
 
 
 
// Por ejemplo, sea A la matriz indicada en el ejemplo: 
var A = new int [,] { 
    {  1,  2,  3,  4,  5 }, 
    {  6,  7,  8,  9, 10 }, 
    { 11, 12, 13, 14, 15 }, 
    { 16, 17, 18, 19, 20 }, 
    { 21, 22, 23, 24, 25 } }; 
 
// Imprimir las coordenadas solicitadas es: 
foreach(var p in NuevoCaracol(A.GetUpperBound(0) - A.GetLowerBound(0) + 1)) 
    Console.WriteLine(@"({0}, {1}) := {2}", p.X, p.Y, A [p.X, p.Y]); 
 
/* Cuya salida es: 
    (2, 2) := 13 
    (3, 2) := 18 
    (3, 3) := 19 
    (2, 3) := 14 
    (1, 3) := 9 
    (1, 2) := 8 
    (1, 1) := 7 
    (2, 1) := 12 
    (3, 1) := 17 
    (4, 1) := 22 
    (4, 2) := 23 
    (4, 3) := 24 
    (4, 4) := 25 
    (3, 4) := 20 
    (2, 4) := 15 
    (1, 4) := 10 
    (0, 4) := 5 
    (0, 3) := 4 
    (0, 2) := 3 
    (0, 1) := 2 
    (0, 0) := 1 
    (1, 0) := 6 
    (2, 0) := 11 
    (3, 0) := 16 
    (4, 0) := 21 
*/ 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.