Sistema NEXUS v3.4 migrado con: Estructura principal: - core/orchestration: Sistema SIMCO + CAPVED (27 directivas, 28 perfiles) - core/catalog: Catalogo de funcionalidades reutilizables - shared/knowledge-base: Base de conocimiento compartida - devtools/scripts: Herramientas de desarrollo - control-plane/registries: Control de servicios y CI/CD - orchestration/: Configuracion de orquestacion de agentes Proyectos incluidos (11): - gamilit (submodule -> GitHub) - trading-platform (OrbiquanTIA) - erp-suite con 5 verticales: - erp-core, construccion, vidrio-templado - mecanicas-diesel, retail, clinicas - betting-analytics - inmobiliaria-analytics - platform_marketing_content - pos-micro, erp-basico Configuracion: - .gitignore completo para Node.js/Python/Docker - gamilit como submodule (git@github.com:rckrdmrd/gamilit-workspace.git) - Sistema de puertos estandarizado (3005-3199) Generated with NEXUS v3.4 Migration System EPIC-010: Configuracion Git y Repositorios
165 lines
4.7 KiB
Python
165 lines
4.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Diseño completo del crucigrama con todas las palabras
|
|
Basado en las pistas visibles en la imagen
|
|
"""
|
|
|
|
# Palabras que DEBEN estar según las pistas en la imagen:
|
|
# Horizontales: SORBONA, NOBEL, RADIOACTIVIDAD
|
|
# Verticales: RADIO, PIERRE, CURIE (apellido de Marie)
|
|
|
|
# Voy a crear un diseño donde todas encajen correctamente
|
|
|
|
words = [
|
|
# Horizontales
|
|
{
|
|
"id": "h1",
|
|
"number": 1,
|
|
"direction": "horizontal",
|
|
"clue": "Universidad donde estudió",
|
|
"answer": "SORBONA",
|
|
"startRow": 1,
|
|
"startCol": 1,
|
|
"length": 7
|
|
},
|
|
{
|
|
"id": "h2",
|
|
"number": 2,
|
|
"direction": "horizontal",
|
|
"clue": "Premio recibido en 1903 y 1911",
|
|
"answer": "NOBEL",
|
|
"startRow": 2,
|
|
"startCol": 1,
|
|
"length": 5
|
|
},
|
|
{
|
|
"id": "h3",
|
|
"number": 3,
|
|
"direction": "horizontal",
|
|
"clue": "Fenómeno de emisión espontánea de radiación descubierto por Marie",
|
|
"answer": "RADIOACTIVIDAD",
|
|
"startRow": 4,
|
|
"startCol": 0,
|
|
"length": 14
|
|
},
|
|
# Verticales
|
|
{
|
|
"id": "v1",
|
|
"number": 4,
|
|
"direction": "vertical",
|
|
"clue": "Elemento químico radiactivo descubierto",
|
|
"answer": "RADIO",
|
|
"startRow": 4,
|
|
"startCol": 0,
|
|
"length": 5
|
|
},
|
|
{
|
|
"id": "v2",
|
|
"number": 5,
|
|
"direction": "vertical",
|
|
"clue": "Esposo de Marie",
|
|
"answer": "PIERRE",
|
|
"startRow": 0,
|
|
"startCol": 3,
|
|
"length": 6
|
|
},
|
|
{
|
|
"id": "v3",
|
|
"number": 6,
|
|
"direction": "vertical",
|
|
"clue": "Apellido de Marie",
|
|
"answer": "CURIE",
|
|
"startRow": 4,
|
|
"startCol": 8,
|
|
"length": 5
|
|
},
|
|
]
|
|
|
|
# Crear grid
|
|
grid = [[' ' for _ in range(16)] for _ in range(10)]
|
|
|
|
# Colocar palabras
|
|
for word in words:
|
|
answer = word['answer']
|
|
row = word['startRow']
|
|
col = word['startCol']
|
|
direction = word['direction']
|
|
|
|
for i, letter in enumerate(answer):
|
|
if direction == 'horizontal':
|
|
grid[row][col + i] = letter
|
|
else:
|
|
grid[row + i][col] = letter
|
|
|
|
# Mostrar grid
|
|
print("=" * 75)
|
|
print("CRUCIGRAMA COMPLETO - Con todas las palabras")
|
|
print("=" * 75)
|
|
print(" ", end="")
|
|
for c in range(16):
|
|
print(f"{c:2}", end=" ")
|
|
print()
|
|
|
|
for r in range(10):
|
|
print(f"{r:2}: ", end="")
|
|
for c in range(16):
|
|
cell = grid[r][c]
|
|
if cell == ' ':
|
|
print(" . ", end="")
|
|
else:
|
|
print(f" {cell} ", end="")
|
|
print()
|
|
|
|
# Encontrar intersecciones
|
|
print("\n" + "=" * 75)
|
|
print("INTERSECCIONES:")
|
|
print("=" * 75)
|
|
|
|
intersections = []
|
|
conflicts = []
|
|
|
|
for i, word1 in enumerate(words):
|
|
for j, word2 in enumerate(words):
|
|
if i >= j or word1['direction'] == word2['direction']:
|
|
continue
|
|
|
|
positions1 = []
|
|
positions2 = []
|
|
|
|
for k, letter in enumerate(word1['answer']):
|
|
if word1['direction'] == 'horizontal':
|
|
positions1.append((word1['startRow'], word1['startCol'] + k, letter))
|
|
else:
|
|
positions1.append((word1['startRow'] + k, word1['startCol'], letter))
|
|
|
|
for k, letter in enumerate(word2['answer']):
|
|
if word2['direction'] == 'horizontal':
|
|
positions2.append((word2['startRow'], word2['startCol'] + k, letter))
|
|
else:
|
|
positions2.append((word2['startRow'] + k, word2['startCol'], letter))
|
|
|
|
for pos1 in positions1:
|
|
for pos2 in positions2:
|
|
if pos1[0] == pos2[0] and pos1[1] == pos2[1]:
|
|
if pos1[2] == pos2[2]:
|
|
intersections.append(True)
|
|
print(f"✓ {word1['id']} ({word1['answer']}) ∩ {word2['id']} ({word2['answer']}) en ({pos1[0]},{pos1[1]}): {pos1[2]} = {pos2[2]}")
|
|
else:
|
|
conflicts.append(True)
|
|
print(f"✗ {word1['id']} ({word1['answer']}) ∩ {word2['id']} ({word2['answer']}) en ({pos1[0]},{pos1[1]}): {pos1[2]} ≠ {pos2[2]}")
|
|
|
|
print(f"\nIntersecciones válidas: {len(intersections)}")
|
|
print(f"Conflictos: {len(conflicts)}")
|
|
|
|
if len(conflicts) == 0:
|
|
print("\n✅ PERFECTO: Todas las intersecciones son válidas")
|
|
|
|
# Generar JSON
|
|
print("\n" + "=" * 75)
|
|
print("JSON PARA SQL:")
|
|
print("=" * 75)
|
|
import json
|
|
print(json.dumps(words, indent=2, ensure_ascii=False))
|
|
else:
|
|
print(f"\n⚠️ Hay {len(conflicts)} conflictos que necesitan resolverse")
|