<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: José Ayrám</title>
    <description>The latest articles on Forem by José Ayrám (@joseayram).</description>
    <link>https://forem.com/joseayram</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F259086%2Fb7b6bef9-efcb-4efd-92c1-2ad2446345ff.jpg</url>
      <title>Forem: José Ayrám</title>
      <link>https://forem.com/joseayram</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/joseayram"/>
    <language>en</language>
    <item>
      <title>AdventJS - Reto #3: ¿Cuántas cajas de regalos puede llevar Papá Noel?</title>
      <dc:creator>José Ayrám</dc:creator>
      <pubDate>Sat, 10 Dec 2022 13:20:00 +0000</pubDate>
      <link>https://forem.com/joseayram/adventjs-reto-3-cuantas-cajas-de-regalos-puede-llevar-papa-noel-583b</link>
      <guid>https://forem.com/joseayram/adventjs-reto-3-cuantas-cajas-de-regalos-puede-llevar-papa-noel-583b</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mSMCbKYJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/80mid3k7bit5ba0bpe4c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mSMCbKYJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/80mid3k7bit5ba0bpe4c.png" alt="Reto #3: ¿Cuántas cajas de regalos puede llevar Papá Noel?" width="200" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://adventjs.dev/es/challenges/2022/3"&gt;Reto #3: ¿Cuántas cajas de regalos puede llevar Papá Noel?&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instrucciones:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tienes una caja de regalos de Navidad que Santa Claus quiere entregar a los niños. &lt;strong&gt;Cada regalo está representado por una cadena&lt;/strong&gt;. Santa Claus tiene un trineo que puede llevar un &lt;strong&gt;peso limitado&lt;/strong&gt;, y cada regalo dentro de la caja tiene un peso que es igual al número de letras en el nombre del regalo.&lt;/p&gt;

&lt;p&gt;Santa Claus también tiene una lista de renos que pueden ayudarlo a entregar los regalos. Cada reno tiene un límite de peso máximo que puede llevar. El &lt;strong&gt;límite de peso máximo&lt;/strong&gt; de cada reno es &lt;strong&gt;igual a dos veces el número de letras en su nombre&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Tu tarea es implementar una función distributeGifts(packOfGifts, reindeers) que recibe una caja de regalos y una lista de renos y devuelve el número máximo de cajas de estos regalos que Santa Claus puede entregar a los niños. &lt;strong&gt;Las cajas de regalos no se pueden dividir&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;packOfGifts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;book&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;doll&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ball&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reindeers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dasher&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dancer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;// el pack de regalos pesa 4 + 4 + 4 = 12&lt;/span&gt;
&lt;span class="c1"&gt;// los renos pueden llevar (2 * 6) + (2 * 6) = 24&lt;/span&gt;
&lt;span class="c1"&gt;// por lo tanto, Santa Claus puede entregar 2 cajas de regalos&lt;/span&gt;

