-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path09.pl
82 lines (64 loc) · 2.34 KB
/
09.pl
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Encabezado
% C# solucion / Python
%------------------------------------------------------------------------------
% Módulo: 50_programas
% Propósito: Elaborar 50 programas en Prolog
%
% Autor: Diaz Morales Katherine Giselle
% Fecha: 21 de octubre de 2024
%
% Descripción:
% Elaborar 50 programas en Prolog, usar templete.
--------------------------------------------------------------------------------------
- - - - - PROLOG - - - - -
9. Agrupar duplicados consecutivos de los elementos de una lista en sublistas.
% Agrupa duplicados consecutivos de una lista en sublistas.
% Caso base: una lista vacía se agrupa como una lista vacía.
pack([], []).
% Caso recursivo: transfiere todos los elementos consecutivos iguales a una sublista.
pack([X|Xs], [[X|Ys]|Zs]) :- transfer(X, Xs, Ys, Rest), pack(Rest, Zs).
% Transfiere los elementos duplicados consecutivos a una sublista.
transfer(X, [], [], []).
% Si el siguiente elemento es diferente, termina la transferencia.
transfer(X, [Y|Ys], [], [Y|Ys]) :- X \= Y.
% Si el siguiente elemento es igual, agrégalo a la sublista.
transfer(X, [X|Xs], [X|Ys], Rest) :- transfer(X, Xs, Ys, Rest).
- - - - - C# - - - - -
using System;
using System.Collections.Generic;
class Program
{
// Función principal que agrupa duplicados consecutivos en sublistas
static List<List<T>> Pack<T>(List<T> list)
{
if (list == null || list.Count == 0)
return new List<List<T>>();
List<List<T>> result = new List<List<T>>();
List<T> currentGroup = new List<T> { list[0] };
for (int i = 1; i < list.Count; i++)
{
if (list[i].Equals(list[i - 1]))
{
currentGroup.Add(list[i]);
}
else
{
result.Add(currentGroup);
currentGroup = new List<T> { list[i] };
}
}
result.Add(currentGroup); // Añadir el último grupo
return result;
}
static void Main()
{
List<int> input = new List<int> { 1, 1, 2, 2, 2, 3, 3, 4, 5, 5 };
List<List<int>> output = Pack(input);
Console.WriteLine("Input: " + string.Join(", ", input));
Console.WriteLine("Output:");
foreach (var group in output)
{
Console.WriteLine("[ " + string.Join(", ", group) + " ]");
}
}
}