From fa70a79261089140f52226b4715da6c38663b892 Mon Sep 17 00:00:00 2001
From: JChuck0 <110050395+JChuck0@users.noreply.github.com>
Date: Tue, 4 Aug 2026 17:34:28 +0000
Subject: [PATCH 1/7] Creando funcion crearSala
---
src/main.ts | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/src/main.ts b/src/main.ts
index 1aec760..5a0df51 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -10,3 +10,17 @@ if (typeof document !== "undefined") {
console.log("Hello from src/main.ts");
export {};
+
+
+function crearSala(filas:number , columnas:number): number[][] {
+ let cineInicial:number[][] = [];
+ for(let row = 0; row < filas; row++){
+ cineInicial[row] = []
+ for(let colum = 0; colum < columnas ; colum++){
+ cineInicial[row][colum] = 0;
+ }
+ }
+ return cineInicial;
+}
+let prueba = crearSala(5,8)
+console.log(prueba)
\ No newline at end of file
From e90ad655bfee0d654abab5837126f5c02b583ed2 Mon Sep 17 00:00:00 2001
From: JChuck0 <110050395+JChuck0@users.noreply.github.com>
Date: Wed, 5 Aug 2026 08:17:44 +0000
Subject: [PATCH 2/7] =?UTF-8?q?Crear=20la=20funci=C3=B3n=20mostrarSala?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/main.ts | 45 +++++++++++++++++++++++++++++++++++++++++----
1 file changed, 41 insertions(+), 4 deletions(-)
diff --git a/src/main.ts b/src/main.ts
index 5a0df51..3da4c69 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -11,16 +11,53 @@ console.log("Hello from src/main.ts");
export {};
+/*Creamos la sala de cine para 8 filas y 10 columnas*/
+let filas: number = 8;
+let columnas: number = 10;
+
+const filasReal: number = filas + 1;
+const columnasReal: number = columnas + 1;
+
function crearSala(filas:number , columnas:number): number[][] {
let cineInicial:number[][] = [];
- for(let row = 0; row < filas; row++){
+ for(let row = 0; row < filasReal; row++){
cineInicial[row] = []
- for(let colum = 0; colum < columnas ; colum++){
+ for(let colum = 0; colum < columnasReal ; colum++){
cineInicial[row][colum] = 0;
}
}
return cineInicial;
}
-let prueba = crearSala(5,8)
-console.log(prueba)
\ No newline at end of file
+
+/*Función para mostrar la sala de cine*/
+
+function mostrarSala(sala:number[][]): void {
+ let actualSala: string = "";
+ let numeroFila: number = 1;
+ let numeroColumna: number = 1;
+ for(let row = 0; row < sala.length; row++){
+ for(let colum = 0; colum < sala[row].length; colum++){
+ if (row === 0 && colum === 0) {
+ actualSala += " ";
+ }else if (row === 0) {
+ actualSala += numeroColumna.toString() + " ";
+ numeroColumna++;
+ }else if (colum === 0) {
+ actualSala += numeroFila.toString() + " ";
+ numeroFila++;
+ }else if(sala[row][colum] === 0){
+ actualSala += "L ";
+ }else{
+ actualSala += "X ";
+ }
+ }
+ actualSala += "\n";
+ }
+ console.log(actualSala);
+}
+
+let salaInicial = crearSala(filasReal, columnasReal);
+mostrarSala(salaInicial);
+
+/*Función para reservar un asiento*/
\ No newline at end of file
From 52cf53f81d9932a96a1b1e5d3aa8cf5379fb59e9 Mon Sep 17 00:00:00 2001
From: JChuck0 <110050395+JChuck0@users.noreply.github.com>
Date: Wed, 5 Aug 2026 08:48:12 +0000
Subject: [PATCH 3/7] =?UTF-8?q?Crear=20la=20funci=C3=B3n=20reservarAsiento?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/main.ts | 28 +++++++++++++++++++++++-----
1 file changed, 23 insertions(+), 5 deletions(-)
diff --git a/src/main.ts b/src/main.ts
index 3da4c69..9a26cc5 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -32,7 +32,7 @@ function crearSala(filas:number , columnas:number): number[][] {
/*Función para mostrar la sala de cine*/
-function mostrarSala(sala:number[][]): void {
+function mostrarSala(sala:number[][]): string {
let actualSala: string = "";
let numeroFila: number = 1;
let numeroColumna: number = 1;
@@ -54,10 +54,28 @@ function mostrarSala(sala:number[][]): void {
}
actualSala += "\n";
}
- console.log(actualSala);
+ return actualSala;
}
-let salaInicial = crearSala(filasReal, columnasReal);
-mostrarSala(salaInicial);
+/*Función para reservar un asiento*/
+
+function reservarAsiento(sala:number[][], fila:number, columna:number): number[][] {
+ for(let row = 0; row < sala.length; row++){
+ for(let colum = 0; colum < sala[row].length; colum++){
+ if(row === fila && colum === columna){
+ if(sala[row][colum] === 0){
+ sala[row][colum] = 1;
+ console.log(`Asiento reservado en la fila ${fila} y columna ${columna}`);
+ }
+ }
+ }
+ }
+ return sala;
+}
-/*Función para reservar un asiento*/
\ No newline at end of file
+
+let salaInicial = crearSala(filasReal, columnasReal);
+let salaActual = mostrarSala(salaInicial);
+console.log(salaActual);
+let primeraReserva = reservarAsiento(salaInicial, 7, 7);
+console.log(mostrarSala(primeraReserva));
\ No newline at end of file
From f413c63385e6d513350660c88fdd0c4e377854da Mon Sep 17 00:00:00 2001
From: JChuck0 <110050395+JChuck0@users.noreply.github.com>
Date: Wed, 5 Aug 2026 09:00:49 +0000
Subject: [PATCH 4/7] =?UTF-8?q?Crear=20la=20funci=C3=B3n=20contarAsientos?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/main.ts | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/src/main.ts b/src/main.ts
index 9a26cc5..d976b93 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -66,6 +66,8 @@ function reservarAsiento(sala:number[][], fila:number, columna:number): number[]
if(sala[row][colum] === 0){
sala[row][colum] = 1;
console.log(`Asiento reservado en la fila ${fila} y columna ${columna}`);
+ }else if(sala[row][colum] === 1){
+ console.log(`El asiento en la fila ${fila} y columna ${columna} ya está ocupado`);
}
}
}
@@ -73,9 +75,30 @@ function reservarAsiento(sala:number[][], fila:number, columna:number): number[]
return sala;
}
+/* Función para contar asientos libres y ocupados */
+function contarAsientos(sala:number[][]): {libres: number, ocupados: number} {
+ let libres: number = 0;
+ let ocupados: number = 0;
+ for(let row = 0; row< sala.length; row++){
+ for (let colum = 0; colum < sala[row].length; colum++){
+ if(sala[row][colum] === 1){
+ ocupados++;
+ } else if(sala[row][colum] === 0){
+ libres++;
+ }
+ }
+ }
+ return {libres, ocupados};
+}
+
+
let salaInicial = crearSala(filasReal, columnasReal);
let salaActual = mostrarSala(salaInicial);
console.log(salaActual);
let primeraReserva = reservarAsiento(salaInicial, 7, 7);
-console.log(mostrarSala(primeraReserva));
\ No newline at end of file
+console.log(mostrarSala(primeraReserva));
+let segundaReserva = reservarAsiento(salaInicial, 7, 7);
+console.log(mostrarSala(segundaReserva));
+let checkAsientos = contarAsientos(segundaReserva);
+console.log(`Asientos libres: ${checkAsientos.libres}, Asientos ocupados: ${checkAsientos.ocupados}`);
From 32cd0279ce61fc788cb51f10027dd0fd7f05c004 Mon Sep 17 00:00:00 2001
From: JChuck0 <110050395+JChuck0@users.noreply.github.com>
Date: Wed, 5 Aug 2026 09:38:55 +0000
Subject: [PATCH 5/7] =?UTF-8?q?Crear=20la=20funci=C3=B3n=20buscarAsientosC?=
=?UTF-8?q?onsecutivos?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/main.ts | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
diff --git a/src/main.ts b/src/main.ts
index d976b93..7cd7db4 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -11,7 +11,10 @@ console.log("Hello from src/main.ts");
export {};
+
+
/*Creamos la sala de cine para 8 filas y 10 columnas*/
+
let filas: number = 8;
let columnas: number = 10;
@@ -30,6 +33,8 @@ function crearSala(filas:number , columnas:number): number[][] {
return cineInicial;
}
+
+
/*Función para mostrar la sala de cine*/
function mostrarSala(sala:number[][]): string {
@@ -57,6 +62,8 @@ function mostrarSala(sala:number[][]): string {
return actualSala;
}
+
+
/*Función para reservar un asiento*/
function reservarAsiento(sala:number[][], fila:number, columna:number): number[][] {
@@ -75,7 +82,11 @@ function reservarAsiento(sala:number[][], fila:number, columna:number): number[]
return sala;
}
+
+
+
/* Función para contar asientos libres y ocupados */
+
function contarAsientos(sala:number[][]): {libres: number, ocupados: number} {
let libres: number = 0;
let ocupados: number = 0;
@@ -91,14 +102,64 @@ function contarAsientos(sala:number[][]): {libres: number, ocupados: number} {
return {libres, ocupados};
}
+/* Función para cancelar una reserva */
+function cancelarReserva(sala:number[][], fila:number, columna:number): number[][] {
+ for(let row = 0; row < sala.length; row++){
+ for(let colum = 0; colum < sala[row].length; colum++){
+ if(row === fila && colum === columna){
+ if(sala[row][colum] === 1){
+ sala[row][colum] = 0;
+ console.log(`Reserva de asiento cancelada en la fila ${fila} y columna ${columna}`);
+ }
+ }
+ }
+ }
+ return sala;
+ }
+
+
+
+
+
+ /* Función para buscar dos asientos libres consecutivos */
+
+function buscarAsientosConsecutivos(sala:number[][]): string | null {
+ let asientosConsecutivos: string = "";
+ let asientosLibres: number = contarAsientos(sala).libres;
+ for(let row = 1; row < sala.length; row++){
+ for(let colum = 1; colum < sala[row].length - 1; colum++){
+ if(sala[row][colum] === 0 && sala[row][colum + 1] === 0){
+ asientosConsecutivos += `Hay asientos libres consecutivos en la fila ${row} y columnas ${colum} y ${colum + 1}.`;
+ return asientosConsecutivos;
+ } else if(asientosLibres < 2){
+ console.log(`No hay asientos libres consecutivos`);
+ return null;
+ }
+ }
+ }
+ return asientosConsecutivos.length > 0 ? asientosConsecutivos : null;
+}
+
+
let salaInicial = crearSala(filasReal, columnasReal);
let salaActual = mostrarSala(salaInicial);
console.log(salaActual);
+
let primeraReserva = reservarAsiento(salaInicial, 7, 7);
console.log(mostrarSala(primeraReserva));
+
let segundaReserva = reservarAsiento(salaInicial, 7, 7);
console.log(mostrarSala(segundaReserva));
+
let checkAsientos = contarAsientos(segundaReserva);
console.log(`Asientos libres: ${checkAsientos.libres}, Asientos ocupados: ${checkAsientos.ocupados}`);
+
+//let cancelarReserva1 = cancelarReserva(segundaReserva, 7, 7);
+//console.log(mostrarSala(cancelarReserva1));
+
+let buscarAsientos = buscarAsientosConsecutivos(segundaReserva);
+console.log(buscarAsientos);
+
+/* Qué pasa con el console.log si se devuelve null */
From c0a0e521f380bd88219fa419a9d57a30314c8f4f Mon Sep 17 00:00:00 2001
From: JChuck0 <110050395+JChuck0@users.noreply.github.com>
Date: Wed, 5 Aug 2026 10:35:46 +0000
Subject: [PATCH 6/7] Crear HTML y retocar codigo .ts para que funcione
correctamente
---
index.html | 292 +++++++++++++++++++++++++++++++++++++++++++++++++---
src/main.ts | 33 ++----
2 files changed, 284 insertions(+), 41 deletions(-)
diff --git a/index.html b/index.html
index 4cd0c49..fad99d1 100644
--- a/index.html
+++ b/index.html
@@ -1,26 +1,284 @@
-
+
- Hello World with Typescript
+ Gestor de Asientos de Cine
+
+
+
+
-
-
-
Hello World with Typescript
-
-
-
-
-
Hello Rigo
-
-
+
+
+
+
+
+
Gestor de Asientos del Cine
+
+ Selecciona asientos, confirma tu reserva y gestiona ocupación de forma visual.
+
+
+
+
+
+
+ PANTALLA
+
+
+
+
+
+
+
+
+
+ Libre
+
+
+
+ Ocupado
+
+
+
+ Seleccionado
+
+
+
+
+
-
+
+
diff --git a/src/main.ts b/src/main.ts
index 7cd7db4..3afad07 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,18 +1,3 @@
-if (typeof document !== "undefined") {
- import("./style.css").then(() => {
- const app = document.querySelector("#app");
- if (app) {
- app.textContent = "If you can see this, Tailwind is working.";
- }
- });
-}
-
-console.log("Hello from src/main.ts");
-
-export {};
-
-
-
/*Creamos la sala de cine para 8 filas y 10 columnas*/
let filas: number = 8;
@@ -145,21 +130,21 @@ function buscarAsientosConsecutivos(sala:number[][]): string | null {
let salaInicial = crearSala(filasReal, columnasReal);
let salaActual = mostrarSala(salaInicial);
-console.log(salaActual);
+//console.log(salaActual);
-let primeraReserva = reservarAsiento(salaInicial, 7, 7);
-console.log(mostrarSala(primeraReserva));
+//let primeraReserva = reservarAsiento(salaInicial, 7, 7);
+//console.log(mostrarSala(primeraReserva));
-let segundaReserva = reservarAsiento(salaInicial, 7, 7);
-console.log(mostrarSala(segundaReserva));
+//let segundaReserva = reservarAsiento(salaInicial, 7, 7);
+//console.log(mostrarSala(segundaReserva));
-let checkAsientos = contarAsientos(segundaReserva);
-console.log(`Asientos libres: ${checkAsientos.libres}, Asientos ocupados: ${checkAsientos.ocupados}`);
+//let checkAsientos = contarAsientos(segundaReserva);
+//console.log(`Asientos libres: ${checkAsientos.libres}, Asientos ocupados: ${checkAsientos.ocupados}`);
//let cancelarReserva1 = cancelarReserva(segundaReserva, 7, 7);
//console.log(mostrarSala(cancelarReserva1));
-let buscarAsientos = buscarAsientosConsecutivos(segundaReserva);
-console.log(buscarAsientos);
+//let buscarAsientos = buscarAsientosConsecutivos(segundaReserva);
+//console.log(buscarAsientos);
/* Qué pasa con el console.log si se devuelve null */
From 54996b069e9ecd5ff05e21b61e6d7bb4bb063eac Mon Sep 17 00:00:00 2001
From: JChuck0 <110050395+JChuck0@users.noreply.github.com>
Date: Thu, 6 Aug 2026 09:45:42 +0000
Subject: [PATCH 7/7] Actualizo el README
---
.vscode/settings.json | 5 +-
README.md | 118 +++++++++++++++++------------------
index.html => src/index.html | 0
src/main.ts | 1 -
4 files changed, 59 insertions(+), 65 deletions(-)
rename index.html => src/index.html (100%)
diff --git a/.vscode/settings.json b/.vscode/settings.json
index e3c454c..93ce622 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,3 +1,4 @@
-{
- "files.autoSave": "off"
+{
+ "files.autoSave": "off",
+ "liveServer.settings.port": 5501
}
diff --git a/README.md b/README.md
index 968e03c..954efee 100644
--- a/README.md
+++ b/README.md
@@ -1,112 +1,106 @@
-# Hello World with Typescript
+# Gestor de Asientos de Cine
-
-> By [@ehiber](https://github.com/ehiber) and contributors at [4Geeks Academy](https://4geeksacademy.com/)
+Proyecto desarrollado con TypeScript, HTML, CSS, Vite y Tailwind CSS para simular la gestion de una sala de cine de 8 filas por 10 columnas.
-[](https://4geeks.com)
-[](https://twitter.com/4geeksacademy)
+El repositorio contiene dos implementaciones del mismo problema:
-*Estas instrucciones estan disponibles en [espanol](./README.es.md).*
-
-Start coding a TypeScript/HTML/CSS website in 30 seconds by opening this template using 4Geeks' [One-Click Coding](https://s.4geeks.com/start?repo=https://github.com/4GeeksAcademy/typescript-hello) or locally on your computer.
+- una version en TypeScript orientada a consola en `src/main.ts`
+- una version visual e interactiva en `src/index.html`
-## Before you begin
+## Tecnologias
-Install the packages by typing:
+- TypeScript
+- Vite
+- Tailwind CSS
+- HTML y JavaScript del lado del navegador
+
+## Como ejecutar el proyecto
+
+Instala las dependencias:
```bash
npm install
```
-## How do I run my website to see live changes?
-
-Type on the command line:
+Inicia el entorno de desarrollo:
```bash
npm run start
```
-Then open your local URL in the browser (usually `http://localhost:5173`).
+Valida solamente TypeScript:
-## How do I run this in GitHub Codespaces?
+```bash
+npm run typecheck
+```
-Run the same development server:
+Ejecuta la version de consola:
```bash
-npm run start
+npm run console
```
-Vite is configured to listen on `0.0.0.0`, so Codespaces can detect and forward port `5173` automatically.
+## Estructura principal
-## How do I run only the TypeScript check?
+- `src/main.ts`: logica de la sala en TypeScript para pruebas desde consola.
+- `src/index.html`: interfaz visual para reservar, cancelar y consultar asientos.
+- `src/style.css`: importacion de Tailwind CSS.
+- `vite.config.ts`: configuracion del servidor Vite.
-Use this command to validate only TypeScript without starting Vite:
+## Implementaciones
-```bash
-npm run typecheck
-```
+### 1. Crear sala
-## How do I run `main.ts` from the terminal?
+La funcion `crearSala` genera una matriz bidimensional que representa la sala de cine. Cada posicion inicia en `0`, lo que significa que el asiento esta libre.
-If you want to execute `./src/main.ts` directly and see `console.log` output in the terminal, run:
-
-```bash
-npm run console
-```
+### 2. Mostrar sala
-This command is already wired to `./src/main.ts`.
+La funcion `mostrarSala` transforma la matriz en un texto legible para consola. Agrega numeracion de filas y columnas, usa `L` para asientos libres y `X` para asientos ocupados.
-## Where do I write my code?
+### 3. Reservar asiento
-It depends on the language:
+La funcion `reservarAsiento` marca un asiento como ocupado cuando estaba disponible. Si el asiento ya estaba reservado, muestra un mensaje indicandolo.
-- `./src/main.ts` for TypeScript logic.
-- `./src/style.css` for styles (Tailwind CSS v4 is already imported).
-- `./index.html` for the HTML shell.
+### 4. Contar asientos
-You can add more files as needed, just make sure to import them from `main.ts`.
+La funcion `contarAsientos` recorre toda la sala y devuelve cuántos asientos estan libres y cuántos ocupados. Sirve para llevar control del estado general de la sala.
-Note: if you can see the "Hello Rigo" card and the message "If you can see this, Tailwind is working.", Tailwind is configured correctly.
+### 5. Cancelar reserva
-## Troubleshooting
+La funcion `cancelarReserva` libera un asiento previamente ocupado, cambiando su estado nuevamente a disponible.
-### I don't see my changes...
+### 6. Buscar asientos consecutivos
-Every time you change any file inside `./src`, the website refreshes automatically (hot reload).
+La funcion `buscarAsientosConsecutivos` recorre la sala para detectar dos asientos libres uno al lado del otro. Es util cuando se necesita reservar lugares contiguos.
-If changes still don't appear, refresh clearing cache:
+### 7. Interfaz visual de reservas
-- Mac: `Cmd + Shift + R`
-- Windows/Linux: `Ctrl + Shift + R`
+En `src/index.html` se implementa una version grafica del sistema. Cada asiento se dibuja como un boton y cambia de color segun su estado:
-## How do I include more images in my project?
+- libre
+- ocupado
+- seleccionado
-Add them inside `./public` and reference them in HTML using `/your-image-name.ext`.
+### 8. Confirmar reserva desde la interfaz
-Example:
+La interfaz permite seleccionar uno o varios asientos y luego confirmarlos. Los asientos seleccionados pasan a estado ocupado y el sistema muestra un mensaje con la cantidad confirmada.
-```html
-
-```
+### 9. Cancelar seleccionados
-## How do I include more TypeScript files?
+Existe un control para quitar todas las selecciones actuales antes de confirmar la reserva. Esto devuelve los asientos a estado libre.
-Add files into `./src` and import them from `main.ts`.
+### 10. Cancelar una reserva puntual
-Example:
+La interfaz permite escribir fila y columna para liberar un asiento especifico. Tambien contempla el caso en que el asiento ya este libre o solo estuviera seleccionado.
-```ts
-import { myVar } from "./file2";
-```
+### 11. Buscar dos asientos consecutivos en pantalla
-## How do I publish the website?
+Desde la interfaz se puede ejecutar una busqueda automatica de dos asientos libres consecutivos. Si se encuentran, el sistema los resalta como seleccionados.
-This boilerplate is compatible with Vercel in one step.
+### 12. Reiniciar la sala
-
-## Contributors
+La opcion de reinicio restaura toda la sala a su estado inicial, dejando todos los asientos libres.
-This template was built as part of the [4Geeks Academy Coding Bootcamp](https://4geeksacademy.com/us/coding-bootcamp) by [ehiber](https://github.com/ehiber) and contributors. Find out more about our [AI Engineering Course](https://4geeksacademy.com/us/coding-bootcamps/ai-engineering), [Full Stack Developer Course](https://4geeksacademy.com/us/coding-bootcamps/part-time-full-stack-developer), and [Data Science Bootcamp](https://4geeksacademy.com/us/coding-bootcamps/datascience-machine-learning).
+## Resumen
-You can find other templates and resources like this at the [school's GitHub page](https://github.com/4geeksacademy/).
-
+Este proyecto resuelve el problema de gestion de asientos de cine en dos niveles: una logica base en TypeScript y una experiencia interactiva en navegador. Eso permite practicar estructuras de datos, recorridos de matrices, validaciones y manipulacion del DOM en un mismo ejercicio.
diff --git a/index.html b/src/index.html
similarity index 100%
rename from index.html
rename to src/index.html
diff --git a/src/main.ts b/src/main.ts
index 3afad07..d66b062 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -147,4 +147,3 @@ let salaActual = mostrarSala(salaInicial);
//let buscarAsientos = buscarAsientosConsecutivos(segundaReserva);
//console.log(buscarAsientos);
-/* Qué pasa con el console.log si se devuelve null */