Skip to content

Commit 01f69ed

Browse files
author
frubio
committed
2 parents 33141e2 + e73ea65 commit 01f69ed

File tree

10 files changed

+394
-4
lines changed

10 files changed

+394
-4
lines changed

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,12 @@ Tienes toda la información extendida sobre los retos de programación semanales
7575
* **#40** - 03/10/22 - [`TRIÁNGULO DE PASCAL`](https://github.com/mouredev/Weekly-Challenge-2022-Kotlin/blob/main/app/src/main/java/com/mouredev/weeklychallenge2022/Challenge40.kt)
7676
* **#41** - 10/10/22 - [`LA LEY DE OHM`](https://github.com/mouredev/Weekly-Challenge-2022-Kotlin/blob/main/app/src/main/java/com/mouredev/weeklychallenge2022/Challenge41.kt)
7777
* **#42** - 17/10/22 - [`CONVERSOR DE TEMPERATURA`](https://github.com/mouredev/Weekly-Challenge-2022-Kotlin/blob/main/app/src/main/java/com/mouredev/weeklychallenge2022/Challenge42.kt)
78-
* **#43** - 24/10/22 - `Publicación nuevo reto...`
78+
* **#43** - 24/10/22 - [`TRUCO O TRATO`](https://github.com/mouredev/Weekly-Challenge-2022-Kotlin/blob/main/app/src/main/java/com/mouredev/weeklychallenge2022/Challenge43.kt)
79+
* **#44** - 02/11/22 - [`BUMERANES`](https://github.com/mouredev/Weekly-Challenge-2022-Kotlin/blob/main/app/src/main/java/com/mouredev/weeklychallenge2022/Challenge44.kt)
80+
* **#45** - 07/11/22 - [`CONTENEDOR DE AGUA`](https://github.com/mouredev/Weekly-Challenge-2022-Kotlin/blob/main/app/src/main/java/com/mouredev/weeklychallenge2022/Challenge45.kt)
81+
* **#46** - 14/11/22 - [`¿DÓNDE ESTÁ EL ROBOT?`](https://github.com/mouredev/Weekly-Challenge-2022-Kotlin/blob/main/app/src/main/java/com/mouredev/weeklychallenge2022/Challenge46.kt)
82+
* **#47** - 21/11/22 - [`VOCAL MÁS COMÚN`](https://github.com/mouredev/Weekly-Challenge-2022-Kotlin/blob/main/app/src/main/java/com/mouredev/weeklychallenge2022/Challenge47.kt)
83+
* **#48** - 28/11/22 - `Publicación nuevo reto...`
7984

8085
<a href="https://youtu.be/ydH_B5KuqGs"><img src="http://i3.ytimg.com/vi/ydH_B5KuqGs/maxresdefault.jpg" style="height: 50%; width:50%;"/></a>
8186

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ android {
2929
kotlinOptions {
3030
jvmTarget = '1.8'
3131
}
32+
namespace 'com.mouredev.weeklychallenge2022'
3233
}
3334

