diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 312a4eb..c640c3c 100644 Binary files a/core/__pycache__/urls.cpython-311.pyc and b/core/__pycache__/urls.cpython-311.pyc differ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index da4f488..bf79a63 100644 Binary files a/core/__pycache__/views.cpython-311.pyc and b/core/__pycache__/views.cpython-311.pyc differ diff --git a/core/templates/core/index.html b/core/templates/core/index.html index 8532dee..da9cc3b 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -35,6 +35,11 @@
+
Inteligencia matematica aplicada
diff --git a/core/templates/core/sequential_generator.html b/core/templates/core/sequential_generator.html new file mode 100644 index 0000000..7d1d75a --- /dev/null +++ b/core/templates/core/sequential_generator.html @@ -0,0 +1,299 @@ +{% extends "base.html" %} + +{% block content %} +
+
+
+
+
+
+

Gerador Sequencial Inteligente IA

+

Motor Autônomo de Probabilidades Matemáticas

+
+ Voltar ao Início +
+ +
+
+ + +
+
+ + + + +
+
+ + +
+
+
+ Sequências Geradas + 0 +
+
+
+
+ Elite Verde Detectada + 0 +
+
+
+
+ Radar IA: Anulados + 0 +
+
+
+
+ IA Radar: Resgatados + 0 +
+
+
+ + +
+
+
+ +

Aguardando comando do Motor de IA...

+
+
+
+ +
+
Legenda do Motor IA:
+
+
+ + Elite Verde (Alta Chance) +
+
+ + Anulado Frio (Evite) +
+
+ + IA Radar: Resgatado do Anulado +
+
+
+
+
+
+
+ + + + +{% endblock %} diff --git a/core/urls.py b/core/urls.py index 699b118..189d6e1 100644 --- a/core/urls.py +++ b/core/urls.py @@ -9,4 +9,6 @@ urlpatterns = [ path('admin-loto/edit//', views.edit_lottery, name='edit_lottery'), path('admin-loto/ai-predict//', views.ai_auto_predict, name='ai_predict'), path('live-math/', views.live_math, name='live_math'), + path('gerador-sequencial/', views.sequential_generator, name='sequential_generator'), + path('api/lottery-info//', views.lottery_info_api, name='lottery_info_api'), ] diff --git a/core/views.py b/core/views.py index 698791e..f3dd787 100644 --- a/core/views.py +++ b/core/views.py @@ -308,3 +308,53 @@ def live_math(request): except Exception as e: return JsonResponse({"error": str(e)}, status=500) return JsonResponse({"error": "Método inválido"}, status=405) + +def sequential_generator(request): + """Página do Gerador Sequencial Inteligente.""" + loterias = Lottery.objects.all() + return render(request, "core/sequential_generator.html", {"loterias": loterias}) + +def lottery_info_api(request, lottery_key): + """Retorna informações de IA para uma loteria específica via JSON.""" + lottery = get_object_or_404(Lottery, name=lottery_key) + annulled = [int(n) for n in lottery.annulled_numbers.split(',') if n] + + # Pegamos os sorteios para o Radar de Reclamação + draws_db = DrawResult.objects.filter(lottery=lottery) + draw_lists = [[int(n) for n in d.numbers.split(',')] for d in draws_db] + + if not draw_lists: + # Mock se vazio + frequency = {n: random.randint(1, 10) for n in range(1, lottery.max_number + 1)} + else: + frequency = Counter(number for draw in draw_lists for number in draw) + + # Lógica de Elite Verde (Top 25% dos disponíveis) + available_numbers = [n for n in range(1, lottery.max_number + 1) if n not in annulled] + sorted_by_freq = sorted(available_numbers, key=lambda n: frequency.get(n, 0), reverse=True) + hot_count = max(6, int(len(available_numbers) * 0.25)) + elite_greens = sorted_by_freq[:hot_count] + + # IA Radar de Reclamação + last_seen_all = {} + for i, draw in enumerate(reversed(draw_lists)): + for num in draw: + if num not in last_seen_all: + last_seen_all[num] = i + + reclaimed = [] + for n in annulled: + freq = frequency.get(n, 0) + delay = last_seen_all.get(n, len(draw_lists)) + reclaim_score = (freq * 0.6) + (delay * 0.4) + if reclaim_score > (max(frequency.values() or [1]) * 0.8): + reclaimed.append(n) + + return JsonResponse({ + "name": lottery.get_name_display(), + "max_number": lottery.max_number, + "numbers_to_draw": lottery.numbers_to_draw, + "elite_greens": elite_greens, + "annulled_numbers": [n for n in annulled if n not in reclaimed], + "reclaimed_numbers": reclaimed, + })