¡El Grinch odiaba la Navidad! ¡Todo lo relacionado a la Navidad!
Ahora, por favor, no preguntes por qué. Nadie sabe con certeza la razón.
“Ya casi es Navidad, debo encontrar una forma de evitar esta atrocidad.”
Es el momento de probar tus conocimientos y resolver los retos del Grinch para robarte la Navidad.
Desde el 16 hasta el 24 de diciembre publicaremos un reto diario. Tendrás 24 horas para resolverlos y ganarte los regalos que Platzi está guardando para Navidad.
Cambia de regalo esta Navidad con Platzi: regálate aprendizaje a precio especial
“Ya sé exactamente cómo hacerlo!” El Grinch rió con la garganta.
Y confeccionó rápidamente un sombrero de Santa.
"¡Qué gran truco amargado!
Con HTML y CSS lo habré logrado”
Un gorro de Santa utilizando únicamente HTML y CSS.
1. Utiliza CodePenUna plataforma que te permite probar y compartir proyectos de frontend fácilmente.
2. Comparte el enlace de tu proyecto en twitter mencionando a @platzi y usando el hashtag #regalaconocimiento
3. Tienes 24 horas
Fernando Yerena - Grinch - Christmas Hat
Carlos Arenas - Grinch Hat Platzi
Wilmer Vera - Feliz Navidad Platzi
Guillermo Linares - Grinch HTML CSS
“Ahora todo lo que necesito es un reno…"
Eran escasos y no había ninguno para ser amaestrado.
“Eso no me detiene y crearé uno de ser necesario.
No solo uno, una nueva marca de renos que jamás serán olvidados”
Diseña un sticker de Max (el perro del Grinch) disfrazado de reno. Eres libre de usar cualquier técnica o línea gráfica. Datos interesantes sobre Max
1. Publica el diseño en Instagram tagueando a Platzi y usando el hashtag #regalaconocimiento en el caption del post.
2. Tienes 24 horas
¡Empate en el primer lugar!
Eddy Herrera - Max
Jeffrey Smith - Max odia la navidad
Diego Cruz - Max
Pedro Vergara - Max
Guillermo Linares - Max
“Me llevaré el banquete, los presentes y el árbol.
Una lista de tareas y no quedará ni rastro”
Cuando todos despierten la navidad se habrá terminado
Crea una web app para lista de tareas que no necesite backend. Puedes usar CodePen, Github.io o lo que prefieras.
1. La aplicación debe permitir: escribir una lista de tareas, marcarlas como hechas y borrarlas
2. Publica tu proyecto en Facebook mencionando a Platzi y usando el hashtag #regalaconocimiento
3. Tienes 24 horas
Santiago Molina - Lista de tareas para arruinar la navidad
ELe Estrada - Lista de tareas
Miguel Gamarra - Tareas Navideñas
Traña Michael - Lista de tareas
“¡Adelante!” y el trineo comenzó a bajar hacia las casas de la villa.
Todas iguales, los mismos jardines, puertas y perillas.
“Si entro a una, el pueblo entero habré conquistado”
Concluyó nuestro Santa amargado.
¿Sabes qué es una expresión regular? Explícalo en un tweet.
1. Publica tu explicación en twitter, menciona a @platzi y usa el hashtag #regalaconocimiento
2. Tienes 24 horas
Victor Daniel - Expresión regular
Amarilis Alveo - Expresión regular
Luis Toro - RegEx
Manuel Aguilera - RegEx
Bibliofilica - RegEx
Mientras todos dormían sin preocupación,
la nieve escondía al más determinado ladrón.
Entre cientos de casas, el malvado Claus buscaba la mejor
Descarga esta lista de casas (es un archivo .csv) que contiene identificador de casa y el número de regalos que contiene cada una.
Escribe un programa que lea este archivo y ordene las casas de mayor a menor cantidad de regalos y genere otro .csv con el resultado.
1. Puedes utilizar Python, Ruby o PHP.
2.No puedes usar funciones nativas como SORT o similares. El objetivo es que programes el algoritmo.
3. Deja el código en los comentarios de este post.
arnoldochavez
carlos_toro_12
osho99
Llenó el trineo con los regalos
¡Sus cintas! ¡Sus envoltorios! ¡Sus etiquetas! ¡Sus guirnaldas!
Escapó entre árboles y zanjas con la carga a sus espaldas
Descarga estos assets (.zip) y programa un juego tipo Road Fighter o tetris race. Un juego dónde el trineo del Grinch pueda esquivar árboles y recolectar estrellas.
1. Puedes usar cualquier motor de videjuegos o lenguaje.
2. El entregable debe correr en el navegador.
3. Publica el enlace de tu juego en Facebook mencionando a Platzi y usando el hashtag #regalaconocimiento
4. Tienes 24 horas
Jorge Andres Bocanegra - Juego
Rodney Retros - Juego
Nenu011 - Juego
Willie Velázquez - Juego
Duhamel Guerrero - Juego
“Ahora están descubriendo que ninguna Navidad llegará.
Se están despertando, se quedarán con la boca abierta un minuto o dos.
Luego los Quienes de la Villa llorarán Buaaaa"
El Grinch está orgulloso del robo. Diseña una imagen para instagram que le cuente al mundo cómo se está robando la navidad de Platzi.
1. Publica el diseño en Instagram tagueando a Platzi y usando el hashtag #regalaconocimiento en el caption del post.
2. Tienes 24 horas
Janez Campo - Post
albertogh_01 - Post
“Estamos cerca Max, no puedes desfallecer”
El pobre perro lo intentaba pero estaba a punto de desmayar,
la pendiente lo sobrepasaba y se acercaba el amanecer.
Si el plan quieren salvar, algo deben descartar.
Hay 5 cajas con dinero y diferente peso:
Caja A: $100 usd, 40kg
Caja B: $20 usd, 10kg
Caja C: $40 usd, 120kg
Caja D : $20 usd, 20kg
Caja E: $10 usd, 10kg
La bolsa del Grinch tiene una capacidad de 150kg.
Crea el algoritmo que encuentre la combinación de cajas con mayor cantidad de dinero y que no sobrepase la capacidad de la bolsa.
1. Puedes usar cualquier lenguaje de programación.
2. Crea un Gist de Github con tu algoritmo, publica el enlace en twitter, menciona a @platzi y usa el hashtag #regalaconocimiento
Israel Elias Laura - Platzi boxes
William Velazquez - Box.java
German Blandin - Entrada.in
Angel Laguna - Reto8.c
Hugo Belman - platzi.cpp
La última caja entró y la oreja levantó
Un sonido desde la villa llegaba pero no era lo que él esperaba
¡No era triste! ¿Porque aquel sonido no era triste?
¿Será que la navidad persiste?
Escribe el final de esta historia.
1. Publica el final de la historia en Twitter, menciona a @platzi y usa el hashtag #regalaconocimiento
2. Puedes crear un hilo o usar imágenes. Lo más importante es mantener la línea y estilo narrativo.
Bibliofílica - Fin de la historia
Sen - No puede ser!
Valeria Salas - Mientras el Grinch…
Omar - El malvado Claus…
Diego Cruz - La última caja entró
Platzi la mejor plataforma en educación virtual
acepto el reto
excelente
acepto el reto
Acepto el reto!
jajajajaja, buena esa imagen!
System.out.println("Challenge accepted");
“Los árboles tienen una vida secreta que sólo les es dado conocer a los que se trepan a ellos” (Reinaldo Arenas)
Pueden ver a detalle los recorridos de árboles.
Invitados todos a conocer los tipos árboles, la cantidad de aplicaciones de cada uno son incontables.
<?php $data = array(); $header = NULL; //Paso 1. Cargar archivo a un arreglo. if (($input = fopen("casa.csv", "r")) !== FALSE) { while (($line = fgetcsv($input, 20, ",")) !== FALSE) { if(!$header) $header = $line; else $data [$line[0]] = $line[1]; } fclose($input); } //print_r($data); //Validsar Paso 1. //Paso 2. Crear arbol binario. $tree = new Tree(); foreach($data as $key => $value){ $tree->insertNode(new Node($key,$value)); } //print_r($tree); //Validar Paso 2. //Paso 3. Imprime el arbol binario Descendente como "InOrden Invertido" (derecho, raíz, izquierdo). $dataResult = array(); $output = fopen('casaordenada.csv', 'w'); fputcsv($output, $header); $tree->reverseInOrdenRoot($dataResult); foreach($dataResult as $dataValue){ fputcsv($output, $dataValue); } fclose($output); echo "Reto #5 completado 7:^)"; class Tree { public $root; //Recorre árbol mientras inserta en función de valores. public function insertNode($node){ $track = &$this->root; $pivot; while ($track != null){ $pivot = $track; if($node->value < $track->value) $track =&$track->leftNode; else $track =&$track->rightNode; } if ($this->root == null) $this->root = $node; else if ($node->value < $pivot->value) $pivot->leftNode = $node; else //valores duplicados van a la derecha. $pivot->rightNode = $node; } public function reverseInOrdenRoot(&$dataResult){ $this->reverseInOrden($this->root, $dataResult); } //Impresión recursiva public function reverseInOrden($node, &$dataResult){ if ($node != null ){ $this->reverseInOrden($node->rightNode, $dataResult); $dataResult[] = array($node->key, $node->value); $this->reverseInOrden($node->leftNode, $dataResult); } } } class Node { public $key; public $value; public $leftNode; public $rightNode; public function __construct($key, $value) { $this->key = $key; $this->value = $value; } } ?>
Enseñame crakc :,v
Que la fuerza nos acompañe…

