Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save harpiechoise/96451c17224c5d7927f0c6f4debf2ec6 to your computer and use it in GitHub Desktop.
Save harpiechoise/96451c17224c5d7927f0c6f4debf2ec6 to your computer and use it in GitHub Desktop.

10 Ejercicios de Code Abbey en python

Este es un articulo para mostrar 11 ejercicios resueltos de code abbey en python.

Suma de A+B

Link al problema

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

Suma en bucle

Link al problema

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

Sumas en bucle

Link al problema

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

Minimo de dos

Link al problema

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"

Minimo de 3

Link al problema

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.

Maximos en una lista

Link al problema

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

Redondeando

Link al problema

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.

Fahrenheit a Celsius

Link al problema

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.

Contando Vocales

Link al problema

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

Suma de digitos

Link al problema

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.

Valor medio de 3 numeros

Link al problema

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment