{"id":21836914,"url":"https://github.com/waldohidalgo/rutas_code_chef","last_synced_at":"2025-03-21T14:41:45.893Z","repository":{"id":252561981,"uuid":"840795459","full_name":"waldohidalgo/rutas_code_chef","owner":"waldohidalgo","description":"Repositorio con el código de ejercicios y proyectos de diversas rutas completadas en CodeChef","archived":false,"fork":false,"pushed_at":"2025-03-17T23:24:33.000Z","size":1133,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-18T00:28:34.541Z","etag":null,"topics":["codechef","codechef-solutions","combinatorics","matrix","prefix-sum","suffix-array"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/waldohidalgo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-10T17:52:43.000Z","updated_at":"2025-03-17T23:24:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"22a42cd2-e769-4719-a345-3fd706c117f2","html_url":"https://github.com/waldohidalgo/rutas_code_chef","commit_stats":null,"previous_names":["waldohidalgo/rutas_code_chef"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waldohidalgo%2Frutas_code_chef","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waldohidalgo%2Frutas_code_chef/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waldohidalgo%2Frutas_code_chef/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waldohidalgo%2Frutas_code_chef/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/waldohidalgo","download_url":"https://codeload.github.com/waldohidalgo/rutas_code_chef/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244815959,"owners_count":20515023,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["codechef","codechef-solutions","combinatorics","matrix","prefix-sum","suffix-array"],"created_at":"2024-11-27T20:43:39.715Z","updated_at":"2025-03-21T14:41:45.887Z","avatar_url":"https://github.com/waldohidalgo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ejercicios y Proyectos Realizados para Codechef\n\nRepositorio que contiene los ejercicios y proyectos requeridos para diversas rutas de aprendizaje que voy realizando en el tiempo. Subo todo lo realizado una vez que obtengo cada certificado.\n\n## Tabla de Contenido\n\n- [Ejercicios y Proyectos Realizados para Codechef](#ejercicios-y-proyectos-realizados-para-codechef)\n  - [Tabla de Contenido](#tabla-de-contenido)\n  - [Rutas Finalizadas](#rutas-finalizadas)\n    - [Linked List](#linked-list)\n      - [Certificado](#certificado)\n    - [OOPS Concepts in Python](#oops-concepts-in-python)\n      - [Certificado](#certificado-1)\n    - [2D Array / Matrices](#2d-array--matrices)\n      - [Ejercicios Resueltos](#ejercicios-resueltos)\n      - [Certificado](#certificado-2)\n    - [Prefix Sum Problems](#prefix-sum-problems)\n      - [Ejercicios Resueltos](#ejercicios-resueltos-1)\n      - [Certificado](#certificado-3)\n    - [Combinatorics Problems](#combinatorics-problems)\n      - [Ejercicios Resueltos](#ejercicios-resueltos-2)\n      - [Certificado](#certificado-4)\n    - [Visualise data using Matplotlib](#visualise-data-using-matplotlib)\n      - [Certificado](#certificado-5)\n    - [Greedy Algorithms](#greedy-algorithms)\n      - [Certificado](#certificado-6)\n\n## Rutas Finalizadas\n\n### Linked List\n\nEn esta ruta se ejercitan linked list simples y dobles con punteros en el head y/o tail.\n\n#### Certificado\n\n![Certificado Linked List](./LinkedList/certificado-Linked%20Lists.webp)\n\n### OOPS Concepts in Python\n\nEn la ruta se ejercitan conceptos como clases, clases abstractas, métodos estáticos, composition, atributos privados, protegidos y públicos, multithreads, handle files y generics.\n\n#### Certificado\n\n![Certificado OOPS Concepts in Python](./ObjectPrinciples/OOPS%20Concepts%20in%20Python%20Certificate.webp)\n\n### 2D Array / Matrices\n\nSe practican conceptos como reducción de tiempo de complejidad de algoritmos, implementación de breadth first search algorithm, depth first search algorithm, árboles binarios, dynamic programming entre otros junto con resolver todos los ejercicios de practica siguientes (más abajo muestro el código solo de los ejercicios resultos de dificultad Hard el resto de soluciones se encuentra en el repositorio en la carpeta Matrix):\n\n#### Ejercicios Resueltos\n\n1-Add Two Matrices\n\n2-Zig-zag traversal\n\n3-Upside Down Matrix\n\n4-Sum of Diagonals\n\n5-Count Negative Numbers\n\n6-Multiplication of Two Matrices\n\n7-Valid Matrix Sum\n\n8-Sort Matrix Diagonally\n\n```py\nm,n=map(int,input().split())\nmatrix=[]\nfor i in range(m):\n    matrix.append(list(map(int,input().split())))\n\ndef sortDiagonally(matrix):\n    for k in range(n):\n        i=0\n        j=k\n        temp=[]\n        while i\u003cm and j\u003cn:\n            temp.append(matrix[i][j])\n            i+=1\n            j+=1\n        temp.sort()\n        i=0\n        j=k\n        while i\u003cm and j\u003cn:\n            matrix[i][j]=temp[i]\n            i+=1\n            j+=1\n\n    for k in range(1,m):\n        i=k\n        j=0\n        temp=[]\n        while i\u003cm and j\u003cn:\n            temp.append(matrix[i][j])\n            i+=1\n            j+=1\n        temp.sort()\n        i=k\n        j=0\n        while i\u003cm and j\u003cn:\n            matrix[i][j]=temp[j]\n            i+=1\n            j+=1\n    print(\"----\")\n    for i in range(m):\n        for j in range(n):\n            print(matrix[i][j],end=\" \")\n        print()\n\nsortDiagonally(matrix)\n```\n\n9-Set Matrix Zeroes\n\n10-Matrix Rotations\n\n11-Row With Maximum Ones\n\n12-Equal Rows and Columns\n\n13-Path With Minimum Sum\n\n```py\nn,m=map(int,input().split())\nmatrix=[]\nfor i in range(n):\n    matrix.append(list(map(int,input().split())))\n\n\nmemo=[[0 for j in range(m)] for i in range(n)]\n\n\nfor i in range(n):\n    for j in range(m):\n        if i==0 and j==0:\n            memo[i][j]=matrix[i][j]\n        elif i==0:\n            memo[i][j]=memo[i][j-1]+matrix[i][j]\n        elif j==0:\n            memo[i][j]=memo[i-1][j]+matrix[i][j]\n        else:\n            memo[i][j]=min(memo[i-1][j],memo[i][j-1])+matrix[i][j]\n\nprint(memo[n-1][m-1])\n```\n\n14-Maximal square of all ones (Hard)\n\n```py\nn=int(input())\n\nmatrix=[list(map(int,input().split())) for _ in range(n)]\n\ndef maxSquare(i,j,matrix,n):\n    maxCount=1 if matrix[i][j]==1 else 0\n    isSquare=True if matrix[i][j]==1 else False\n    k=1\n    while isSquare and i+k\u003c=n and j+k\u003c=n:\n        i1=i\n        while i1\u003cn and i1\u003ci+k and isSquare:\n            j1=j\n            while j1\u003cn and j1\u003cj+k and isSquare:\n                if matrix[i1][j1]==0:\n                    isSquare=False\n                j1+=1\n            i1+=1\n        if not isSquare:\n            break\n        maxCount=max(maxCount,k)\n        k+=1\n    return maxCount\n\nmaxSquareMatrix=0\nfor i in range(n):\n    for j in range(n):\n        if matrix[i][j]==1:\n            maxSquareMatrix=max(maxSquareMatrix,maxSquare(i,j,matrix,n))\n\nprint(maxSquareMatrix**2)\n```\n\n15-Print Matrix In Spiral Fashion (Hard)\n\n```py\nn,m=map(int,input().split())\n\nmatrix=[list(map(int,input().split())) for _ in range(n)]\n\nn=len(matrix)\nm=len(matrix[0])\n\nrow,col=n,m\nmovements=[[0,1],[1,0],[0,-1],[-1,0]]\ni,j=0,0\ncurrentMovement=0\nmaxValues=[m,n]\nwhile maxValues[0]\u003e0 and maxValues[1]\u003e0 :\n    counts=[0,0]\n    for k in range(2):\n        while counts[k]\u003cmaxValues[k]:\n            print(matrix[i][j],end=\" \")\n            counts[k]+=1\n            if counts[k]==maxValues[k]:\n                currentMovement=(currentMovement+1)%4\n            i,j=i+movements[currentMovement][0],j+movements[currentMovement][1]\n        maxValues=[maxValues[0]-abs(movements[currentMovement][1]),maxValues[1]-abs(movements[currentMovement][0])]\n```\n\n16-Maximum Area Island\n\n17-Rotting Apples (Hard)\n\n```py\nfrom collections import deque\n\nn,m=map(int,input().split())\nmatrix=[list(map(int,input().split())) for _ in range(n)]\n\ndef bfs(q,matrix):\n    time=0\n    while q:\n        for _ in range(len(q)):\n            i,j=q.popleft()\n\n            if i+1\u003cn and matrix[i+1][j]==1:\n                matrix[i+1][j]=2\n                q.append((i+1,j))\n\n            if j+1\u003cm and matrix[i][j+1]==1:\n                matrix[i][j+1]=2\n                q.append((i,j+1))\n\n            if i-1\u003e=0 and matrix[i-1][j]==1:\n                matrix[i-1][j]=2\n                q.append((i-1,j))\n\n            if j-1\u003e=0 and matrix[i][j-1]==1:\n                matrix[i][j-1]=2\n                q.append((i,j-1))\n\n        time+=1\n    return time-1\nq=deque()\n\nfor i in range(n):\n    for j in range(m):\n        if matrix[i][j]==2:\n            q.append((i,j))\n\nminRotting=bfs(q,matrix)\n\nfor i in range(n):\n    for j in range(m):\n        if matrix[i][j]==1:\n            minRotting=-1\n            break\n\nprint(minRotting)\n```\n\n18-Search In Matrix\n\n19-Distance to Nearest 0 (Hard)\n\n```py\nfrom collections import deque\n\nn,m=map(int,input().split())\nmatrix=[list(map(int,input().split())) for _ in range(n)]\n\naux=[[float('inf')]*m for _ in range(n)]\n\nqueue=deque()\n\nfor i in range(n):\n    for j in range(m):\n        if matrix[i][j]==0:\n            aux[i][j]=0\n            queue.append((i,j))\n\nwhile queue:\n    i,j=queue.popleft()\n\n    if i+1\u003cn and aux[i+1][j]\u003eaux[i][j]+1:\n        aux[i+1][j]=aux[i][j]+1\n        queue.append((i+1,j))\n\n    if j+1\u003cm and aux[i][j+1]\u003eaux[i][j]+1:\n        aux[i][j+1]=aux[i][j]+1\n        queue.append((i,j+1))\n\n    if i-1\u003e=0 and aux[i-1][j]\u003eaux[i][j]+1:\n        aux[i-1][j]=aux[i][j]+1\n        queue.append((i-1,j))\n\n    if j-1\u003e=0 and aux[i][j-1]\u003eaux[i][j]+1:\n        aux[i][j-1]=aux[i][j]+1\n        queue.append((i,j-1))\n\nfor i in range(n):\n    for j in range(m):\n        print(aux[i][j],end=\" \")\n    print()\n```\n\n20-Median in Matrix\n\n21-Spiral rotation\n\n#### Certificado\n\n![2D Array / Matrices CodeChef Certificate](./Matrix/2D_array_matrices_certificate.webp)\n\n### Prefix Sum Problems\n\nSe implementan arrays de operaciones prefix o suffix precalculadas con el objetivo de reducir la complejidad temporal de los algoritmos, a cambio de un incremento en la complejidad espacial. Esta técnica optimiza el rendimiento al evitar la repetición de cálculos sobre los mismos datos.\n\n#### Ejercicios Resueltos\n\nEn el siguiente [README.md](./PrefixSum/README.md) explico el enfoque de cada solución a cada problema siguiente:\n\n1-Creating Prefix Array\n\n2-Optimization Using Prefix Array\n\n3-Good subarrays\n\n4-Counting Pretty Numbers\n\n5-Little Chef and Sums\n\n6-Good Subarrays 2\n\n7-Suffix Arrays\n\n8-Mystical Numbers\n\n9-Optimal Denomination\n\n10-Binod\n\n11-Rectangular Queries\n\n12-Again XOR problem\n\n13-Segmentation Fault\n\n14-Triplets Min\n\n#### Certificado\n\n![Prefix Sum Certificado](./PrefixSum/Prefix_Sum_Problems_Certificate.webp)\n\n### Combinatorics Problems\n\nSe implementan técnicas de conteo vía agrupaciones e implementación posterior en código.\n\n#### Ejercicios Resueltos\n\nEn el siguiente [README.md](./Combinatorics/README.md) se encuentra la explicación a los ejercicios más interesantes y relevantes realizados siguientes:\n\n1- Fruit Basket\n\n2- Divisibility Problem\n\n3- Word Counting\n\n4-Permutation Subsequence\n\n5-Distance Coloring\n\n6-Robot Movings\n\n7-Marbles\n\n#### Certificado\n\n![Combinatorics Problems Certificado](./Combinatorics/Combinatorics_Certificate.webp)\n\n### Visualise data using Matplotlib\n\nUtilización de Matplotlib y librerías anexas para la creación de diversos graficos.\n\n#### Certificado\n\n![Visualise data using Matplotlib](./Matplotlib/Certificate-Visualise%20Data%20using%20Matplotlib.webp)\n\n### Greedy Algorithms\n\nImplementación de Greedy Algorithms demostrando en cada caso que un **óptimo local es un óptimo global**.\n\n#### Certificado\n\n![Greedy Algorithms](./Greedy%20Algorithms/Greedy%20Algorithms%20Certificate.webp)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwaldohidalgo%2Frutas_code_chef","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwaldohidalgo%2Frutas_code_chef","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwaldohidalgo%2Frutas_code_chef/lists"}