Skip to content

Commit a42d265

Browse files
José Miguel Sánchez AlésJosé Miguel Sánchez Alés
authored andcommitted
Añade ocultas las soluciones de los ejercicios sobre Javascript al texto
1 parent acdd774 commit a42d265

File tree

14 files changed

+930
-52
lines changed

14 files changed

+930
-52
lines changed

docs/99.ejercicios/80-js-basico.html

Lines changed: 52 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -107,23 +107,39 @@ <h2>Mínimos<a class="headerlink" href="#minimos" title="Enlace permanente a est
107107
</div></blockquote>
108108
<ol class="arabic">
109109
<li><p>A partir de dos números que simbolizan los lados de un rectángulo, calcule
110-
su área y su perímetro.</p></li>
110+
su área y su perímetro.</p>
111+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/7758ccabb7fed82eb127be2dd70fb621/ejS01.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
112+
</li>
111113
<li><p>A partir de dos números que simbolizan los catetos de un triángulo rectángulo,
112-
calcule la hipotenusa (<a class="reference external" href="https://es.wikipedia.org/wiki/Teorema_de_Pit%C3%A1go">teorema de Pitágoras</a>).</p></li>
113-
<li><p>Pase una cantidad expresada en segundos a horas, minutos y segundos.</p></li>
114+
calcule la hipotenusa (<a class="reference external" href="https://es.wikipedia.org/wiki/Teorema_de_Pit%C3%A1go">teorema de Pitágoras</a>).</p>
115+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/7758ccabb7fed82eb127be2dd70fb621/ejS01.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
116+
</li>
117+
<li><p>Pase una cantidad expresada en segundos a horas, minutos y segundos.</p>
118+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/7758ccabb7fed82eb127be2dd70fb621/ejS01.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
119+
</li>
114120
<li><p>Dada la edad en años de una persona, haga un programa que determine si es o
115-
no mayor de edad.</p></li>
121+
no mayor de edad.</p>
122+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/7758ccabb7fed82eb127be2dd70fb621/ejS01.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
123+
</li>
116124
<li><p>A partir de un monedero en el que se tienen monedas de 1 euro y billetes de
117125
5, 10, 20 y 50 euros, calcule el dinero total a partir de la cantidad de
118-
monedas de cada tipo que almacena.</p></li>
126+
monedas de cada tipo que almacena.</p>
127+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/7758ccabb7fed82eb127be2dd70fb621/ejS01.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
128+
</li>
119129
<li><p>Dada una cantidad en euros, fracciónela en billetes de 5, 10, 20 y
120130
50, y monedas de 1, sabiendo que se pretende minimizar su número. En
121-
conclusión, que este ejercicio es el inverso al anterior.</p></li>
131+
conclusión, que este ejercicio es el inverso al anterior.</p>
132+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/7758ccabb7fed82eb127be2dd70fb621/ejS01.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
133+
</li>
122134
<li><p>A partir de dos números calcule o la suma o la resta o la
123-
multiplicación o la división. La operación se debe escoger al azar.</p></li>
135+
multiplicación o la división. La operación se debe escoger al azar.</p>
136+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/7758ccabb7fed82eb127be2dd70fb621/ejS01.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
137+
</li>
124138
<li><p>Determinar si un año es bisiesto. Son bisiestos los años múltiples de 4,
125139
excepto los de comienzo de siglo que no son múltiplos de 400: 1994 es
126-
bisiesto, 1900 no lo es, pero 2000, sí.</p></li>
140+
bisiesto, 1900 no lo es, pero 2000, sí.</p>
141+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/7758ccabb7fed82eb127be2dd70fb621/ejS01.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
142+
</li>
127143
<li><p>Dada una nota numérica entre 0 y 10, devuelva la nota descriptiva, sabiendo
128144
las equivalencias:</p>
129145
<table class="docutils align-default">
@@ -171,6 +187,7 @@ <h2>Mínimos<a class="headerlink" href="#minimos" title="Enlace permanente a est
171187
<li><p>Una interior a la otra.</p></li>
172188
<li><p>Concéntricas.</p></li>
173189
</ul>
190+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/7758ccabb7fed82eb127be2dd70fb621/ejS01.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
174191
</li>
175192
</ol>
176193
</section>
@@ -179,18 +196,29 @@ <h2>Medios<a class="headerlink" href="#medios" title="Enlace permanente a este e
179196
<ol class="arabic">
180197
<li><p><a class="reference external" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random">Math.random()</a>
181198
es un método que devuelve un número aleatorio entre 0 y 10. Escriba una
182-
función que devuelva un número entero aleatorio entre un mínimo y un máximo.</p></li>
199+
función que devuelva un número entero aleatorio entre un mínimo y un máximo.</p>
200+
<p class="sol-oculta"><strong>Solución</strong>: <em>La función está incluida en muchas de las soluciones a los ejercicios
201+
de la tanda anterior</em>.</p>
202+
</li>
183203
<li><p>Simular tandas de dos tiradas de dados y parar en la tanda en que el resultado
184204
de ambas tiradas coincida. En ese momento, indicar cuántas tandas han sido
185-
necesarias y cuál fue el resultado (1-1, 2-2, etc.).</p></li>
205+
necesarias y cuál fue el resultado (1-1, 2-2, etc.).</p>
206+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/4073071b21e0679ca8fe21155045184b/ejM02.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
207+
</li>
186208
<li><p>A partir de un número, obtenga otro número que sea la inversión de sus
187-
cifras. Por ejemplo, si el número inicial es 321, deberá resultar 123.</p></li>
209+
cifras. Por ejemplo, si el número inicial es 321, deberá resultar 123.</p>
210+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/8ed4342643ce73909a31831fac916708/ejM03.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
211+
</li>
188212
<li><p>Cree una función llamada <code class="docutils literal notranslate"><span class="pre">indexOf_N</span></code> que busque en un array la aparición
189213
n-ésima de un determinado valor. Por ejemplo, para el array <code class="code docutils literal notranslate"><span class="pre">[</span> <span class="pre">&quot;a&quot;,</span>
190214
<span class="pre">&quot;b&quot;,</span> <span class="pre">&quot;a&quot;,</span> <span class="pre">&quot;c&quot;,</span> <span class="pre">&quot;d&quot;,</span> <span class="pre">&quot;a&quot;,</span> <span class="pre">&quot;e&quot;]</span></code>, si se busca la tercera aparición de «a» debe
191215
devolver 5. El primer argumento de la función debe ser el array, el segundo
192-
el valor a buscar y el tercero el número de aparición.</p></li>
193-
<li><p>Escriba un función que determine si un número es capicúa.</p></li>
216+
el valor a buscar y el tercero el número de aparición.</p>
217+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/de555af46047ef1a8f9e35903874db6b/ejM04.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
218+
</li>
219+
<li><p>Escriba un función que determine si un número es capicúa.</p>
220+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/835d3135763ee72c50ecf0e5625892f6/ejM05.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
221+
</li>
194222
<li><p>Una cooperativa de viticultores paga el precio de la uva dependiendo del tipo de uva
195223
(tempranillo, palomino, etc) y de su calibre (1, 2 ó 3). Escriba un
196224
algoritmo para determinar el pago que debe recibir un agricultor dependiendo
@@ -202,31 +230,28 @@ <h2>Medios<a class="headerlink" href="#medios" title="Enlace permanente a este e
202230
por un agricultor.</p></li>
203231
</ul>
204232
<p>En base a lo anterior, escriba el código para hacer el cálculo.</p>
233+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/6e30a7c5057f010b47b1f994eb0126cf/ejM06.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
205234
</li>
206235
<li><p>Estudie las fechas en Javascript (<a class="reference external" href="https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Date">Date</a>)
207236
y, dada la fecha de nacimiento de una persona, haga un programa que determine
208-
si es o no mayor de edad.</p></li>
209-
<li><p>Dada una lista de números, devuelva otra que excluya los números mayores al último.</p></li>
237+
si es o no mayor de edad.</p>
238+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/c1e054048146a8d2b6da402bb8e93461/ejM07.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
239+
</li>
240+
<li><p>Dada una lista de números, devuelva otra que excluya los números mayores al último.</p>
241+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/0b57c6ad42773acd50d4b8bad779fb19/ejM08.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
242+
</li>
210243
<li><p>Tome diez números naturales entre 1 y 40 al azar y calcule la suma y el
211-
producto de todos ellos.</p></li>
244+
producto de todos ellos.</p>
245+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/1e0cb8bd8d0b699b63fe25bf9a622fb4/ejM09.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
246+
</li>
212247
<li><p>Dado un número natural N, construya una pirámide de N niveles. Por ejemplo, para 4:</p>
213248
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> x
214249
xxx
215250
xxxxx
216251
xxxxxxx
217252
</pre></div>
218253
</div>
219-
<div class="sol-oculta highlight-javascript notranslate"><div class="highlight"><pre><span></span><span class="s2">&quot;use strict&quot;</span><span class="p">;</span>
220-
221-
<span class="kd">const</span><span class="w"> </span><span class="nx">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">6</span><span class="p">;</span><span class="w"> </span><span class="c1">// Altura de la pirámide</span>
222-
223-
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`Pirámide de altura </span><span class="si">${</span><span class="nx">n</span><span class="si">}</span><span class="sb">:`</span><span class="p">)</span>
224-
<span class="k">for</span><span class="p">(</span><span class="kd">let</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mf">6</span><span class="p">;</span><span class="w"> </span><span class="nx">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
225-
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">linea</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot; &quot;</span><span class="p">.</span><span class="nx">repeat</span><span class="p">(</span><span class="nx">n</span><span class="o">-</span><span class="nx">i</span><span class="o">-</span><span class="mf">1</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s2">&quot;x&quot;</span><span class="p">.</span><span class="nx">repeat</span><span class="p">(</span><span class="mf">2</span><span class="o">*</span><span class="nx">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">);</span>
226-
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">linea</span><span class="p">);</span>
227-
<span class="p">}</span>
228-
</pre></div>
229-
</div>
254+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/7356c3cacce0f320b7fbd3b18cfd15ce/ejM10.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span></code></a></p>
230255
</li>
231256
</ol>
232257
</section>
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
"use strict";
2+
3+
/**
4+
* @file Excluir los números menores al último.
5+
* @author José Miguel Sánchez Alés <jsanale860@g.educaand.es>
6+
*/
7+
8+
/**
9+
* Controla si se genera una entrada alteatoria o no.
10+
* @type {boolean}
11+
*/
12+
const aleatorio = true;
13+
14+
/**
15+
* Límite inferior predefinido para generar aleatorios.
16+
* @type {number}
17+
*/
18+
const MIN = 0,
19+
/**
20+
* Límite superior predefinido para generar aleatorios.
21+
* @type {number}
22+
*/
23+
MAX = 100;
24+
25+
/**
26+
* Lista predeterminada
27+
* @type {Number[]}
28+
*/
29+
const LISTA = [87, 22, 45, 78, 33, 64, 1, 66, 21, 56];
30+
31+
/**
32+
* Genera un entero aleatorio entre un límite inferior
33+
* y un límite superior
34+
*
35+
* @param {number} min - El límite inferior.
36+
* @param {number} max - El límite superior.
37+
*
38+
* @example
39+
* // Devuelve un entero entre 0 y 10 (ambos inclusive)
40+
* generarAleatorio(0, 10);
41+
*
42+
* @returns {number} - El entero aleatorio.
43+
*/
44+
function generarAleatorio(min, max) {
45+
return Math.round(Math.random() * (max - min)) + min;
46+
}
47+
48+
// Programa principal
49+
50+
const lista = aleatorio?LISTA.map(e => generarAleatorio(MIN, MAX)):LISTA;
51+
52+
// Como eliminar los números menores al último
53+
// no es algo a priori que sea útil en distintas situaciones,
54+
// no me molestaré ni en hacer una función.
55+
56+
console.log(`Lista: [${lista}].`);
57+
console.log(`Menores: [${lista.filter((e, _, arr) => e <= arr.at(-1))}]`);
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
"use strict";
2+
3+
/**
4+
* @file Calcular la suma y el producto de diez enteros aleatorios entre 1 y 40.
5+
* @author José Miguel Sánchez Alés <jsanale860@g.educaand.es>
6+
*/
7+
8+
/**
9+
* Controla si se genera una entrada alteatoria o no.
10+
* @type {boolean}
11+
*/
12+
const aleatorio = true;
13+
14+
/**
15+
* Límite inferior predefinido para generar aleatorios.
16+
* @type {number}
17+
*/
18+
const MIN = 1,
19+
/**
20+
* Límite superior predefinido para generar aleatorios.
21+
* @type {number}
22+
*/
23+
MAX = 40;
24+
25+
/**
26+
* Cantidad de números
27+
*
28+
* @type {number}
29+
*/
30+
const CANTIDAD = 10;
31+
32+
/**
33+
* Genera un entero aleatorio entre un límite inferior
34+
* y un límite superior
35+
*
36+
* @param {number} min - El límite inferior.
37+
* @param {number} max - El límite superior.
38+
*
39+
* @example
40+
* // Devuelve un entero entre 0 y 10 (ambos inclusive)
41+
* generarAleatorio(0, 10);
42+
*
43+
* @returns {number} - El entero aleatorio.
44+
*/
45+
function generarAleatorio(min, max) {
46+
return Math.round(Math.random() * (max - min)) + min;
47+
}
48+
49+
/**
50+
* Suma los elementos de un array
51+
*
52+
* @param {Number[]} sumandos - Sumandos a sumar.
53+
*
54+
* @returns {number}
55+
*/
56+
function sumatorio(sumandos) {
57+
return sumandos.reduce((acc, e) => acc + e);
58+
}
59+
60+
/**
61+
* Producto los elementos de un array
62+
*
63+
* @param {Number[]} factores - Factores a multiplicar.
64+
*
65+
* @returns {number}
66+
*/
67+
function multiplicatorio(factores) {
68+
return factores.reduce((acc, e) => acc * e);
69+
}
70+
71+
// Programa principal
72+
73+
const operandos = Array(CANTIDAD).fill(null).map(e => generarAleatorio(MIN, MAX));
74+
75+
console.log(`Operandos: [${operandos}].`);
76+
console.log(`Sumatorio: ${sumatorio(operandos)}.`);
77+
// Antes de multiplicar paso a BigInt los elementos,
78+
// por si el número es demasiado grande.
79+
console.log(`Multiplicatorio: ${multiplicatorio(operandos.map(e => BigInt(e)))}.`);
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/**
2+
* @file Realiza tiradas de dos dados hasta que en una misma tirada
3+
* los dos dados sacan la misma puntuación.
4+
* @author José Miguel Sánchez Alés <jsanale860@g.educaand.es>
5+
*/
6+
7+
/**
8+
* Número de datos lanzados en una tirada.
9+
* @type {number}
10+
*/
11+
const numDados = 2,
12+
/**
13+
* Número de caras de cada dado.
14+
* @type {number}
15+
*/
16+
numCaras = 6;
17+
18+
/**
19+
* Genera un entero aleatorio entre un límite inferior
20+
* y un límite superior
21+
*
22+
* @param {number} min - El límite inferior.
23+
* @param {number} max - El límite superior.
24+
*
25+
* @example
26+
* generarAleatorio(0, 10); // Entero entre 0 y 10 (ambos inclusive)
27+
*
28+
* @returns {number} - El entero aleatorio.
29+
*/
30+
function generarAleatorio(min, max) {
31+
return Math.round(Math.random()*(max - min)) + min;
32+
}
33+
34+
35+
/**
36+
* Lanza n dados hasta que todas las puntuaciones de un misma tirada sean iguales.
37+
*
38+
* @param {number} n - Número de dados en la tirada
39+
*
40+
* @yields {number} - La puntuación de cada dado.
41+
*/
42+
function* generarPartida(n) {
43+
let tirada;
44+
45+
if(!Number.isInteger(n) || n < 1) {
46+
throw "Debe tirarse al menos un dado";
47+
}
48+
49+
// Las tiradas continúan mientras todas
50+
// las puntuaciones de una misma tirada no sean iguales.
51+
do {
52+
// Una tirada son "n" puntuaciones de dados
53+
tirada = Array(n).fill(null).map(e => generarAleatorio(1, numCaras));
54+
yield tirada;
55+
} while(tirada.some((e, _, arr) => e !== arr[0]));
56+
}
57+
58+
// Programa principal
59+
60+
const partida = generarPartida(numDados);
61+
let tirada, intentos = 0;
62+
63+
for(tirada of partida) {
64+
intentos++;
65+
console.log(`Resultado de la ${intentos}ª tirada: ${tirada.join("-")}.`);
66+
}
67+
68+
console.log(`Se han tardado ${intentos} tiradas en sacar ${tirada.join("-")}.`);

0 commit comments

Comments
 (0)