&lt;span class="nx"&gt;distributeGifts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;packOfGifts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reindeers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cosas a tener en cuenta:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Las cajas de regalos no se pueden dividir.&lt;/li&gt;
&lt;li&gt;Los nombres de los regalos y los renos siempre serán mayores que 0.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Mi solución:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;distributeGifts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;packOfGifts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reindeers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;weightGifts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;maxWeightReindeers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nx"&gt;packOfGifts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gift&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;weightGifts&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;gift&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;reindeers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reindeer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;maxWeightReindeers&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reindeer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;maxWeightReindeers&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;weightGifts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Explicación:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La idea principal se basa en tomar en cuenta el tamaño de la cadena de texto y acumular su valor, en el caso de los renos, duplicarla, para poder realizar una operación matemática sencilla al final.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;let weightGifts = 0;&lt;/code&gt; En esta variable acumularemos el peso total de cada regalo.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;let maxWeightReindeers = 0;&lt;/code&gt; En esta variable acumularemos el peso total máximo que pueden llevar los renos.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;packOfGifts.forEach( (gift) =&amp;gt; {} );&lt;/code&gt; Hacemos un recorrido del primer arreglo con el método &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach"&gt;forEach&lt;/a&gt;. En esta ocasión, usamos la &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#syntax"&gt;sintáxis Arrow Function&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;weightGifts += gift.length;&lt;/code&gt; Acumulamos en la variable &lt;code&gt;weightGifts&lt;/code&gt; el valor correspondiente al tamaño de la cadena de texto.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;reindeers.forEach( (reindeer) =&amp;gt; {} );&lt;/code&gt; Hacemos un recorrido del segundo arreglo con el método &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach"&gt;forEach&lt;/a&gt; para poder determinar la carga máxima.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;maxWeightReindeers += (reindeer.length * 2);&lt;/code&gt; Acumulamos en la variable &lt;code&gt;maxWeightReindeers&lt;/code&gt; el valor correspondiente al tamaño de la cadena de texto duplicándolo.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;return Math.floor(maxWeightReindeers / weightGifts);&lt;/code&gt; Dividimos el peso máximo entre el peso total de los regalos y con la función &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Math/floor"&gt;Math.floor&lt;/a&gt; devolvemos el entero del resultado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Resultado:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;132 puntos&lt;/li&gt;
&lt;li&gt;Complejidad cognitiva: 1&lt;/li&gt;
&lt;li&gt;3381 ops/s&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Otras Soluciones:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/duxtech/adventjs-reto-3-cuantas-cajas-de-regalos-puede-llevar-papa-noel-52ne"&gt;Serie Advent.js 2022 de Cristian Fernando - Reto #3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=YJa5419H_hg&amp;amp;list=PLtJA_0pDlZIYVrRo3shhObGmJqwxYMJq5&amp;amp;index=3"&gt;Canal YouTube asdex dev - Reto #3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nos leemos en el siguiente reto.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AdventJS - Reto #2: Nadie quiere hacer horas extras</title>
      <dc:creator>José Ayrám</dc:creator>
      <pubDate>Sat, 10 Dec 2022 03:34:17 +0000</pubDate>
      <link>https://forem.com/joseayram/adventjs-reto2-nadie-quiere-hacer-horas-extras-ojj</link>
      <guid>https://forem.com/joseayram/adventjs-reto2-nadie-quiere-hacer-horas-extras-ojj</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z4G_Z_tU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o1v6ofnsh9pjrdesokde.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z4G_Z_tU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o1v6ofnsh9pjrdesokde.png" alt="Reto #2: Nadie quiere hacer horas extras" width="200" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://adventjs.dev/es/challenges/2022/2"&gt;Reto #2: Nadie quiere hacer horas extras&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instrucciones:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un millonario ha comprado una red social y no trae buenas noticias. Ha anunciado que cada vez que una jornada de trabajo se pierde por un día festivo, habrá que compensarlo con dos horas extra otro día de ese mismo año.&lt;/p&gt;

&lt;p&gt;Obviamente la gente que trabaja en la empresa no le ha hecho ni pizca de gracia y están preparando un programa que les diga el número de horas extras que harían en el año si se aplicara la nueva norma.&lt;/p&gt;

&lt;p&gt;Al ser trabajo de oficina, su horario laboral es de lunes a viernes. Así que sólo tienes que preocuparte de los días festivos que caen en esos días.&lt;/p&gt;

&lt;p&gt;Dado un año y un array con las fechas de los días festivos, devuelve el número de horas extra que se harían ese año:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2022&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;holidays&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;01/06&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;04/01&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;12/25&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;// formato MM/DD&lt;/span&gt;

&lt;span class="c1"&gt;// 01/06 es el 6 de enero, jueves. Cuenta.&lt;/span&gt;
&lt;span class="c1"&gt;// 04/01 es el 1 de abril, un viernes. Cuenta.&lt;/span&gt;
&lt;span class="c1"&gt;// 12/25 es el 25 de diciembre, un domingo. No cuenta.&lt;/span&gt;