Y QUE COMIENCE EL JUEGO
Nunca me cansaré de elogiar la manera en la que Platzi logra motivar el aprendisaje constante de sus estudiantes. Los felicito, simplemente excelente!.
Espero con gran entusiasmo el RETO, y si es en JavaScriptMejor, jajajaja. Saludos!.
Yo igual espero un reto que sea algún algoritmo o algo de código de por medio…
No sólo diseño…vamos Platzi! Sorprendannos!
Las novenas en Platzi son con retos educativos. Genial.
Que emoción he ganado! 😄 Gracias Platzi, trate de igual manera participar en el del videojuego pero no alcance a terminar a tiempo, saludos!
Felicidades amigo!
Hola, me encanta la idea de los retos de grinch. Tengo una idea que quiero compartir.
Que tal si hacen este tipo de retos mas seguidos ? y de premios den punto que puedas canjear
al obtener una cierta cantidad lo puedas canjear por 1 mes de suscripción o incluso 1 semana.
O en su defecto solo puntos del perfil de usuario
Por favor no solo temas de frontend… Tambien pongan algo de backend o algoritmos
Reto + Regalos… La mejor navidad.
Para el reto #5 utilicé el método de ordenamiento por inserción el cual mantiene una sublista de items ordenados a medida que se realiza una nueva vuelta del algoritmo.
Excelentes retos!
#!/usr/bin/pythonimport csv defordenamiento(lista):#generar lista de solo regalos para ser ordenados listaReg = [] for i in range(0,len(lista)): listaReg.append(int(lista[i][1])) #Ciclo de ordenamientofor i in range(1,len(listaReg)): valorActual = listaReg[i] valorActualList = lista[i] posicion = i while posicion>0and listaReg[posicion-1]<valorActual: listaReg[posicion]=listaReg[posicion-1] lista[posicion] = lista[posicion-1] posicion = posicion-1 listaReg[posicion]=valorActual lista[posicion]=valorActualList if __name__ == "__main__": #Leer csv y aignarlo a una lista sin el headerwith open('casa.csv','r') as csvfile: reader = csv.reader(csvfile, delimiter=',') headers = [next(reader)] lista = list(reader) #metodo de ordenamiento ordenamiento(lista) #Escribir nuevo csv listaFinal = headers+lista with open('casa_ordenadas.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerows(listaFinal)
El último reto no hace la cuenta regresiva.
ya está funcionando correctamente
Ya publique mi reto de hoy aquí
😃 😄
se equivocarón con la fecha de este reto.
Dice Reto 3 - Diciembre 17
y esa fue la fecha del reto de ayer.
Corregido, gracias!
Reto 8!!!
jajajaja ya he recargado esta página más de 500 veces.
Ya hay ganador!
Soy yo!!! Gracias platzi!!!
muchas gracias Platzi, de corazón muchisimas gracias!!!
Los retos están súper buenos, pero me gustaría que siguieran todo el año, no solamente para estas fechas. Gracias Platzi.
concuerdo, deberian realizar mas retos y como no pueden estar todo el tiempo regalando meses de subscripcion que cada cierta cantidad de retos que completen podrian dar una al usuario claro dependiendo de la dificultad algo similar a un sistema de puntuacion separado de la reputacion
seria también bueno algo con javascript
el reto #3 es para ti 😉
y algo de backend… o de algoritmos…
reto #8
A qué hora salen los ganadores del reto #8?
Challenge accepted!
Querido @grinch
Muchisimas gracias por esta actividad fue bastante divertido.
¿Cuándo y cómo se entregarán los regalos?
El equipo se está contactando con los ganadores y asignando los premios
Siguiente reto:
Averiguar por qué el Grinch odiaba la Navidad.
Nadie sabe pero dicen que era porque sus zapatos estaban muy ajustados y su corazón tenía la mitad del tamaño de uno normal 😉
Saludos a todos…
Para la solución de este retor #5 utilice el método de ordenamiento QuickSort, código hecho en python.
El método QuickSort permite realizar un ordenamiento mucho más rápido que los método convencionales como inserción, selección y burbuja que se puede observar
aqui. consiste en la implementación de recursividad, funciona perfecto para elementos que estén en total desorden, es por eso que en una cantidad de elementos tan grande como la de este reto es perfecto. Se basa en el famoso principio de divide y vencerás, facilitando el ordenamiento de dos arreglos pequeños de una manera mas rapida que con uno arreglo grande…
De paso Gracias, pero muchas gracias platzi por estos espacios de participación tan geniales, #regalaconocimiento …
''' @__AndresToro Created By: Carlos Andres Toro Estudent of System Engineer Universiti of Nariño Country: Colombia City: Pasto '''import csv defpartition_index(arr, low, high): pivot = int(arr[high][1]) i = low-1for j in range(low, high): point = int(arr[j][1]) if point >= pivot: i = i+1 arr[i], arr[j] = arr[j], arr[i] arr[i+1], arr[high] = arr[high], arr[i+1] return i+1defquick_sort(arr, low, high):if low < high: index = partition_index(arr, low, high) quick_sort(arr, low, index-1) quick_sort(arr, index+1, high) defsort_array(arr): head = arr[0] arr = arr[1:] n = len(arr) quick_sort(arr, 0, n-1) # array sorted arr.insert(0, head) return arr defread_file_csv():with open('casa.csv') as File: reader = csv.reader(File, delimiter=',') arr = [] for row in reader: arr.append(row) return arr defwrite_new_file_csv(arr):with open('sort_casa.csv', 'w') as new_file: write = csv.writer(new_file) write.writerows(arr) if __name__ == "__main__": # read file casa.csv and create arr arr = read_file_csv() # Sort arr, used QuickSort method arr = sort_array(arr) # Write a new file sorted write_new_file_csv(arr)****
Reto #5 en PHP
<?php //Variables $row = 1; $casas = array(); $filename = "casa.csv"; //Obtener los datos del csv if (($handle = fopen($filename, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $num = count($data); $row++; $casas[] = $data; } fclose($handle); } //Ordenar de mayor a menor según la cantidad de regalos for($j = 0; $j < count($casas); $j ++) { for($i = 0; $i < count($casas)-1; $i ++){ if($casas[$i][1] < $casas[$i+1][1]) { $temp = $casas[$i+1][1]; $casas[$i+1][1]=$casas[$i][1]; $casas[$i][1]=$temp; } } } //Guardar el orden en otro archivo csv $fp = fopen('result.csv', 'w'); foreach ($casas as $fields) { fputcsv($fp, $fields); } fclose($fp); ?>
Saludos, para el reto #5 he implementado Radix Sort que es un algoritmo de ordenamiento no-comparativo con una complejidad en el peor caso de O(wn) donde w es la cantidad de dígitos que tienen los números y n la cantidad de elementos en la lista. 😃
import timeit import csv defgetMax(ar): m = ar[0][1] for x in ar: if x[1] > m: m = x[1] return m defcountSort(ar, n, e): count = [0]*10 output = [None]*n for x in ar: count[(x[1]//e)%10] += 1for i in range(1,10): count[i] += count[i-1] for x in reversed(ar): output[count[(x[1]//e)%10]-1] = x count[(x[1]//e)%10] -= 1for i in range(n): ar[i] = output[i] defradix_sort(ar): m = getMax(ar) e = 1 n = len(ar) while m//e>0: countSort(ar,n,e) e *= 10with open('casa.csv') as csvfile: reader = csv.reader(csvfile, delimiter=',') array = [] first = Truefor row in reader: if first: first = Falseelse: array.append([row[0], int(row[1])]) print('Iniciando ordenamiento') s = timeit.default_timer() radix_sort(array) x = timeit.default_timer() print('Ordenamiento finalizando\nTiempo:\n', x - s) with open('casa_sorted.csv', 'w') as new_file: write = csv.writer(new_file) write.writerows(array)
No gané pero me alegra que mi trabajo estuvo en las menciones honorificas, sin decir que me diverti haciendolo 😄 ojala haya más retos con tematicas aunque no pongan premios, el simple hecho de luchar con un reto es gratificante
Estoy de acuerdo!
Reto #5 Completado
<?php $filenameRead = 'casa.csv'; $arrayDataFileRead = []; // Abrir el archivo para leerlo if (($openFile = fopen("{$filenameRead}", "r")) !== false) { while (($data = fgetcsv($openFile, 1000, ",")) !== false) { // Cada array individual se está insertando en un array anidado $arrayDataFileRead[] = $data; } // cerrar el archivo fclose($openFile); } $i = 0; $change = true; $x = 0; while ($change) { $change = false; for($i=0; $i < count($arrayDataFileRead)-1; $i++) { if ($arrayDataFileRead[$i][1] < $arrayDataFileRead[$i+1][1] ) { $x = $arrayDataFileRead[$i]; // Intercambiar los datos $arrayDataFileRead[$i] = $arrayDataFileRead[$i+1]; $arrayDataFileRead[$i+1] = $x; $change = true; // mostrar que ocurrió un intercambio } } } function convertToCsv($inputArray, $outputFileName, $delimiter) { $tempMemory = fopen('php://memory', 'w'); // recorrer el array foreach ($inputArray as $line) { fputcsv($tempMemory, $line, $delimiter); } fseek($tempMemory, 0); // Modificar el encabezado para que sea en formato CSV. header('Content-Type: application/csv'); header('Content-Disposition: attachement; filename="'.$outputFileName.'";'); // salida el archivo a descargar fpassthru($tempMemory); } // Llamando la funcion que convierte y descarga el archivo convertToCsv($arrayDataFileRead, 'otro.csv', ','); ?>
Reto 2 completado
Espero sea bien calificado, gracias fue entretenido.
Saben qué?
<challenge/><accepted/>
Dale calor
Listo
Esta es mi participación, hecho en PHP utilizando el algoritmo QuickSort
<?php $csvFileName = 'casa.csv'; $csvFinalFilename = 'casas_ordenadas.csv'; //Cargamos el archivo csv $csvFile = file_get_contents($csvFileName); //Convertimos el archivo CSV a Array $csvArray = csvToArray($csvFile); //Ordenamos los valores con el algoritmo de QuickSort quick_sort($csvArray, 1, count($csvArray)-2); //Convertimos de Array a CSV $csvFinal = arrayToCSV($csvArray); //Guardamos el archivo file_put_contents($csvFinalFilename, $csvFinal); //@ Convierte los datos CSV a Array//# Con explode creamos un array delimitado por PHP_EOL (salto de linea)//# Recorremos el array creado empezando por el espacio 2 (para ignorar//# la primer fila que contine el nombre de las columnas) y realizamos//# lo mismo con explode pero esta vez delimitado por ',' así separamos//# los dos valores (ID y Number)functioncsvToArray($csv){ $arr = explode(PHP_EOL, $csv); for ($i=1; $i<count($arr); $i++) { $arr[$i] = explode(',', $arr[$i]); $arr[$i][1] = intval($arr[$i][1]); } return $arr; } //@ Convierte los datos Array a CSV//# Simplemente recorremos el array y aplicamos implode para unirlos con//# primero por comas y despues por PHP_EOL (saltos de lineas)//* Los titulos no los unimos porque ya estan unidosfunctionarrayToCSV($arr){ $lineArr = []; $lineArr[] = $arr[0]; for ($i=1; $i<count($arr); $i++) { $lineArr[] = implode(',', $arr[$i]); } $csv = implode(PHP_EOL, $lineArr); return $csv; } //@ Este es el algoritmo QuickSort//@ Lo que este algoritmo hace es tomar como un pivote un valor del array y comparar//@ los valores del array con este, si el valor es menor al pivote lo ordenamos del//@ lado izquierda del array//@ si el valor es mayor al pivote lo ordenamos del lado derecho del array//# Comenzamos con un inicio y offset dado//# Tomamos como pivote el ultimo valor del array//# Comenzamos a comparar y trasladar los valores del array//# Comparamos los valores izquierda (empezando en el valor inicio)//# y derecha (empezando en el valor final del array - 1, para no tomar el pivote)//# Si el valor izquierdo es mayor al valor del pivote y si valor derecho es menor//# al pivote los intercambiamos//# y movemos la posicion izquierda un paso a la derecha y la posicion derecha un paso//# a la izquierda//# Si el valor izquierdo es mayor al valor del pivote pero el derecho es mayor tambien//# disminuimos un paso la posicion derecha//# Si el valor izquierdo es menor al valor del pivote entonces aumentamos un paso a la//# posicion izquierda//# Repetimos la comparación y traslado hasta que la posicion izquierda sea mayor o igual//# que la posicion derecha//# Terminando de comparar y trasladar checamos el valor de la posicion izquierda y si es//# menor que el valor del pivote movemos su posicion hasta la derecha, una vez que terminemos//# de posicionar el lado derecho en un valor mayor o igual al valor del pivote, intercambiamos//# de lugar el pivote y la posicion izquierda//# Terminando calculamos la cantidad de valores que hay en el array a la izquierda y derecha//# del pivote (que ahora debera de estar posicionado en el lugar que le corresponde en el array//# oredenado) y si la cantidad de valores del lado izquierdo es mayor a 0 aplicamos el algoritmo//# de QuickSort al pedazo izquierdo, y de igual manera si la cantidad de valores del lado derecho//# es mayor a 0 aplicamos el algoritmo de Quicksort al pedazo derecho, y así se creara una//# recursividad que una vez finalizada nos devolvera el array ordenadofunctionquick_sort(&$arr, $start, $offset){ $pivot = $start + $offset; $pivotValue = $arr[$pivot]; $checkStart = $start; $checkEnd = $pivot - 1; while ($checkStart <= $checkEnd) { if ($arr[$checkStart][1]>$pivotValue[1]) { if ($arr[$checkEnd][1]<=$pivotValue[1]) { $tmpValue = $arr[$checkStart]; $arr[$checkStart] = $arr[$checkEnd]; $arr[$checkEnd] = $tmpValue; $checkStart++; $checkEnd--; } else { $checkEnd--; } } else { $checkStart++; } } while ($arr[$checkStart][1]<$pivotValue[1]) { $checkStart++; } $arr[$pivot] = $arr[$checkStart]; $arr[$checkStart] = $pivotValue; $offsetLeft = $checkStart - $start - 1; $offsetRight = $start + $offset - $checkStart - 1; if ($offsetLeft > 0) { quick_sort($arr, $start, $offsetLeft); } if ($offsetRight > 0) { quick_sort($arr, $checkStart + 1, $offsetRight); } } ?>
Aquí esta la correción (porqué lo habia realizado de menor a mayor primero 😛)
<?php $csvFileName = 'casa.csv'; $csvFinalFilename = 'casas_ordenadas.csv'; //Cargamos el archivo csv $csvFile = file_get_contents($csvFileName); //Convertimos el archivo CSV a Array $csvArray = csvToArray($csvFile); //Ordenamos los valores con el algoritmo de QuickSort quick_sort($csvArray, 1, count($csvArray)-2); //Convertimos de Array a CSV $csvFinal = arrayToCSV($csvArray); //Guardamos el archivo file_put_contents($csvFinalFilename, $csvFinal); //@ Convierte los datos CSV a Array//# Con explode creamos un array delimitado por PHP_EOL (salto de linea)//# Recorremos el array creado empezando por el espacio 2 (para ignorar//# la primer fila que contine el nombre de las columnas) y realizamos//# lo mismo con explode pero esta vez delimitado por ',' así separamos//# los dos valores (ID y Number)functioncsvToArray($csv){ $arr = explode(PHP_EOL, $csv); for ($i=1; $i<count($arr); $i++) { $arr[$i] = explode(',', $arr[$i]); $arr[$i][1] = intval($arr[$i][1]); } return $arr; } //@ Convierte los datos Array a CSV//# Simplemente recorremos el array y aplicamos implode para unirlos con//# primero por comas y despues por PHP_EOL (saltos de lineas)//* Los titulos no los unimos porque ya estan unidosfunctionarrayToCSV($arr){ $lineArr = []; $lineArr[] = $arr[0]; for ($i=1; $i<count($arr); $i++) { $lineArr[] = implode(',', $arr[$i]); } $csv = implode(PHP_EOL, $lineArr); return $csv; } //@ Este es el algoritmo QuickSort//@ Lo que este algoritmo hace es tomar como un pivote un valor del array y comparar//@ los valores del array con este, si el valor es menor al pivote lo ordenamos del//@ lado izquierda del array//@ si el valor es mayor al pivote lo ordenamos del lado derecho del array//# Comenzamos con un inicio y offset dado//# Tomamos como pivote el ultimo valor del array//# Comenzamos a comparar y trasladar los valores del array//# Comparamos los valores izquierda (empezando en el valor inicio)//# y derecha (empezando en el valor final del array - 1, para no tomar el pivote)//# Si el valor izquierdo es menor o igual al valor del pivote y si valor derecho es mayor//# al pivote los intercambiamos//# y movemos la posicion izquierda un paso a la derecha y la posicion derecha un paso//# a la izquierda//# Si el valor izquierdo es menor o igual al valor del pivote pero el derecho es menor//# o igual tambien, disminuimos un paso la posicion derecha//# Si el valor izquierdo es mayor al valor del pivote entonces aumentamos un paso a la//# posicion izquierda//# Repetimos la comparación y traslado hasta que la posicion izquierda sea mayor o igual//# que la posicion derecha//# Terminando de comparar y trasladar checamos el valor de la posicion izquierda y si es//# mayor o igual que el valor del pivote movemos su posicion hasta la derecha, una vez que//# terminemos de posicionar el lado derecho en un valor mayor o igual al valor del pivote,//# intercambiamos de lugar el pivote y la posicion izquierda//# Terminando calculamos la cantidad de valores que hay en el array a la izquierda y derecha//# del pivote (que ahora debera de estar posicionado en el lugar que le corresponde en el array//# oredenado) y si la cantidad de valores del lado izquierdo es mayor a 0 aplicamos el algoritmo//# de QuickSort al pedazo izquierdo, y de igual manera si la cantidad de valores del lado derecho//# es mayor a 0 aplicamos el algoritmo de Quicksort al pedazo derecho, y así se creara una//# recursividad que una vez finalizada nos devolvera el array ordenadofunctionquick_sort(&$arr, $start, $offset){ $pivot = $start + $offset; $pivotValue = $arr[$pivot]; $checkStart = $start; $checkEnd = $pivot - 1; while ($checkStart <= $checkEnd) { if ($arr[$checkStart][1]<=$pivotValue[1]) { if ($arr[$checkEnd][1]>$pivotValue[1]) { $tmpValue = $arr[$checkStart]; $arr[$checkStart] = $arr[$checkEnd]; $arr[$checkEnd] = $tmpValue; $checkStart++; $checkEnd--; } else { $checkEnd--; } } else { $checkStart++; } } while ($arr[$checkStart][1]>=$pivotValue[1]) { $checkStart++; } $arr[$pivot] = $arr[$checkStart]; $arr[$checkStart] = $pivotValue; $offsetLeft = $checkStart - $start - 1; $offsetRight = $start + $offset - $checkStart - 1; if ($offsetLeft > 0) { quick_sort($arr, $start, $offsetLeft); } if ($offsetRight > 0) { quick_sort($arr, $checkStart + 1, $offsetRight); } } ?>
Reto aceptado
<coding...>
Vamo a darle
alert("Reto Aceptado.");
<tres
This is a reference?
me gustó más el juego de Rodney Retros 😃 el ganador es imposible de ganar 😦
*el juego de el ganador
Challenge accepted
Lets play Grinch!
Ansioso por los retos de navidad que empiecen las platzi olimpiadas =)
Listo 😃
Happy Platzi Hack
Tweet
Tweet
go
Estos retos parecen estar enfocados en diseñadores y desarrolladores frontend 😦
En cada reto aumenta la recompensa
Valoro mucho la programación y creo que Platzi también
Por eso ese esfuerzo quizás quede mejor al último, como el postre 😃
El reto #8 te va a gustar
Si!
Excelente este tipo de retos, nos anima a practicar y aplicar los conocimientos.
Listo el reto
print("Challenge accepted! 👩💻")
mi juego del grinch https://www.facebook.com/santiaguf1/posts/10215346806277150
Reto #7 Completado.
https://www.instagram.com/p/Brv-h40l4Fu/
El post fue publicado a las 6 y unos minutos, el comentario no lo había publicado hasta que regrese… Por sí genera confusión.
Hola, hay un error en el contador, sino recargas la pagina solo pasan y se reinician los segundos y queda en el mismo minuto.
A mi si me funciona el contador
Listo y preparado 💪💪💪
Esto se pone bueno… jo jo jo!
¡Hasta el 31 de Diciembre!
Bueh almenos tuve mención honorifica :v nada mal para hacer todo en una hora xD
Manos a la obra!!!
Challenger aceptado
excelente ; #regalaconocimiento
Acepto el reto
Una expresión regular: es modo de búsqueda donde se utilizan secuencias de caracteres alfabéticos, números o caracteres especiales, para dar un resultado y reconocer o descartar una cadena de texto.
Ejemplo:
/?( Grinch*)(?! Grinch) encontrar al Grinch en texto.
Hola!
Aqui está mi código del reto #5 del Grinch 😃
Use como base el algoritmo Quicksort por si a alguno le interesa y tambien lo quiere implementar
import csv defsort(sortList, KEYS): sortedLeftList = [] sortedRightList = [] pivotList = [] # Selecciono un numero para tenerlo como base pivot = int(sortList[0][KEYS[1]]) # Ordeno la lista usando el pivot como punto intermediofor row in sortList: num = int(row[KEYS[1]]) if num == pivot: pivotList.append({KEYS[0]: row[KEYS[0]], KEYS[1]: num}) elif num < pivot: sortedLeftList.append({KEYS[0]: row[KEYS[0]], KEYS[1]: num}) else: sortedRightList.append({KEYS[0]: row[KEYS[0]], KEYS[1]: num}) # Se sigue ejecutando la funcion hasta que quede un elemento en cada listaif len(sortedLeftList) > 1: sortedLeftList = sort(sortedLeftList, KEYS) if len(sortedRightList) > 1: sortedRightList = sort(sortedRightList, KEYS) # Regreso la nueva lista ya ordenada sortedList = [*sortedLeftList, *pivotList, *sortedRightList] return sortedList defmain():with open('casa.csv', mode='r') as csvFileRead: csv_reader = csv.DictReader(csvFileRead) KEYS = csv_reader.fieldnames sorted_csv = sort(list(csv_reader), KEYS) with open('sorted.csv', mode='w', newline='') as csvFileWrite: newCsvFile = csv.writer( csvFileWrite, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) newCsvFile.writerow(['ID', 'Number']) for row in sorted_csv: newCsvFile.writerow([row[KEYS[0]], row[KEYS[1]]]) main()
Hola que tal Platzi, dejo mi aporte para el Reto 5, Utilicé el ordenamiento quickSort en PHP partiendo desde la obtención del archivo CSV hasta su descarga. (Comenté cada parte dentro del código)
¿Por qué quickSort?
Al establecer el lineamiento de que nosotros teníamos que hacer el ordenamiento opté por la decisión de dos mundos burbuja o quicksort, sin embargo la cantidad no es muy grande lo que hace a quicksort mas eficiente a la hora de clasificar los elementos y recursar esa misma función.
Sin mas preámbulos dejo mi código en GIST de Githbub
Reto 5 Carlos Garcia - GATEJECA
Saludos. Para ordenar las casas utilicé Heapsort. Heapsort tiene 2 ventajas sobre quicksort, la primera es una complejidad en peor caso de O(nlogn), mientras que quicksort tiene una complejidad en el peor caso de O(n^2). La segunda es una complejidad espacial de O(1), mientras que quicksort tiene una complejidad espacial de O(n). La implementación de heapsort esta basada en esta https://rosettacode.org/wiki/Sorting_algorithms/Heapsort#Python
import csv arr=[] header=[] def heapsort(lst): for startinrange(int((len(lst)-2)/2), -1, -1): siftdown(lst, start, len(lst)-1) forendinrange(len(lst)-1, 0, -1): lst[end][1], lst[0][1] = lst[0][1], lst[end][1] siftdown(lst, 0, end - 1) return lst def siftdown(lst, start, end): root = startwhileTrue: child = root * 2 + 1ifchild > end: break ifchild + 1 <= endandint(lst[child][1]) > int(lst[child + 1][1]): child += 1ifint(lst[root][1]) > int(lst[child][1]): lst[root][1], lst[child][1] = lst[child][1], lst[root][1] root = childelse: break withopen('casa.csv','r') as csv_file: reader = csv.reader(csv_file) for idx, line in enumerate(reader): if idx==0: header.append(line) else: arr.append(line) arr=header+heapsort(arr) withopen('casa_ordenado.csv','w') as new_file: writer=csv.writer(new_file) forrowin arr: writer.writerow(row)
Teoria de complejidad,
Viva el algoritmo heapsort
Feliz navidad amigos!!!
<?php //leer archivo csv y retornar array associativo function leer_csv($rutaArchivo){ $arraydedatos = []; $archivo = @fopen($rutaArchivo, "r"); $encabezado = fgetcsv($archivo, 20); while ($dato = fgetcsv($archivo, 20)) { $dato = [$encabezado[0] => $dato[0], $encabezado[1] => (int) $dato[1]]; array_push($arraydedatos,$dato); } fclose($archivo); return $arraydedatos; } //ordena los elememntos usando algoritmo heapsort y retorna datos ordenados function ordenar($datos){ $longitud = count($datos); while ($longitud > 0){ $ultima_posision = $longitud - 1; $ultimo_padre = (int) floor(($ultima_posision - 1) / 2); while ($ultimo_padre >= 0) { $posision_hijo_izquierdo = (2 * $ultimo_padre) + 1; $posision_hijo_derecho = (2 * $ultimo_padre) + 2; //verficar propiedad heap $tempval_padre = $datos[$ultimo_padre]; $tempval_hijoizquierdo = $datos[$posision_hijo_izquierdo]; $tempval_hijoderecho = $posision_hijo_derecho > $ultima_posision ? false : $datos[$posision_hijo_derecho]; //permutar datos if ($tempval_hijoderecho){ if ($tempval_padre['Number'] < $tempval_hijoderecho['Number']){ $datos[$ultimo_padre] = $tempval_hijoderecho; $datos[$posision_hijo_derecho] = $tempval_padre; $tempval_padre = $datos[$ultimo_padre]; } } if ($tempval_padre['Number'] < $tempval_hijoizquierdo['Number']){ $datos[$ultimo_padre] = $tempval_hijoizquierdo; $datos[$posision_hijo_izquierdo] = $tempval_padre; } $ultimo_padre--; } //permutar valor calculado $primer_valor = $datos[0]; $ultimo_valor = $datos[$ultima_posision]; $datos[$ultima_posision] = $primer_valor; $datos[0] = $ultimo_valor; $longitud--; } return $datos; } //crea un nuevo archivos CSV con los datos ordenados function crear_csv($datos){ $nuevo_archivo = fopen('casa_ordenado.csv', 'w'); fputcsv($nuevo_archivo, ['ID', 'Number'], ',', ' '); foreach ($datos as $dato) { fputcsv($nuevo_archivo, $dato, ',', ' '); } rewind($nuevo_archivo); fclose($nuevo_archivo);
He corregido mi código, no me había fijado que era de mayor a menor 😮
import timeit import csv defgetMax(ar): m = ar[0][1] for x in ar: if x[1] > m: m = x[1] return m defcountSort(ar, n, e): count = [0]*10 output = [None]*n for x in ar: try: count[9-(x[1]//e)%10] += 1except: count[9] += 1for i in range(1,10): count[i] += count[i-1] for x in reversed(ar): try: output[count[9-(x[1]//e)%10]-1] = x count[9-(x[1]//e)%10] -= 1except: output[count[9]-1] = x count[9] -= 1for i in range(n): ar[i] = output[i] defradix_sort(ar): m = getMax(ar) e = 1 n = len(ar) while m//e>0: countSort(ar,n,e) e *= 10with open('casa.csv') as csvfile: reader = csv.reader(csvfile, delimiter=',') array = [] first = Truefor row in reader: if first: first = Falseelse: array.append([row[0], int(row[1])]) print('Iniciando ordenamiento') s = timeit.default_timer() radix_sort(array) x = timeit.default_timer() print('Ordenamiento finalizando\nTiempo:\n', x - s) with open('casa_sorted.csv', 'w') as new_file: write = csv.writer(new_file) write.writerows(array)
Codigo corregido
ordenar de menor a mayor
algoritmo Heapsort
Feliz navidad!!
<?php //leer archivo csv y retornar array associativo function leer_csv($rutaArchivo){ $arraydedatos = []; $archivo = @fopen($rutaArchivo, "r"); $encabezado = fgetcsv($archivo, 20); while ($dato = fgetcsv($archivo, 20)) { $dato = [$encabezado[0] => $dato[0], $encabezado[1] => (int) $dato[1]]; array_push($arraydedatos,$dato); } fclose($archivo); return $arraydedatos; } //ordena los elememntos usando algoritmo heapsort y retorna datos ordenados function ordenar($datos){ $longitud = count($datos); while ($longitud > 0){ $ultima_posision = $longitud - 1; $ultimo_padre = (int) floor(($ultima_posision - 1) / 2); while ($ultimo_padre >= 0) { $posision_hijo_izquierdo = (2 * $ultimo_padre) + 1; $posision_hijo_derecho = (2 * $ultimo_padre) + 2; //verficar propiedad heap $tempval_padre = $datos[$ultimo_padre]; $tempval_hijoizquierdo = $datos[$posision_hijo_izquierdo]; $tempval_hijoderecho = $posision_hijo_derecho > $ultima_posision ? false : $datos[$posision_hijo_derecho]; //permutar datos if ($tempval_hijoderecho){ if ($tempval_padre['Number'] > $tempval_hijoderecho['Number']){ $datos[$ultimo_padre] = $tempval_hijoderecho; $datos[$posision_hijo_derecho] = $tempval_padre; $tempval_padre = $datos[$ultimo_padre]; } } if ($tempval_padre['Number'] > $tempval_hijoizquierdo['Number']){ $datos[$ultimo_padre] = $tempval_hijoizquierdo; $datos[$posision_hijo_izquierdo] = $tempval_padre; } $ultimo_padre--; } //permutar valor calculado $primer_valor = $datos[0]; $ultimo_valor = $datos[$ultima_posision]; $datos[$ultima_posision] = $primer_valor; $datos[0] = $ultimo_valor; $longitud--; } return $datos; } //crea un nuevo archivos CSV con los datos ordenados function crear_csv($datos){ $nuevo_archivo = fopen('casa_ordenado.csv', 'w'); fputcsv($nuevo_archivo, ['ID', 'Number'], ',', ' '); foreach ($datos as $dato) { fputcsv($nuevo_archivo, $dato, ',', ' '); } rewind($nuevo_archivo); fclose($nuevo_archivo); } //ejecucionde las funciones paso a paso $casas = leer_csv('casa.csv'); $casas = ordenar($casas); crear_csv($casas);
Acá va el codigo, lo hice en PHP. Para que funcione, el archivo ‘casa.csv’ tiene que estar en el mismo directorio que el script PHP.
<?php $casas = leerDatosDeArchivos(); //obtenemos las claves del arreglo obtenido $claves = array_keys($casas); //Ordenamos las claves $clavesOrdenadas = mergeSort($claves); //Armamos el arreglo a imprimir en el csv de salida $salida = []; for($i = 0; $i < count($clavesOrdenadas); $i++) { $salida[$casas[$clavesOrdenadas[$i]]] = $clavesOrdenadas[$i]; } guardarDatosEnArchivo($salida); function mergeSort($arreglo) { if(count($arreglo) <= 1) { //El arreglo ya está ordenado return $arreglo; } //Dividimos el arreglo en dos $medio = count($arreglo) / 2; $izquierda = []; for($i = 0; $i < $medio; $i++) { $izquierda[] = $arreglo[$i]; } $derecha = []; for($i = $medio; $i < count($arreglo); $i++) { $derecha[] = $arreglo[$i]; } $izquierda = mergeSort($izquierda); $derecha = mergeSort($derecha); //Comparamos si el ultimo elemento del primer arreglo es menor que el primer elemento del segundo arreglo if($izquierda[count($izquierda) - 1] <= $derecha[0]) { //Concatenamos el arreglo de la derecha al de la izquierda return array_merge($izquierda, $derecha); } return combinar($izquierda, $derecha); } function combinar($izquierda, $derecha) { $res = []; while (count($izquierda) > 0 && count($derecha) > 0) { // Agregamos el elemento con menor valor entre los dos de cada arreglo if ($izquierda[0] <= $derecha[0]) { $res[] = $izquierda[0]; //eliminamos el elemento añadido array_shift($izquierda); } else { $res[] = $derecha[0]; //eliminamos el elemento añadido array_shift($derecha); } } //vaciamos los restos de los arreglos, segun corresponda while (count($izquierda) > 0) { $res[] = $izquierda[0]; array_shift($izquierda); } while (count($derecha) > 0) { $res[] = $derecha[0]; array_shift($derecha); } return $res; } function leerDatosDeArchivos() { $datosArchivo = file_get_contents('casa.csv'); $datos = array_map(function ($element) { return explode(',', $element); }, explode(PHP_EOL, $datosArchivo)); array_shift($datos); $arreglo = []; for ($i = 0; $i < count($datos); $i++) { $arreglo[$datos[$i][1]] = $datos[$i][0]; } return $arreglo; } function guardarDatosEnArchivo($datos) { $fp = fopen('casa_salida.csv', 'wb'); // agregamos los headers al archivo fputcsv($fp, ['ID','Number']); foreach($datos as $idCasa => $numero) { $linea = [$idCasa, $numero]; fputcsv($fp, $linea); } fclose($fp); }
Como hago para eliminar un comentario. ¿Se puede?
Reto #5. Utilizando el algoritmo de ordenamiento Shell Sort, inventado por Donald Shell en 1959. Es util, ya que no consume mucha memoria.
<?php $arrayCSV = readFileCSV('casa.csv'); $arrayOrder = shellSort($arrayCSV); $csv_modificado = makeCSV($arrayOrder, "casaOrdenada.csv"); function readFileCSV($file){ $file = fopen("{$file}", "r"); $data = []; while (($datos = fgetcsv($file, ","))){ $data[] = [ 'id' => $datos[0], 'cantidad' => $datos[1] ]; } fclose($file); return $data; } function shellSort($arrayData){ $inc = round(count($arrayData)/2); while($inc > 0){ for($i = $inc; $i < count($arrayData);$i++){ $temp = $arrayData[$i]; $j = $i; while($j >= $inc && $arrayData[$j-$inc]['cantidad'] < $temp['cantidad']){ $arrayData[$j] = $arrayData[$j - $inc]; $j -= $inc; } $arrayData[$j] = $temp; } $inc = round($inc/2.2); } return $arrayData; } function makeCSV($data, $fileName){ $tempMemory = fopen('php://memory', 'w'); foreach ($data as $line) { fputcsv($tempMemory, $line, ","); } fseek($tempMemory, 0); header('Content-Type: application/csv'); header('Content-Disposition: attachement; filename="' . $fileName . '";'); fpassthru($tempMemory); } ?>```
**CODE FTW 😄

**
<code> <?PHP function readCSV($csvFile){ $file = fopen($csvFile, 'r'); while (!feof($file) ) { $line[] = fgetcsv($file,1024,","); } fclose($file); return $line; } function orderDESC($doc){ for($i=1;$i<count($doc);$i++) { for($j=$i+1;$j<count($doc);$j++) { if($doc[$j][1]>$doc[$i][1]) { $tmp=$doc[$i]; $doc[$i]=$doc[$j]; $doc[$j]=$tmp; } } } return ($doc); } function toCSV($doc){ header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="Grinch.csv"'); $fp = fopen('php://output', 'w'); foreach ($doc as $fields) { fputcsv($fp, $fields); } fclose($fp); } $csvFile = 'casa.csv'; $csv = readCSV($csvFile); toCSV(orderDESC($csv)); ?>
Reto # 5
Realizado en Python
from time import time import csv with open('casa.csv', 'r') as File: casas = File.read().splitlines() casas.remove(casas[0]) aux = [] for c in casas: aux.append(int(c.split(',')[1])) defordenar(): mitad = len(aux)//2while mitad > 0: for i in range(mitad): for i in range(i+mitad,len(aux),mitad): val = aux[i] pos = i while pos>=mitad and aux[pos-mitad]<val: aux[pos]=aux[pos-mitad] casas[pos] = casas[pos-mitad] pos = pos-mitad aux[pos]=val casas[pos] = casas[i] mitad = mitad // 2 t1 = time() ordenar() t2 = time() with open('casas2.csv', 'w', newline='') as File: writer = csv.writer(File) writer.writerows(casas) print(aux) print(t2-t1)
Acá va de nuevo el código en PHP. Ahora ordena de mayor a menor, y no de menor a mayor. Para que funcione, el archivo ‘casa.csv’ tiene que estar en el mismo directorio que el script PHP.
Saludos
<?php $casas = leerDatosDeArchivos(); //obtenemos las claves del arreglo obtenido $claves = array_keys($casas); //Ordenamos las claves $clavesOrdenadas = mergeSort($claves); //Armamos el arreglo a imprimir en el csv de salida $salida = []; for($i = 0; $i < count($clavesOrdenadas); $i++) { $salida[$casas[$clavesOrdenadas[$i]]] = $clavesOrdenadas[$i]; } guardarDatosEnArchivo($salida); function mergeSort($arreglo) { if(count($arreglo) <= 1) { //El arreglo ya está ordenado return $arreglo; } //Dividimos el arreglo en dos $medio = count($arreglo) / 2; $izquierda = []; for($i = 0; $i < $medio; $i++) { $izquierda[] = $arreglo[$i]; } $derecha = []; for($i = $medio; $i < count($arreglo); $i++) { $derecha[] = $arreglo[$i]; } $izquierda = mergeSort($izquierda); $derecha = mergeSort($derecha); //Comparamos si el ultimo elemento del primer arreglo es mayor que el primer elemento del segundo arreglo if($izquierda[count($izquierda) - 1] > $derecha[0]) { //Concatenamos el arreglo de la derecha al de la izquierda return array_merge($izquierda, $derecha); } return combinar($izquierda, $derecha); } function combinar($izquierda, $derecha) { $res = []; while (count($izquierda) > 0 && count($derecha) > 0) { // Agregamos el elemento con mayor valor entre los dos de cada arreglo if ($izquierda[0] > $derecha[0]) { $res[] = $izquierda[0]; //eliminamos el elemento añadido array_shift($izquierda); } else { $res[] = $derecha[0]; //eliminamos el elemento añadido array_shift($derecha); } } //vaciamos los restos de los arreglos, segun corresponda while (count($izquierda) > 0) { $res[] = $izquierda[0]; array_shift($izquierda); } while (count($derecha) > 0) { $res[] = $derecha[0]; array_shift($derecha); } return $res; } function leerDatosDeArchivos() { $datosArchivo = file_get_contents('casa.csv'); $datos = array_map(function ($element) { return explode(',', $element); }, explode(PHP_EOL, $datosArchivo)); array_shift($datos); $arreglo = []; for ($i = 0; $i < count($datos); $i++) { $arreglo[$datos[$i][1]] = $datos[$i][0]; } return $arreglo; } function guardarDatosEnArchivo($datos) { $fp = fopen('casa_salida.csv', 'wb'); // agregamos los headers al archivo fputcsv($fp, ['ID','Number']); foreach($datos as $idCasa => $numero) { $linea = [$idCasa, $numero]; fputcsv($fp, $linea); } fclose($fp); }
Reto 5
lenguaje: python
import csv # subir datos de archivo a vector results = [] withopen('casa.csv') as File: reader = csv.DictReader(File) for row in reader: results.append(row) size = len(results) # ordenamientofor i in range(0, size): datI = results[i] for j in range(0, size): datJ = results[j] if(datI['Number'] > datJ['Number']): aux = results[j] results[j] = results[i] results[i] = aux # crear archivo ordenadowithopen('casaO.csv', 'w') as csvfile: fieldnames = ['\xef\xbb\xbfID', 'Number'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerows(results)
Utilice el algoritmo Quicksort. Traté de hacer en una linea algunos loops, al estilo ruby, pero resultaba menos eficiente.
Tambien intente mapear los datos en una clase pero era menos eficiente. Espero que el jurado de los Quién lo aprecie. 😄
#regalaconocimiento
require 'csv' start_at = Time.now # @param [Array] houses # @param [Integer] low_index # @param [Integer] high_index def pivot(houses, low_index, high_index) pivot = houses[(low_index + high_index) / 2] i = low_index - 1 j = high_index + 1 loop doloopdo i += 1 break unless houses[i][1] < pivot[1] endloopdo j -= 1 break unless houses[j][1] > pivot[1] endreturn j if i >= j # switch them aux = houses[i] houses[i] = houses[j] houses[j] = aux endend # @param [Array] houses # @param [Integer] min # @param [Integer] maxdef quick_sort(houses, min, max) return unless min < max p = pivot(houses, min, max) quick_sort(houses, min, p) quick_sort(houses, p + 1, max) end houses = CSV.read('casa.csv') header = houses.shift houses.map! { |house| [house[0], house[1].to_i] } algorithm_at = Time.now quick_sort(houses, 0, houses.size - 1) puts "El malvado Claus encontró las mejores casas en : #{Time.now - algorithm_at}"data = houses.unshift(header).map { |house| house.join(',') }.join("\n") File.write('sorted_houses.csv', data) puts "Inició su fechoría en : #{Time.now - start_at}" puts "#regalaconomiento"
Erre la versión al pegar.
para obtener primero los mayores simplemente es necesario invertir la comparacion del while en los dos loops en las lineas 16 y 20.
require 'csv' start_at = Time.now # @param [Array] houses # @param [Integer] low_index # @param [Integer] high_index def pivot(houses, low_index, high_index) pivot = houses[(low_index + high_index) / 2] i = low_index - 1 j = high_index + 1 loop doloopdo i += 1 break unless houses[i][1] > pivot[1] endloopdo j -= 1 break unless houses[j][1] < pivot[1] endreturn j if i >= j # switch them aux = houses[i] houses[i] = houses[j] houses[j] = aux endend # @param [Array] houses # @param [Integer] min # @param [Integer] maxdef quick_sort(houses, min, max) return unless min < max p = pivot(houses, min, max) quick_sort(houses, min, p) quick_sort(houses, p + 1, max) end houses = CSV.read('casa.csv') header = houses.shift houses.map! { |house| [house[0], house[1].to_i] } algorithm_at = Time.now quick_sort(houses, 0, houses.size - 1) puts "El malvado Claus encontró las mejores casas en : #{Time.now - algorithm_at}"data = houses.unshift(header).map { |house| house.join(',') }.join("\n") File.write('sorted_houses.csv', data) puts "Inició su fechoría en : #{Time.now - start_at}" puts "#regalaconomiento"
y creo que esto nos pasa siempre en el trabajo. Tomamos el requerimiento y sin prestar atencion a los detalles nosotros decidimos libremente como va a quedar el finalmente el aplicativo que estemos desarrollando. Sin tomar en cuenta absolutamente todo lo que el cliente, producto owner nos esta pidiendo
Reto #9
El grinch puedo robar la navidad este año en @platzi y en el mundo entero.
Quizá el espíritu navideño de cada persona no fue lo suficiente para que el grinch no se robará está navidad. 😔
El siguiente año le ganaremos.
Revisa el storytelling aquí 👇🏻✅
https://twitter.com/AppsAlejandro/status/1077672017631928320
En víspera de la navidad, el Grinch ha robado la navidad, @platzi para recuperar la navidad #regaloconocimiento, a sus estudiantes y salvó la Navidad así todos recibieron la Navidad felices para siempre.
https://twitter.com/darwinuzcategui/status/1077675634082623504
Mi tweet solo aparece cuando tengo la sesión iniciada

Reto #9
https://twitter.com/AppsAlejandro/status/1077672017631928320
No me aparece bien en contador de tiempo para el reto 8. Sólo me ocurre a mi?
Challenge accepted
Uh que bueno. Me gustan los retos! 😄
Hola, he visto varios post que utilizan funciones como quicksort o en tu caso Heapsort. Como en el enunciado dice que no se pueden utilizar funciones nativas como Sort o similares se me genero la duda si ¿utilizar estas funciones es valido?
Si entendí bien, la idea es que implementes tú uno de los varios métodos de ordenación. El ganador sera quien implemente cualquier método pero de la forma más eficiente.
Gracias Platzi!!
Buenas tardes, no entendí dónde hay que publicar el reto #5. Alguien sabe? Muchas gracias!
aquí en los comentarios
ya solo falta 11 horas
WRITE TPERROR(CHR(cc_clear_win), 'Challenge accepted')
Maravilloso, toda la comunidad platzi dando lo mejor!!
Acepto el reto 😃
Qué buena idea, haré los retos apenas salgan
Porfis regalen también un mes de suscripción a las menciones honoríficas. Nos esforzamos igual en hacer el mejor trabajo posible
Les agradezco igual la oportunidad de alguna manera incentivarnos a aprender a través de estos retos.
Me Late!!!
Hasta ahora me di cuenta del reto 😐 para los demas debo haber completado este?
No, puedes participar en los retos que quieras 😉
esto estará genial, Wuuuuuuu
Buenísimo!
que comiencen los juegos
Reto #1 - Link
Está genial, no olvides publicarlo en twitter
Acepto el Reto!!!
Acepto el reto
print("Challenge accepted!")
Interesante
`<code>
<code>