Este es un articulo para mostrar 11 ejercicios resueltos de code abbey en python.
input data: 3 5
answer: 8
Respuesta:
def apbGui():
a, b = input().split(' ')
return str(int(a) + int(b))
Explicacion: Esperamos un input de tipo str luego con el comando .split(' ') lo separamos en el caracter espacio y los guardamos en las variables a y b, las convertimos a entero y posteriormente devolvemos la suma
input data:
8
10 20 30 40 5 6 7 8
answer:
126
Respuesta:
def sumL():
return sum(list(map(int, input().split(' '))))
Explicacion: Vamos desde el centro hacia afuera. primero recibimos una lista de tipo str y las volvemos a separar en los espacios, luego hacemos un map la lista que generamos con el comando split(' ') aplicando la función int a cada uno de estos. la función map devuelve un objeto map: <map object at "direccion hexadecimal">, pero para rescatar la lista debemos usar la función list, y para sumar la una lista tenemos la función sum.
Por el formato respuesta de code abbey de aquí en adelante solo veremos retornaremos tipos string
data:
3
100 8
15 245
1945 54
answer:
108 260 1999
Respuesta:
def pL():
l = []
for i in range(int(input())):
l.append(str(sum(list(map(int,input().split(' '))))))
return " ".join(l)
Explicacion: Ya que el problema nos pide una entrada multi-linea, la forma de hacerla en python es hacer un for en una cantidad de casos, y requerir una entrada por cada paso del for y así, python leerá todos los saltos de linea. lo siguiente es es el código anterior
data:
3
5 3
2 8
100 15
answer:
3 2 15
Respuesta:
def motO():
r = []
for i in range(int(input())):
r.append(str(min([int(i) for i in input().split(' ')])))
return " ".join(r)
Explicacion:
En primera instancia. Definimos la lista de solución, otra vez hacemos una entrada multi-linea, leyendo del centro hacia afuera tomamos una entrada y la separamos y la recorremos con un List Comprehension. El cual dice que i tomara todos los valores de la entrada separada y lo convertirá en entero con la función int.
Sintaxis del List Comprehension:
[valor_de_retorno for valor_de_retorno in (lista / rango)]
Luego a esa lista de enteros le aplicamos la función min que devuelve el valor mínimo de una lista y la convertimos a string por los requerimientos para validar un problema en "Code Abbey"
data:
3
7 3 5
15 20 40
300 550 137
answer:
3 15 137
Respuesta 1: La solución anterior es valida pero para hacerlo con if and y else tengo otra solucion y explicacion.
Respuesta 2:
def mot():
l = []
func = lambda a,b, c: a if ( a < b ) and (a < c) else ( b if (b < a) and (b < c) else c)
for i in range(int(input())):
a, b, c = input().split(' ')
l.append(str(func(int(a), int(b), int(c))))
return " ".join(l)
Explicacion: Esto se ve complejo pero es mas fácil de lo que aparenta. Primero definimos la lista de retorno, luego definimos una función lambda la cual se comporta igual que una función pero solo en una linea y eso hace un poco extraña su sintaxis.
condiciones a evaluar:
Entrada | Condicion | Salida |
---|---|---|
a, b, c | si a es menor que b y c | a |
a, b, c | si b es menor que a y c | b |
a, b, c | sino es c | c |
sintaxis de la función Lambda condicional:
1 Condicion:
lambda a, b, c: a if (a < b) else b
Multicondicion:
lambda a, b, c: a if (a < b) else (b if (a < c) else c)
Esto es solo un ejemplo.
Luego hacemos una entrada de texto multilinea y la separamos con split y desempacamos la lista en variables únicas ya que listas y tuplas se pueden separar de esa manera dependiendo como este construida Ejemplo
a,b,c = [n1,n2,n3]
a,b,c = (n1,n2,n3)
Luego aplicamos la función que definimos con lambda y convertimos en string por el formato de code abbey.
input data:
1 3 5 7 9 11 ... 295 297 299 300 298 296 ... 12 10 8 6 4 2
answer:
300 1
Respuesta:
def max_arr():
l = list(map(int,input().split(' ')))
return "{} {}".format(max(l), min(l))
Explicacion: Primero leer de dentro hacia afuera. Esperamos una entrada y lo separamos en los espacios, luego le aplicamos la función int a cada uno de los elementos con ayuda de map y lo ponemos en una lista luego devolvemos el maximo y minimo de la lista con max y min y con format lo insertamos en la cadena de retorno
Nota: Se puede formatear de varias maneras pero usando {} no se debe especificar formato
input data:
3
12 8
11 -3
400 5
answer:
2 -4 80
Respuesta:
def rounding():
k = []
for i in range(int(input())):
a, b = input().split(' ')
k.append(str(round(int(a)/int(b))))
return " ".join(k)
Explicacion: Definimos la lista de retorno, luego una entrada multi-linea, desempaquetamos hacemos una entrada y la separamos y desempaquetamos en a y b, Luego leyendo de dentro hacia afuera. convertimos a y b en enteros con la función int y los dividimos y redondeamos, y convertimos a cadena.
data:
495 353 168 -39 22
answer:
257 178 76 -39 -6
Respuesta:
def ftoc():
return " ".join(list(map(str, list(map(lambda x: round(((x -32) * 5/9)) ,list(map(int, input().split(' '))))))))
Explicacion: Leyendo desde dentro hacia afuera, esperamos una entrada y la separamos, luego con ayuda de map aplicamos la funcion int y devolvemos una lista luego definimos una funcion lambda que tome un valor de x y le reste 32 y lo multiplique por 5/9 que es la formula para convertir de fahrenheit a celsius y lo redondeamos y devolvemos una lista, y con ayuda de map le aplicamos la función str y lo ponemos en una lista y retornamos en forma de cadena.
input data:
4 abracadabra
pear tree
o a kak ushakov lil vo kashu kakao
my pyx
answer:
5 4 13 2
Respuesta:
def voxelC():
func = lambda x: sum([1 for c in x if c in ['a','e','i','o','u','y']])
return " ".join([str(func(input())) for i in range(int(input()))])
Explicacion: Primeramente definimos la función que contara las vocales que es un lambda que toma x y el valor de c toma el valor de cada carácter de x y si ese valor se encuentra en la lista ['a','e','i','o','u','y'], retornara 1 a la lista, luego se aplica la función sum para sumar la lista la cual tendrá tantos 1 como vocales en x y luego hacemos una entrada multi-linea de otra manera, dejamos que i recorra un rango dado por una entrada, y aplicara a otra entrada la función lamda y convirtiéndola a cadena y luego retornamos una cadena
input data:
3
11 9 1
14 90 232
111 15 111
answer:
1 16 21
Respuesta:
def sod():
f = lambda a, b, c: (a*b) + c
x = ([str(f(a,b,c)) for a, b, c in [list(map(int, input().split(' '))) for _ in range(int(input()))]])
c = []
for i in x:
c.append(str(sum([int(p) for p in i])))
return " ".join(c)
Explicacion:
Primero definimos una función lambda que toma a, b, c y multiplica a y b y le suma c, luego leyendo de dentro hacia afuera vemos que primero tomamos una entrada multi-linea de la misma manera que en el ejercicio anterior, y gracias a la función map convertimos la entrada separada por el espacio la función int y retornamos una lista a la cual le aplicamos nuestra función lambda y convertimos el resultado en cadena para el siguiente paso. Definimos la lista de retorno, y recorremos los valores de x. Leemos de dentro hacia afuera recorremos los valores de la cadena i y p tomara el valor de cada carácter de i y lo convertirá en entero y lo pondrá en la lista y sumamos los valores y lo incluimos en los valores de retorno en forma de cadena.
data:
3
7 3 5
15 20 40
300 550 137
answer:
5 20 300
Respuesta:
def meot():
func = lambda a, b ,c: a if ((a < b) and (a > c)) or ((a > b) and (a < c)) else (b if ((b < a) and (b > c) or (b > a) and (b < c)) else c)
r = []
for i in range(int(input())):
a, b ,c = input().split()
r.append(str(func(int(a),int(b),int(c))))
return " ".join(r)
Explicacion: Definimos una función lambda
Casos a evaluar
Entrada | Condicion | O | Salida |
---|---|---|---|
a, b, c | si a < b y a > c | a > b y a < c | a |
a, b, c | si b < a y b > a | b > a y b < c | b |
a, b, c | sino es c | nada | c |
Eso es lo que ponemos en la función lambda, definimos una lista de retorno y una entrada multi-linea desempacamos en a b y c, aplicamos la funcion lambda, lo convertimos a cadena y lo incluimos en la lista para retornarlo como cadena
Fin Si leíste este articulo lo agradezco espero hayas aprendido un poco mas de este hermoso lenguaje