&lt;span class="nx"&gt;countHours&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;holidays&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 2 días -&amp;gt; 4 horas extra en el año&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Mi solución&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;countHours&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;holidays&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;weekendDays&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;hours&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nx"&gt;holidays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;holiday&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;holiday&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;weekendDays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getDay&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;hours&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;hours&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Explicación&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;const weekDays = [0, 6];&lt;/code&gt; Almaceno en un arreglo los días que nos han indicado que son fines de semana.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;let hours = 0;&lt;/code&gt; Arranco el contador de horas en cero.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;holidays.forEach( function(holiday) {}&lt;/code&gt; Recorro el arreglo para verificar los datos.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;let date = new Date(&lt;/code&gt;${holiday}/${year}&lt;code&gt;);&lt;/code&gt; Creo la fecha con el formato corto (MM/DD/YYYY)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;if(!weekendDays.includes(date.getDay()))&lt;/code&gt; Verifico si el valor que me trae la función getDay() no se encuentra dentro del arreglo de &lt;code&gt;weekendDays&lt;/code&gt;, es decir, si no es un fin de semana para sumar 2 horas al contador final.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;return hours;&lt;/code&gt; Devuelvo la cantidad de horas calculadas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Resultado:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;107 puntos&lt;/li&gt;
&lt;li&gt;Complejidad cognitiva: 1.5&lt;/li&gt;
&lt;li&gt;2712 ops/s&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Otras soluciones:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/duxtech/adventjs-reto-2-nadie-quiere-hacer-horas-extra-2eh4"&gt;Serie Advent.js 2022 de Cristian Fernando - Reto #2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=hlplyXbFhUM&amp;amp;list=PLtJA_0pDlZIYVrRo3shhObGmJqwxYMJq5&amp;amp;index=2"&gt;Canal YouTube asdex dev - Reto #2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nos leemos en el siguiente reto.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>adventjs</category>
      <category>adventofcode</category>
    </item>
    <item>
      <title>AdventJS - Reto #1: ¡Automatizando envolver regalos de navidad!</title>
      <dc:creator>José Ayrám</dc:creator>
      <pubDate>Sat, 10 Dec 2022 00:12:45 +0000</pubDate>
      <link>https://forem.com/joseayram/adventjs-reto-1-automatizando-envolver-regalos-de-navidad-3gb5</link>
      <guid>https://forem.com/joseayram/adventjs-reto-1-automatizando-envolver-regalos-de-navidad-3gb5</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KBu-De25--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/13fw2r43bpu6z2bedfm5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KBu-De25--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/13fw2r43bpu6z2bedfm5.png" alt="Image description" width="200" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://adventjs.dev/es/challenges/2022/1"&gt;Reto #1: ¡Automatizando envolver regalos de navidad!&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instrucciones:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Este año los elfos han comprado una máquina que envuelve regalos. Pero… ¡no viene programada! Necesitamos crear un algoritmo que le ayude en la tarea.&lt;/p&gt;

&lt;p&gt;A la máquina se le pasa un array con los regalos. Cada regalo es un string. Necesitamos que la máquina envuelva cada regalo en papel de regalo y lo coloque en un array de regalos envueltos.&lt;/p&gt;

&lt;p&gt;El papel de regalo es el símbolo &lt;code&gt;*&lt;/code&gt; y para envolver un regalo se coloca el símbolo &lt;code&gt;*&lt;/code&gt; de forma que rodee totalmente al string por todos los lados. Por ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;gifts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cat&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;game&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;socks&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;wrapped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;wrapping&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gifts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wrapped&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="cm"&gt;/* [
  "*****\n*cat*\n*****",
  "******\n*game*\n******",
  "*******\n*socks*\n*******"
] */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como ves, el papel de regalo envuelve el string. Por arriba y por abajo, para no dejar ningún hueco, las esquinas también están cubiertas por el papel de regalo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nota&lt;/strong&gt;: El carácter &lt;code&gt;\n&lt;/code&gt; representa un salto de línea.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¡Ojo!&lt;/strong&gt; Asegúrate que pones el número correcto de * para envolver completamente el string. Pero no demasiados. Sólo los necesarios para cubrir el string.&lt;/p&gt;

&lt;p&gt;Ah, &lt;strong&gt;y no modifiques (mutes) el array original&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Lo anterior son las instrucciones originales descritas en la página del reto.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¡OJO! Si aún no has completado el reto, no sigas leyendo porque el spoiler será en grande.&lt;/strong&gt; 😁&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mi solución:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La intención del reto es que cualquier texto dentro del arreglo de datos quede "cubierto" de asteriscos por todos sus lados sin excedernos. Es decir, el resultado final debe ser algo como esto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*****
*cat*
*****
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si te fijas bien, cada palabra quedará envuelta en una especie de cajita de regalos formada por los propios asteriscos. Entonces, si lees los ejemplos del enunciado, te darás cuenta que cada palabra tiene una línea superior, una inferior y dos laterales, todas formadas... ¿Con qué? Si, exacto, con asteriscos.&lt;/p&gt;

&lt;p&gt;Para ello deberás recorrer el arreglo y tener en cuenta el tamaño de la palabra para colocar la cantidad de &lt;code&gt;*&lt;/code&gt; justas y necesarias.&lt;/p&gt;

