<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Gibran Pelayo M. - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Gibran Pelayo M. - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Fri, 22 May 2026 15:16:29 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/gibranpm/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Cuándo (y por qué) debes usar las funciones flecha de ES6 — y cuándo no ]]>
                </title>
                <description>
                    <![CDATA[ Las funciones flecha (llamadas también “funciones de flecha gorda”) son indudablemente una de las características más populares de ES6 (EcmaScript 6). Ellas introducen una nueva forma de escribir funciones concisas. He aquí una función escrita en sintaxis ES5: function porDos(parametros) {  return parametros * 2}function porDos(parametros) {   ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/cuando-y-por-que-debes-usar-las-funciones-flecha-de-es6-y-cuando-no/</link>
                <guid isPermaLink="false">6462c34ccc6454089f94be8c</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Fri, 19 May 2023 02:02:56 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/05/1_GRUP3Ml4piJhZQ8EOHkFDA.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/when-and-why-you-should-use-es6-arrow-functions-and-when-you-shouldnt-3d851d7f0b26/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">When (and why) you should use ES6 arrow functions — and when you shouldn’t</a>
      </p><p>Las funciones flecha (llamadas también “funciones de flecha gorda”) son indudablemente una de las características más populares de ES6 (EcmaScript 6). Ellas introducen una nueva forma de escribir funciones concisas.</p><p>He aquí una función escrita en sintaxis ES5:</p><pre><code class="language-js">function porDos(parametros) {  return parametros * 2}function porDos(parametros) {
  return parametros * 2
}

porDos(4);  // 8</code></pre><p>Ahora, he aquí la misma función expresada como una función flecha:</p><pre><code class="language-js">var porDos = parametros =&gt; parametros * 2

porDos(4);  // 8</code></pre><p>¡Es mucho más corto! Podemos omitir las llaves y la sentencia return debido a los retornos implícitos (pero sólo si no hay bloque — más sobre esto más adelante). </p><p>Es importante entender cómo la función flecha se comporta de manera diferente comparada con las funciones ES5 regulares.</p><h3 id="variaciones"><strong>Variaciones</strong></h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/c1-i0BPczDkbeDybCAzWCHsEyVFX0Ttg5bpL" class="kg-image" alt="La variedad es la sal de la vida" width="800" height="474" loading="lazy"><figcaption>La variedad es la sal de la vida</figcaption></figure><p>Una cosa que notarás rápidamente es la variedad de sintaxis disponibles en las funciones flecha. Repasemos algunas de las más comunes:</p><h4 id="1-sin-par-metros"><strong>1. Sin parámetros</strong></h4><p>Si no hay parámetros, puedes colocar paréntesis vacíos antes de <code>=&gt;</code>.</p><pre><code class="language-js">() =&gt; 42</code></pre><p>De hecho, ¡ni siquiera se necesitan los paréntesis!</p><pre><code class="language-js">_ =&gt; 42</code></pre><h4 id="2-un-solo-par-metro"><strong>2. Un solo parámetro</strong></h4><p>Con estas funciones, los paréntesis son opcionales:</p><pre><code class="language-js">x =&gt; 42  || (x) =&gt; 42</code></pre><h4 id="3-muchos-par-metros"><strong><strong><strong>3. </strong></strong>Muchos parámetros</strong></h4><p>Los paréntesis son obligatorios para estas funciones:</p><pre><code class="language-js">(x, y) =&gt; 42</code></pre><h4 id="4-sentencias-a-diferencia-de-las-expresiones-"><strong><strong><strong>4. S</strong></strong>entencia<strong><strong>s (</strong></strong>a diferencia de las expresiones<strong><strong>)</strong></strong></strong></h4><p>En su forma más básica, una <em>expresión de función</em> produce un valor, mientras que una <em>sentencia de función</em> realiza una acción.</p><p>Con la función flecha, es importante recordar que las sentencias deben tener llaves. Una vez que las llaves están presentes, siempre necesitas escribir <code>return</code> también.</p><p>A continuación un ejemplo de la función flecha usada con una sentencia if:</p><pre><code class="language-js">var alimentaAlGato = (gato) =&gt; {
  if (gato === 'hambriento') {
    return 'Alimenta al gato';
  } else {
    return 'No alimentes al gato';
  }
}</code></pre><h4 id="5-cuerpo-del-bloque-"><strong><strong><strong>5. “</strong></strong>Cuerpo del bloque<strong><strong>”</strong></strong></strong></h4><p>Si tu función está en un bloque, debes usar también la sentencia <code>return</code> explícita:</p><pre><code class="language-js">var sumarValores = (x, y) =&gt; {
  return x + y
}</code></pre><h4 id="6-objetos-literales"><strong><strong><strong>6. </strong></strong>Objetos literales</strong></h4><p>Si estás devolviendo un objeto literal, debe ir entre paréntesis. Esto obliga al intérprete a evaluar lo que hay dentro de los paréntesis, y se devuelve el objeto literal.</p><pre><code class="language-js">x =&gt;({ y: x })</code></pre><h3 id="sint-cticamente-an-nimas"><strong>Sintácticamente anónimas</strong></h3><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/hS7maItiZiV0IIYACtt0PiD3VStILiS1n4sd" class="kg-image" alt="hS7maItiZiV0IIYACtt0PiD3VStILiS1n4sd" width="800" height="533" loading="lazy"></figure><p>Es importante notar que las funciones flecha son anónimas, lo que significa que no tienen nombre.</p><p>Este anonimato crea algunos problemas:</p><ol><li>Más difíciles de depurar</li></ol><p>Cuando obtengas un error, no serás capaz de rastrear el nombre de la función o el número de línea exacto donde ocurrió.</p><p>2. Sin autorreferencia</p><p>Si tu función necesita tener autorreferencia en algún punto (por ejemplo, recursión, controlador de evento que necesita desvincularse), no funcionará.</p><h3 id="principal-beneficio-la-no-vinculaci-n-de-this-"><strong>Principal beneficio: la no vinculación de 'this'</strong></h3><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/3Rc2e8J5whHdFrH3IzPckp5GCQ-QtMvEOH1k" class="kg-image" alt="3Rc2e8J5whHdFrH3IzPckp5GCQ-QtMvEOH1k" width="800" height="534" loading="lazy"></figure><p>En las expresiones de función clásicas, la palabra reservada <code>this</code> está vinculada a diferentes valores en función del <em>contexto</em> en el que se llama. Sin embargo, con las funciones flecha, <code>this</code> está <em>vinculada léxicamente</em>. Esto significa que usa <code>this</code> desde el código que contiene la función flecha.</p><p>Por ejemplo, mira la función <code>setTimeout</code>:</p><pre><code class="language-js">// ES5
var objeto = {
  id: 42,
  contador: function contador() {
    setTimeout(function() {
      console.log(this.id);
    }.bind(this), 1000);
  }
};</code></pre><p>En el ejemplo de ES5, es obligatorio <code>.bind(this)</code> para ayudar a pasar el contexto de <code>this</code> a la función. De lo contrario, <code>this</code> sería indefinido por defecto. </p><pre><code class="language-js">// ES6
var objeto = {
  id: 42,
  contador: function contador() {
    setTimeout(() =&gt; {
      console.log(this.id);
    }, 1000);
  }
};</code></pre><p>Las funciones flecha de ES6 no pueden estar vinculadas a la palabra reservada <code>this</code>, así que léxicamente irán un ámbito arriba y usarán el valor de <code>this</code> en el ámbito en el que fue definido. </p><h3 id="cu-ndo-no-deber-as-usar-las-funciones-flecha"><strong>Cuándo no deberías usar las funciones flecha</strong></h3><p>Después de aprender un poco más sobre las funciones flecha, espero que entiendas que no reemplazan a las funciones regulares.</p><p>Aquí hay algunos casos donde probablemente no quieras usarlas:</p><ol><li>Métodos de objetos</li></ol><p>Cuando llamas a <code>gato.saltos</code>, el número de vidas no disminuye. Esto es porque <code>this</code> está vinculado a nada, y heredará el valor de <code>this</code> de su ámbito padre.</p><pre><code class="language-js">var gato = {
  vidas: 9,
  saltos: () =&gt; {
    this.vidas--;
  }
}</code></pre><p>2. Funciones callback con contexto dinámico</p><p>Si necesitas que tu contexto sea dinámico, las funciones flecha no son la elección correcta. Mira este controlador de evento a continuación:</p><pre><code class="language-js">var boton = document.getElementById('press');
boton.addEventListener('click', () =&gt; {
  this.classList.toggle('on');
});</code></pre><p>Si pulsamos el botón, obtendremos un TypeError. Esto es porque <code>this</code> no está vinculado al botón, sino a su ámbito padre. </p><p>3. Cuando hace tu código menos legible</p><p>Vale la pena tomar en consideración la variedad de sintaxis que cubrimos anteriormente. Con las funciones regulares, la gente sabe qué esperar. Con las funciones flecha, puede ser difícil de descifrar lo que estás viendo inmediatamente.</p><h3 id="cu-ndo-debes-usar-las-funciones-flecha"><strong>Cuándo debes usar las funciones flecha</strong></h3><p>Las funciones flecha brillan mejor con cualquier cosa que requiera que <code>this</code> esté vinculado al contexto, y no a la función en sí.</p><p>A pesar del hecho de que son anónimas, también me gusta usarlas con métodos como <code>map</code> y <code>reduce</code>, porque creo que hace mi código más legible. Para mí, los pros superan a los contras.</p><p>Gracias por leer mi artículo, ¡y compártelo si te gustó! </p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Explicación de algoritmos y estructuras de datos de grafos con Ejemplos en Java y C++ ]]>
                </title>
                <description>
                    <![CDATA[ ¿Qué es un Algoritmo de Grafos? Los algoritmos de grafos son un conjunto de instrucciones que recorren (visitan los nodos de) un grafo.  Algunos algoritmos son usados para hallar un nodo específico o el camino entre dos nodos dados. ¿Por qué son Importantes los Algoritmos de Grafos? Los grafos ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/explicacion-de-algoritmos-y-estructuras-de-datos-de-grafos-con-ejemplos-en-java-y-c/</link>
                <guid isPermaLink="false">6455780be59d8f07c2db4221</guid>
                
                    <category>
                        <![CDATA[ Algoritmos ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Thu, 18 May 2023 17:39:54 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/05/5f9c9e3e740569d1a4ca3c1f.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/graph-algorithms-and-data-structures-explained-with-java-and-c-examples/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Graph Algorithms and Data Structures Explained with Java and C++ Examples</a>
      </p><h2 id="-qu-es-un-algoritmo-de-grafos"><strong>¿Qué es un Algoritmo de Grafos?</strong></h2><p>Los algoritmos de grafos son un conjunto de instrucciones que recorren (visitan los nodos de) un grafo. </p><p>Algunos algoritmos son usados para hallar un nodo específico o el camino entre dos nodos dados.</p><h3 id="-por-qu-son-importantes-los-algoritmos-de-grafos"><strong>¿Por qué son Importantes los Algoritmos de Grafos?</strong></h3><p>Los grafos son estructuras de datos muy útiles que se usan para modelar varios problemas. Estos algoritmos tienen aplicaciones directas en sitios de redes sociales, modelado de máquinas de estado y más.</p><h3 id="algunos-algoritmos-de-grafos-comunes"><strong>Algunos Algoritmos de Grafos Comunes</strong></h3><p>Algunos de los algoritmos de grafos más comunes son: </p><ul><li>Búsqueda en Amplitud o Anchura (Breadth First Search, BFS)</li><li>Búsqueda en Profundidad (Depth First Search, DFS)</li><li>Dijkstra</li><li>Algoritmo de Floyd-Warshall</li></ul><h2 id="algoritmo-de-bellman-ford"><strong>Algoritmo de Bellman Ford</strong></h2><p>El algoritmo de Bellman Ford es un algoritmo de búsqueda del camino más corto para grafos que puede tener pesos negativos. El algoritmo de Bellman Ford es también ideal para detectar ciclos de pesos negativos, ya que el algoritmo converge hacia una solución óptima en O(V*E) pasos. Si la resultante no es óptima, entonces el grafo contiene un ciclo de pesos negativos.</p><p>Aquí está una implementación en Python:</p><pre><code>infinito = 1e10

def bellman_ford(grafo, inicio, fin):
    num_vertices = grafo.get_num_vertices()
    aristas = grafo.get_edges()

    distancia = [infinito para vértice en range(num_vertices)]
    previo = [ninguno para vértice en range(num_vertices)]

    distancia[inicio] = 0
    for i range(fin+1):
        for (u, v) in aristas:
            if distancia[v] &gt; distancia[u] + grafo.get_weight(u, v):
                distancia[v] = distancia[u] + grafo.get_weight(u, v)
                previo[v] = u

    for (u,v) in aristas:
        if distancia[v] &gt; distancia[u] + grafo.get_weight(u, v):
            raise ErrorCicloPesoNegativo()
    return distancia, previo
# 'distancia' es la distancia desde el inicio hasta ese nodo en el camino más corto, útil para imprimir la distancia más corta.
# Previo es un arreglo que muestra el nodo que es anterior al actual, útil para imprimir el camino.
</code></pre><h2 id="b-squeda-en-profundidad-depth-first-search-dfs-"><strong>Búsqueda en Profundidad (Depth First Search, DFS)</strong></h2><p>La Búsqueda en Profundidad es uno de los algoritmos de grafos más sencillos. Recorre el grafo revisando primero el nodo actual y moviéndose después a uno de sus sucesores para repetir el proceso. Si el nodo actual no tiene sucesor a revisar, regresamos a su predecesor y el proceso continúa (moviéndose a otro sucesor). Si la solución es encontrada, la búsqueda termina.</p><h3 id="visualizaci-n"><strong>Visualización</strong></h3><h3 id="implementaci-n-c-14-"><strong>Implementación (C++14)</strong></h3><pre><code>#include &lt;iostream&gt; 
#include &lt;vector&gt; 
#include &lt;queue&gt;  
#include &lt;algorithm&gt;
using namespace std; 
 
class Grafo{ 
   int v;    // número de vértices 
 
   // puntero a un vector que contiene listas de adyacencia
   vector &lt; int &gt; *adj;
public: 
   Grafo(int v);  // Constructor 
 
   // función para añadir una arista al grafo
   void agregar_arista(int v, int w);  
 
   // imprime el recorrido dfs a partir de una fuente `s` dada
   void dfs();
   void dfs_util(int s, vector &lt; bool&gt; &amp;visitado);   
}; 
 
Grafo::Grafo(int v){ 
   this -&gt; v = v; 
   adj = new vector &lt; int &gt;[v]; 
} 
 
void Grafo::agregar_arista(int u, int v){ 
   adj[u].push_back(v); // agregar v a la lista de u
   adj[v].push_back(v); // agregar u a la lista de v (¡elimina esta declaración si el grafo es dirigido!)
} 
void Grafo::dfs(){
   // vector visitado - para llevar registro de los nodos visitados durante la búsqueda en profundidad)
   vector &lt; bool &gt; visitado(v, false);  // marcar todos los nodos/vértices como no visitados
   for(int i = 0; i &lt; v; i++)
       if(!visitado[i])
           dfs_util(i, visitado);
} 
// ¡observa el uso de la llamada por referencia aquí!
void Grafo::dfs_util(int s, vector &lt; bool &gt; &amp;visitado){ 
   // marcar el nodo/vértice actual como visitado
   visitado[s] = true;
    // enviarlo a la salida estándar(pantalla)
   cout &lt;&lt; s &lt;&lt; " ";
   
   // ¡recorrer su lista de adyacencia y llamar recursivamente a dfs_util para todos sus vecinos! 
   // (¡solo si el vecino aún no ha sido visitado!)
   for(vector &lt; int &gt; :: iterator itr = adj[s].begin(); itr != adj[s].end(); itr++)
       if(!visitado[*itr])
           dfs_util(*itr, visitado); 
} 
 
int main() 
{ 
   // crear un grafo usando la clase Grafo que definimos anteriormente
   Grafo g(4); 
   g.agregar_arista(0, 1); 
   g.agregar_arista(0, 2); 
   g.agregar_arista(1, 2); 
   g.agregar_arista(2, 0); 
   g.agregar_arista(2, 3); 
   g.agregar_arista(3, 3); 
 
   cout &lt;&lt; "A continuación el recorrido de la búsqueda en profundidad del grafo proporcionado"
        &lt;&lt; "(a partir del vértice 0): "; 
   g.dfs(); 
   // la salida sería: 0 1 2 3
   return 0; 
} 
</code></pre><h3 id="evaluaci-n"><strong>Evaluación</strong></h3><p>Complejidad del Espacio: O(n)</p><p>Complejidad del Tiempo en el Peor de los Casos: O(n) La Búsqueda en Profundidad es completa en un conjunto finito de nodos. Funciona mejor en árboles poco profundos.</p><h3 id="implementaci-n-de-dfs-en-c-"><strong>Implementación de DFS en C++</strong></h3><pre><code>#include&lt;iostream&gt;
#include&lt;vector&gt;
#include&lt;queue&gt;

using namespace std;

struct Grafo{
	int v;
	bool **adj;
	public:
		Grafo(int conteov);
		void agregarArista(int u,int v);
		void borrarArista(int u,int v);
		vector&lt;int&gt; DFS(int s);
		void DFSUtil(int s,vector&lt;int&gt; &amp;dfs,vector&lt;bool&gt; &amp;visitado);
};
Grafo::Grafo(int conteov){
	this-&gt;v = conteov;
	this-&gt;adj=new bool*[conteov];
	for(int i=0;i&lt;conteov;i++)
		this-&gt;adj[i]=new bool[conteov];
	for(int i=0;i&lt;conteov;i++)
		for(int j=0;j&lt;conteov;j++)
			adj[i][j]=false;
}

void Grafo::agregarArista(int u,int w){
	this-&gt;adj[u][w]=true;
	this-&gt;adj[w][u]=true;
}

void Grafo::borrarArista(int u,int w){
	this-&gt;adj[u][w]=false;
	this-&gt;adj[w][u]=false;
}

void Grafo::DFSUtil(int s, vector&lt;int&gt; &amp;dfs, vector&lt;bool&gt; &amp;visitado){
	visitado[s]=true;
	dfs.push_back(s);
	for(int i=0;i&lt;this-&gt;v;i++){
		if(this-&gt;adj[s][i]==true &amp;&amp; visitado[i]==false)
			DFSUtil(i,dfs,visitado);
	}
}

vector&lt;int&gt; Grafo::DFS(int s){
	vector&lt;bool&gt; visitado(this-&gt;v);
	vector&lt;int&gt; dfs;
	DFSUtil(s,dfs,visitado);
	return dfs;
}
</code></pre><h2 id="algoritmo-de-floyd-warshall"><strong>Algoritmo de Floyd Warshall</strong></h2><p>El algoritmo de Floyd Warshall es un gran algoritmo para encontrar la distancia más corta entre todos los vértices del grafo. Tiene un algoritmo muy conciso y complejidad del tiempo O(V^3) (donde V es el número de vértices). Puede ser usado con pesos negativos, aunque los ciclos de pesos negativos no deben estar presentes en el grafo.</p><h3 id="evaluaci-n-1"><strong>Evaluación</strong></h3><p>Complejidad del Espacio: O(V^2)</p><p>Complejidad del Tiempo en el Peor de los Casos: O(V^3)</p><h3 id="implementaci-n-en-python"><strong>Implementación en Python</strong></h3><figure class="kg-card kg-code-card"><pre><code># Un valor grande como infinito
inf = 1e10 

def floyd_warshall(pesos):
    V = len(pesos)
    matriz_distancia = pesos
    for k in range(V):
        siguiente_matriz_distancia = [list(row) for row in matriz_distancia] # hacer una copia de matriz de distancia
        for i in range(V):
            for j in range(V):
                # Elegir si el vértice k puede funcionar como un camino con menor distancia
                siguiente_matriz_distancia[i][j] = min(matriz_distancia[i][j], matriz_distancia[i][k] + matriz_distancia[k][j])
        matriz_distancia = siguiente_matriz_distancia # actualizar
    return matriz_distancia

# Un grafo representado como matriz de adyacencia
grafo = [
    [0, inf, inf, -3],
    [inf, 0, inf, 8],
    [inf, 4, 0, -2],
    [5, inf, 3, 0]
]

print(floyd_warshall(grafo))
</code></pre><figcaption></figcaption></figure><h2 id="b-squeda-en-amplitud-o-anchura-breadth-first-search-bfs-"><strong>Búsqueda en Amplitud o Anchura (Breadth First Search, BFS)</strong></h2><p>Búsqueda en Amplitud o Anchura es uno de los algoritmos de grafos más sencillo. Recorre el grafo al primero comprobar el nodo actual y luego expandirlo al agregar sus sucesores al siguiente nivel. El proceso se repite para todos los nodos del nivel actual &nbsp;antes de moverse al siguiente. Si se encuentra la solución, la búsqueda termina.</p><h3 id="visualizaci-n-1"><strong>Visualización</strong></h3><figure class="kg-card kg-image-card"><img src="https://upload.wikimedia.org/wikipedia/commons/4/46/Animated_BFS.gif" class="kg-image" alt="Animated_BFS" width="187" height="175" loading="lazy"></figure><h3 id="evaluaci-n-2"><strong>Evaluación</strong></h3><p>Complejidad del Espacio: O(n)</p><p>Complejidad del Tiempo en el Peor de los Casos: O(n)</p><p>La Búsqueda en Amplitud o Anchura es completa en un conjunto finito de nodos y es óptima si el costo de moverse de un nodo a otro es constante.</p><h3 id="c-digo-c-para-la-implementaci-n-de-bfs"><strong>Código C++ para la implementación de BFS</strong></h3><pre><code>// Programa para imprimir el recorrido BFS desde un 
// vértice origen dado. BFS(int s) recorre los vértices  
// alcanzables desde s. 
#include&lt;iostream&gt; 
#include &lt;list&gt; 
  
using namespace std; 
  
// Esta clase representa un grafo dirigido
// utilizando la representación de listas de adyacencias 
class Grafo 
{ 
    int V;    // No. de vértices 
  
    // Puntero a un arreglo que contiene listas de adyacencia
    list&lt;int&gt; *adj;    
public: 
    Grafo(int V);  // Constructor 
  
    // función para agregar una arista al grafo
    void agregarArista(int v, int w);  
  
    // imprime el recorrido de BFS desde una fuente s dada
    void BFS(int s);   
}; 
  
Grafo::Grafo(int V) 
{ 
    this-&gt;V = V; 
    adj = new list&lt;int&gt;[V]; 
} 
  
void Grafo::agregarArista(int v, int w) 
{ 
    adj[v].push_back(w); // Agregar w a la lista de v.
} 
  
void Grafo::BFS(int s) 
{ 
    // Marcar todos los vértices como no visitados
    bool *visitado = new bool[V]; 
    for(int i = 0; i &lt; V; i++) 
        visitado[i] = false; 
  
    // Crear una cola para BFS 
    list&lt;int&gt; cola; 
  
    // Marcar el nodo actual como visitado y ponerlo en cola
    visitado[s] = true; 
    cola.push_back(s); 
  
    // 'i' será usado para obtener todos los vértices
    // adyacentes de un vértice 
    list&lt;int&gt;::iterator i; 
  
    while(!cola.empty()) 
    { 
        // Sacar de la cola un vértice e imprimirlo
        s = cola.front(); 
        cout &lt;&lt; s &lt;&lt; " "; 
        cola.pop_front(); 
  
        // Obtener todos los vértices adyacentes del
        // vértice s sacado de la cola. Si un adyacente
        // no ha sido visitado, entonces marcarlo como 
        // visitado y ponerlo en la cola
        for (i = adj[s].begin(); i != adj[s].end(); ++i) 
        { 
            if (!visitado[*i]) 
            { 
                visitado[*i] = true; 
                cola.push_back(*i); 
            } 
        } 
    } 
} 
  
// Programa controlador para probar métodos de la clase grafo
int main() 
{ 
    // Crear un grafo como el del diagrama anterior
    Grafo g(4); 
    g.agregarArista(0, 1); 
    g.agregarArista(0, 2); 
    g.agregarArista(1, 2); 
    g.agregarArista(2, 0); 
    g.agregarArista(2, 3); 
    g.agregarArista(3, 3); 
  
    cout &lt;&lt; "A continuación se muestra el recorrido en amplitud o anchura "
         &lt;&lt; "(empezando desde el vértice 2) \n"; 
    g.BFS(2); 
  
    return 0; 
}
</code></pre><h2 id="algoritmo-de-dijkstra"><strong>Algoritmo de Dijkstra</strong></h2><p>El Algoritmo de Dijkstra es un algoritmo de grafo presentado por E. W. Dijkstra. Encuentra el camino más corto de origen único en un grafo con aristas no negativas. (¿Por qué?)</p><p>Creamos dos arreglos: visitado y distancia, que registran si un vértice es visitado y cuál es la mínima distancia desde el vértice origen, respectivamente. Inicialmente, el arreglo visitado se asigna como falso y distancia como infinito. </p><p>Partimos del vértice origen. Dejemos que el vértice actual sea u y sus vértices adyacentes sean v. Ahora, por cada v que es adyacente a u, la distancia se actualiza si no ha sido visitado antes y la distancia desde u es menor que su distancia actual. Luego seleccionamos el siguiente vértice con la menor distancia y que no haya sido visitado.</p><p>La Cola de Prioridad se usa a menudo para cumplir este último requerimiento en el menor tiempo posible. Abajo se ve una implementación de la misma idea usando la cola de prioridad en Java.</p><pre><code>import java.util.*;
public class Dijkstra {
    class Grafo {
	LinkedList&lt;Pair&lt;Integer&gt;&gt; adj[];
	int n; // Número de vertices.
	Grafo(int n) {
	    this.n = n;
	    adj = new LinkedList[n];
	    for(int i = 0;i&lt;n;i++) adj[i] = new LinkedList&lt;&gt;();
	}
	// agregar una arista dirigida entre los vértices a y b con el costo como peso
	public void agregarAristaDirigida(int a, int b, int costo) {
	    adj[a].add(new Pair(b, costo));
	}
	public void agregarAristaNoDirigida(int a, int b, int costo) {
	    agregarAristaDirigida(a, b, costo);
	    agregarAristaDirigida(b, a, costo);
	}
    }
    class Pair&lt;E&gt; {
	E first;
	E second;
	Pair(E f, E s) {
	    first = f;
	    second = s;
	}
    }

    // Comparador para ordenar Pares en la Cola de Prioridad
    class ComparadorPar implements Comparator&lt;Pair&lt;Integer&gt;&gt; {
	public int comparar(Pair&lt;Integer&gt; a, Pair&lt;Integer&gt; b) {
	    return a.second - b.second;
	}
    }

    // Calcular el camino más corto para cada vértice del origen y devuelve la distancia
    public int[] dijkstra(Grafo g, int src) {
	int distancia[] = new int[g.n]; // la distancia más corta de cada vértice desde src
	boolean visitado[] = new boolean[g.n]; // el vértice es visitado o no
	Arrays.fill(distancia, Integer.MAX_VALUE);
	Arrays.fill(visitado, false);
	PriorityQueue&lt;Pair&lt;Integer&gt;&gt; pq = new PriorityQueue&lt;&gt;(100, new ComparadorPar());
        pq.add(new Pair&lt;Integer&gt;(src, 0));
	distancia[src] = 0;
	while(!pq.isEmpty()) {
	    Pair&lt;Integer&gt; x = pq.remove(); // Extraer el vértice con la distancia más corta desde src
	    int u = x.first;
	    visitado[u] = true;
	    Iterator&lt;Pair&lt;Integer&gt;&gt; iter = g.adj[u].listIterator();
	    // Iterar sobre los vecinos de u y actualizar sus distancias
	    while(iter.hasNext()) {
		Pair&lt;Integer&gt; y = iter.next();
		int v = y.first;
		int peso = y.second;
		// Comprobar si el vértice v no es visitado
		// Si el nuevo camino a través de u ofrece menos costo, entonces actualizar el arreglo de distancia y agregarlo a cp
		if(!visitado[v] &amp;&amp; distancia[u]+peso&lt;distancia[v]) {
		    distancia[v] = distancia[u]+peso;
		    pq.add(new Pair(v, distancia[v]));
		}
	    }
	}
	return distancia;
    }

    public static void main(String args[]) {
	Dijkstra d = new Dijkstra();
	Dijkstra.Grafo g = d.new Grafo(4);
	g.agregarAristaNoDirigida(0, 1, 2);
	g.agregarAristaNoDirigida(1, 2, 1);
	g.agregarAristaNoDirigida(0, 3, 6);
	g.agregarAristaNoDirigida(2, 3, 1);
	g.agregarAristaNoDirigida(1, 3, 3);

	int dist[] = d.dijkstra(g, 0);
	System.out.println(Arrays.toString(dist));
    }
}
</code></pre><h2 id="algoritmo-de-ford-fulkerson"><strong>Algoritmo de Ford &nbsp;Fulkerson</strong></h2><p>El algoritmo de Ford Fulkerson resuelve el problema de grafo de flujo máximo. Encuentra la mejor organización del flujo mediante las aristas de grafos, de tal modo que obtienes el flujo máximo de salida en el otro extremo. La fuente tiene una tasa específica de entrada y cada arista tiene un peso asociado que es la sustancia máxima que puede pasar a través de esa arista.</p><p>Al algoritmo Ford Fulkerson también se le conoce como algoritmo Edmund-Karp, ya que fue provisto en especificación completa por Jack Edmonds y Richard Karp.</p><p>Trabaja creando caminos de aumento, es decir, caminos desde el origen hasta el sumidero que tienen flujo no cero. Pasamos el flujo a través de los caminos y actualizamos los límites. Esto puede llevar a una situación donde no tenemos más movimientos. Es aquí donde la habilidad 'deshacer' de este algoritmo juega un papel importante. En caso de quedarse atorado, disminuimos el flujo y abrimos la arista para pasar nuestra sustancia actual.</p><h2 id="pasos"><strong>Pasos</strong></h2><ol><li>Establecer flujo cero para todas las aristas.</li><li>Mientras haya un camino del origen al hundimiento hacer, </li><li>Hallar el peso mínimo en el camino, que sea el <code>límite</code>.</li><li>Para todas las aristas (u, v) en el camino hacer,<br>1. Agregar <code>límite</code> al flujo de u a v. (Para el movimiento actual)<br>2. Restar <code>límite</code> &nbsp;al flujo de v a u. (Para deshacer en un movimiento posterior)</li></ol><h3 id="evaluaci-n-3"><strong>Evaluación</strong></h3><p>Complejidad del tiempo: <code>O(V*E^2)</code></p><h3 id="implementaci-n-en-python-1"><strong>Implementación en Python</strong></h3><pre><code># Número grande como infinito
inf = 1e10

def flujo_maximo(grafo, fuente, destino):
  flujo_maximo = 0
  padre = bfs(grafo, fuente, destino)
  while camino:
    limite = inf
    v = destino
    while v != fuente:
        u = padre[s]
        flujo_camino = min(limite, grafo[u][v])
        v = padre[v]
    flujo_maximo += flujo_camino

    v = destino
    while v != fuente:
        u = padre[v]
        grafo[u][v] -= flujo_camino
        grafo[v][u] += flujo_camino
        v = padre[v]

    camino = bfs(grafo, fuente, destino)
  return flujo_maximo</code></pre> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo resolver problemas de codificación con un sencillo método de cuatro pasos ]]>
                </title>
                <description>
                    <![CDATA[ Me quedaban 15 minutos, y sabía que iba a reprobar.  Había pasado dos meses estudiando para mi primera entrevista técnica.  Pensé que estaba preparada, pero a medida que la entrevista llegaba a su fin, me di cuenta: no tenía idea de cómo resolver problemas de codificación. De todos ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-resolver-problemas-de-codificacion-con-un-sencillo-metodo-de-cuatro-pasos/</link>
                <guid isPermaLink="false">6445eceb2ef44808032faf69</guid>
                
                    <category>
                        <![CDATA[ resolución de problemas ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Wed, 17 May 2023 17:51:37 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/04/iStock-527234840.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-solve-coding-problems/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Solve Coding Problems with a Simple Four Step Method</a>
      </p><p>Me quedaban 15 minutos, y sabía que iba a reprobar. </p><p>Había pasado dos meses estudiando para mi primera entrevista técnica. </p><p>Pensé que estaba preparada, pero a medida que la entrevista llegaba a su fin, me di cuenta: no tenía idea de cómo resolver problemas de codificación.</p><p>De todos los tutoriales que había tomado cuando estaba aprendiendo a programar, ninguno incluía un enfoque para resolver problemas de código.</p><p>Tuve que encontrar un método para resolver problemas; mi carrera como desarrolladora dependía de ello. </p><p>Empecé inmediatamente a buscar métodos. Y encontré uno. De hecho, lo que descubrí fue una estrategia invaluable. Era un método de cuatro pasos comprobado que de algún modo pasaba desapercibido en el ecosistema del desarrollador. </p><p>En este artículo, repasaré este método de resolución de problemas en cuatro pasos que puedes usar para empezar a resolver problemas de codificación con seguridad.</p><p>Resolver problemas de código no es solo parte del proceso de entrevista de trabajo para desarrolladores—es lo que un desarrollador hace todo el día. Después de todo, <em>escribir código es resolver problemas</em>. </p><h2 id="un-m-todo-para-resolver-problemas"><strong>Un método para resolver problemas</strong></h2><p>Este método es del libro <em>How to Solve It</em> de George Pólya. Salió originalmente en 1945 y ha vendido más de un millón de copias. </p><p>Su método de resolución de problemas ha sido usado e impartido por muchos programadores, desde profesores de ciencias de la computación (mira el curso de Introduccion a las Ciencias de la Computación de Udacity impartido por el profesor David Evans) hasta modernos maestros del desarrollo web moderno como Colt Steele.</p><p>Veamos cómo resolver un problema sencillo de codificación usando el método de resolución de problemas en cuatro pasos. Esto nos permitirá ver el método en acción mientras lo aprendemos. Usaremos JavaScript como nuestro lenguaje de elección. El problema es el siguiente: </p><p>Crea una función que sume dos números y devuelva ese valor. <br><br>Hay cuatro pasos para el método de resolución de problemas:</p><ol><li>Entender el problema.</li><li>Diseñar un plan.</li><li>Llevar a cabo el plan.</li><li>Mirar atrás.</li></ol><p>Empecemos con el paso uno.</p><h2 id="paso-1-entender-el-problema"><strong>Paso 1: Entender el problema</strong></h2><p>Cuando te plantean un problema de código en una entrevista, es tentador el apresurarse a tirar código. Es difícil evitarlo, en especial si tienes un límite de tiempo.</p><p>No obstante, trata de contener ese impulso, Asegúrate que de verdad entiendes el problema antes de empezar a resolverlo.</p><p>Lee el problema. Si estás en una entrevista, puedes leer el problema en voz alta si eso te ayuda a ir más despacio.</p><p>A medida que leas el problema, aclara cualquier parte que no entiendas. Si estás en una entrevista, puedes hacer preguntas a tu entrevistador sobre la descripción del problema. Si estás por tu cuenta, piensa y/o busca en Google las partes de la pregunta que no entiendas.</p><p><strong>Este primer paso es vital, ya que con frecuencia no tomamos el tiempo de entender por completo el problema. Cuando no entiendes el problema en su totalidad, te será más difícil resolverlo.</strong></p><p>Para ayudarte a entender mejor el problema, pregúntate:</p><h3 id="-cu-les-son-los-datos-de-entrada"><strong>¿Cuáles son los datos de entrada?</strong></h3><p>¿Qué tipos de datos de entrada tendrá este problema? En este ejemplo, las entradas son los argumentos que tomará nuestra función.</p><p>Tan solo de leer la descripción del problema hasta ahora, sabemos que las entradas serán numéricas. Pero para ser más específicos, podemos preguntar:</p><p>¿Las entradas siempre serán únicamente dos números? ¿Qué pasaría si nuestra función recibe <em>tres</em> números como entrada?</p><p>Aquí podríamos pedirle al entrevistador que nos lo aclare, o examinar la descripción del problema con más detalle.</p><p>El problema de codificación puede que tenga una nota que diga, "Solo debes esperar dos entradas para la función." Si es así, ya sabes como proceder. Puedes ser más específico, ya que te darás cuenta de que necesitas preguntar más sobre qué tipo de entradas podrías estar recibiendo.</p><p>¿Las entradas siempre serán números? ¿Qué debería hacer nuestra función si recibe las entradas "a" y "b"? Aclara si nuestra función siempre recibirá números o no.</p><p>Opcionalmente, puedes escribir las posibles entradas en un comentario de código para hacerte una idea de cómo serán:</p><p><code>//entradas: 2, 4</code></p><p>A continuación, pregunta:</p><h3 id="-cu-les-son-los-datos-de-salida"><strong>¿Cuáles son los datos de salida?</strong></h3><p>¿Qué devolverá esta función? En este caso, la salida será un número que es el resultado de los dos números de entrada. Asegúrate de entender cuales serán tus salidas. </p><h3 id="crea-algunos-ejemplos-"><strong>Crea algunos ejemplos.</strong></h3><p>Una vez que tengas claro el problema y conozcas las posibles entradas y salidas, puedes empezar a trabajar en algunos ejemplos concretos.</p><p>Los ejemplos también pueden ser usados como controles de cordura para probar tu problema eventual. La mayoría de los editores de retos de código en los que trabajarás (ya sea en una entrevista o usando un sitio como Codewars o HackerRank) tienen ejemplos o casos de prueba ya escritos para ti. Aun así, escribir tus propios ejemplos puede ayudarte a consolidar tu comprensión del problema.</p><p>Empieza con uno o dos ejemplos sencillos de posibles entradas y salidas. Regresemos a nuestra función de suma.</p><p>Llamemos a nuestra función "sumar."</p><p>¿Cuál es un ejemplo de entrada? Uno podría ser: </p><p><code>// sumar(2, 3)</code></p><p>¿Cuál es la salida de esto? Para escribir la salida de ejemplo, podemos escribir: </p><p><code>// sumar(2, 3) ---&gt; 5</code></p><p>Esto indica que nuestra función tomará una entrada de 2 y 3 y devolverá 5 como salida.</p><h3 id="crear-ejemplos-complejos-"><strong>Crear ejemplos complejos.</strong></h3><p>Recorriendo ejemplos más complejos, puedes tomarte el tiempo para buscar casos extremos que puedas necesitar tener en cuenta.</p><p>Por ejemplo, ¿qué debemos hacer si nuestras entradas son cadenas en lugar de números? ¿Y si tenemos como entradas dos cadenas, por ejemplo, sumar('a', 'b')?</p><p>Puede que tu entrevistador posiblemente te diga que devuelvas un mensaje de error si hay algunas entradas que no sean números. De ser así, puedes agregar un comentario en el código para manejar este caso si te ayuda a recordar que necesitas hacer esto.</p><pre><code class="language-javascript">// devolver error si las entradas no son números.</code></pre><p>Tu entrevistador puede también decirte que asumas que tus entradas siempre serán números, en cuyo caso no necesitas escribir código extra para manejar esta entrada particular de caso extremo.</p><p>Si no tienes un entrevistador y solo estás resolviendo este problema, puede que el problema te diga qué pasa cuando introduces entradas inválidas.</p><p>Por ejemplo, alguos problemas dirán, "si hay cero entradas, devuelve undefined (indefinido)." Para casos como este, opcionalmente puedes escribir un comentario. </p><p><code>// revisa si no hay entradas.</code></p><p><code>// si no hay entradas, devuelve undefined.</code></p><p>Para nuestros propósitos, asumiremos que nuestras entradas siempre serán números. Pero en general, es bueno pensar en casos extremos.</p><p>El profesor Evans de informática dice que escribamos lo que los desarrolladores llaman código <em>defensivo</em>. Piensa en lo que podría salir mal y en cómo tu código podría defenderse de posibles errores. </p><p>Antes de continuar con el paso 2, resumamos el paso 1, entender el problema: </p><p><code>-Lea a fondo el problema.</code></p><p><code>-¿Cuáles son las entradas?</code></p><p><code>-¿Cuáles son las salidas?</code></p><p><code>Crea ejemplos simples, luego crea ejemplos más complejos.</code></p><h2 id="2-dise-ar-un-plan-para-resolver-el-problema-"><strong><strong>2. </strong>Diseñar un plan para resolver el problema. </strong></h2><p>A continuación, diseña un plan para resolver el problema. A medida que lo diseñas, escríbelo en pseudocódigo.</p><p>El pseudocódigo es una descripción en lenguaje llano de los pasos de un algoritmo. En otras palabras, tu pseudocódigo es tu plan paso a paso de cómo resolver el problema.</p><p>Escribe los pasos que necesitas tomar para resolver el problema. Para un problema más complicado, tendrías más pasos. Para este problema, podrías escribir: </p><p><code>// Crea una variable suma.</code></p><p><code>Suma la primer entrada a la segunda entrada usando el operador de suma</code>.</p><p><code>// Guarda el valor de ambas entradas en la variable suma.</code></p><p><code>// Devuelve como salida la variable suma.</code><br><br>Ahora tienes tu plan paso a paso para resolver el problema.<br><br>Para problemas más complejos, el profesor Evans denota, "considera sistemáticamente cómo un humano resuelve el problema." Eso es, olvídate de cómo tu código podría resolver el problema por un momento, y piensa en cómo lo resolverías tú como un humano. Esto te puede ayudar a ver los pasos más claramente.</p><h2 id="3-llevar-a-cabo-el-plan-resolver-el-problema-"><strong><strong>3. </strong>Llevar a cabo el plan<strong> (</strong>¡Resolver el problema<strong>!)</strong></strong></h2><figure class="kg-card kg-image-card"><img src="https://cdn.pixabay.com/photo/2017/04/06/15/02/hand-2208491_960_720.jpg" class="kg-image" alt="Hand, Rubik, Cube, Puzzle, Game, Rubik Cube" width="960" height="540" loading="lazy"></figure><p>El siguiente paso en la estrategia de resolución de problemas es resolver el problema en sí. Usando tu pseudocódigo como tu guía, escribe tu código real.</p><p>El profesor Evans sugiere enfocarse en una solución sencilla y mecánica. Entre más fácil y simple sea tu solución, más probabilidades habrá de que lo programes correctamente.</p><p>Tomando nuestro pseudocódigo, ahora podríamos escribir esto:</p><pre><code class="language-javascript">function sumar(a, b) {
 const suma = a + b;
 return suma;
}</code></pre><p>El profesor Evans añade, recuerda no optimizar prematuramente. Eso es, puede que estés tentado a decir, "¡Espera, estoy haciendo esto y va a ser un código ineficiente!"</p><p>Primero, solo saca tu solución simple y mecánica.</p><p>¿Y si no puedes resolver el problema entero? ¿Y si hay una parte que aún no sabes como resolver?</p><p>Colt Steele da un gran consejo aquí: Si no puedes resolver una parte del problema, ignora esa parte difícil que te está deteniendo. En su lugar, enfócate en lo demás que puedas empezar a escribir.</p><p>Ignora temporalmente esa parte difícil del problema que no acabas de entender, y escribe las otras partes. Una vez hecho eso, regresa a la parte más difícil.</p><p>Esto te permite terminar al menos algo del problema. Y &nbsp;a menudo te darás cuenta de cómo abordar esa parte más difícil del problema una vez que regreses a ella.</p><h2 id="paso-4-revisar-lo-que-has-hecho-"><strong>Paso 4: Revisar lo que has hecho.</strong></h2><p>Una vez que tu solución esté funcionando, toma tu tiempo para reflexionar sobre ella y descubrir cómo hacerle mejoras. Este podría ser el momento de refactorizar tu solución en una más eficiente.</p><p>Cuando analices tu trabajo, aquí tienes algunas preguntas que Colt Steele sugiere te hagas para descubrir cómo puedes mejorar tu solución:</p><ul><li>¿Puedes obtener el resultado de manera diferente? ¿Qué otros enfoques hay que sean viables?</li><li>¿Puedes entenderlo a primera vista? ¿Tiene sentido?</li><li>¿Puedes usar el resultado o método para otro problema?</li><li>¿Puedes mejorar los rendimientos de tu solución?</li><li>¿Puedes pensar en otras maneras de refactorizar?</li><li>¿Cómo han resuelto este problema otras personas?</li></ul><p>Una manera en que podríamos refactorizar nuestro problema para hacer nuestro código más conciso: remover nuestra variable y usar un retorno implícito:</p><pre><code class="language-javascript">function sumar(a, b) {
 return a + b;
}</code></pre><p>Con el paso 4, tu problema podría que nunca parezca terminado. Incluso grandes desarrolladores aún escriben código que más tarde lo miran y quieren cambiar. Estas son preguntas guía que pueden ayudarte.</p><p>Si todavía tienes tiempo en una entrevista, puedes repasar este paso y mejorar tu solución. Si estás escribiendo código por tu cuenta, toma el tiempo para repasar estos pasos.</p><p>Cuando estoy practicando el escribir código por mi cuenta, casi siempre me fijo en las soluciones que hay allá afuera que son más elegantes o efectivas que lo que yo he ideado.</p><h2 id="conclusi-n"><strong>Conclusión</strong></h2><p>En esta publicación, hemos repasado la estrategia de resolución de problemas de cuatro pasos para resolver problemas de codificación.</p><p>Repasémoslas aquí:</p><ul><li>Paso 1: <strong>entender el problema.</strong></li><li>Paso 2: <strong>diseñar un plan paso a paso de cómo resolverlo.</strong></li><li>Paso 3: <strong>llevar a cabo el plan</strong> y escribir el código real.</li><li>Paso 4: <strong>revisar</strong> y posiblemente refactorizar tu solución para mejorarla.</li></ul><p>Practicar este método de resolución de problemas me ha ayudado inmensamente &nbsp;en mis entrevistas técnicas y en mi trabajo como desarrolladora. <br><br>Si no te sientes con la confianza a la hora de resolver problemas de escribir código, tan solo recuerda que la resolución de problemas es una habilidad que cualquiera puede mejorar con tiempo y práctica. </p><p>¡Buena suerte!</p><p><strong>Si tienes comentarios o preguntas sobre esta publicación, siéntete libre de tuitarme<strong> <a href="https://twitter.com/Madisonkanna">@madisonkanna</a>.</strong></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Las principales estructuras de datos que deberías saber para tu próxima entrevista de programación ]]>
                </title>
                <description>
                    <![CDATA[ Niklaus Wirth, informático suizo, escribió un libro en 1976 titulado Algoritmos + Estructura de Datos = Programas.  40+ años más tarde, esa ecuación se mantiene. Por eso, los candidatos a ingeniería de software tienen que demostrar su entendimiento de las estructuras de datos junto con sus aplicaciones.  Casi ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/las-principales-estructuras-de-datos-que-deberias-saber-para-tu-proxima-entrevista-de-programacion/</link>
                <guid isPermaLink="false">64527c28e59d8f07c2db3c2c</guid>
                
                    <category>
                        <![CDATA[ java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Wed, 17 May 2023 17:44:53 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/05/1_s6hhrgR5_tXpO_j7uKaHMw-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/the-top-data-structures-you-should-know-for-your-next-coding-interview-36af0831f5e3/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The top data structures you should know for your next coding interview</a>
      </p><p>Niklaus Wirth, informático suizo, escribió un libro en 1976 titulado <em>Algoritmos + Estructura de Datos = Programas</em>. </p><p>40+ años más tarde, esa ecuación se mantiene. Por eso, los candidatos a ingeniería de software tienen que demostrar su entendimiento de las estructuras de datos junto con sus aplicaciones. </p><p>Casi todos los problemas requieren que el candidato demuestre un profundo conocimiento de estructura de datos. No importa si recién te has graduado (de la universidad o bootcamp de programación), o si tienes décadas de experiencia.</p><p>A veces las preguntas de la entrevista mencionan explícitamente una estructura de datos, por ejemplo, "dado un árbol binario. "Otras veces es implícito, como "queremos rastrear el número de libros asociados a cada autor."</p><p>Aprender estructura de datos es esencial, incluso si solo estás tratando de mejorar en tu trabajo actual. Empecemos con entender lo básico.</p><h3 id="-qu-es-una-estructura-de-datos"><strong>¿Qué es una Estructura de Datos?</strong></h3><p>De manera simple, una estructura de datos es un contenedor que almacena datos en una disposición específica. Esta "disposición" permite que una estructura de datos sea eficiente en algunas operaciones e ineficiente en otras. Tu meta es comprender las estructuras de datos para que puedas elegir la que sea más óptima para el problema en cuestión.</p><h4 id="-por-qu-necesitamos-estructuras-de-datos"><strong><strong>¿Por qué necesitamos Estructuras de Datos?</strong></strong></h4><p>Así como las estructuras de datos son usadas para almacenar datos de una forma organizada, y dado que los datos son la entidad más crucial en informática, el verdadero valor de las estructuras de datos es claro. </p><p>No importa qué problema estés resolviendo, de un modo u otro tienes que tratar con datos — ya sea el salario de un empleado, precios de acciones, una lista de compras, o incluso un directorio telefónico simple.</p><p>Basado en diferentes escenarios, los datos necesitan ser almacenados en un formato específico. Tenemos un puñado de estructuras de datos que cubren nuestra necesidad de almacenar datos en distintos formatos. </p><h3 id="estructuras-de-datos-m-s-usadas"><strong>Estructuras de Datos más Usadas</strong></h3><p>Enlistemos primero las estructuras de datos más usadas, y después las revisaremos una por una: </p><ol><li>Arreglos</li><li>Pilas</li><li>Colas</li><li>Listas Enlazadas</li><li>Árboles</li><li>Grafos</li><li>Tries (en realidad son árboles, pero es bueno mencionarlos por separado).</li><li>Tablas Hash</li></ol><h3 id="arreglos"><strong>Arreglos</strong></h3><p>Un arreglo es la más simple y más usada estructura de datos. Otras estructuras de datos, como las pilas y las colas, provienen de los arreglos. </p><p>A continuación puedes ver una imagen de un arreglo simple de tamaño 4, que contiene elementos (1, 2, 3 y 4). </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/B4CncYOv-dN76B45UXdVrfat45MvgQ9b8atv.png" class="kg-image" alt="B4CncYOv-dN76B45UXdVrfat45MvgQ9b8atv" width="600" height="400" loading="lazy"></figure><p>A cada elemento de datos se le asigna un valor numérico positivo llamado <strong>índice</strong>, que corresponde a la posición de ese elemento en el arreglo. La mayoría de los lenguajes definen al 0 (cero) como el índice inicial. </p><p>Los dos tipos de arreglos son:</p><ul><li>Arreglos unidimensionales (como el de la imagen de arriba)</li><li>Arreglos multidimensionales (arreglos dentro de arreglos)</li></ul><h4 id="operaciones-b-sicas-con-arreglos"><strong>Operaciones Básicas con Arreglos</strong></h4><ul><li>Insert — Inserta un elemento en un índice dado</li><li>Get — Devuelve el elemento sobre un índice dado</li><li>Delete — Borra un elemento sobre un índice dado</li><li>Size — Obtiene la cantidad total de elementos en un arreglo</li></ul><h4 id="preguntas-frecuentes-sobre-arreglos-en-las-entrevistas"><strong>Preguntas Frecuentes sobre Arreglos en las Entrevistas</strong></h4><ul><li>Encontrar el segundo elemento mínimo de un arreglo</li><li>Los primeros enteros no repetidos en un arreglo</li><li>Combinar dos arreglos ordenados</li><li>Reordenar los valores positivos y negativos en un arreglo</li></ul><h3 id="pilas"><strong>Pilas</strong></h3><p>Todos conocemos la famosa opción <strong>Deshacer</strong>(<strong>Undo</strong>), que está presente en casi todas las aplicaciones. ¿Te has preguntado alguna vez cómo funciona? La idea: almacenas los estados previos de tu trabajo (que están limitados a un número específico) en la memoria en cierto orden tal que el último aparece primero. Esto no se puede hacer solo usando arreglos. Aquí es donde la Pila resulta útil.</p><p>Un ejemplo de la vida real del uso de la Pila podría ser una pila de libros colocados en orden vertical. Para obtener el libro que está en algún lugar en medio, necesitarás remover todos los libros que están encima de él. Así es como funciona el método LIFO (<strong>L</strong>ast <strong>I</strong>n <strong>F</strong>irst <strong>O</strong>ut; en español UEPS, o <strong>Ú</strong>ltimo en <strong>E</strong>ntrar, <strong>P</strong>rimero en <strong>S</strong>alir).</p><p>Abajo puedes encontrar una imagen de una pila que contiene 3 elementos de datos (1, 2 y 3), donde 3 está en la cima y será removido primero:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/05/BP-lD2OxkMbIQI2iZD-jxgIPlANlsMTqwnLP.png" class="kg-image" alt="BP-lD2OxkMbIQI2iZD-jxgIPlANlsMTqwnLP" width="462" height="318" loading="lazy"></figure><p>Operaciones básicas de la pila:</p><ul><li>Push — Inserta un elemento en la cima</li><li>Pop — Devuelve el elemento de la cima después de eliminarlo de la pila</li><li>isEmpty — Devuelve verdadero si la pila está vacía</li><li>Top — Devuelve el elemento que está en la cima sin eliminarlo de la pila </li></ul><h4 id="preguntas-frecuentes-sobre-pilas-en-las-entrevistas"><strong>Preguntas Frecuentes sobre Pilas en las Entrevistas</strong></h4><ul><li>Evaluar una expresión postfijas usando una pila</li><li>Ordenar valores en una pila</li><li>Comprobar paréntesis equilibrados en una expresión</li></ul><h3 id="colas"><strong>Colas</strong></h3><p>Similar a la Pila, la Cola es otra estructura de datos lineal que almacena elementos de manera secuencial. La única diferencia significativa entre la Pila y la Cola es que en lugar de usar el método LIFO, la Cola implementa el método FIFO (<strong>F</strong>irst <strong>I</strong>n <strong>F</strong>irst <strong>O</strong>ut; en español PEPS, o <strong>P</strong>rimero en <strong>E</strong>ntrar <strong>P</strong>rimero en <strong>S</strong>alir).</p><p>Un ejemplo perfecto de la Cola en la vida real: una fila de personas esperando en taquilla. Si llega una nueva persona, se formará al final de la fila, no al inicio — y la persona situada al inicio de la fila será la primera en conseguir boleto y, por lo tanto, la primera en dejar la fila.</p><p>A continuación una imagen de la Cola conteniendo cuatro elementos de datos (1, 2, 3 y 4), donde 1 está al inicio y será removido primero:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/05/C2riLJTPBVpSI-3o5Cx9IrQ16LZi1kLrqYXo.png" class="kg-image" alt="C2riLJTPBVpSI-3o5Cx9IrQ16LZi1kLrqYXo" width="542" height="734" loading="lazy"></figure><h4 id="operaciones-b-sicas-de-la-cola"><strong>Operaciones básicas de la Cola</strong></h4><ul><li>Enqueue() — Inserta un elemento al final de la cola</li><li>Dequeue() — Elimina un elemento del inicio de la cola</li><li>isEmpty() — Devuelve verdadero si la cola está vacía</li><li>Top() — Devuelve el primer elemento de la cola</li></ul><h4 id="preguntas-frecuentes-sobre-colas-en-las-entrevistas"><strong>Preguntas Frecuentes sobre Colas en las Entrevistas</strong></h4><ul><li>Implementar una pila usando una cola</li><li>Invertir los primeros k elementos de una cola</li><li>Generar números binarios desde 1 hasta n usando una cola</li></ul><h3 id="lista-enlazada"><strong>Lista enlazada</strong></h3><p>Una lista enlazada es otra estructura de datos lineal importante que a primera vista puede lucir similar a los arreglos, pero difiere en la asignación de memoria, la estructura interna y la forma en que se llevan a cabo las operaciones básicas de inserción y eliminación.</p><p>Una lista enlazada es como una cadena de nodos, donde cada nodo contiene información como datos y un puntero al siguiente nodo de la cadena. Hay un puntero a la cabecera, que apunta al primer elemento de la lista enlazada, y si la lista está vacía, entonces simplemente apunta a null o nada.</p><p>Las listas enlazadas son usadas para implementar sistemas de archivos, tablas hash y listas de adyacencia.</p><p>Aquí está una representación visual de la estructura interna de una lista enlazada:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/05/ezrkbpSyblh3famnGsgIHiRvHV9CKODu0tPw.png" class="kg-image" alt="ezrkbpSyblh3famnGsgIHiRvHV9CKODu0tPw" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/05/ezrkbpSyblh3famnGsgIHiRvHV9CKODu0tPw.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/05/ezrkbpSyblh3famnGsgIHiRvHV9CKODu0tPw.png 800w" sizes="(min-width: 720px) 720px" width="800" height="147" loading="lazy"></figure><p>A continuación se muestran los tipos de listas enlazadas:</p><ul><li>Lista Simple Enlazada (Unidireccional)</li><li>Lista Doblemente Enlazada (Bidireccional)</li></ul><h4 id="operaciones-b-sicas-de-las-listas-enlazadas"><strong><em>Operaciones básicas de las Listas Enlazadas</em></strong></h4><ul><li><em><em>InsertAtEnd </em></em>— Inserta un elemento dado al final de la lista enlazada</li><li><em><em>InsertAtHead</em></em> — Inserta un elemento dado al inicio/cabeza de la lista enlazada</li><li><em><em>Delete </em></em>— Elimina un elemento dado de la lista enlazada</li><li><em><em>DeleteAtHead </em></em>— Elimina el primer elemento de la lista enlazada</li><li><em><em>Search</em></em> — Devuelve el elemento dado de una lista enlazada</li><li><em><em>isEmpty </em></em>— Retorna verdadero si la lista enlazada está vacía</li></ul><h4 id="preguntas-frecuentes-sobre-listas-enlazadas-en-las-entrevistas"><strong>Preguntas Frecuentes sobre Listas Enlazadas en las Entrevistas</strong></h4><ul><li>Invertir una lista enlazada</li><li>Detectar bucle en una lista enlazada</li><li>Devolver el nodo N del final de una lista enlazada</li><li>Eliminar duplicados de una lista enlazada</li></ul><h3 id="grafos"><strong><strong><strong>Gra</strong></strong>fo<strong><strong>s</strong></strong></strong></h3><p>Un grafo es un conjunto de nodos que están conectados entre sí en forma de red. Los nodos son también llamados vértices. Un <strong>par(x,y)</strong> se denomina <strong>arista</strong>, que indica que el vértice <strong>x</strong> está conectado al vértice <strong>y</strong>. Una arista puede contener peso/costo, mostrando cuánto cuesta viajar del vértice x al y.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/05/0MsvzasAr6vS6bnvozjRAa5iBnEDKn9Cty0D.png" class="kg-image" alt="0MsvzasAr6vS6bnvozjRAa5iBnEDKn9Cty0D" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/05/0MsvzasAr6vS6bnvozjRAa5iBnEDKn9Cty0D.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/05/0MsvzasAr6vS6bnvozjRAa5iBnEDKn9Cty0D.png 800w" sizes="(min-width: 720px) 720px" width="800" height="425" loading="lazy"></figure><p>Tipos de Grafos:</p><ul><li>Grafo no dirigido</li><li>Grafo dirigido</li></ul><p>En lenguaje de programación, los grafos pueden ser representados de dos formas:</p><ul><li>Matriz de adyacencia</li><li>Lista de adyacencia</li></ul><p>Algoritmos comunes de recorrido de grafos:</p><ul><li>Recorrido o Búsqueda en Amplitud o Anchura</li><li>Recorrido o Búsqueda en Profundidad</li></ul><h4 id="preguntas-frecuentes-sobre-grafos-en-las-entrevistas"><strong>Preguntas Frecuentes sobre Grafos en las Entrevistas</strong></h4><ul><li>Implementar Recorrido en Amplitud o Anchura y en Profundidad</li><li>Comprobar si un grafo es un árbol o no</li><li>Contar el número de aristas en un grafo</li><li>Encontrar el camino más corto entre dos vértices</li></ul><h3 id="-rboles"><strong>Árboles</strong></h3><p>Un árbol es una estructura de datos jerárquica que consiste en vértices (nodos) y aristas que los conectan. Los árboles son similares a los grafos, pero la diferencia clave entre ellos es que un ciclo no puede existir en un árbol.</p><p>Los árboles son usados extensamente en la Inteligencia Artificial y algoritmos complejos para proveer un mecanismo eficiente de almacenamiento para la resolución de problemas.</p><p>Abajo se puede ver la imagen de un árbol simple, y la terminología básica usada en la estructura de datos de un árbol:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/05/VPUnmQO8rMoLGMqMe24EnoJ3uS72JZdMt48w-1.png" class="kg-image" alt="VPUnmQO8rMoLGMqMe24EnoJ3uS72JZdMt48w" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/05/VPUnmQO8rMoLGMqMe24EnoJ3uS72JZdMt48w-1.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/05/VPUnmQO8rMoLGMqMe24EnoJ3uS72JZdMt48w-1.png 800w" sizes="(min-width: 720px) 720px" width="800" height="352" loading="lazy"></figure><p>Lo siguiente son los tipos de árboles:</p><ul><li>Árbol N-ario</li><li>Árbol Equilibrado</li><li>Árbol Binario</li><li>Árbol de Búsqueda Binaria</li><li>Árbol AVL</li><li>Árbol Rojo Negro</li><li>Árbol 2-3</li></ul><p>De todos los mencionados, el Árbol Binario y el Arbol de Búsqueda Binaria son los más comúnmente usados.</p><h4 id="preguntas-frecuentes-sobre-rboles-en-las-entrevistas"><strong>Preguntas Frecuentes sobre Árboles en las Entrevistas</strong></h4><ul><li>Hallar la altura de un árbol binario</li><li>Hallar el k-ésimo valor máximo en un árbol de búsqueda binaria</li><li>Hallar los nodos a "k" distancia desde la raíz</li><li>Hallar los ancestros de un nodo dado en un árbol binario</li></ul><h3 id="trie"><strong>Trie</strong></h3><p>Trie, también conocido como "Árboles de Prefijos", es una estructura de datos en forma de árbol que prueba ser muy eficiente para resolver problemas relacionados con cadenas de caracteres. Proporciona una recuperación rápida y es mayormente usada para buscar palabras en un diccionario, proveer sugerencias automáticas en un motor de búsqueda, e incluso para enrutamiento IP.</p><p>Abajo hay una ilustración de cómo las tres palabras “top”, “thus”, y “their” se almacenan en un Trie:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/05/lSNi21Wr4P6eMKDwLMQ5rijHhA-lBlovlc40-1.png" class="kg-image" alt="lSNi21Wr4P6eMKDwLMQ5rijHhA-lBlovlc40-1" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/05/lSNi21Wr4P6eMKDwLMQ5rijHhA-lBlovlc40-1.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/05/lSNi21Wr4P6eMKDwLMQ5rijHhA-lBlovlc40-1.png 800w" sizes="(min-width: 720px) 720px" width="800" height="1093" loading="lazy"></figure><p>Las palabras son almacenadas de arriba a abajo donde los nodos de color verde “p”, “s” y “r” indican el final de “top”, “thus”, y “their” respectivamente.</p><p><strong>Preguntas Frecuentes sobre Tries en las Entrevistas</strong></p><ul><li>Contar el número total de palabras en un Trie</li><li>Imprimir todas las palabras almacenadas en un Trie</li><li>Ordenar los elementos de un arreglo usando un Trie</li><li>Formar palabras a partir de un diccionario usando un Trie</li><li>Construir un diccionario T9</li></ul><h3 id="tabla-hash"><strong>Tabla Hash</strong></h3><p>El Hashing es un proceso utilizado para identificar objetos de forma única, y almacenar cada objeto en algún índice único precalculado llamado su "llave". Entonces, el objeto es almacenado en forma de un par "llave-valor", y la colección de dichos elementos es llamada "diccionario". Cada objeto puede ser buscado usando esa llave. Hay diferentes estructuras de datos basadas en hashing, pero la más usada es la <strong>tabla hash</strong>.</p><p>Las tablas hash generalmente se implementan usando arreglos.</p><p>El rendimiento de la estructura de datos hash depende de estos tres factores:</p><ul><li>Función Hash</li><li>Tamaño de la Tabla Hash</li><li>Método de Manejo de Colisiones</li></ul><p>Aquí hay una ilustración de cómo el hash es mapeado en un arreglo. El índice de este arreglo es calculado mediante una Función Hash.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/05/zV3x2Pxt0JFt7UjokTKNx24HFmM3t-6phDV2.png" class="kg-image" alt="zV3x2Pxt0JFt7UjokTKNx24HFmM3t-6phDV2" width="348" height="394" loading="lazy"></figure><p><strong>Preguntas Frecuentes sobre Hash en las Entrevistas</strong></p><ul><li>Hallar pares simétricos en un arreglo</li><li>Trazar el camino completo de un viaje</li><li>Hallar si un arreglo es un subconjunto de otro arreglo</li><li>Comproban si arreglos dados son disjuntos</li></ul><p>Éstas son las ocho principales estructuras de datos que definitivamente deberías conocer antes de presentarte a una entrevista de programación.</p><p>¡Buena suerte y feliz aprendizaje! :)</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript Require: Cómo usar la funcion require() en JS ]]>
                </title>
                <description>
                    <![CDATA[ En JavaScript, los módulos se refieren a un archivo que contiene código JavaScript, el cual realiza un propósito específico. Los módulos son autocontenidos, lo que facilita agregar, eliminar y actualizar funcionalidades sin afectar a todo tu código, porque están desacoplados de otras piezas de código. Cuando tienes estos módulos en ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/javascript-require-como-usar-la-funcion-require-en-js/</link>
                <guid isPermaLink="false">644c1601db9a5007c084b227</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Tue, 16 May 2023 18:50:58 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/04/cover-template--11-2-2.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-use-the-javascript-require-function/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JavaScript Require – How to Use the require() Function in JS</a>
      </p><p>En JavaScript, los módulos se refieren a un archivo que contiene código JavaScript, el cual realiza un propósito específico.</p><p>Los módulos son autocontenidos, lo que facilita agregar, eliminar y actualizar funcionalidades sin afectar a todo tu código, porque están desacoplados de otras piezas de código.</p><p>Cuando tienes estos módulos en archivos JavaScript separados, querrás usarlos dentro del archivo JavaScript original.</p><p>En este artículo aprenderás lo que la función <code>require</code>() hace, cómo la puedes usar, y algunas diferencias entre las funciones require e import.</p><p>Durante mucho tiempo, el sistema de módulo CommonJS ha sido el sistema de módulo por defecto dentro del ecosistema Node.js. Pero un nuevo sistema de módulo fue introducido en Node.js v8.5.0, el cual es el sistema de módulo ES.</p><p>Los módulos CommonJS y EMCAScript (módulos ES) ahora trabajan a la perfección en Node.js. La mayor diferencia entre ellos es su ejecución.</p><h2 id="c-mo-ejecutar-los-m-dulos-commonjs-y-es"><strong>Cómo ejecutar los módulos CommonJS y ES</strong></h2><p>En el navegador, la ejecución del módulo JavaScript depende de las sentencias <code>import</code> y <code>export</code>. Estas sentencias cargan y exportan los módulos ES respectivamente. Esta es la manera estándar y oficial de reusar módulos en JavaScript, y es lo que la mayoría de navegadores web soportan de forma nativa.</p><p>Por defecto, Node.js soporta el formato de módulo CommonJS, que carga módulos usando la función <code>require()</code>, y los exporta con <code>module.exports</code>.</p><h2 id="-qu-es-la-funci-n-javascript-require-"><strong>¿Qué es la función JavaScript require()?</strong></h2><p>La función <code>require()</code> es una función de módulo CommonJS incorporada soportada en Node.js que te permite incluir módulos dentro de tu proyecto. Esto se debe a que, por defecto, Node.js trata el código JavaScript como módulos CommonJS.</p><h3 id="c-mo-usar-la-funci-n-require-en-js"><strong>Cómo Usar la Función require() en JS</strong></h3><p>La función <code>require()</code> es fácil de usar y entender, ya que todo lo que tienes que hacer es asignar la función a una variable.</p><p>En esta función, pasarás el nombre de la ubicación como argumento. Esta es la sintaxis general:</p><pre><code class="language-js">const NombreVariable = require(nombreUbicacion);
</code></pre><p>Supón que tienes un módulo CommonJS que exporta una función <code>obtenNombreCompleto</code> como se ve a continuación:</p><pre><code class="language-js">// utils.js
const obtenNombreCompleto = (nombre, apellido) =&gt; {
    return `Mi nombre completo es ${nombre} ${apellido}`;
};
module.exports = obtenNombrecompleto;
</code></pre><p>Entonces puedes usar la función require() para usar/incluir este módulo dentro de tu archivo JavaScript:</p><pre><code class="language-js">// index.js
const obtenNombreCompleto = require('./utils.js');
console.log(obtenNombreCompleto('John', 'Doe')); // Mi nombre completo es John Doe
</code></pre><p>El módulo se encuentra dentro de un archivo local en el código de arriba, razón por la cual se hace referencia a la dirección local usando el nombre del archivo.</p><p>Pero en una situación en la que quieras incluir un módulo externo desde la web, entonces haces uso de la localización basada en la web: </p><pre><code class="language-js">const miVar = require('http://modulo-web.localizacion');
</code></pre><h2 id="funciones-require-vs-import-"><strong>Funciones require() vs import()</strong></h2><p>Las funciones/sentencias require e import son usadas para incluir módulos dentro de tu archivo JavaScript, pero poseen algunas diferencias. Las dos principales son:</p><ul><li>La función require() puede ser llamada desde cualquier parte dentro del programa, mientras que import() no puede ser llamada condicionalmente. Siempre se ejecuta al inicio del archivo.</li><li>Para incluir un módulo con la función require(), ese módulo debe ser guardado con una extensión .js en lugar de una .mjs cuando la sentencia import() es utilizada.</li></ul><h2 id="conclusi-n"><strong>Conclusión</strong></h2><p>En este artículo, has aprendido lo que hace la función require(), cómo funciona, y cuándo la puedes usar en Node.js.</p><p>Es crucial entender que la sentencia import solo está permitida en módulos ES y no puede ser usada en scripts embebidos sin el atributo <code>type="module"</code>. Además, para usar módulos ES en Node.js, debes guardar dichos módulos con una extensión .mjs:</p><pre><code class="language-js">// utils.mjs
export const obtenNombrecompleto = (nombre, apellido) =&gt; {
    return `Mi nombre completo es ${nombre} ${apellido}`;
};

// index.js
import { obtenNombrecompleto } from './utils.mjs';
console.log(obtenNombreCompleto('John', 'Doe')); // Mi nombre completo es John Doe
</code></pre><p>¡Diviértete escribiendo código!</p><p>Puedes acceder a más de 180 de mis artículos <a href="https://joelolawanle.com/contents">visitando mi sitio web</a>. También puedes usar el campo de búsqueda para revisar si he escrito algún artículo en específico.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ C++ map explicado con ejemplos ]]>
                </title>
                <description>
                    <![CDATA[ map es un contenedor que almacena elementos en pares clave-valor. Es similar a las colecciones en Java, los arreglos asociativos en PHP, o los objetos en JavaScript. Aquí están los principales beneficios de usar map:  * map solo almacena claves únicas, y las propias claves están ordenadas  * ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/c-map-explicado-con-ejemplos/</link>
                <guid isPermaLink="false">644c07d1db9a5007c084b18d</guid>
                
                    <category>
                        <![CDATA[ c++ ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Fri, 05 May 2023 01:29:23 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/04/5f9c9d26740569d1a4ca3630.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/c-plus-plus-map-explained-with-examples/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">C++ Map Explained with Examples</a>
      </p><p><code>map</code> es un contenedor que almacena elementos en pares clave-valor. Es similar a las colecciones en Java, los arreglos asociativos en PHP, o los objetos en JavaScript.</p><p>Aquí están los principales beneficios de usar <code>map</code>:</p><ul><li><code>map</code> solo almacena claves únicas, y las propias claves están ordenadas</li><li>Debido a que las claves están ya ordenadas, el buscar un elemento es muy rápido</li><li>Hay solo un valor para cada clave</li></ul><p>Aquí un ejemplo:</p><pre><code class="language-none">#include &lt;iostream&gt;
#include &lt;map&gt;

using namespace std;

int main (){
  map&lt;char,int&gt; primero;
  
  //inicializando
  primero['a']=10;
  primero['b']=20;
  primero['c']=30;
  primero['d']=40;
  
   map&lt;char, int&gt;::iterator eso;
   for(eso=primero.begin(); eso!=primero.end(); ++eso){
      cout &lt;&lt; eso-&gt;primero &lt;&lt; " =&gt; " &lt;&lt; eso-&gt;segundo &lt;&lt; '\n';
   }
   
  return 0;
}</code></pre><p>Salida:</p><pre><code class="language-text">a =&gt; 10
b =&gt; 20
c =&gt; 30
d =&gt; 40</code></pre><h3 id="creaci-n-de-un-objeto-map"><strong>Creación de un objeto <code>map</code></strong></h3><p><code>map&lt;string, int&gt; miMapa;</code></p><h3 id="inserci-n"><strong>Inserción</strong></h3><p>Inserción de datos con la función miembro insert</p><pre><code class="language-none">miMapa.insert(make_pair("Tierra", 1));
miMapa.insert(make_pair("Luna", 2));</code></pre><p>También podemos insertar datos en std::map usando el operador [] es decir</p><p><code>miMapa["Sol"] = 3;</code></p><h3 id="acceso-a-los-elementos-de-map"><strong>Acceso a los elementos de <code>map</code> </strong></h3><p>Para acceder a los elementos de map, tienes que crear un iterador. Por ejemplo:</p><pre><code class="language-none">map&lt;char, int&gt;::iterator eso;
for(eso=primero.begin(); eso!=primero.end(); ++eso){
  cout &lt;&lt; eso-&gt;first &lt;&lt; " =&gt; " &lt;&lt; eso-&gt;second &lt;&lt; '\n';
}</code></pre> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ ¿Qué hay en un __name__ (de Python)? ]]>
                </title>
                <description>
                    <![CDATA[ Una introducción a la variable __name__ y su uso en Python Es muy probable que hayas visto la variable __name__ cuando has revisado código de Python. A continuación puedes ver un fragmento de código de ejemplo de cómo puede lucir:  if __name__ == '__main__':    main() En ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/que-hay-en-un-__name__-de-python/</link>
                <guid isPermaLink="false">643d717910657f0643decac0</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Sat, 29 Apr 2023 14:08:10 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/04/python_1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/whats-in-a-python-s-name-506262fe61e8/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What’s in a (Python’s) __name__?</a>
      </p><h4 id="una-introducci-n-a-la-variable-__name__-y-su-uso-en-python"><strong>Una introducción a la variable __<strong>name</strong></strong>__ y su uso en Python</h4><p>Es muy probable que hayas visto la variable <code>__name__</code> cuando has revisado código de Python. A continuación puedes ver un fragmento de código de ejemplo de cómo puede lucir: </p><pre><code>if __name__ == '__main__':    main()</code></pre><p>En este artículo quiero mostrarte cómo puedes hacer uso de esta variable para crear módulos en Python. </p><h4 id="-por-qu-se-usa-la-variable-_-_name_-_"><strong>¿Por qué se usa la variable<strong> _ _name_ _</strong> <strong>?</strong></strong></h4><p>La variable <code>__name__</code> (dos guiones bajos antes y después) es una variable especial de Python. Toma su valor dependiendo de cómo se ejecute el script contenedor.</p><p>A veces escribes un script con funciones que también pueden ser útiles en otros scripts. En Python, puedes importar ese script como un módulo en otro script.</p><p>Gracias a esta variable especial, puedes decidir si quieres ejecutar ese script, o importar las funciones definidas en el mismo.</p><h4 id="-qu-valores-puede-contener-la-variable-__name__"><strong>¿Qué valores puede contener la variable __<strong><strong>name</strong></strong>__ ?</strong></h4><p>Cuando ejecutas tu script, la variable <code>__name__</code> es igual a <code>__main__</code> . Cuando importas el script contenedor, contendrá el nombre del script. </p><p>Veamos estos dos casos de uso y describamos el proceso con dos ilustraciones.</p><h4 id="escenario-1-ejecutar-el-script"><strong>Escenario 1 - Ejecutar el script </strong></h4><p>Supongamos que escribimos el script <code>nombreScript.py</code> de la siguiente manera: </p><pre><code>def miFuncion():    print 'El valor de __name__ es ' + __name__</code></pre><pre><code>def main():    miFuncion()</code></pre><pre><code>if __name__ == '__main__':    main()</code></pre><p>Si ejecutas nombreScript.py, se sigue el proceso de abajo. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/04/ambito-1.png" class="kg-image" alt="PljpjxnM1OMMW7IkexNxVfwrKhP0RH-isapH" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/04/ambito-1.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/04/ambito-1.png 800w" sizes="(min-width: 720px) 720px" width="800" height="600" loading="lazy"><figcaption></figcaption></figure><p>Antes de que ejecute cualquier otro código, la variable <code>__name__</code> se establece a __main__. Después, las sentencias def de <code>main</code> y <code>miFuncion</code> se ejecutan. Debido a que la condición se evalúa a verdadero, la función main es llamada. Esta a su vez llama a miFuncion. Esto imprime el valor de <code>__main__</code>. </p><h4 id="escenario-2-importar-el-script-en-otro-script"><strong>Escenario 2 - Importar el script en otro script </strong></h4><p>Si queremos reusar miFuncion en otro script, por ejemplo <code>importandoScript.py</code>, podemos importar <code>nombreScript.py</code> como un módulo.</p><p>El código en<code>importandoScript.py</code> podría ser el siguiente:</p><pre><code>import nombreScript as ns</code></pre><pre><code>ns.miFuncion()</code></pre><p>Entonces tenemos dos ámbitos: uno de <code>importandoScript</code> y el segundo de <code>nombreScript</code>. En la imagen puedes ver como difiere del primer caso de uso. </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/04/defFuncts.png" class="kg-image" alt="k9OxzvJAP-s5qeZg88jUCOCVy1syrQu4oKds" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/04/defFuncts.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/04/defFuncts.png 800w" sizes="(min-width: 720px) 720px" width="800" height="500" loading="lazy"></figure><p>En importandoScript.py la variable <code>__name__</code> se establece a __main__. Al importar nombreScript, Python empieza a buscar un archivo agregando <code>.py</code> al nombre del módulo. Luego ejecuta el código contenido en el archivo importado.</p><p>Pero esta vez se establece a nombreScript; de nuevo las sentencias def para main y miFuncion son ejecutadas, pero ahora la condición evalúa a falso y main no es llamado.</p><p>En importandoScript.py llamamos a miFuncion que da como salida nombreScript. NombreScript es conocida por miFuncion cuando esa función fue definida.</p><p>Si imprimieras <code>__name__</code> en importandoScript, saldría <code>__main__</code>. La razón de esto es que Python usa el valor conocido en el ámbito de importandoScript.</p><h4 id="conclusi-n"><strong>Conclusión</strong></h4><p>En este breve artículo, expliqué cómo puedes usar la variable <code>__name__</code> para escribir módulos. También puedes ejecutar estos módulos por sí mismos. Esto se puede lograr al hacer uso de cómo los valores de estas variables cambian dependiendo de dónde ocurren. </p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Explicación de la notación Big O con Ejemplos ]]>
                </title>
                <description>
                    <![CDATA[ La notación Big O es una manera de describir la rapidez o complejidad de un algoritmo dado. Si tu proyecto actual requiere un algoritmo predefinido, es importante entender qué tan rápido o lento es comparado con otras opciones. ¿Qué es la notación Big O y cómo funciona? En palabras simples, ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/explicacion-de-la-notacion-big-o-con-ejemplo/</link>
                <guid isPermaLink="false">64395a5c10657f0643dec442</guid>
                
                    <category>
                        <![CDATA[ notación big o ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Fri, 21 Apr 2023 19:39:16 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/04/5f9c9cf0740569d1a4ca3502.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/big-o-notation-explained-with-examples/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Big O Notation Explained with Examples</a>
      </p><p>La notación Big O es una manera de describir la rapidez o complejidad de un algoritmo dado. Si tu proyecto actual requiere un algoritmo predefinido, es importante entender qué tan rápido o lento es comparado con otras opciones.</p><h2 id="-qu-es-la-notaci-n-big-o-y-c-mo-funciona"><strong>¿Qué es la notación Big O y cómo funciona?</strong></h2><p>En palabras simples, la notación Big O te dice el número de operaciones que hará un algoritmo. Toma su nombre de la "O grande" en frente del número estimado de operaciones.</p><p>Lo que la notación Big O no te dice es la rapidez del algoritmo en segundos. Hay demasiados factores que influyen en el tiempo que tarde en ejecutarse un algoritmo. En su lugar, usarás la notación Big O para comparar diferentes algoritmos por el número de operaciones que hacen.</p><h3 id="big-o-establece-un-tiempo-de-ejecuci-n-en-el-peor-de-los-casos"><strong>Big O establece un tiempo de ejecución en el peor de los casos</strong></h3><p>Imagina que eres un maestro y tienes una estudiante de nombre Jane. Quieres encontrar sus registros, así que usas un algoritmo de búsqueda simple para recorrer la bases de datos de tu distrito escolar.</p><p>Sabes que a la búsqueda simple le toma O(n) veces ejecutarse. Esto significa que, en el peor de los casos, tendrás que buscar en cada uno de los registros (representados por n) para encontrar el de Jane.</p><p>Pero cuando ejecutas la búsqueda simple, encuentras que los registros de Jane son la primera entrada en la base de datos. No tienes que mirar cada entrada – la encontraste en tu primer intento.</p><p><em>¿Este algoritmo tardó O(n) tiempo? ¿O tardó O(1) porque encontraste los registros de Jane en el primer intento?</em></p><p>En este caso, O(1) es el mejor de los casos: tuviste suerte de que los registros de Jane estuvieran al principio. Pero la notación Big O se enfoca en el peor de los casos, el cual es O(n) para la búsqueda simple. Es una garantía de que la búsqueda simple nunca será más lenta que el tiempo O(n).</p><h3 id="los-tiempos-de-ejecuci-n-de-los-algoritmos-crecen-a-ritmos-diferentes"><strong>Los tiempos de ejecución de los algoritmos crecen a ritmos diferentes</strong></h3><p>Asume que toma 1 milisegundo revisar cada elemento de la base de datos del distrito escolar. </p><p>Con la búsqueda simple, si tienes que revisar 10 entradas, le tomará 10 ms en ejecutarse. Pero con el <em>algoritmo de búsqueda binaria</em>, solo tienes que revisar 3 elementos, lo que toma 3 ms en ejecutarse.</p><p>En la mayoría de los casos, la lista o base de datos en la que necesitas buscar tendrá cientos o miles de elementos.</p><p>Si hay mil millones de elementos, usar la búsqueda simple tardará hasta 1 mil millones de ms, u 11 días. En cambio, la búsqueda binaria tardará solamente 32 ms en el peor de los casos:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/04/bigonotation.png" class="kg-image" alt="31781165-723a053c-b500-11e7-937c-7b33db281efe" width="464" height="129" loading="lazy"></figure><p>Claramente, los tiempos de ejecución de la búsqueda simple y de la búsqueda binaria no crecen ni de cerca al mismo ritmo. Mientras más aumenta la lista de entradas, a la búsqueda binaria solo le toma un poco más de tiempo en ejecutarse. El tiempo de ejecución de la búsqueda simple crece exponencialmente mientras la lista de entradas aumente.</p><p>Por esto es muy importante saber cómo el tiempo de ejecución se incrementa en relación con el tamaño de una lista. Y aquí es exactamente donde la notación Big O es muy útil. </p><h3 id="la-notaci-n-big-o-muestra-el-n-mero-de-operaciones"><strong>La notación Big O muestra el número de operaciones</strong></h3><p>Como se mencionó antes, la notación Big O no muestra el <em>tiempo</em> que tardará en ejecutarse un algoritmo. En su lugar, muestra el número de operaciones que procesará. Te dice qué tan rápido crece un algoritmo y te permite compararlo con otros. </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/04/bigonotationplot.png" class="kg-image" alt="31781175-768c208e-b500-11e7-9718-e632d1391e2d" width="441" height="357" loading="lazy"></figure><p>He aquí algunos algoritmos comunes y sus tiempos de ejecución en notación Big O:</p><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">NOTACIÓN BIG O</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">ALGORITMO DE EJEMPLO</th></tr></thead><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">O(log n)</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">Búsqueda binaria</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">O(n)</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">Búsqueda simple</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">O(n * log n)</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">Ordenación rápida (Quicksort)</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">O(n2)</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">Ordenación por selección</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">O(n!)</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">Vendedor viajero</td></tr></tbody></table><!--kg-card-end: html--><p>Ahora ya sabes lo suficiente para ser peligroso con la notación Big O. Sal allá y empieza a comparar algoritmos.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo administrar múltiples versiones de Python y entornos virtuales ]]>
                </title>
                <description>
                    <![CDATA[ Actualización de enero del 2019: Si estás regresando a este blog después de actualizar a macOS Mojave, por favor consulta este tema de github [https://github.com/pyenv/pyenv/issues/1219#issue-363576794] para solucionar el problema común de pyenv 'zlib no disponible'. Antes de empezar, repasemos brevemente los términos usados en el título:   * Múltiples ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/administrar-multiples-versiones-de-python-y-entornos-virtuales/</link>
                <guid isPermaLink="false">632e0d0236d7bd096041b467</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Mon, 17 Apr 2023 01:44:58 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/09/1_X7729FJyghz1ADa5OGhrqg.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/manage-multiple-python-versions-and-virtual-environments-venv-pyenv-pyvenv-a29fb00c296f/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to manage multiple Python versions and virtual environments</a>
      </p><p><em>Actualización de enero del 2019: Si estás regresando a este blog después de actualizar a macOS Mojave, por favor consulta <a href="https://github.com/pyenv/pyenv/issues/1219#issue-363576794">este tema de github</a> para solucionar el problema común de pyenv 'zlib no disponible'.</em></p><p>Antes de empezar, repasemos brevemente los términos usados en el título: </p><ul><li><strong>Múltiples versiones de Python</strong>: Diferentes instalaciones de Python en la misma máquina, por ejemplo, 2.7 y 3.4. </li><li><a href="https://packaging.python.org/en/latest/tutorials/installing-packages/#creating-virtual-environments"><strong>Entornos virtuale<strong>s</strong></strong>:</a> entornos independientes aislados que pueden tener tanto una versión específica de Python como de cualesquiera paquetes específicos de proyecto instalados en ellos, sin afectar a otros proyectos. </li></ul><p>Aquí se verán tres herramientas diferentes para trabajar con estos, y cuándo puede que se necesite cada una. Exploremos los casos de uso para:</p><ul><li><code>venv</code> / <code>pyvenv</code></li><li><code>pyenv</code></li><li><code>pyenv-virtualenv</code></li></ul><p>Si se está usando una <strong>sola</strong> <strong>versión</strong> de Python, como la versión <strong>3.3+</strong>, y se quieren administrar <strong>diferentes entornos virtuales</strong>, entonces <code>venv</code> es todo lo que se necesita.</p><p>Si se quieren usar <strong>múltiples versiones</strong> de Python en <strong>3.3+</strong>, <strong>con o sin entornos virtuales</strong>, entonces hay que leer sobre <code>pyenv</code>.</p><p>Si también se quiere trabajar con <strong>Python 2</strong>, entonces <code>pyenv-virtualenv</code> es una herramienta a considerar.</p><h3 id="venv"><strong><strong>venv</strong></strong></h3><p>Desde Python 3.3+ el paquete <code>venv</code> está incluido. Es ideal para crear entornos virtuales ligeros. </p><p>Hasta Python 3.6 un script llamado <code>pyvenv</code> también se incluyó como envoltorio de &nbsp;<code>venv</code>, pero ya es obsoleto. Se eliminará por completo en Python 3.8. La misma funcionalidad está disponible cuando se usa <code>venv</code>, y cualquier documentación existente debe ser actualizada. Para quien esté interesado, puede leer <a href="https://bugs.python.org/issue25154">las razones detrás de la depreciación de <code>pyvenv</code></a>. &nbsp;</p><p><code>venv</code> se usa para crear un nuevo entorno mediante la terminal de comandos:</p><pre><code class="language-bash">$ python3 -m venv nombre-del-directorio-a-crear</code></pre><p>se activa con:</p><pre><code class="language-bash">$ source nombre-dado/bin/activate</code></pre><p>y se desactiva simplemente con:</p><pre><code class="language-bash">$ deactivate</code></pre><p>Si se necesita eliminar el entorno por completo después de desactivarlo, se puede ejecutar: </p><pre><code class="language-bash">$ rm -r nombre-dado</code></pre><p>Por defecto, el entorno que se crea será de la versión actual de Python que se está usando. Si se está escribiendo documentación y se quiere la seguridad adicional de que la versión correcta de Python está siendo usada por el lector, se puede especificar el número de versión mayor y menor en el comando de este modo: </p><pre><code class="language-bash">$ python3.6 -m venv example-three-six</code></pre><p>Si el lector utiliza una versión distinta de la 3.6, entonces el comando no tendrá éxito y lo indicará en su mensaje de error. Sin embargo, cualquier versión de parche (por ejemplo 3.6.4) funcionará. </p><p>Cuando el entorno está activo, cualquier paquete puede ser instalado ahí mediante <code>pip</code> de manera normal. Por defecto, el entorno recién creado <strong>no</strong> incluirá ningún paquete ya instalado en la computadora. Como el propio <code>pip</code> no estará necesariamente instalado en la computadora, se recomienda que primero se actualice <code>pip</code> a la última versión usando <code>pip install --upgrade pip</code>. </p><p>Los proyectos comúnmente tendrán un archivo <code>requirements.txt</code> especificando sus dependencias. El siguiente comando <code>pip install -r requirements.txt</code> instalará rápidamente todos los paquetes al recién creado entorno virtual. Esos paquetes solo existirán en dicho entorno virtual. No estarán disponible cuando se desactive el entorno virtual, pero persistirán cuando se reactive nuevamente.</p><p>Si no se necesita usar versiones adicionales de Python, entonces esto es todo lo que se requiere para crear entornos virtuales aislados y especificos del proyecto.</p><h3 id="pyenv"><strong><strong><a href="https://github.com/pyenv/pyenv" rel="noopener">pyenv</a></strong></strong></h3><p>Si se desea usar múltiples versiones de Python en un solo equipo, entonces <code>pyenv</code> es una herramienta comúnmente usada para instalar y cambiar entre versiones. Esto no se debe confundir con el script depreciado <code>pyvenv</code> mencionado anteriormente. No viene de paquete con Python, y debe ser instalado por separado.</p><p>La documentación de <code>pyenv</code> incluye una amplia descripción de <a href="https://github.com/pyenv/pyenv#how-it-works">cómo funciona</a>, por lo que aquí se verá simplemente como usarlo. </p><p>Primero se necesita instalarlo. Si se usa Mac OS X, esto se consigue usando Homebrew, de lo contrario hay que considerar otras opciones de instalación.</p><pre><code class="language-bash">$ brew update
$ brew install pyenv</code></pre><p>Después, se agrega lo siguiente al final de nuestros scripts de shell para permitir que <code>pyenv</code> cambie automáticamente las versiones:</p><pre><code class="language-bash">eval "$(pyenv init -)"</code></pre><p>Para hacerlo, abre el script de shell en uso mediante <code>$ ~/.zshrc</code>, <code>$ ~/.bashrc</code> o <code>$ ~/.bash_profile</code> y copia y pega la línea anterior.</p><p>El ejecutar <code>pyenv versions</code> mostrará qué versiones de Python están actualmente instaladas, con un <code>*</code> al lado de la que está actualmente en uso. <code>pyenv version</code> muestra esto directamente, y <code>python --version</code> puede ser usado para verificarlo.</p><p>Para instalar una versión adicional, como la <code>3.4.0</code>, simplemente se usa <code>pyenv install 3.4.0</code>.</p><p><code>pyenv</code> busca en cuatro lugares para decidir cuál versión de Python usar, en orden de prioridad:</p><ol><li>La variable de entorno <code>PYENV_VERSION</code> (si se especifica). Se puede usar el comando <code>pyenv shell</code> para establecer esta variable de entorno en la sesión de shell actual.</li><li>El archivo <code>.python-version</code> específico de la aplicación en el directorio actual (si está presente). Se puede modificar el archivo <code>.python-version</code> del directorio actual con el comando <code>pyenv local</code>.</li><li>El primer archivo <code>.python-version</code> encontrado (si hay alguno) buscando en cada directorio padre, hasta llegar a la raíz del sistema de archivos.</li><li>El archivo de versión global. Se puede modificar este archivo usando el comando <code>pyenv global</code>. Si el archivo de versión global no está presente, pyenv asume que se quiere usar el Python del "sistema". (En otras palabras, cualquier versión que se ejecutaría si pyenv no estuviera en el <code>PATH</code>.)</li></ol><p>Al crear un nuevo proyecto que va a usar Python 3.6.4, entonces <code>pyenv local 3.6.4</code> se ejecutaría en su directorio raíz. De este modo, se establecería tanto la versión como la creación de un archivo <code>.python-version</code> , para que los equipos de otros colaboradores lo recojan.</p><p>La descripción completa de los comandos <code>pyenv</code> es algo para marcar.</p><h3 id="pyenv-y-venv">pyenv y venv</h3><p>Cuando se trabaja con Python 3.3+ ahora se sabe cómo instalar y cambiar entre diferentes versiones de Python, así como crear nuevos entornos virtuales. </p><p>Como ejemplo, digamos que se está configurando un proyecto que va a usar Python 3.4.</p><p>Primero se podría establecer la versión local usando <code>pyenv local 3.4.0</code>.</p><p>Si luego se ejecuta <code>python3 -m venv proyecto-de-ejemplo</code> un nuevo entorno virtual se crearía bajo <code>proyecto-de-ejemplo</code>, usando Python 3.4.0 habilitado localmente.</p><p>Se activa usando <code>source proyecto-de-ejemplo/bin/activate</code> y se puede empezar a trabajar.</p><p>Luego se podría documentar <em>opcionalmente</em> que un colaborador debería usar <code>python3.4 -m venv &lt;nombre&gt;</code>. Esto significa que incluso si un colaborador no estaba usando pyenv, el comando <code>python3.4</code> marcaría error si su versión de Python no era la misma versión mayor y menor (3 y 4), como se pretendía.</p><p>Como alternativa, se podría elegir a especificar simplemente que la versión 3.4.0 se iba a ser usado, e instruir a <code>python3 -m venv &lt;nombre&gt;</code>. Si se cree que cualquier versión mayor a 3.4 es aceptable, entonces también se puede optar por usar <code>python3</code> sobre <code>python3.4</code>, ya que si el colaborador estuviera usando 3.6 entonces también recibiría un error. Esta es una decisión específica de proyecto.</p><h3 id="pyenv-virtualenv"><strong><strong>pyenv-virtualenv</strong></strong></h3><p><code>pyenv</code> puede ser usado para instalar ambas versiones de Python 2 y 3. Sin embargo, como se ha visto, <code>venv</code> está limitado a las versiones de Python superiores a la 3.3.</p><p><code>pyenv-virtualenv</code> es una herramienta para crear entornos virtuales integrada con <code>pyenv</code>, y funciona para todas las versiones de Python. Aun así se recomienda usar el <code>venv</code> oficial de Python donde sea posible. Pero si, por ejemplo, se está creando un entorno virtual basado en <code>2.7.13</code>, entonces esto complementa a <code>pyenv</code>.</p><p>Esto también funciona bien con los ambientes <code>conda</code> de Anaconda y Miniconda si ya se están usando. También existe una herramienta llamada <code>virtualenv</code> . No se cubre aquí, pero hay un enlace al final.</p><p>Después de instalar <code>pyenv</code> puede ser instalado usando Homebrew (u otras alternativas) de la siguiente manera:</p><pre><code class="language-bash">$ brew install pyenv-virtualenv</code></pre><p>Después, en <code>.zshrc</code>, <code>.bashrc</code>, o <code>.bash_profile</code> (dependiendo de la shell que se use) se agregan estas líneas al final:</p><pre><code class="language-bash">eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"</code></pre><p>Esto permite a <code>pyenv</code> activar y desactivar entornos automáticamente al mover directorios.</p><p>Para crear un nuevo entorno virtual, se usa: </p><pre><code class="language-bash">$ pyenv virtualenv &lt;version&gt; &lt;nombre-a-dar&gt;

// por ejemplo

$ pyenv virtualenv 2.7.10 mi-entorno-virtual-2.7.10</code></pre><p>Los entornos existentes se pueden listar con:</p><pre><code class="language-bash">$ pyenv virtualenvs</code></pre><p>Activar/desactivar con:</p><pre><code class="language-bash">$ pyenv activate &lt;nombre&gt;
$ pyenv deactivate</code></pre><p>Al momento de escribir esto, cuando se usa <code>activate</code> la advertencia <code>prompt changing will be removed from future release</code> se muestra en pantalla. Esto <a href="https://github.com/pyenv/pyenv-virtualenv/issues/135#issuecomment-386154344">es de esperarse</a> y se refiere únicamente al <code>(nombre-entorno)</code> siendo desplegado en el shell, no al uso del comando <code>activate</code> en sí.</p><p>La instalación de requerimientos funciona como se describe en &nbsp;<code>venv</code>. A diferencia de <code>venv</code>, un comando <code>rm -r</code> no es necesario para remover un entorno, pues existe un comando <a href="https://github.com/pyenv/pyenv-virtualenv#delete-existing-virtualenv"><code>uninstall</code></a>.</p><h3 id="reflexiones-finales"><strong>Reflexiones finales</strong></h3><p>Entre estas tres herramientas, se tiene la habilidad de colaborar en cualquier proyecto, sin importar la versión de Python o de las dependencias requeridas. También se sabe ahora cómo documentar las instrucciones de configuración para que otros las usen para cualquier proyecto en el que se trabaje.</p><p>También se puede ver el razonamiento detrás de cuál conjunto usar, ya que no todos los desarrolladores necesitarán los tres.</p><p>Espero esto haya sido de ayuda y es una referencia útil en combinación con la documentación cuyos enlaces se muestran a continuación. </p><p>¡Gracias por leer!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ ¿Qué es la declaración DOCTYPE en HTML? ]]>
                </title>
                <description>
                    <![CDATA[ La declaración de tipo de documento HTML, también conocida como DOCTYPE, es la primera línea de código requerida en todo documento HTML o XHTML. La declaración  DOCTYPE es una instrucción al navegador web sobre la versión de HTML en la cual está escrita la página. Esto asegura que la ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/que-es-la-declaracion-en-html/</link>
                <guid isPermaLink="false">6415146055e3ad15a8935e31</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Fri, 24 Mar 2023 19:21:25 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/03/5f9c9e63740569d1a4ca3cda.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/what-is-the-doctype-declaration-in-html/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What is the DOCTYPE Declaration in HTML?</a>
      </p><p>La declaración de tipo de documento HTML, también conocida como <code>DOCTYPE</code>, es la primera línea de código requerida en todo documento HTML o XHTML. La declaración <code>DOCTYPE</code> es una instrucción al navegador web sobre la versión de HTML en la cual está escrita la página. Esto asegura que la página web sea analizada de la misma manera en diferentes navegadores web.</p><p>En HTML 4.01, la declaración <code>DOCTYPE</code> refiere a una definición de tipo de documento (DTD, Document Type Definition). Un DTD define la estructura y los elementos legales de un documento XML. Debido a que HTML 4.01 se basó en el Lenguaje de Marcado Generalizado Estándar (Standard Generalised Markup Language, SGML), referirse a un DTD en la declaración <code>DOCTYPE</code> era necesario.</p><p>Además, los doctypes para HTML 4.01 requerían la declaración de un DTD <code>strict</code>, <code>transitional</code>, o <code>frameset</code>, cada uno con un caso de uso diferente, como se indica abajo.</p><ul><li><strong>DTD Estricto (<strong><strong><strong>Strict DTD</strong></strong></strong>)</strong>: Usado por páginas web que <em>excluyen</em> atributos y elementos que la W3C espera ir eliminando a medida que crezca la compatibilidad con CSS. </li><li><strong>DTD Transicional (<strong><strong><strong>Transitional DTD</strong></strong></strong>)</strong>: Usado por páginas web que <em>incluyen</em> atributos y elementos que la W3C espera ir eliminando a medida que crezca la compatibilidad con CSS. </li><li><strong>DTD Conjunto de marcos (<strong><strong><strong>Frameset DTD</strong></strong></strong>)</strong>: Usado por páginas web con marcos.</li></ul><p>En cambio, la declaración del <code>DOCTYPE</code> HTML5 es mucho más sencilla: ya no requiere una referencia a los DTDs porque ya no está basado en SGML. En los siguientes ejemplos se puede ver la comparación entre los <code>DOCTYPE</code> HTML 4.01 y HTML5.</p><h3 id="ejemplos"><strong><strong><strong>E</strong></strong>jemplo<strong><strong>s</strong></strong></strong></h3><p>Sintaxis de <em>doctype</em> para HTML5 y posteriores:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;</code></pre><p>Sintaxis de <em>doctype</em> para HTML 4.01 estricto:</p><pre><code class="language-html">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;</code></pre><p>Sintaxis de <em>doctype</em> para HTML 4.01 transicional:</p><pre><code class="language-html">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;</code></pre><p>Sintaxis de <em>doctype</em> para HTML 4.01 conjunto de marcos (frameset):</p><pre><code class="language-html">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"&gt;</code></pre><h2 id="historia"><strong>Historia</strong></h2><p>Durante los años de formación de HTML, aún no se había llegado a un acuerdo sobre los estándares de la web. Los fabricantes de los navegadores creaban nuevas funciones a su antojo. Había poca preocupación por la competencia entre navegadores.</p><p>El resultado fue que los desarrolladores web tenían que escoger un navegador sobre el cual desarrollarían sus sitios, lo que terminaba en que dichos sitios no se mostraran bien en navegadores no compatibles. Esta situación no podía continuar.</p><p>La W3C (Consorcio de la World Wide Web, <strong>W</strong>orld <strong>W</strong>ide <strong>W</strong>eb <strong>C</strong>onsortium) redactó un conjunto de estándares web para manejar esta situación. &nbsp;Todos los fabricantes de navegadores y desarrolladores web deben apegarse a estos estándares, lo que asegura que los sitios web se muestren bien sin importar el navegador que se use.</p><p>Los cambios requeridos por los estándares fueron muy diferentes de algunas prácticas existentes. Apegarse a ellos rompería a los sitios web existentes que no cumplían con los estándares.</p><p>Para solucionar este problema, los fabricantes empezaron a programar modos de renderizado en sus navegadores. Los desarrolladores web necesitaban añadir una declaración doctype al principio de un documento HMTL. Dicha declaración le indicaría al navegador qué modo de renderizado usar para ese documento en específico.</p><p>Tres modos de renderizado por separado estuvieron generalmente disponibles entre navegadores.</p><ul><li><strong>Modo de estándares completo</strong> <strong>(Full standards mode)</strong> renderiza las páginas de acuerdo a los estándares web de la W3C. </li><li><strong>Modo de peculiaridades</strong> <strong>(Quirks mode)</strong> renderiza las páginas de manera no conforme a los estándares. </li><li><strong>Modo casi estándar</strong> <strong>(Almost standards mode)</strong> se acerca al modo de estándares completos, pero ofrece soporte a un pequeño número de peculiaridades.</li></ul><p>En la era moderna de HTML5, los estándares web están totalmente implementados en los principales navegadores. Los sitios web son generalmente desarrollados conforme a los estándares. Por esta razón, la declaración doctype de HTML5 solo existe para indicarle al navegador que renderice el documento en modo de estándares completo.</p><h2 id="utilizaci-n"><strong><strong><strong>U</strong></strong>tilización</strong></h2><p>La declaración Doctype debe ser la primera línea de código en un documento HTML, aparte de los comentarios, los cuales pueden ir antes si es necesario. Para los documentos HTML5 modernos, la declaración doctype debe ser la siguiente:</p><p><code>&lt;!DOCTYPE html&gt;</code></p><h4 id="m-s-informaci-n-"><strong>Más Información<strong><strong>:</strong></strong></strong></h4><p>Aunque ya no son de uso general, existen otros tipos de declaración doctype de versiones anteriores de HTML. También existen versiones específicas para documentos XML. Para saber más sobre ellas y ver ejemplos de códigos de cada una, consulta este <a href="https://es.wikipedia.org/wiki/Declaraci%C3%B3n_de_tipo_de_documento">artículo de Wikipedia</a>.</p><p><a href="https://www.w3.org/QA/Tips/Doctype">A note from the W3</a></p><p><a href="https://developer.mozilla.org/es/docs/Glossary/Doctype">Entrada del Glosario MDN</a></p><p><a href="https://www.w3schools.com/tags/tag_doctype.asp">W3Schools</a></p><p><a href="https://developer.mozilla.org/es/docs/Web/HTML/Quirks_Mode_and_Standards_Mode">Una explicación rápida del "Modo Quirks" y "Modo Estándar"</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo cambiar a mayúscula la primera letra de cada palabra en JavaScript: un tutorial de mayúsculas en JS ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por Catalin Pit [https://www.freecodecamp.org/news/author/catalin/] Artículo original How to Capitalize the First Letter of Each Word in JavaScript – a JS Uppercase Tutorial [https://www.freecodecamp.org/news/how-to-capitalize-words-in-javascript/] Traducido y adaptado por Gibran Pelayo M. [/espanol/news/author/gibranpm/] En este artículo vas a aprender cómo escribir en mayúscula la primera letra de cualquier palabra ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-cambiar-a-mayuscula-la-primera-letra-de-cada-palabra-en-javascript/</link>
                <guid isPermaLink="false">6245d980f3332c08559e7c82</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Fri, 15 Apr 2022 03:03:47 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/03/5f9c9905740569d1a4ca1d64.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong>Artículo original escrito por</strong></strong> <a href="https://www.freecodecamp.org/news/author/catalin/">Catalin Pit</a><br><strong><strong>Artículo original</strong></strong> <a href="https://www.freecodecamp.org/news/how-to-capitalize-words-in-javascript/">How to Capitalize the First Letter of Each Word in JavaScript – a JS Uppercase Tutorial</a><br><strong><strong>Traducido y adaptado por</strong></strong> <a href="https://www.freecodecamp.org/espanol/news/author/gibranpm/"><strong>Gibran Pelayo M.</strong></a></p><p>En este artículo vas a aprender cómo escribir en mayúscula la primera letra de cualquier palabra en JavaScript. Después de eso, vas a poner en mayúscula la primera letra de todas las palabras de una oración.</p><p>Lo hermoso acerca de la programación es que no hay una solución universal para resolver un problema. Por lo tanto, en este artículo verás múltiples maneras de resolver el mismo problema. </p><h1 id="escribir-en-may-scula-la-primera-letra-de-una-palabra"><strong>Escribir en mayúscula la primera letra de una palabra</strong></h1><p>En primer lugar, empecemos con escribir en mayúscula la primera letra de una sola palabra. Después de que aprendas cómo hacerlo, iremos al siguiente nivel – hacerlo con cada palabra de una oración. Aquí hay un ejemplo:</p><pre><code class="language-js">const publicacion = "freeCodeCamp";
</code></pre><p>En JavaScript empezamos a contar desde 0. Es decir, si tenemos un arreglo, la primera posición es 0, no 1. </p><p>Además, podemos acceder a cada letra de una cadena de la misma manera que accedemos a un elemento de un arreglo. Por ejemplo, la primera letra de la palabra "<em>freeeCodeCamp</em>" está en la posición 0.</p><p>Esto significa que podemos obtener la letra <strong>f</strong> de <em>freeCodeCamp</em> al ejecutar <code>publicacion[0]</code>.</p><p>Del mismo modo, puedes acceder a otras letras de la palabra. Puedes reemplazar el "0" con cualquier número, mientras no se exceda la longitud de la palabra. Si se excede dicha longitud, como tratar de ejecutar <code>publicacion[25] </code>, nos arroja un error, pues solo hay 12 letras en la palabra "freeCodeCamp".</p><h3 id="c-mo-escribir-en-may-scula-la-primera-letra"><strong>Cómo escribir en mayúscula la primera letra</strong></h3><p>Ahora que sabemos cómo acceder a una letra de una palabra. Vamos a escribirla en mayúscula.</p><p>En JavaScript existe un método llamado <code>toUpperCase()</code>, con el cual podemos llamar cadenas o palabras. Como podemos inferir por el nombre, se invoca para una cadena/palabra, y devuelve la misma cosa, pero en mayúsculas.</p><p>Por ejemplo:</p><pre><code class="language-js">const publicacion = "freeCodeCamp";
publicacion[0].toUpperCase();
</code></pre><p>Al ejecutar el código de arriba, vas a obtener una <strong>F</strong> mayúscula en lugar de <em>f</em>. Para recuperar la palabra completa, podemos hacer esto: </p><pre><code class="language-js">const publicacion = "freeCodeCamp";
publicacion[0].toUpperCase() + publicacion.substring(1);
</code></pre><p>Ahora se concatena la "F" con "reeCodeCamp", lo que significa que recuperamos la palabra "FreeCodeCamp". ¡Eso es todo!</p><h3 id="recapitulemos"><strong>Recapitulemos</strong></h3><p>Para asegurarnos que todo queda claro, veamos lo que hemos aprendido hasta ahora:</p><ul><li>En JavaScript, el conteo empieza desde 0.</li><li>Podemos acceder a una letra de una cadena de la misma manera que accedemos a un elemento de un arreglo - por ejemplo. <code>cadena[índice]</code>.</li><li>No uses un índice que exceda la longitud de la cadena (usa el método de longitud - <code>cadena.length</code> - para encontrar el rango que puedes usar).</li><li>Usa el método integrado <code>toUpperCase()</code> en la letra que quieres convertir a mayúscula.</li></ul><h1 id="escribir-en-may-scula-la-primera-letra-de-cada-palabra-de-una-cadena"><strong>Escribir en mayúscula la primera letra de cada palabra de una cadena</strong></h1><p>El siguiente paso es tomar una oración y poner en mayúsculas cada palabra de esa oración. Tomemos la siguiente oración:</p><pre><code class="language-js">const miOracion = "freeCodeCamp es un recurso impresionante";
</code></pre><h3 id="separar-en-palabras"><strong>Separar en palabras </strong></h3><p>Necesitamos escribir en mayúscula la primera letra de cada palabra del enunciado &nbsp;<code>freeCodeCamp es un recurso impresionante</code>.</p><p>El primer paso que damos es dividir la oración en una serie de palabras. <strong>¿Por qué?</strong> Así que podemos manipular cada palabra individualmente. Podemos hacerlo de la siguiente manera:</p><pre><code class="language-js">const miOracion = "freeCodeCamp es un recurso impresionante";
const palabras = miOracion.split(" ");
</code></pre><h3 id="iterar-sobre-cada-palabra"><strong>Iterar sobre cada palabra</strong></h3><p>Después de ejecutar el código de arriba, a la variable <code>palabras</code> se le asigna un arreglo con cada palabra de la oración. Dicho arreglo es así: &nbsp;<code>["freeCodeCamp", "es", "un", "recurso", "impresionante"]</code>.</p><pre><code class="language-js">const miOracion = "freeCodeCamp es un recurso impresionante";
const palabras = miOracion.split(" ");

for (let i = 0; i &lt; palabras.length; i++) {
    palabras[i] = palabras[i][0].toUpperCase() + palabras[i].substr(1);
}
</code></pre><p>Ahora el siguiente paso es recorrer el arreglo de palabras y convertir a mayúscula la primera letra de cada palabra. </p><p>En el código de arriba, cada palabra se toma por separado. Luego convierte a mayúscula la primera letra, y al final, junta la primera letra en mayúscula con el resto de la cadena.</p><h3 id="unir-las-palabras"><strong>Unir las palabras</strong></h3><p>¿Qué es lo que hace el código de arriba? Itera sobre cada palabra, y la reemplaza con la primera letra en mayúscula + el resto de la cadena. </p><p>Si tomamos "freeCodeCamp" como ejemplo, se parece a esto <code>freeCodeCamp = F + reeCodeCamp</code>.</p><p>Después de iterar sobre todas las palabras, el arreglo <code>palabras</code> es <code>["FreeCodeCamp", "Es", "Un", "Recurso", "Impresionante"]</code>. Sin embargo, tenemos un arreglo, no una cadena, que no es lo que queremos.</p><p>El último paso es unir todas las palabras para formar una oración. Pero, ¿cómo lo hacemos?</p><p>En JavaScript tenemos un método llamado <code>join</code>, que podemos usar para devolver un arreglo como cadena. El método toma un separador como argumento. Es decir, especificamos qué añadir entre palabras, por ejemplo, un espacio.</p><pre><code class="language-js">const miOracion = "freeCodeCamp es un recurso impresionante";
const palabras = miOracion.split(" ");

for (let i = 0; i &lt; palabras.length; i++) {
    palabras[i] = palabras[i][0].toUpperCase() + palabras[i].substr(1);
}

palabras.join(" ");
</code></pre><p>En el fragmento de código de arriba, podemos ver el método <strong>join</strong> en acción. Lo llamamos para el arreglo <code>palabras</code>, y especificamos el separador, que en nuestro caso es un espacio.</p><p>Por lo tanto, <code>["FreeCodeCamp", "Es", "Un", "Recurso", "Impresionante"]</code> se convierte en <code>FreeCodeCamp Es Un Recurso Impresionante</code>.</p><h1 id="otros-m-todos"><strong>Otros métodos</strong></h1><p>Usualmente en programación hay múltiples maneras de resolver el mismo problema. Así que veamos otro enfoque.</p><pre><code class="language-js">const miOracion = "freeCodeCamp es un recurso impresionante";
const palabras = miOracion.split(" ");

palabras.map((palabra) =&gt; { 
    return palabra[0].toUpperCase() + palabra.substring(1); 
}).join(" ");
</code></pre><p><strong>¿Cuál es la diferencia entre la solución de arriba y la solución del inicio?</strong> Las dos soluciones son muy similares, siendo la diferencia que en la segunda solución usamos la función <code>map</code>, mientras que en la primera solución usamos un <code>bucle for</code>.</p><p>Vayamos más lejos, e intentemos hacerlo en <strong>una sola línea</strong>. ¡Pero ten cuidado! Las soluciones de una línea pueden lucir geniales, pero en el mundo real son raramente usadas porque es difícil entenderlas. &nbsp;La legibilidad del código siempre es primero.</p><pre><code class="language-js">const miOracion = "freeCodeCamp es un recurso impresionante";

const OracionFinal = miOracion.replace(/(^\w{1})|(\s+\w{1})/g, letra =&gt; letra.toUpperCase());
</code></pre><p>El código de arriba usa <strong>RegEx</strong> (Expresión Regular) para transformar las letras. La RegEx puede parecer confusa, así que déjenme explicar lo que pasa:</p><ul><li><code>^</code> coincide con el comienzo de la cadena.</li><li><code>\w</code> coincide con cualquier carácter de la palabra.</li><li><code>{1}</code> toma solo el primer carácter.</li><li>Por lo tanto, <code>^\w{1}</code> coincide con la primera letra de la palabra.</li><li><code>|</code> funciona como el <code>OR</code> booleano. Coincide con la expresión antes y después del <code>|</code>.</li><li><code>\s+</code> coincide con cualquier cantidad de espacios en blanco entre las palabras (por ejemplo, espacios, tabulaciones, o saltos de línea).</li></ul><p>Así, con una sola línea, hemos logrado la misma cosa que logramos con las soluciones de arriba. Si quieres jugar con RegEx y aprender más. Puedes usar <a href="https://regexr.com/">este sitio web</a>.</p><h1 id="conclusi-n"><strong>Conclusión</strong></h1><p>¡Felicidades, aprendiste algo nuevo hoy! Como repaso, en este artículo supiste como:</p><ul><li>Acceder a los caracteres de una cadena.</li><li>Escribir en mayúscula la primera letra de una palabra.</li><li>Separar una cadena en un arreglo de palabras.</li><li>Unir de nuevo las palabras de un arreglo para formar una cadena.</li><li>Utilizar RegEx para cumplir la misma tarea.</li></ul><p>¡Gracias por leer! Si quieres mantenerte en contacto, conectémonos en Twitter <a href="https://twitter.com/intent/follow?screen_name=catalinmpit">@catalinmpit</a>. También publico artículos de manera regular en mi blog &nbsp;<a href="https://catalins.tech/">catalins.tech</a> si quieres leer más contenido mío.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Aprende Python: Cursos de Python gratis para principiantes ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por Jessica Wilkins [https://www.freecodecamp.org/news/author/jessica-wilkins/] Artículo original Learn Python – Free Python Courses for Beginners [https://www.freecodecamp.org/news/learn-python-free-python-courses-for-beginners/] Traducido y adaptado por Gibrán Pelayo Python es un gran lenguaje de programación para aprender, y puedes usarlo en una variedad de áreas en el desarrollo de software. Puedes usar Python para ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/aprende-python-cursos-de-python-gratis-para-principiantes/</link>
                <guid isPermaLink="false">6220f2965e4d0b08bcc77d05</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Mon, 04 Apr 2022 02:25:16 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/04/chris-ried-ieic5Tq8YMk-unsplash.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong>Artículo original escrito por</strong></strong> <a href="https://www.freecodecamp.org/news/author/jessica-wilkins/">Jessica Wilkins</a><br><strong><strong>Artículo original</strong></strong> <a href="https://www.freecodecamp.org/news/learn-python-free-python-courses-for-beginners/">Learn Python – Free Python Courses for Beginners</a><br><strong><strong>Traducido y adaptado por</strong></strong> Gibrán Pelayo</p><p>Python es un gran lenguaje de programación para aprender, y puedes usarlo en una variedad de áreas en el desarrollo de software.</p><p>Puedes usar Python para desarrollo web, análisis de datos, aprendizaje automático, inteligencia artificial, y más.</p><p>En este artículo, se enlistan 15 cursos gratis de Python para principiantes.</p><!--kg-card-begin: html--><small style="background-color: yellow; color: black; text-aling: center;">** La mayoría de los enlaces son a recursos y video cursos en inglés.**</small><!--kg-card-end: html--><ol><li><a href="#aprende-python-freecodecamp">Aprende Python - Curso completo para principiantes</a> - freeCodeCamp</li><li><a href="#michigan">Programación para todos (empezando con Python)</a> - Universidad de Michigan</li><li><a href="#manual-python">El manual de Python</a> - Flavio Copes</li><li><a href="#cs-dojo">Tutoriales de Python para absolutos principiantes por CS Dojo</a> - CS Dojo</li><li><a href="#python-principiantes">Tutorial de Python (Python para principiantes)</a> - Programando con Mosh</li><li><a href="#studytonight">Cursos de Python de Studytonight</a> - Studytonight</li><li><a href="#traversy">Curso Intensivo de Python para Principiantes</a> - Traversy Media</li><li><a href="#sololearn">El Núcleo de Python</a> - SoloLearn</li><li><a href="#sam">Básicos de Python con Sam </a>- freeCodeCamp</li><li><a href="#pythonspot">Tutoriales de Python para principiantes</a> - Pythonspot</li><li><a href="#pythonforbeginners">Tutorial de Python</a> - PythonForBegginers</li><li><a href="#al-sweigart">Automatiza las cosas aburridas con Python</a> - Al Sweigart</li><li><a href="#edureka">Aprende Python en 12 horas (Tutorial de Python para principiantes)</a> - Edureka</li><li><a href="#nana">Tutorial de Python para principiantes (Aprende Python en 5 horas)</a> - TechWorld con Nana</li><li><a href="#computacion-freecodecamp">Computación Científica con Python</a> - freeCodeCamp</li></ol><!--kg-card-begin: html--><h2 id="aprende-python-freecodecamp">Aprende Python: Curso completo para principiantes</h2><!--kg-card-end: html--><p>En este <a href="https://www.youtube.com/watch?v=rfscVS0vtbw&amp;ab_channel=freeCodeCamp.org">curso en Youtube de freeCodeCamp</a>, aprenderás los básicos de programación, como las listas, condicionales, cadenas, tuplas, funciones, clases y más.</p><p>También construirás varios proyectos pequeños, como una calculadora básica, un juego de mad libs, una aplicación de traducción, y un juego de adivinanzas. </p><!--kg-card-begin: html--><h2 id="michigan">Programación para todos (empezando con Python)</h2><!--kg-card-end: html--><p>En este <a href="https://www.freecodecamp.org/news/python-for-everybody/">curso de la Universidad de Michigan</a>, aprenderás acerca de funciones, bucles, condicionales, variables y más de la mano del famoso "Dr. Chuck".</p><p>Una vez que aprendas los básicos, puedes continuar con el resto de la <a href="https://www.coursera.org/specializations/python">especialización</a> y tomar el curso de <a href="https://www.coursera.org/learn/python-data?specialization=python">Estructura de Datos en Python</a>, el curso de <a href="https://www.coursera.org/learn/python-network-data?specialization=python">Usando Python para Acceder a Datos Web</a>, y el curso de <a href="https://www.coursera.org/learn/python-databases?specialization=python">Usando Bases de Datos con Python</a>.</p><!--kg-card-begin: html--><h2 id="manual-python">El manual de Python</h2><!--kg-card-end: html--><p>En este <a href="https://www.freecodecamp.org/espanol/news/el-manual-de-python/">libro de Flavio Copes</a> (en español), aprenderás acerca de cadenas, listas, tuplas, recursión y más.</p><p>También aprenderás cómo instalar paquetes de terceros y cómo trabajar con entornos virtuales. </p><!--kg-card-begin: html--><h2 id="cs-dojo">Tutoriales de Python para absolutos principiantes por CS Dojo</h2><!--kg-card-end: html--><p>En esta serie de <a href="https://www.youtube.com/playlist?list=PLBZBJbE_rGRWeh5mIBhD-hhDwSEDxogDg">videos en Youtube de Python para Principiantes por CS Dojo</a>, aprenderás sobre diccionarios, bucles, funciones, objetos y más. </p><p>También aprenderás <a href="https://www.youtube.com/watch?v=W0wWwglE1Vc&amp;list=PLBZBJbE_rGRWeh5mIBhD-hhDwSEDxogDg&amp;index=15">cómo construir un bot de Twitter usando Python</a>.</p><!--kg-card-begin: html--><h2 id="python-principiantes">Tutorial de Python - Python para principiantes</h2><!--kg-card-end: html--><p>En este <a href="https://www.youtube.com/watch?v=_uQrJ0TkZlc">curso en YouTube de Programando con Mosh</a>, aprenderás los básicos de programación, como variables, bucles, cadenas, tuplas, funciones, clases y más. </p><p>Además, construirás tres proyectos: uno sobre automatización, otro sobre aprendizaje automático, y el último sobre crear un sitio web con Django.</p><p>Como práctica adicional, puedes tomar los <a href="https://programmingwithmosh.com/python/python-exercises-and-questions-for-beginners/">53 Ejercicios de Python para Principiantes de Mosh</a>.</p><!--kg-card-begin: html--><h2 id="studytonight">Cursos de Python de Studytonight</h2><!--kg-card-end: html--><p>En <a href="https://www.studytonight.com/python/">Studytonight</a>, aprenderás los básicos de Python, manejo de errores, POO, manejo de archivos, tipo de datos complejos, lectura múltiple y más.</p><p>Una vez hayas aprendido los básicos, puedes dirigirte a sus otros módulos, que incluyen la <a href="https://www.studytonight.com/numpy">libreria NumPy</a>, <a href="https://www.studytonight.com/matplotlib">Matplotlib</a>, <a href="https://www.studytonight.com/tkinter">Tkinter</a>, <a href="https://www.studytonight.com/network-programming-in-python/">Programación de Redes en Python</a>, y <a href="https://www.studytonight.com/python/web-scraping/">Web Scraping usando Beautiful Soup</a>. </p><!--kg-card-begin: html--><h2 id="traversy">Curso intensivo de Python para principiantes</h2><!--kg-card-end: html--><p>En este <a href="https://www.youtube.com/watch?v=JJmcL1N2KQs">curso de Youtube de Brad Traversy</a>, aprenderás acerca de listas, tuplas, diccionarios, funciones, clases y más. Brad también te mostrará cómo trabajar con archivos y datos JSON.</p><!--kg-card-begin: html--><h2 id="sololearn">El núcleo de Python</h2><!--kg-card-end: html--><p>En el <a href="https://www.sololearn.com/learning/1073">Curso de Python de SoloLearn</a>, aprenderás acerca de cadenas, variables, POO, programación funcional y más. Hay un montón de cuestionarios, retos, y proyectos que puedes construir durante tu travesía ahí.</p><p>Para poder empezar, necesitarás crear una cuenta gratuita.</p><!--kg-card-begin: html--><h2 id="sam">Básicos de Python con Sam</h2><!--kg-card-end: html--><p>En esta s<a href="https://www.youtube.com/playlist?list=PLWKjhJtqVAbkmRvnFmOd4KhDdlK1oIq23">erie de videos en YouTube de Sam Focht</a>, aprenderás acerca de bucles, funciones, cadenas, recursión y más.</p><p>También construirás varios proyectos, incluyendo un juego de adivinanzas, una lista de compras, un juego de mesa, y un generador aleatorio de contraseñas. </p><!--kg-card-begin: html--><h2 id="pythonspot">Tutoriales de Python para principiantes</h2><!--kg-card-end: html--><p>En esta <a href="https://pythonspot.com/beginner/">serie de tutoriales para principiantes de Pythonspot</a>, aprenderás acerca de los tipos de datos, tuplas, objetos, clases, diccionarios, y más. También aprenderás sobre conceptos avanzados, como recursión, lambda, e hilos.</p><p>Una vez que cubras los básicos, te puedes mover hacia <a href="https://pythonspot.com/machine-learning/">machine learning</a>, <a href="https://pythonspot.com/python-database/">bases de datos</a>, y <a href="https://pythonspot.com/gui/">GUI's</a>.</p><!--kg-card-begin: html--><h2 id="pythonforbeginners">Tutorial de Python</h2><!--kg-card-end: html--><p>En este <a href="https://www.pythonforbeginners.com/python-tutorial">tutorial de PythonForBeginners</a>, conocerás sobre funciones, bucles, listas, condicionales, manejo de errores, y más.</p><p>Una vez que aprendas los básicos, puedes explorar los otros módulos en el sitio, incluyendo <a href="https://www.pythonforbeginners.com/python-on-the-web/web-scraping-with-beautifulsoup">Web Scraping con BeautifulSoup</a> y <a href="https://www.pythonforbeginners.com/api/using-the-youtube-api">Usando la API de Youtube en Python</a>.</p><!--kg-card-begin: html--><h2 id="al-sweigart">Automatiza las cosas aburridas con Python</h2><!--kg-card-end: html--><p>En el <a href="https://automatetheboringstuff.com/">libro en línea Automatiza las Cosas Aburridas con Python</a>, aprenderás acerca de diccionarios, cadenas, depuración, expresiones regulares, y más. </p><p>Si lo que prefieres es un formato de video, entonces puedes pasar a las <a href="https://www.youtube.com/watch?v=1F_OgqRuSdI&amp;list=PL0-84-yl1fUnRuXGFe_F7qSH1LEnn9LkW">series de Youtube</a> que Al Sweigart creó.</p><!--kg-card-begin: html--><h2 id="edureka">Aprende Python en 12 horas (Tutorial de Python para principiantes)</h2><!--kg-card-end: html--><p>En este <a href="https://www.youtube.com/watch?v=WGJJIrtnfpk">curso en Youtube de 12 horas de Edureka</a>, aprenderás acerca de funciones, bucles, listas, condicionales, manejo de errores y más. </p><p>Este curso también hablará acerca de oportunidades profesionales en Python y expectativas salariales para desarrolladores en dicho lenguaje. </p><!--kg-card-begin: html--><h2 id="nana">Tutorial de Python para Principiantes (Aprende Python en 5 Horas)</h2><!--kg-card-end: html--><p>En este <a href="https://www.youtube.com/watch?v=t8pPdKYpowI">curso en Youtube de TechWorld con Nana</a>, aprenderás acerca de cadenas, variables, POO, programación funcional y más. También construirás un par de proyectos, incluyendo una app de cuenta regresiva y un proyecto enfocado en peticiones API a Gitlab.</p><!--kg-card-begin: html--><h2 id="computacion-freecodecamp">Computación científica con Python</h2><!--kg-card-end: html--><p>En este <a href="https://www.freecodecamp.org/learn/scientific-computing-with-python/">curso de certificación de freeCodeCamp</a>, aprenderás acerca de bucles, listas, diccionarios, redes, servicios web y más.</p><p>También tendrás la oportunidad de construir cinco proyectos: un <a href="https://www.freecodecamp.org/learn/scientific-computing-with-python/scientific-computing-with-python-projects/arithmetic-formatter">Formateador Aritmético</a>, <a href="https://www.freecodecamp.org/learn/scientific-computing-with-python/scientific-computing-with-python-projects/time-calculator">Calculadora de Tiempo</a>, <a href="https://www.freecodecamp.org/learn/scientific-computing-with-python/scientific-computing-with-python-projects/budget-app">App de Presupuesto</a>, <a href="https://www.freecodecamp.org/learn/scientific-computing-with-python/scientific-computing-with-python-projects/polygon-area-calculator">Calculadora de Área de Polígonos</a>, y <a href="https://www.freecodecamp.org/learn/scientific-computing-with-python/scientific-computing-with-python-projects/probability-calculator">Calculadora de Probabilidades</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo implementar una lista enlazada en JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por Sarah Chima Atuonwu [https://www.freecodecamp.org/news/author/sarah/] Artículo original How to Implement a Linked List in JavaScript [https://www.freecodecamp.org/news/implementing-a-linked-list-in-javascript/] Traducido y adaptado por Gibrán Pelayo [/espanol/news/author/gibranpm/] Si estás aprendiendo estructura de datos, la lista enlazada es una estructura de datos que deberías conocer. Si no la entiendes del todo o ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-implementar-una-lista-vinculada-en-javascript/</link>
                <guid isPermaLink="false">621d456f5e4d0b08bcc776fc</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Sun, 13 Mar 2022 02:39:07 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/02/5f9c9a86740569d1a4ca2622.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong>Artículo original escrito por</strong></strong> <a href="https://www.freecodecamp.org/news/author/sarah/">Sarah Chima Atuonwu</a><br><strong><strong>Artículo original</strong></strong> <a href="https://www.freecodecamp.org/news/implementing-a-linked-list-in-javascript/">How to Implement a Linked List in JavaScript</a><br><strong><strong>Traducido y adaptado por</strong></strong> <a href="https://www.freecodecamp.org/espanol/news/author/gibranpm/">Gibrán Pelayo</a></p><p>Si estás aprendiendo estructura de datos, la lista enlazada es una estructura de datos que deberías conocer. Si no la entiendes del todo o no sabes cómo se implementa en JavaScript, este artículo está aquí para ayudarte.</p><p>Aquí hablaremos sobre lo que es una lista enlazada, en qué es diferente de un arreglo, y cómo se implementa en JavaScript. Empecemos. </p><h2 id="-qu-es-una-lista-enlazada">¿Qué es una lista enlazada?</h2><p>Una lista enlazada es una estructura de datos lineal similar a un arreglo. Sin embargo, a diferencia de los arreglos, los elementos no son almacenados en una ubicación de la memoria o índice en particular. Más bien, cada elemento es un objeto separado que contiene un puntero/apuntador o enlace al siguiente objeto en esa lista.</p><p>Cada elemento (comúnmente llamados nodos) contiene otros dos: el dato almacenado y un enlace al siguiente nodo. El dato puede ser de cualquier tipo válido. Puedes ver esto ilustrado en el diagrama de abajo. </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/03/Group_14_5_bvpwu0.png" class="kg-image" alt="Image of a linked list" width="442" height="99" loading="lazy"></figure><p>El punto de entrada a una lista enlazada es llamado la cabecera. La cabecera es una referencia al primer nodo en la lista enlazada. El último nodo en la lista apunta a nulo. Si una lista está vacía, la cabecera es una referencia nula. </p><p>En JavaScript, una lista enlazada se ve así:</p><pre><code class="language-js">const lista = {
    cabecera: {
        valor: 6
        siguiente: {
            valor: 10                                             
            siguiente: {
                valor: 12
                siguiente: {
                    valor: 3
                    siguiente: null	
                    }
                }
            }
        }
    }
};</code></pre><h2 id="una-ventaja-de-las-listas-enlazadas"><strong>Una ventaja de las listas enlazadas</strong></h2><ul><li>Los nodos pueden ser fácilmente removidos o agregados a una lista enlazada sin tener que reorganizar la estructura de datos entera. Esta es una ventaja que tiene sobre los arreglos. </li></ul><h2 id="desventajas-de-las-listas-enlazadas"><strong>Desventajas de las listas enlazadas</strong></h2><ul><li>Las operaciones de búsqueda son lentas en las listas enlazadas. A diferencia de los arreglos, el acceso aleatorio a elementos de datos no está permitido. Se accede a los nodos de manera secuencial empezando desde el primer nodo. &nbsp;</li><li>El uso de memoria es mayor que en los arreglos debido al almacenamiento de los punteros/apuntadores.</li></ul><h2 id="tipos-de-listas-enlazadas"><strong>Tipos de listas enlazadas</strong></h2><p>Hay tres tipos de listas enlazadas:</p><ul><li><strong>Listas enlazadas individuales</strong>: Cada nodo contiene solo un puntero/apuntador al siguiente nodo. Esto es de lo que hemos estado hablando hasta ahora.</li><li><strong>Listas doblemente enlazadas</strong>: Cada nodo contiene dos punteros/apuntadores; un puntero/apuntador al siguiente nodo, y otro al nodo anterior. </li><li><strong>Listas circulares enlazadas</strong>: Son una variación de la lista enlazada en donde el último nodo apunta al primer nodo o a otro nodo antes de ese, formando así un bucle.</li></ul><h2 id="implementaci-n-de-un-nodo-de-lista-en-javascript"><strong>Implementación de un nodo de lista en JavaScript</strong></h2><p>Como se mencionó antes, un nodo de lista contiene dos elementos, el dato y el puntero/apuntador al siguiente nodo. Podemos implementar un nodo de lista en JavaScript de la siguiente manera: </p><pre><code class="language-js">class NodoLista {
    constructor(dato) {
        this.dato = dato
        this.siguiente = null                
    }
}</code></pre><h2 id="implementaci-n-de-una-lista-enlazada-en-javascript"><strong>Implementación de una lista enlazada en JavaScript</strong></h2><p>El código de abajo muestra la implementación de una clase de lista enlazada con un constructor. Nota que si el nodo de cabecera no es pasado, la cabecera se inicializa a nulo. </p><pre><code class="language-js">class ListaEnlazada {
    constructor(cabecera = null) {
        this.cabecera = cabecera
    }
}</code></pre><h2 id="poni-ndolo-todo-junto"><strong>Poniéndolo todo junto</strong></h2><p>Vamos a crear una lista enlazada con la clase que hemos creado. Primero, creamos dos nodos de lista, <code>nodo1</code> y <code>nodo2</code> y un puntero/apuntador del nodo 1 al nodo 2.</p><pre><code class="language-js">let nodo1 = new NodoLista(2)
let nodo2 = new NodoLista(5)
nodo1.siguiente = nodo2</code></pre><p>A continuación crearemos una Lista Enlazada con el <code>nodo1</code>.</p><pre><code class="language-js">let lista = new ListaEnlazada(nodo1)</code></pre><p>Intentemos acceder a los nodos de la lista que hemos creado. </p><pre><code class="language-js">console.log(lista.cabecera.siguiente.dato) //devuelve 5</code></pre><h2 id="algunas-funciones-de-listaenlazada"><strong>Algunas funciones de listaEnlazada</strong></h2><p>A continuación, implementaremos cuatro funciones de ayuda para la lista enlazada, los cuales son: </p><ol><li>magnitud()</li><li>vaciar()</li><li>obtenerUltimo()</li><li>obtenerPrimero()</li></ol><h3 id="1-magnitud-"><strong>1. </strong>magnitud<strong>()</strong></h3><p>Esta función devuelve el número de nodos presentes en la lista enlazada. </p><pre><code class="language-js">magnitud() {
    let contador = 0; 
    let nodo = this.cabecera;
    while (nodo) {
        contador++;
        nodo = nodo.siguiente
    }
    return contador;
}
</code></pre><h3 id="2-vaciar-"><strong>2. </strong>vaciar<strong>()</strong></h3><p>Esta función vacía la lista. </p><pre><code class="language-js">vaciar() {
    this.cabecera = null;
}</code></pre><h3 id="3-obtenerultimo-"><strong>3. </strong>obtenerUltimo<strong>()</strong></h3><p>Esta función devuelve el último nodo de la lista enlazada.</p><pre><code class="language-js">obtenerUltimo() {
    let ultimoNodo = this.cabecera;
    if (ultimoNodo) {
        while (ultimoNodo.siguiente) {
            ultimoNodo = ultimoNodo.siguiente
        }
    }
    return ultimoNodo;
}</code></pre><h3 id="4-obtenerprimero-"><strong>4. </strong>obtenerPrimero<strong>()</strong></h3><p>Esta función devuelve el primer nodo de la lista enlazada.</p><pre><code class="language-js">obtenerPrimero() {
    return this.cabecera;
}</code></pre><h2 id="resumen"><strong>Resumen</strong></h2><p>En ese artículo, discutimos qué es una lista enlazada y cómo se puede implementar en JavaScript. También discutimos los diferentes tipos de listas enlazadas, así como sus ventajas y desventajas en general.</p><p>Espero que hayas disfrutado esta lectura.</p><p><em>¿Quieres ser notificado cuando publique un nuevo artículo? <a href="https://mailchi.mp/69ea601a3f64/join-sarahs-mailing-list">Da clic aquí</a>. </em></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo centrar una imagen vertical y horizontalmente con CSS ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por Cem Eygi [https://www.freecodecamp.org/news/author/cemeygi/] Artículo original How to Center an Image Vertically and Horizontally with CSS [https://www.freecodecamp.org/news/how-to-center-an-image-in-css/] Traducido y adaptado por Gibrán Pelayo [/espanol/news/author/gibranpm/] Muchos desarrolladores luchan mientras trabajan con imágenes. El manejo del diseño responsivo y la alineación es particularmente difícil, especialmente al centrar una imagen ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-centrar-una-imagen-vertical-y-horizontalmente-con-css/</link>
                <guid isPermaLink="false">62194a205e4d0b08bcc771e0</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Sat, 05 Mar 2022 02:42:07 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/02/5f9c9a4c740569d1a4ca24c2.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong>Artículo original escrito por</strong></strong> <a href="https://www.freecodecamp.org/news/author/cemeygi/">Cem Eygi</a><br><strong><strong>Artículo original</strong></strong> <a href="https://www.freecodecamp.org/news/how-to-center-an-image-in-css/">How to Center an Image Vertically and Horizontally with CSS</a><br><strong><strong>Traducido y adaptado por</strong></strong> <a href="https://www.freecodecamp.org/espanol/news/author/gibranpm/">Gibrán Pelayo</a></p><p>Muchos desarrolladores luchan mientras trabajan con imágenes. El manejo del diseño responsivo y la alineación es particularmente difícil, especialmente al centrar una imagen en el medio de una página.</p><p>Así que en esta publicación, estaré mostrando algunas de las formas más comunes de centrar una imagen tanto vertical como horizontalmente empleando diferentes propiedades de CSS. </p><p>Ya he repasado las propiedades <code>position</code> y <code>display</code> de CSS en mi publicación anterior. Si no estás familiarizado con esas propiedades, te recomiendo que revises esas publicaciones antes de leer este artículo. </p><h2 id="centrar-una-imagen-horizontalmente"><strong>Centrar una imagen horizontalmente </strong></h2><p>Empecemos con centrar una imagen de manera horizontal utilizando 3 diferentes propiedades de CSS.</p><h3 id="text-align"><strong>Text-align</strong></h3><p>La primera forma es con la propiedad <code>text-align</code> . Sin embargo, este método solo funciona si la imagen está dentro de un contenedor a nivel de bloque como <code>&lt;div&gt;</code>:</p><pre><code class="language-html">&lt;style&gt;
  div {
    text-align: center;
  }
&lt;/style&gt;

&lt;div&gt;
  &lt;img src="tu-imagen.jpg"&gt;
&lt;/div&gt;</code></pre><h3 id="margin-auto"><strong>Margin: Auto</strong></h3><p>Otra forma de centrar una imagen es usando la propiedad <code>margin: auto</code> (para los márgenes izquierdo y derecho).</p><p>No obstante, usar únicamente <code>margin: auto</code> no funcionará para las imágenes. Si necesitas usar <code>margin: auto</code>, hay dos propiedades adicionales que también debes usar.</p><p>La propiedad <code>margin-auto</code> no tiene efecto alguno en elementos a nivel de línea. Partiendo de que la etiqueta <code>&lt;img&gt;</code> es un elemento en línea, necesitamos convertirla primero a un elemento a nivel de bloque: </p><pre><code class="language-css">img {
  margin: auto;
  display: block;
}</code></pre><p>Segundo, también necesitamos definir una anchura. Para que los márgenes izquierdo y derecho puedan tomar el resto del espacio vacío y se alineen &nbsp;automáticamente, lo que hace la magia (a menos de que le demos una anchura de 100%):</p><pre><code class="language-css">img {
  width: 60%;
  margin: auto;
  display: block;
}</code></pre><h3 id="display-flex"><strong>Display: flex</strong></h3><p>La tercera forma de centrar una imagen horizontalmente es usando <code>display: flex</code>. Justo como usamos la propiedad <code>text-align</code> para un contenedor, usamos <code>display: flex</code> también para un contenedor.</p><p>Sin embargo, usar únicamente <code>display: flex</code> no es suficiente. El contenedor debe tener también una propiedad adicional llamada <code>justify-content</code>:</p><pre><code class="language-css">div {
  display: flex;
  justify-content: center;
}

img {
  width: 60%;
}</code></pre><p>La propiedad <code>justify-content</code> trabaja en conjunto con <code>display: flex</code>, que la &nbsp;podemos usar para centrar una imagen horizontalmente.</p><p>Finalmente, la anchura de la imagen debe ser más pequeña que la anchura del contenedor, de lo contrario, toma el 100% del espacio y no podremos centrarla.</p><p><strong>Importante:</strong> La propiedad <code>display: flex</code> no está soportada en las versiones antiguas de los navegadores.</p><h2 id="centrar-una-imagen-verticalmente"><strong>Centrar una imagen verticalmente </strong></h2><h3 id="display-flex-1"><strong>Display: flex</strong></h3><p>Para alineamiento vertical, el usar <code>display: flex</code> es otra vez realmente útil. </p><p>Considera un caso donde nuestro contenedor tiene una altura de 800px, pero la altura de la imagen es de tan solo 500px:</p><pre><code class="language-css">div {
  display: flex;
  justify-content: center;
  height: 800px;
}

img {
  width: 60%;
  height: 500px;
}</code></pre><p>Ahora, en este caso, agregar una simple línea de código al contenedor, <code>align-items: center</code>, hace la magia:</p><pre><code class="language-css">div {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 800px;
}</code></pre><p>La propiedad <code>align-items</code> puede posicionar verticalmente los elementos si se usa en conjunto con <code>display: flex</code>.</p><h3 id="position-propiedades-absolute-y-transform"><strong>Position: propiedades absolute y transform</strong></h3><p>Otro método para la alineación vertical es usar juntas las propiedades <code>position</code> y <code>transform</code> . Esto es algo un poco complicado, así que vamos a hacerlo paso a paso. </p><h3 id="paso-1-definir-posici-n-absoluta"><strong>Paso 1: definir posición absoluta</strong></h3><p>Primero, necesitamos cambiar el comportamiento de posicionamiento de la imagen de <code>static</code> a <code>absolute</code>:</p><pre><code class="language-css">div {
  height: 800px;
  position: relative;
  background: red;
}

img {
  width: 80%;
  position: absolute;
}</code></pre><p>Además, debe estar dentro de un contenedor posicionado relativamente, así que agregamos <code>position: relative</code> a su contenedor div.</p><h3 id="paso-2-definir-las-propiedades-top-y-left"><strong>Paso 2: definir las propiedades top y left</strong></h3><p>Segundo, definimos las propiedades <code>top</code> y <code>left</code> para la imagen, y las establecemos a 50%. Esto moverá el punto inicial (arriba-izquierda) de la imagen al centro del contenedor:</p><pre><code class="language-css">img {
  width: 80%;
  position: absolute;
  top: 50%;
  left: 50%;
}</code></pre><h3 id="paso-3-definir-la-propiedad-transform"><strong>Paso 3: definir la propiedad transform</strong></h3><p>Pero el paso dos ha movido la imagen parcialmente fuera de su contenedor. Así que necesitamos traerla de regreso adentro. </p><p>Definir una propiedad <code>transform</code> y agregar -50% a sus ejes X e Y hace la magia:</p><pre><code class="language-css">img {
  width: 80%;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}</code></pre><p>Hay otras maneras de centrar objetos horizontal y verticalmente, pero he explicado las más comunes. Espero que esta publicación te haya ayudado a entender cómo alinear imágenes en el centro de la página.</p><p><strong>Si quieres aprender más acerca de Desarrollo Web, date una vuelta a <a href="https://www.youtube.com/channel/UC1EgYPCvKCXFn8HlpoJwY3Q?view_as=subscriber">mi canal de Youtube</a>.</strong></p><p>¡Gracias por leerme!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Hoja de trucos de subred: Máscara de Subred 24, 30, 26, 27, 29, y otras referencias de red CIDR de dirección IP ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por Kris Koishigawa [https://www.freecodecamp.org/news/author/kris/] Artículo original Subnet Cheat Sheet – 24 Subnet Mask, 30, 26, 27, 29, and other IP Address CIDR Network References [https://www.freecodecamp.org/news/subnet-cheat-sheet-24-subnet-mask-30-26-27-29-and-other-ip-address-cidr-network-references/] Traducido y adaptado por Gibrán Pelayo Como desarrollador o ingeniero de redes, es posible que necesites buscar de vez en cuando los ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/hoja-de-trucos-de-subred-mascara-de-subred-24-30-26-27-29-y-otras-referencias-de-red-cidr-de-direccion-ip/</link>
                <guid isPermaLink="false">620d1f58ac7bdf0914b1ef38</guid>
                
                    <category>
                        <![CDATA[ ingenieria de redes ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gibran Pelayo M. ]]>
                </dc:creator>
                <pubDate>Mon, 28 Feb 2022 03:14:12 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/02/5f9c9647740569d1a4ca10a9.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong>Artículo original escrito por</strong></strong> <a href="https://www.freecodecamp.org/news/author/kris/">Kris Koishigawa</a><br><strong><strong>Artículo original</strong></strong> <a href="https://www.freecodecamp.org/news/subnet-cheat-sheet-24-subnet-mask-30-26-27-29-and-other-ip-address-cidr-network-references/">Subnet Cheat Sheet – 24 Subnet Mask, 30, 26, 27, 29, and other IP Address CIDR Network References</a><br><strong><strong>Traducido y adaptado por</strong></strong> Gibrán Pelayo</p><p>Como desarrollador o ingeniero de redes, es posible que necesites buscar de vez en cuando los valores de las máscaras de subred y averiguar qué significan. </p><p>Para hacerte la vida más fácil, la comunidad de freeCodeCamp ha creado esta sencilla hoja de trucos. Solo desplaza o usa Ctrl/Cmd + f para encontrar el valor que estás buscando. </p><p>Aquí están las tablas, seguidas de algunas explicaciones de lo que significan. </p><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);">CIDR</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);">MÁSCARA DE SUBRED</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);">MÁSCARA COMODÍN</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);"># OF DIRECCIONES IP</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);"># DE DIRECCIONES IP UTILIZABLES</th></tr></thead><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/32</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">1</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">1</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/31</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.255.254</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.0.1</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">2</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">2*</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/30</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.255.252</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.0.3</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">4</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">2</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/29</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.255.248</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.0.7</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">8</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">6</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/28</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.255.240</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.0.15</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">16</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">14</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/27</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.255.224</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.0.31</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">32</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">30</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/26</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.255.192</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.0.63</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">64</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">62</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/25</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.255.128</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.0.127</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">128</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">126</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/24</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.255.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.0.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">256</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">254</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/23</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.254.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.1.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">512</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">510</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/22</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.252.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.3.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">1,024</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">1,022</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/21</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.248.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.7.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">2,048</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">2,046</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/20</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.240.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.15.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">4,096</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">4,094</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/19</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.224.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.31.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">8,192</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">8,190</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/18</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.192.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.63.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">16,384</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">16,382</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/17</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.128.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.127.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">32,768</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">32,766</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/16</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">65,536</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">65,534</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/15</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.254.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.1.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">131,072</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">131,070</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/14</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.252.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.3.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">262,144</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">262,142</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/13</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.248.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.7.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">524,288</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">524,286</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/12</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.240.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.15.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">1,048,576</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">1,048,574</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/11</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.224.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.31.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">2,097,152</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">2,097,150</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/10</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.192.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.63.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">4,194,304</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">4,194,302</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/9</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.128.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.127.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">8,388,608</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">8,388,606</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/8</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.0.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.255.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">16,777,216</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">16,777,214</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/7</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">254.0.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">1.255.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">33,554,432</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">33,554,430</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/6</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">252.0.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">3.255.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">67,108,864</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">67,108,862</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/5</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">248.0.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">7.255.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">134,217,728</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">134,217,726</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/4</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">240.0.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">15.255.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">268,435,456</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">268,435,454</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/3</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">224.0.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">31.255.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">536,870,912</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">536,870,910</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/2</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">192.0.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">63.255.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">1,073,741,824</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">1,073,741,822</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/1</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">128.0.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">127.255.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">2,147,483,648</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">2,147,483,646</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">/0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0.0.0.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255.255.255.255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">4,294,967,296</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">4,294,967,294</td></tr></tbody></table><!--kg-card-end: html--><p>* /31 es un caso especial detallado en la RFC 3021 donde las redes con este tipo de máscara de subred pueden asignar dos direcciones IP como un enlace punto-a-punto. </p><p>Y aquí está la tabla de las conversiones decimal a binario para las máscaras de subred y los octetos comodín:</p><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);"></th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);">MÁSCARA DE SUBRED</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);"></th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);">COMODÍN</th></tr></thead><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">00000000</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">11111111</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">128</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">10000000</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">127</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">01111111</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">192</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">11000000</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">63</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">00111111</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">224</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">11100000</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">31</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">00011111</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">240</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">11110000</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">15</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">00001111</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">248</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">11111000</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">7</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">00000111</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">252</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">11111100</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">3</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">00000011</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">254</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">11111110</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">1</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">00000001</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">255</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">11111111</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">00000000</td></tr></tbody></table><!--kg-card-end: html--><p>Toma en cuenta que el comodín es solo el inverso de la máscara de subred. </p><p>Finalmente, esta hoja de trucos y el resto del artículo está enfocado en direcciones IPv4, y no en el más reciente protocolo IPv6. Si quieres aprender más acerca de IPv6, consulta el artículo anterior sobre redes de computadoras.</p><h2 id="-c-mo-funcionan-los-bloques-de-direcci-n-ip"><strong>¿Cómo funcionan los bloques de dirección IP?</strong></h2><p>Las direcciones IPv4 como <code>192.168.0.1</code> son realmente solo representaciones decimales de cuatro bloques binarios.</p><p>Cada bloque consta de 8 bits, y representa números del rango 0-255. Debido a que los bloques son grupos de 8 bits, cada bloque es conocido como un <strong>octeto</strong>. Y como hay cuatro bloques de 8 bits, cada dirección IPv4 es de 32 bits. </p><p>Por ejemplo, así es como luce la dirección IP <code>172.16.254.1</code> en binario:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/02/ipv4-address.png" class="kg-image" alt="1125px-Ipv4_address" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/02/ipv4-address.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2022/02/ipv4-address.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2022/02/ipv4-address.png 1122w" sizes="(min-width: 720px) 720px" width="1122" height="674" loading="lazy"><figcaption>Source: <a href="https://en.wikipedia.org/wiki/IPv4" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">IPv4</a></figcaption></figure><p>Para convertir una dirección IP entre sus formas decimal y binaria, puedes usar esta tabla: </p><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">128</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">64</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">32</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">16</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">8</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">4</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">2</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">1</th></tr></thead><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">x</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">x</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">x</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">x</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">x</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">x</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">x</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">x</td></tr></tbody></table><!--kg-card-end: html--><p>La tabla de arriba representa un octeto (8 bits). </p><p>Ahora digamos que quieres convertir la dirección IP <code>168.210.225.206</code>. Todo lo que necesitas es separar la dirección en cuatro bloques (<code>168</code>, <code>210</code>, <code>225</code>, y <code>206</code>), y convertir cada uno a binario usando la tabla de arriba.</p><p>Recuerda que en binario, 1 es el equivalente a "encendido" y 0 es "apagado". Así que para convertir el primer bloque, <code>168</code>, a binario, solo comienza al inicio de la tabla y coloca un 1 o 0 en esa celda hasta que obtengas una suma de <code>168</code>.</p><p>Por ejemplo:</p><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">128</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">64</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">32</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">16</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">8</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">4</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">2</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">1</th></tr></thead><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">1</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">1</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">1</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">0</td></tr></tbody></table><!--kg-card-end: html--><p>128 + 32 + 8 = 168, que en binario es <code>10101000</code>.</p><p>Si haces esto para el resto de los bloques, obtendrás <code>10101000.11010010.11100001.11001110</code>.</p><h2 id="-qu-es-la-divisi-n-en-subredes-subnetting-"><strong>¿Qué es la división en Subredes (subnetting)?</strong></h2><p>Si miras la tabla de arriba, pareciera como si el número de direcciones IP fuera prácticamente ilimitado. Después de todo, hay casi 4.2 mil millones de posibles direcciones IPv4 disponibles. </p><p>Pero si piensas en cuánto ha crecido el internet, y cuántos dispositivos más están conectados en estos tiempos, puede que no te sorprendas saber que ya hay una escasez de direcciones IPv4.</p><p>Debido a que la escasez fue reconocida hace años, los desarrolladores idearon una forma de dividir una dirección IP en redes más pequeñas llamadas subredes. &nbsp;</p><p>Este proceso, llamado división en subredes (subnetting), usa la sección host de la dirección IP para descomponerla en esas redes más pequeñas o subredes. </p><p>Generalmente, una dirección IP está compuesta por bits de red y bits de host: </p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/02/network-and-host-bits-1.png" class="kg-image" alt="network-and-host-bits" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/02/network-and-host-bits-1.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/02/network-and-host-bits-1.png 677w" width="677" height="224" loading="lazy"><figcaption>Source: <a href="https://support.huawei.com/enterprise/en/doc/EDOC1100145159" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">What is IPv4</a></figcaption></figure><p>Por lo general, la división en subredes hace dos cosas: nos brinda una manera de dividir las redes en subredes, y permite que los dispositivos determinen si otro dispositivo/dirección IP está en la misma red local o no. </p><p>Una buena manera de pensar en la división de subredes es imaginar tu red doméstica inalámbrica.</p><p>Sin la división en subredes, cada dispositivo conectado a internet necesitaría su propia dirección IP única.</p><p>Pero como tienes un enrutador inalámbrico, tan solo necesitas una dirección IP para tu enrutador. Esta dirección IP externa o pública es usualmente manejada de manera automática, y es asignada por tu proveedor de servicios de internet (ISP, por sus siglas en inglés, Internet Service Provider). </p><p>Luego, cada dispositivo conectado a ese enrutador tiene su propia dirección IP privada o interna:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/02/home-network-diagram.png" class="kg-image" alt="home-network-diagram" srcset="https://www.freecodecamp.org/espanol/news/content/images/2022/02/home-network-diagram.png 600w" width="600" height="351" loading="lazy"><figcaption>Source: <a href="https://www.popularmechanics.com/technology/a32729384/how-to-find-ip-address/" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">What Is My IP Address?</a></figcaption></figure><p>Ahora, si tu dispositivo con la dirección IP interna<code>192.168.1.101</code> quiere comunicarse con otro dispositivo, usará la dirección IP del otro dispositivo y la máscara de subred. </p><p>La combinación de las direcciones IP y la máscara de subred permite que el dispositivo en <code>192.168.1.101</code> averigüe si el otro dispositivo está en la misma red &nbsp;(como el dispositivo en <code>192.168.1.103</code>), o en una red completamente diferente en algún otro lugar en línea. </p><p>Curiosamente, la dirección IP externa asignada a tu enrutador por tu Proveedor de Servicio de Internet (ISP) es probablemente parte de una subred, la cual podría incluir muchas otras direcciones IP para casas o negocios cercanos. Y justo como las direcciones IP internas, también necesita una máscara de subred para funcionar.</p><h3 id="c-mo-funcionan-las-m-scaras-de-subred"><strong>Cómo funcionan las máscaras de subred</strong></h3><p>Las máscaras de subred funcionan como una especie de filtro para una dirección IP. Con una máscara de subred, los dispositivos pueden mirar una dirección IP y determinar cuáles partes son los bits de red y cuáles son los bits de host.</p><p>Luego usando esas cosas, se puede determinar la mejor manera de comunicarse para esos dispositivos. </p><p>Si has estado hurgando en la configuración de red de tu enrutador o computadora, es probable que hayas visto este número:<code>255.255.255.0</code>.</p><p>Si así fue, has visto una máscara de subred muy común para redes domésticas simples.</p><p>Tal como las direcciones IPv4, las máscaras de subred son de 32 bits. Y justo como se convierte una dirección IP a binario, puedes hacer lo mismo con una máscara de subred.</p><p>Por ejemplo, aquí está nuestra tabla de antes: </p><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">128</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">64</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">32</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">16</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">8</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">4</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">2</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">1</th></tr></thead><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">x</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">x</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">x</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">x</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">x</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">x</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">x</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">x</td></tr></tbody></table><!--kg-card-end: html--><p>Ahora convirtamos el primero octeto, 255: </p><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">128</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">64</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">32</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">16</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">8</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">4</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">2</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">1</th></tr></thead><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">1</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">1</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">1</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">1</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">1</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">1</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">1</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">1</td></tr></tbody></table><!--kg-card-end: html--><p>Muy fácil, ¿cierto? Así que cualquier octeto que es <code>255</code> es solo <code>11111111</code> en binario. Esto significa que <code>255.255.255.0</code> es en realidad <code>11111111.11111111.11111111.00000000</code> en binario.</p><p>Ahora veamos la máscara de subred y la dirección IP juntas y calculemos cuáles partes de la dirección IP son los bits de red y los bits de host.</p><p>Aquí están las dos en decimal y binario: </p><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">TIPO</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">DECIMAL</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">BINARIO</th></tr></thead><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">Dirección IP</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">192.168.0.101</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">11000000.10101000.00000000.01100101</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">Máscara de subred</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">255.255.255.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">11111111.11111111.11111111.00000000</td></tr></tbody></table><!--kg-card-end: html--><p>Con las dos dispuestas de esta forma, es fácil separar <code>192.168.0.101</code> en bits de red y bits de host.</p><p>Cada que un bit en una máscara de subred binaria es 1, entonces el mismo bit en una dirección IP binaria pertenece a la red, no al host.</p><p>Como el octeto <code>255</code> es <code>11111111</code> en binario, todo ese octeto en la dirección IP es parte de la red. Así que los primeros tres octetos, <code>192.168.0</code>, son la porción de red de la dirección IP, y <code>101</code> es la porción de host.</p><p>En otras palabras, si el dispositivo en <code>192.168.0.101</code> quiere comunicarse con otro dispositivo, usando la máscara de subred sabe que cualquier cosa con la dirección IP <code>192.168.0.xxx</code> se encuentra en la misma red local.</p><p>Otra manera de expresar esto es con un ID de red, que es solo la porción de red de la dirección IP. Así que el ID de red de la dirección <code>192.168.0.101</code> con la máscara de subred <code>255.255.255.0</code> es <code>192.168.0.0</code>.</p><p>Y es lo mismo para los otros dispositivos en la red local (<code>192.168.0.102</code>, <code>192.168.0.103</code>, y así).</p><h3 id="-qu-significa-cidr-y-qu-es-la-notaci-n-cidr"><strong>¿Qué Significa CIDR y Qué es la Notación CIDR? </strong></h3><p><strong><strong>CIDR</strong></strong> son las siglas en inglés de <strong>C</strong>lassless <strong>I</strong>nter-<strong>D</strong>omain <strong>R</strong>outing, Enrutamiento Entre Dominios Sin Clases, y es usado en IPv4, y más recientemente, en enrutamiento IPv6.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/02/1920px-IP_Address_Match.svg.png" class="kg-image" alt="1920px-IP_Address_Match.svg" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/02/1920px-IP_Address_Match.svg.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2022/02/1920px-IP_Address_Match.svg.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/size/w1600/2022/02/1920px-IP_Address_Match.svg.png 1600w, https://www.freecodecamp.org/espanol/news/content/images/2022/02/1920px-IP_Address_Match.svg.png 1920w" sizes="(min-width: 720px) 720px" width="1920" height="1892" loading="lazy"><figcaption>Source: <a href="https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">Classless Inter-Domain Routing</a></figcaption></figure><p>CIDR fue introducido en 1993 como una manera de ralentizar el uso de direcciones IPv4, las cuales se estaban acabando rápidamente bajo el viejo sistema de direccionamiento IP con clase &nbsp;sobre el que se construyó internet por primera vez. </p><p>CIDR abarca un par de conceptos importantes.</p><p>El primero es el Subenmascaramiento de Longitud Variable (<strong>V</strong>ariable <strong>L</strong>ength <strong>S</strong>ub<strong>M</strong>asking, VLSM, por sus siglas en inglés), que básicamente permitió a los ingenieros de redes crear subredes dentro de subredes. Y esas subredes &nbsp;podían ser de diferentes tamaños, por lo que habrían pocas direcciones IP sin usar.</p><p>El segundo concepto importante que CIDR introdujo fue la notación CIDR.</p><p>La notación CIDR es en realidad solo una abreviatura de la máscara de subred , y representa el número de bits disponibles para la dirección IP. Por ejemplo, el <code>/24</code> en <code>192.168.0.101/24</code> es equivalente a la dirección IP <code>192.168.0.101</code> y la máscara de subred <code>255.255.255.0</code>.</p><h3 id="c-mo-calcular-la-notaci-n-cidr"><strong>Cómo Calcular la Notación CIDR </strong></h3><p>Para determinar la notación CIDR para una máscara de subred dada, todo lo que necesitas es convertir la máscara de subred a binario, y luego contar los unos o dígitos en "encendido". Por ejemplo: </p><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">TIPO</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">DECIMAL</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">BINARIO</th></tr></thead><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">Máscara de subred</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">255.255.255.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">11111111.11111111.11111111.00000000</td></tr></tbody></table><!--kg-card-end: html--><p>Debido a que hay tres octetos de unos, hay 24 bits en "encendido", lo que significa que la notación CIDR es <code>/24</code>.</p><p>Puedes escribirlo de cualquier manera, pero estarás de acuerdo &nbsp;que <code>/24</code> es mucho más fácil de escribir que <code>255.255.255.0</code>.</p><p>Esto generalmente se hace con una dirección IP, así que demos un vistazo a la misma máscara de subred con una dirección IP:</p><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">TIPO</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">DECIMAL</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">BINARIO</th></tr></thead><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">Dirección IP</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">192.168.0.101</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">11000000.10101000.00000000.01100101</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">Máscara de subred</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">255.255.255.0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">11111111.11111111.11111111.00000000</td></tr></tbody></table><!--kg-card-end: html--><p>Los primeros tres octetos de la máscara de subred son todos bits de "encendido", lo que significa que los mismos tres octetos en la dirección IP son todos bits de red.</p><p>Echemos un vistazo al último cuarto octeto con más detalle: </p><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">TIPO</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">DECIMAL</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">BINARIO</th></tr></thead><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">Dirección IP</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">101</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">01100101</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">Máscara de subred</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; text-align: center;">0</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">00000000</td></tr></tbody></table><!--kg-card-end: html--><p>En este caso, debido a que todos los bits para este octeto en la máscara de subred están en "apagado", podemos estar seguros de que todos los bits correspondientes a este octeto en la dirección IP son parte del host.</p><p>Cuando escribes en notación CIDR es común hacerlo con la ID de red. Por lo que la notación CIDR para la dirección IP <code>192.168.0.101</code> con una máscara de subred <code>255.255.255.0</code> es <code>192.168.0.0/24</code>.</p><h2 id="direccionamiento-ip-con-clase"><strong>Direccionamiento IP Con Clase</strong></h2><p>Ahora que ya hemos repasado algunos ejemplos básicos de división en subredes y CIDR, veamos lo que es conocido como direccionamiento IP con clase.</p><p>Antes de que la división en subredes fuera desarrollada, todas las direcciones IP caían dentro de una clase en particular:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/02/subnetting.png" class="kg-image" alt="Fuente: Subnetting for dummies" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/02/subnetting.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/02/subnetting.png 975w" sizes="(min-width: 720px) 720px" width="975" height="453" loading="lazy"><figcaption>Source: <a href="https://community.spiceworks.com/networking/articles/2489-subnetting-for-dummies" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">Subnetting for dummies</a></figcaption></figure><p>Toma en cuenta que hay direcciones IP de clase D y E, pero entraremos a detalle en eso más adelante.</p><p>Las direcciones IP con clase dieron a los ingenieros de redes una manera de proveer un rango de direcciones IP válidas a diferentes organizaciones. </p><p>Hubo muchos problemas con este enfoque que eventualmente llevó a la división en subredes. Pero antes de llegar ahí, veamos de manera más cercana a las diferentes clases.</p><h3 id="direcciones-ip-de-clase-a"><strong>Direcciones IP de Clase A</strong></h3><p>Para las direcciones IP de Clase A, el primer octeto (8 bits / 1 byte) representa el ID de red, y los tres octetos restantes (24 bits / 3 bytes) son el ID de host.</p><p>Las direcciones IP de Clase A van desde <code>1.0.0.0</code> hasta <code>127.255.255.255</code>, con una máscara predeterminada <code>255.0.0.0</code> (u <code>/8</code> en CIDR).</p><p>Esto significa que el direccionamiento Clase A puede tener un total de 128 (2<sup>7</sup>) redes y 16,777,214 (2<sup>24</sup>-2) direcciones utilizables por red.</p><p>Además, toma en cuenta que el rango desde <code>127.0.0.0</code> al <code>127.255.255.255</code> dentro del rango de la Clase A, está reservado para la dirección de bucle invertido del host (vea <a href="https://tools.ietf.org/html/rfc5735">RFC5735</a>).</p><h3 id="direcciones-ip-de-clase-b"><strong>Direcciones IP de Clase B</strong></h3><p>Para las direcciones IP de Clase B, los primeros dos octetos (16 bits / 2 bytes) representan el ID de red y los dos octetos restantes (16 bits / 2 bytes) son el ID de host.</p><p>Las direcciones IP de Clase B van desde <code>128.0.0.0</code> hasta <code>191.255.255.255</code>, con una máscara predeterminada <code>255.255.0.0</code> (o <code>/16</code> en CIDR).</p><p>El direccionamiento Clase B puede tener 16,384 (2<sup>14</sup>) direcciones de red y 65,534 (2<sup>16</sup>) direcciones utilizables por red.</p><h3 id="direcciones-ip-de-clase-c"><strong>Direcciones IP de Clase C</strong></h3><p>Para direcciones IP de Clase C, los primeros tres octetos (24 bits / 3 bytes) representan el ID de red, y el último octeto (8 bits / 1 bytes) es el ID de host.</p><p>Las direcciones IP de Clase C van desde <code>192.0.0.0</code> hasta <code>223.255.255.255</code>, con una máscara predeterminada <code>255.255.255.0</code> (o <code>/24</code> en CIDR).</p><p>La Clase C se traduce a 2,097,152 (2<sup>21</sup>) redes y 254 (2<sup>8</sup>-2) direcciones utilizables por red.</p><h3 id="direcciones-ip-de-clase-d-y-clase-e"><strong>Direcciones IP de Clase D y Clase E </strong></h3><p>Las últimas dos clases son la Clase D y la Clase E.</p><p>Las direcciones IP de Clase D están reservadas para multidifusiones. Ellas ocupan el rango desde <code>224.0.0.0</code> hasta <code>239.255.255.255</code>.</p><p>Las direcciones IP de Clase E son experimentales, y son cualquiera arriba de <code>240.0.0.0</code>.</p><h3 id="el-problema-de-las-direcciones-ip-con-clase"><strong>El Problema de las Direcciones IP Con Clase</strong></h3><p>El problema principal con las direcciones IP con clase es que no fue algo eficiente, y llevaba a tener muchas direcciones IP desperdiciadas.</p><p>Por ejemplo, imagina que eres parte de una organización grande en aquel entonces. Tu compañía tiene 1,000 empleados, lo que significa que caería dentro de la clase B.</p><p>Pero si miras arriba, verás que una red de clase B puede soportar hasta 65,534 direcciones utilizables. Eso es mucho más de lo que tu organización necesitaría, incluso si cada empleado tuviera múltiples dispositivos con una dirección única. </p><p>Y no había manera de que tu organización volviera a la clase C - no habría suficientes direcciones IP utilizables. </p><p>Así que mientras las direcciones IP con clase fueron usadas en el momento en el que las direcciones IPv4 se volvieron una norma, rápidamente se hizo evidente que sería necesario un mejor sistema para garantizar que no usaríamos todas las ~4.200 millones de direcciones utilizables. </p><p>Las direcciones IP con clase no han sido usadas desde que fueron reemplazadas por CIDR en 1993, y son mayormente estudiadas para entender la arquitectura temprana de internet, y el por qué la división en subredes es importante.</p><h2 id="espero-que-esta-hoja-de-trucos-te-haya-sido-una-referencia-til"><strong>Espero que esta hoja de trucos te haya sido una referencia útil </strong></h2><p>Si así lo fue, por favor compártelo con tus amigos, para que más gente pueda beneficiarse de ella. </p><p>Además, siéntete libre de contactarme en <a href="https://twitter.com/kriskoishigawa">Twitter</a> y déjame saber lo que piensas.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
