###### tags `python-kata`
# Python, kata e almorzo / Python, kata y desayuno - 5ª Edición
Hola!
Breves instrucciones a continuación para que todo vaya fluido!
1. Elegiremos conjuntamente y al "azar" un ejercicio de https://leetcode.com/ o https://www.hackerrank.com/
2. Nos juntaremos en grupos de 2-3 personas
3. Resolveremos el problema en iteraciones de 10 minutos.
4. Al final cada iteración decideremos entre todos los grupos si damos finalizado el problema o continuamos iterando para refactorizar u optimizar.
5. Finalizado el problema, copiaremos la solución en este documento en el espacio reservado para cada grupo.
6. Revisaremos y comentaremos soluciones de cada grupo.
7. Revisaremos soluciones de otros usuarios en Leetcode o Hackerank en Python, y en otros lenguajes.
8. Si queda tiempo volvemos al _Paso 2_.
Además..
1. No es necesario que todo el mundo traiga portatil (1 de cada 2 o 3 es suficiente) ni es necesario instalar nada.
1. Se puede acompañar de café, te, galletas, desayuno inglés...(recuerda teclear sin chocolate en los dedos)
2. No importa el nivel o la experiencia individual, lo importante es aprender todos de todos.
3. La reunión es informal y el objetivo es aprender pasando un buen rato!
Anteriores ediciones:
- [Primera Edición](https://hackmd.io/ZFqsaJQAQQGm8z2sPTwA3g)
- [Segunda Edición](https://hackmd.io/FO4AHdfHTASNM_1ahFn8DQ)
- [Tercera Edición](https://hackmd.io/-sF1xb0ASkC98ArsOgdItA?view)
- [Cuarta Edición](https://hackmd.io/@aindustriosa/B1cQ0DdZU)
## Ejercicios:
Beautiful Arrangement II: https://leetcode.com/problems/beautiful-arrangement-ii/
### Grupo 1 - Componentes:
- Mireia
- Alex
(not finished)
_Código:_
```python
class Solution:
def constructArray(self, n: int, k: int) -> List[int]:
lista_final = []
lista_resta = [] #lenght n-1
for n1, n2 in enumerate(range(1, n+1)):
resta = n1 - n2
lista_resta.append(resta)
if n1 == 1:
lista_final.append(n1)
lista_final.append(n2)
else:
if len(set(lista_resta)) <= k:
lista_final.append(n2)
return lista_final
```
``` python
```
### Grupo 2 - Componentes: Xurxo et Dani
A medio hacer :-1:
_Código:_
```python
import itertools
class Solution:
def comprueba (combination):
suma = []
for i in range(n-1):
suma.append(abs(combination[i] - combination[i+1]))
if len(set(suma))==k:
return True
def recursive (n, l, k):
if (len(l)==n and comprueba(l)):
return l
if len(l)==n:
return False
for (elementos in range(n) ):
if elemento in l:
continue
l.append(l)
if not recursive (n,l,k):
l.pop()
def constructArray(self, n: int, k: int) :
start_perms = itertools.permutations(elementos,2)
recursive (n, start_perms, k)
elementos=range(1,n+1)
for combination in itertools.permutations(elementos):
```
fuerza bruta - Funciona, pero timeout
```python
import itertools
class Solution:
def constructArray(self, n: int, k: int) :
elementos=range(1,n+1)
for combination in itertools.permutations(elementos):
suma = []
for i in range(n-1):
suma.append(abs(combination[i] - combination[i+1]))
if len(set(suma))==k:
return list(combination)
s = Solution().constructArray(3,2)
print(s)
s = Solution().constructArray(3,2)
print(s)
```
### Grupo 3 - Componentes:
- Juan
- Sergio
_Código:_
```python
class Solution:
def constructArray(self, n: int, k: int) -> List[int]:
salida = []
elementos = []
for b in range(n):
elementos.append(b + 1)
if k == 1:
return elementos
pos = k
sumar = False
for b in range(k + 1):
a = k - b
salida = salida + [elementos[pos]]
if sumar:
pos += a
sumar = False
else:
pos -= a
sumar = True
salida += elementos[k+1:]
return salida
```