&lt;p&gt;Veamos el código que luego pasaré a explicar con un poco más de detalle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;wrapping&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gifts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;wrapped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="nx"&gt;gifts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;len&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;gift&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;startEnd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;wrap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;startEnd&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;gift&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;startEnd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    
    &lt;span class="nx"&gt;wrapped&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wrap&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;       
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;wrapped&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Nota&lt;/strong&gt;: &lt;em&gt;Hay mejores soluciones pero les comparto con la primera opción que pasé el reto&lt;/em&gt;. (Al final del artículo compartiré las que vaya encontrando).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explicación:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;let wrapped = [];&lt;/code&gt; Inicializo el arreglo que almacenará los regalos envueltos.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gifts.forEach(function(value){}&lt;/code&gt; Recorro el arreglo inicial para tratar los datos.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;let len = value.length + 2;&lt;/code&gt; Declaro una variable en donde tomo el tamaño del string que leo y le sumo siempre 2 para que quede cubierto por encima y por debajo. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;let gift = "\n*"+value+"*\n";&lt;/code&gt; La palabra estará envuelta en sus laterales siempre con 1 asterisco de cada lado y se agregan los saltos de líneas (&lt;code&gt;\n&lt;/code&gt;) correspondientes.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;let startEnd = "*".repeat(len);&lt;/code&gt; En esta variable creo el string correspondiente a la cantidad de asteriscos necesarios según el tamaño que habíamos calculado anteriormente, para ello, se utiliza el método &lt;strong&gt;&lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String/repeat"&gt;repeat&lt;/a&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;let wrap = startEnd + gift + startEnd;&lt;/code&gt; Concateno de la forma más sencilla posible la línea inicial, la palabra envuelta y la línea final.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;wrapped.push(wrap);&lt;/code&gt; Agrego al arreglo declarado inicialmente el string ya envuelto.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;return wrapped;&lt;/code&gt; Devuelvo los regalos envueltos y hago felices a muchos niños en esta navidad 😃&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Resultado:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;127 puntos&lt;/li&gt;
&lt;li&gt;Complejidad cognitiva: 1&lt;/li&gt;
&lt;li&gt;2925 ops/s (Aunque en un principio marcó sobre los 3k)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A medida que fui leyendo del proyecto me encontré con algunas publicaciones que me han servido de inspiración y para comparar los resultados. Se las dejo por acá:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/duxtech/adventjs-reto-1-automatizando-envolver-regalos-de-navidad-133n"&gt;Serie Advent.js 2022 de Cristian Fernando - Reto #1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=MDoLaXWLvFg"&gt;Canal YouTube asdex dev - Reto #1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nos leemos en el siguiente reto.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>adventjs</category>
      <category>adventofcode</category>
    </item>
    <item>
      <title>AdventJS 2022 - Retos de código para Javascript cada día de diciembre</title>
      <dc:creator>José Ayrám</dc:creator>
      <pubDate>Fri, 09 Dec 2022 23:22:51 +0000</pubDate>
      <link>https://forem.com/joseayram/adventjs-2022-retos-de-codigo-para-javascript-cada-dia-de-diciembre-3o17</link>
      <guid>https://forem.com/joseayram/adventjs-2022-retos-de-codigo-para-javascript-cada-dia-de-diciembre-3o17</guid>
      <description>&lt;p&gt;Recientemente me he enterado de una iniciativa que salió a la luz por vez primera el año pasado y en este continúa con su segunda edición.&lt;/p&gt;

&lt;p&gt;Se trata de &lt;a href="https://adventjs.dev/" rel="noopener noreferrer"&gt;adventJS&lt;/a&gt; un espacio creado por &lt;a href="https://midu.dev/" rel="noopener noreferrer"&gt;@midudev&lt;/a&gt; en donde tendrás la oportunidad de poner en práctica tus conocimientos de programción intentando resolver 1 reto por día hasta navidad.&lt;/p&gt;

&lt;p&gt;Los retos podrás resolverlos en &lt;strong&gt;Javascript&lt;/strong&gt; o &lt;strong&gt;TypeScript&lt;/strong&gt; según prefieras. Existe una tabla de puntuación y los puntos serán asignados según la calidad del código.&lt;/p&gt;

&lt;p&gt;La edición anterior de este proyecto aún está disponible en el siguiente enlace: &lt;a href="https://2021.adventjs.dev/" rel="noopener noreferrer"&gt;adventJS 2021&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;La plataforma cuenta con su propia consola para codificar y probar tus resultados, por lo que no necesitarás instalar nada adicional en tu equipo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc7tinzopsafs1iym5d61.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc7tinzopsafs1iym5d61.jpeg" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si llegas un poco tarde como yo, no te preocupes, aún puedes ponerte al día.&lt;/p&gt;

&lt;p&gt;Para mayor información acá tienes &lt;a href="https://midu.dev/adventjs-2022/" rel="noopener noreferrer"&gt;la nota oficial&lt;/a&gt; y su tweet de lanzamiento:&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1597965996383412225-93" src="https://platform.twitter.com/embed/Tweet.html?id=1597965996383412225"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1597965996383412225-93');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1597965996383412225&amp;amp;theme=dark"
  }



&lt;/p&gt;




&lt;p&gt;Aunque JS no es mi fuerte, &lt;strong&gt;lo intentaré&lt;/strong&gt;, así que espero que tú también. A medida que vaya avanzando publicaré las soluciones por acá para que sirvan de comparación y retroalimentación.&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
  </channel>
</rss>