3435
dependencies {

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3-
package="com.mouredev.weeklychallenge2022">
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
43

54
<uses-permission android:name="android.permission.INTERNET" />
65

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

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

3+
import java.text.DecimalFormat
4+
35
/*
46
* Reto #42
57
* CONVERSOR DE TEMPERATURA
@@ -21,3 +23,43 @@ package com.mouredev.weeklychallenge2022
2123
*
2224
*/
2325

26+
fun main() {
27+
println(temperatureConverter("100°C"))
28+
println(temperatureConverter("100°F"))
29+
println(temperatureConverter("100C"))
30+
println(temperatureConverter("100F"))
31+
println(temperatureConverter("100"))
32+
println(temperatureConverter("100"))
33+
println(temperatureConverter("- 100 °C "))
34+
println(temperatureConverter("- 100 °F "))
35+
println(temperatureConverter("100A°C"))
36+
println(temperatureConverter("100A°F"))
37+
println(temperatureConverter("°C"))
38+
println(temperatureConverter("°F"))
39+
}
40+
41+
private fun temperatureConverter(degrees: String): String? {
42+
43+
val formatter = DecimalFormat("#.##")
44+
45+
try {
46+
47+
if (degrees.replace(" ", "").contains("°C")) {
48+
val celsiusDegrees = degrees.replace(" ", "")
49+
.replace("°C", "")
50+
.toDouble()
51+
return "${formatter.format((celsiusDegrees * 9/5) + 32)}°F"
52+
53+
} else if (degrees.replace(" ", "").contains("°F")) {
54+
val fahrenheitDegrees = degrees.replace(" ", "")
55+
.replace("°F", "")
56+
.toDouble()
57+
return "${formatter.format((fahrenheitDegrees - 32) * 5/9)}°C"
58+
}
59+
60+
} catch (e: Exception) {
61+
return null
62+
}
63+
64+
return null
65+
}
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
package com.mouredev.weeklychallenge2022
2+
3+
/*
4+
* Reto #43
5+
* TRUCO O TRATO
6+
* Fecha publicación enunciado: 24/10/22
7+
* Fecha publicación resolución: 02/11/22
8+
* Dificultad: FÁCIL
9+
*
10+
* Enunciado: Este es un reto especial por Halloween.
11+
* Deberemos crear un programa al que le indiquemos si queremos realizar "Truco o Trato" y
12+
* un listado (array) de personas con las siguientes propiedades:
13+
* - Nombre de la niña o niño
14+
* - Edad
15+
* - Altura en centímetros
16+
*
17+
* Si las personas han pedido truco, el programa retornará sustos (aleatorios)
18+
* siguiendo estos criterios:
19+
* - Un susto por cada 2 letras del nombre por persona
20+
* - Dos sustos por cada edad que sea un número par
21+
* - Tres sustos por cada 100 cm de altura entre todas las personas
22+
* - Sustos: 🎃 👻 💀 🕷 🕸 🦇
23+
*
24+
* Si las personas han pedido trato, el programa retornará dulces (aleatorios)
25+
* siguiendo estos criterios:
26+
* - Un dulce por cada letra de nombre
27+
* - Un dulce por cada 3 años cumplidos hasta un máximo de 10 años por persona
28+
* - Dos dulces por cada 50 cm de altura hasta un máximo de 150 cm por persona
29+
* - Dulces: 🍰 🍬 🍡 🍭 🍪 🍫 🧁 🍩
30+
*
31+
* Información adicional:
32+
* - Usa el canal de nuestro Discord (https://mouredev.com/discord) "🔁reto-semanal"
33+
* para preguntas, dudas o prestar ayuda a la comunidad.
34+
* - Tienes toda la información sobre los retos semanales en
35+
* https://retosdeprogramacion.com/semanales2022.
36+
*
37+
*/
38+
39+
fun main() {
40+
println(trickOrTreat(Halloween.TRICK, arrayOf(
41+
Person("Brais", 35, 177),
42+
Person("Sara", 9, 122),
43+
Person("Pedro", 5, 80),
44+
Person("Roswell", 3, 54))))
45+
46+
println(trickOrTreat(Halloween.TREAT, arrayOf(
47+
Person("Brais", 35, 177),
48+
Person("Sara", 9, 122),
49+
Person("Pedro", 5, 80),
50+
Person("Roswell", 3, 54))))
51+
}
52+
53+
enum class Halloween {
54+
TRICK, TREAT
55+
}
56+
57+
data class Person(val name: String, val age: Int, val height: Int)
58+
59+
private fun trickOrTreat(halloween: Halloween, people: Array<Person>): String {
60+
61+
val scares = arrayOf("🎃", "👻", "💀", "🕷", "🕸", "🦇")
62+
val candies = arrayOf("🍰", "🍬", "🍡", "🍭", "🍪", "🍫", "🧁", "🍩")
63+
64+
var result = ""
65+
var height = 0
66+
67+
people.forEach { person ->
68+
69+
when (halloween) {
70+
Halloween.TRICK -> {
71+
72+
// Name
73+
(1 .. (person.name.replace(" ", "").length / 2)).forEach { _ ->
74+
result += scares.random()
75+
}
76+
77+
// Age
78+
if (person.age % 2 == 0) {
79+
result += scares.random()
80+
result += scares.random()
81+
}
82+
83+
// Height
84+
height += person.height
85+
while (height >= 100) {
86+
result += scares.random()
87+
result += scares.random()
88+
result += scares.random()
89+
height -= 100
90+
}
91+
92+
}
93+
Halloween.TREAT -> {
94+
95+
// Name
96+
(1 .. (person.name.replace(" ", "").length)).forEach { _ ->
97+
result += candies.random()
98+
}
99+
100+
// Age
101+
if (person.age <= 10) {
102+
(1 .. (person.age / 3)).forEach { _ ->
103+
result += candies.random()
104+
}
105+
}
106+
107+
// Height
108+
if (person.height <= 150) {
109+
(1 .. (person.height / 50)).forEach { _ ->
110+
result += candies.random()
111+
result += candies.random()
112+
}
113+
}
114+
}
115+
}
116+
117+
}
118+
119+
return result
120+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.mouredev.weeklychallenge2022
2+
3+
/*
4+
* Reto #44
5+
* BUMERANES
6+
* Fecha publicación enunciado: 02/10/22
7+
* Fecha publicación resolución: 07/11/22
8+
* Dificultad: FÁCIL
9+
*
10+
* Enunciado: Crea una función que retorne el número total de bumeranes de un array de números
11+
* enteros e imprima cada uno de ellos.
12+
* - Un bumerán (búmeran, boomerang) es una secuencia formada por 3 números seguidos, en el que el
13+
* primero y el último son iguales, y el segundo es diferente. Por ejemplo [2, 1, 2].
14+
* - En el array [2, 1, 2, 3, 3, 4, 2, 4] hay 2 bumeranes ([2, 1, 2] y [4, 2, 4]).
15+
*
16+
* Información adicional:
17+
* - Usa el canal de nuestro Discord (https://mouredev.com/discord) "🔁reto-semanal"
18+
* para preguntas, dudas o prestar ayuda a la comunidad.
19+
* - Tienes toda la información sobre los retos semanales en
20+
* https://retosdeprogramacion.com/semanales2022.
21+
*
22+
*/
23+
24+
fun main() {
25+
26+
println(numberOfBoomerangs(arrayOf(2, 1, 2, 3, 3, 4, 2, 4)))
27+
println(numberOfBoomerangs(arrayOf(2, 1, 2, 1, 2)))
28+
println(numberOfBoomerangs(arrayOf(1, 2, 3, 4, 5)))
29+
println(numberOfBoomerangs(arrayOf(2, 2, 2, 2, 2)))
30+
println(numberOfBoomerangs(arrayOf(2, -2, 2, -2, 2)))
31+
println(numberOfBoomerangs(arrayOf(2, -2)))
32+
println(numberOfBoomerangs(arrayOf(2)))
33+
println(numberOfBoomerangs(arrayOf()))
34+
}
35+
36+
private fun numberOfBoomerangs(numbers: Array<Int>): Int {
37+
38+
if (numbers.size < 3) return 0
39+
40+
var boomerangs = 0
41+
42+
(1 until numbers.size - 1).forEach { index ->
43+
44+
val prev = numbers[index - 1]
45+
val current = numbers[index]
46+
val next = numbers[index + 1]
47+
48+
if (prev == next && prev != current) {
49+
println("[$prev, $current, $next]")
50+
boomerangs += 1
51+
}
52+
}
53+
54+
return boomerangs
55+
}
56+
57+
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.mouredev.weeklychallenge2022
2+
3+
/*
4+
* Reto #45
5+
* CONTENEDOR DE AGUA
6+
* Fecha publicación enunciado: 07/10/22
7+
* Fecha publicación resolución: 14/11/22
8+
* Dificultad: MEDIA
9+
*
10+
* Enunciado: Dado un array de números enteros positivos, donde cada uno representa unidades
11+
* de bloques apilados, debemos calcular cuantas unidades de agua quedarán atrapadas entre ellos.
12+
*
13+
* - Ejemplo: Dado el array [4, 0, 3, 6, 1, 3].
14+
*
15+
* ⏹
16+
* ⏹
17+
* ⏹💧💧⏹
18+
* ⏹💧⏹⏹💧⏹
19+
* ⏹💧⏹⏹💧⏹
20+
* ⏹💧⏹⏹⏹⏹
21+
*
22+
* Representando bloque con ⏹︎ y agua con 💧, quedarán atrapadas 7 unidades de agua.
23+
* Suponemos que existe un suelo impermeable en la parte inferior que retiene el agua.
24+
*
25+
*
26+
* Información adicional:
27+
* - Usa el canal de nuestro Discord (https://mouredev.com/discord) "🔁reto-semanal"
28+
* para preguntas, dudas o prestar ayuda a la comunidad.
29+
* - Tienes toda la información sobre los retos semanales en
30+
* https://retosdeprogramacion.com/semanales2022.
31+
*
32+
*/
33+
34+
fun main() {
35+
println(calculateWaterUnits(arrayOf(4, 0, 3, 6)))
36+
println(calculateWaterUnits(arrayOf(4, 0, 3, 6, 1, 3)))
37+
println(calculateWaterUnits(arrayOf(5, 4, 3, 2, 1, 0)))
38+
println(calculateWaterUnits(arrayOf(0, 1, 2, 3, 4, 5)))
39+
println(calculateWaterUnits(arrayOf(4, 0, 3, 6, 1, 3, 0, 1, 6)))
40+
}
41+
42+
private fun calculateWaterUnits(container: Array<Int>): Int {
43+
44+
var units = 0
45+
var wall = 0
46+
var nextWall = 0
47+
48+
container.forEachIndexed { index, blocks ->
49+
50+
if (blocks < 0) {
51+
return@forEachIndexed
52+
}
53+
54+
if (index != container.size - 1 && (index == 0 || nextWall == blocks)) {
55+
56+
wall = if (index == 0) blocks else nextWall
57+
58+
nextWall = 0
59+
for (nextBlocksIndex in index + 1 until container.size) {
60+
if (container[nextBlocksIndex] >= nextWall) {
61+
nextWall = container[nextBlocksIndex]
62+
}
63+
}
64+
} else {
65+
val referenceWall = if (nextWall > wall) wall else nextWall
66+
val currentBlocks = referenceWall - blocks
67+
units += if (currentBlocks >= 0) currentBlocks else 0
68+
}
69+
}
70+
71+
return units
72+
}

0 commit comments

Comments
 (0)