Skip to content

Commit fb4711c

Browse files
committed
Solucion reto mouredev#43 Kotlin
1 parent 8ab7b13 commit fb4711c

File tree

2 files changed

+146
-0
lines changed

2 files changed

+146
-0
lines changed

app/src/main/java/com/mouredev/weeklychallenge2022/Challenge43.kt

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.mouredev.weeklychallenge2022
22

3+
import kotlin.math.floor
4+
35
/*
46
* Reto #43
57
* TRUCO O TRATO
@@ -36,3 +38,114 @@ package com.mouredev.weeklychallenge2022
3638
*
3739
*/
3840

41+
/**
42+
* Enumerado con los tipos de truco o trato
43+
*/
44+
enum class TrickOrTreat {
45+
TRICK, TREAT
46+
}
47+
48+
/**
49+
* Clase que representa una pesona
50+
* @param name Nombre de la persona
51+
* @param age Edad de la persona
52+
* @param height Altura de la persona
53+
*/
54+
data class Person(val name: String, val age: Int, val height: Int)
55+
/**
56+
* Función que devuelve un array de dulces en funcion de los parametros
57+
* * - Un susto por cada 2 letras del nombre por persona
58+
* * - Dos sustos por cada edad que sea un número par
59+
* * - Tres sustos por cada 100 cm de altura entre todas las personas
60+
*
61+
* @param people Array de personas
62+
* @returns Array de sustos
63+
*/
64+
fun trick(persons: List<Person>) : ArrayList<String> {
65+
val scares: List<String> = listOf("🎃", "👻", "💀", "🕷", "🕸", "🦇")
66+
val scare = arrayListOf<String>()
67+
68+
persons.forEach { person ->
69+
val nameScares = person.name.length / 2
70+
val ageScares = if (person.age % 2 == 0) 2 else 0
71+
val heightScares = floor(persons.sumOf { it.height } / 100.0).toInt() * 3
72+
73+
val totalScares = nameScares + ageScares + heightScares
74+
scares.apply {
75+
repeat(totalScares) {
76+
scare.add(scares.shuffled().random())
77+
}
78+
}
79+
}
80+
81+
return scare
82+
}
83+
/**
84+
* Función que devuelve un array de dulces en funcion de los parametros
85+
* * - Un dulce por cada letra de nombre
86+
* * - Un dulce por cada 3 años cumplidos hasta un máximo de 10 años por persona
87+
* * - Dos dulces por cada 50 cm de altura hasta un máximo de 150 cm por persona
88+
*
89+
* @param people Array de personas
90+
* @returns Array de dulces
91+
*/
92+
fun treat(persons: List<Person>) : ArrayList<String> {
93+
val sweets: List<String> = listOf("🍰", "🍬", "🍡", "🍭", "🍪", "🍫", "🧁", "🍩")
94+
val sweet = arrayListOf<String>()
95+
persons.forEach { person ->
96+
val nameSweets = person.name.length
97+
val ageSweets = floor(person.age/ 3.0).coerceAtMost(10.0).toInt()
98+
val heightSweets = floor((person.height/50.0).coerceAtMost(3.0)).toInt()*2
99+
val totalSweets = nameSweets + ageSweets + heightSweets
100+
sweet.apply {
101+
repeat(totalSweets) {
102+
sweet.add(sweets.shuffled().random())
103+
}
104+
}
105+
}
106+
107+
108+
return sweet
109+
}
110+
111+
/**
112+
* Función que devuelve un array de sustos o dulces en funcion de los parametros
113+
* @param trickOrTreat Tipo de truco o trato
114+
* @param people Array de personas
115+
* @returns Array de sustos o dulces
116+
*/
117+
fun trickOrTreat(trickOrTreat: TrickOrTreat, persons: Array<Person>) : List<String> {
118+
return when (trickOrTreat) {
119+
TrickOrTreat.TRICK -> trick(persons.toList())
120+
TrickOrTreat.TREAT -> treat(persons.toList())
121+
}
122+
}
123+
124+
/**
125+
* Funcion principal
126+
*/
127+
fun main() {
128+
println(
129+
trickOrTreat(
130+
TrickOrTreat.TRICK, arrayOf(
131+
Person("Carmen", 7, 124),
132+
Person("Brais", 38, 170)
133+
)
134+
)
135+
)
136+
137+
println(
138+
trickOrTreat(
139+
TrickOrTreat.TREAT, arrayOf(
140+
Person("Angel", 10, 145),
141+
Person("Miguel Angel", 42, 178)
142+
)
143+
)
144+
)
145+
146+
147+
}
148+
149+
150+
151+
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.mouredev.weeklychallenge2022
2+
3+
4+
import org.junit.Assert
5+
import org.junit.Test
6+
7+
internal class Challenge43 {
8+
9+
10+
11+
@Test
12+
fun `return length treat array 40 `() {
13+
Assert.assertEquals(40, trickOrTreat(
14+
TrickOrTreat.TREAT, arrayOf(
15+
Person("Angel", 10, 145),
16+
Person("Miguel Angel", 42, 178)
17+
)
18+
).size)
19+
20+
}
21+
22+
@Test
23+
fun `return length trick array 19`() {
24+
Assert.assertEquals(19, trickOrTreat(
25+
TrickOrTreat.TRICK, arrayOf(
26+
Person("Carmen", 7, 124),
27+
Person("Brais", 38, 170)
28+
)
29+
).size)
30+
31+
}
32+
33+
}

0 commit comments

Comments
 (0)