From a25d5e782e4a60b39ea00db554c778204e324de6 Mon Sep 17 00:00:00 2001
From: David Ramos Salamanca <ramosd@jupyterMiLAB>
Date: Sat, 6 Feb 2021 20:55:56 -0500
Subject: [PATCH] Add second part of problem
---
ejercicio2.html | 123 +++++++++++++++++++++++++++++++++++++++++++++--
ejercicio2.ipynb | 81 +++++++++++++++++++++++++++++++
2 files changed, 201 insertions(+), 3 deletions(-)
diff --git a/ejercicio2.html b/ejercicio2.html
index d8f5291..2ae4455 100644
--- a/ejercicio2.html
+++ b/ejercicio2.html
@@ -14280,9 +14280,8 @@ a.anchor-link {
</div>
<div class="jp-Cell-inputWrapper"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput " data-mime-type="text/markdown">
-<p>Los números en la <em>n-ésima</em> (empezando en cero) fila del triángulo de Pascal corresponden a los coeficientes binomiales ${n\choose 0},\,{n\choose 1},\,...,\,{n\choose n}$ donde
-$$ {n\choose k} = \frac{n!}{k!(n-k)!} .$$</p>
-
+<p>Los números en la <em>n-ésima</em> (empezando en cero) fila del triángulo de Pascal corresponden a los coeficientes binomiales ${n\choose 0},\,{n\choose 1},\,...,\,{n\choose n}$ donde</p>
+$$ {n\choose k} = \frac{n!}{k!(n-k)!} .$$
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
<div class="jp-Cell-inputWrapper">
@@ -14641,6 +14640,124 @@ $$ {n\choose k} = \frac{n!}{k!(n-k)!} .$$</p>
</div>
+</div>
+<div class="jp-Cell-inputWrapper"><div class="jp-InputPrompt jp-InputArea-prompt">
+</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput " data-mime-type="text/markdown">
+<p>Modifique la rutina anterior para que reciba un número variable de argumentos: <em>n1</em>, <em>n2</em>, <em>n3</em>,...y retorne una lista cuyo primer elemento es una lista conteniendo los números en la fila <em>n1</em> del triángulo de Pascal, el segundo elemento una lista con los números en la fila <em>n2</em>, y asà sucesivamente.</p>
+
+</div>
+</div>
+<div class="jp-Cell-inputWrapper"><div class="jp-InputPrompt jp-InputArea-prompt">
+</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput " data-mime-type="text/markdown">
+<p>Para este caso la estrategia será buscar el número más alto de los brindados por el usuario y la estructura de la rutina es la misma, la única diferencia es que se guardan algunas de las filas intermedias.</p>
+
+</div>
+</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
+<div class="jp-Cell-inputWrapper">
+<div class="jp-InputArea jp-Cell-inputArea">
+<div class="jp-InputPrompt jp-InputArea-prompt">In [12]:</div>
+<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
+ <div class="CodeMirror cm-s-jupyter">
+<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">multipascal</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span>
+ <span class="n">nmax</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
+ <span class="n">rows</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> <span class="o">==</span> <span class="n">n</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">args</span><span class="p">):</span> <span class="c1"># usando all() para verificar que todos los números sean enteros</span>
+ <span class="nb">print</span><span class="p">(</span><span class="s1">'Error: uno o más de los números ingresados no es entero'</span><span class="p">)</span>
+ <span class="k">elif</span> <span class="n">nmax</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="c1"># sabemos que la primera fila es un 1</span>
+ <span class="n">rows</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="nb">int</span><span class="p">(</span><span class="mi">1</span><span class="p">)])</span>
+ <span class="k">return</span> <span class="n">rows</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">prow</span> <span class="o">=</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span> <span class="c1"># guardando la primera fila, se usan tuplas para que sea inmutable</span>
+ <span class="n">row</span> <span class="o">=</span><span class="p">[]</span> <span class="c1"># lista donde se crearán las filas</span>
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">nmax</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># iterando sobre el número de filas</span>
+ <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># segunda iteración (shame on me) para moverse en "columnas"</span>
+ <span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">k</span> <span class="o">==</span> <span class="n">i</span><span class="p">:</span>
+ <span class="n">row</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span> <span class="c1"># el primer y el último número es 1</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">row</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">prow</span><span class="p">[</span><span class="n">k</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="n">prow</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="c1"># elementos interiores como suma de elementos de la fila anterior</span>
+ <span class="n">prow</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">row</span><span class="p">)</span> <span class="c1"># re asigno la fila anterior (como una tupla) para la nueva iteración</span>
+ <span class="n">rows</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</span><span class="p">)</span> <span class="c1"># guardo la fila actual</span>
+ <span class="n">row</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># vacÃo la fila para volverla a llenar</span>
+ <span class="k">return</span> <span class="n">rows</span>
+</pre></div>
+
+ </div>
+</div>
+</div>
+</div>
+
+</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
+<div class="jp-Cell-inputWrapper">
+<div class="jp-InputArea jp-Cell-inputArea">
+<div class="jp-InputPrompt jp-InputArea-prompt">In [13]:</div>
+<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
+ <div class="CodeMirror cm-s-jupyter">
+<div class=" highlight hl-ipython3"><pre><span></span><span class="n">multipascal</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">)</span>
+</pre></div>
+
+ </div>
+</div>
+</div>
+</div>
+
+<div class="jp-Cell-outputWrapper">
+
+
+<div class="jp-OutputArea jp-Cell-outputArea">
+
+<div class="jp-OutputArea-child">
+
+
+ <div class="jp-OutputPrompt jp-OutputArea-prompt">Out[13]:</div>
+
+
+
+
+<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
+<pre>[[1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]</pre>
+</div>
+
+</div>
+
+</div>
+
+</div>
+
+</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
+<div class="jp-Cell-inputWrapper">
+<div class="jp-InputArea jp-Cell-inputArea">
+<div class="jp-InputPrompt jp-InputArea-prompt">In [14]:</div>
+<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
+ <div class="CodeMirror cm-s-jupyter">
+<div class=" highlight hl-ipython3"><pre><span></span><span class="n">multipascal</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mf">4.1</span><span class="p">)</span>
+</pre></div>
+
+ </div>
+</div>
+</div>
+</div>
+
+<div class="jp-Cell-outputWrapper">
+
+
+<div class="jp-OutputArea jp-Cell-outputArea">
+
+<div class="jp-OutputArea-child">
+
+
+ <div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
+
+
+<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain">
+<pre>Error: uno o más de los números ingresados no es entero
+</pre>
+</div>
+</div>
+
+</div>
+
+</div>
+
</div>
</body>
diff --git a/ejercicio2.ipynb b/ejercicio2.ipynb
index 1b4a548..495d754 100644
--- a/ejercicio2.ipynb
+++ b/ejercicio2.ipynb
@@ -33,6 +33,7 @@
"metadata": {},
"source": [
"Los números en la *n-ésima* (empezando en cero) fila del triángulo de Pascal corresponden a los coeficientes binomiales ${n\\choose 0},\\,{n\\choose 1},\\,...,\\,{n\\choose n}$ donde\n",
+ "\n",
"$$ {n\\choose k} = \\frac{n!}{k!(n-k)!} .$$"
]
},
@@ -236,6 +237,86 @@
"source": [
"pascal2(3.1)"
]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Modifique la rutina anterior para que reciba un número variable de argumentos: *n1*, *n2*, *n3*,...y retorne una lista cuyo primer elemento es una lista conteniendo los números en la fila *n1* del triángulo de Pascal, el segundo elemento una lista con los números en la fila *n2*, y asà sucesivamente."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Para este caso la estrategia será buscar el número más alto de los brindados por el usuario y la estructura de la rutina es la misma, la única diferencia es que se guardan algunas de las filas intermedias."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def multipascal(*args):\n",
+ " nmax = max(*args)\n",
+ " rows = []\n",
+ " if not all(int(n) == n for n in args): # usando all() para verificar que todos los números sean enteros\n",
+ " print('Error: uno o más de los números ingresados no es entero')\n",
+ " elif nmax == 0: # sabemos que la primera fila es un 1\n",
+ " rows.append([int(1)])\n",
+ " return rows\n",
+ " else:\n",
+ " prow = (int(1)) # guardando la primera fila, se usan tuplas para que sea inmutable\n",
+ " row =[] # lista donde se crearán las filas\n",
+ " for i in range(1,nmax+1): # iterando sobre el número de filas\n",
+ " for k in range(i+1): # segunda iteración (shame on me) para moverse en \"columnas\"\n",
+ " if k == 0 or k == i:\n",
+ " row.append(int(1)) # el primer y el último número es 1\n",
+ " else:\n",
+ " row.append(prow[k-1]+prow[k]) # elementos interiores como suma de elementos de la fila anterior\n",
+ " prow = tuple(row) # re asigno la fila anterior (como una tupla) para la nueva iteración\n",
+ " rows.append(row) # guardo la fila actual\n",
+ " row = [] # vacÃo la fila para volverla a llenar\n",
+ " return rows"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[[1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "multipascal(1,2,3,4)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Error: uno o más de los números ingresados no es entero\n"
+ ]
+ }
+ ],
+ "source": [
+ "multipascal(1,2,3,4.1)"
+ ]
}
],
"metadata": {
--
GitLab