- Executores
-
Aprender
Central de aprendizagem Python Exemplos executáveis, NumPy, pandas e mais Central de aprendizagem C e C++ Ponteiros, memória, STL e C++ moderno Central de aprendizagem C#Fundamentos, POO, LINQ, async e exercícios .NET Algoritmos em Python Busca, ordenação, recursão e visualizações O(n) Algoritmos em C e C++ Compare implementações em C e C++
- Desafios
A atenção multi-cabeça permite que um Transformer atenda a várias coisas ao mesmo tempo. Com a entrada X (n tokens × d colunas) e matrizes de pesos d × d:
- Q = X × w_q, K = X × w_k, V = X × w_v
- Divida as d colunas em
num_headscabeças de d_k = d / num_heads colunas consecutivas (a cabeça h usa as colunas h×d_k até (h+1)×d_k - 1). - Para cada cabeça, execute a atenção por produto escalar escalado nas suas colunas: para o token i, score_j = (Q_i · K_j) / √d_k nas colunas dessa cabeça, softmax sobre todos os n tokens j, e saída = Σ weight_j × V_j (colunas dessa cabeça).
- Coloque as saídas das cabeças de volta em suas colunas (concatenação) e multiplique por w_o.
Implemente multi_head_attention(x, w_q, w_k, w_v, w_o, num_heads).
Entrada
x: Matriz de entrada n × d.
w_q, w_k, w_v, w_o: Matrizes de pesos d × d.
num_heads: O número de cabeças (d é divisível por ele).
Saída
Retorne a matriz de saída n × d.
Restrições
1 ≤ n ≤ 30, 1 ≤ d ≤ 32, 1 ≤ num_heads ≤ d e d é divisível por num_heads
-5 ≤ cada valor ≤ 5
Exemplos
Exemplo 1
Entrada:
x = [
[1.0, 0.0],
[0.0, 1.0]
]
w_k = [
[1.0, 0.0],
[0.0, 1.0]
]
w_o = [
[1.0, 0.0],
[0.0, 1.0]
]
w_q = [
[0.0, 0.0],
[0.0, 0.0]
]
w_v = [
[1.0, 0.0],
[0.0, 1.0]
]
num_heads = 1
Saída esperada:
[
[0.5, 0.5],
[0.5, 0.5]
]
Explicação
w_q é toda zero, então todas as pontuações são 0 e cada token faz a média das linhas de valores: V = X, então as duas linhas se tornam [0.5, 0.5].
Exemplo 2
Entrada:
x = [
[2.0, 4.0]
]
w_k = [
[1.0, 0.0],
[0.0, 1.0]
]
w_o = [
[0.0, 1.0],
[1.0, 0.0]
]
w_q = [
[1.0, 0.0],
[0.0, 1.0]
]
w_v = [
[1.0, 0.0],
[0.0, 1.0]
]
num_heads = 2
Saída esperada:
[
[4.0, 2.0]
]
Explicação
Com um único token, cada cabeça atende só a si mesma, então a saída concatenada é V = [2, 4]. w_o troca as duas colunas: [4, 2].
Referências
-
Exemplo 1 Não executadoEntrada:
x = [ [1.0, 0.0], [0.0, 1.0] ] w_k = [ [1.0, 0.0], [0.0, 1.0] ] w_o = [ [1.0, 0.0], [0.0, 1.0] ] w_q = [ [0.0, 0.0], [0.0, 0.0] ] w_v = [ [1.0, 0.0], [0.0, 1.0] ] num_heads = 1Saída esperada:[ [0.5, 0.5], [0.5, 0.5] ]Sua saída -
Exemplo 2 Não executadoEntrada:
x = [ [2.0, 4.0] ] w_k = [ [1.0, 0.0], [0.0, 1.0] ] w_o = [ [0.0, 1.0], [1.0, 0.0] ] w_q = [ [1.0, 0.0], [0.0, 1.0] ] w_v = [ [1.0, 0.0], [0.0, 1.0] ] num_heads = 2Saída esperada:[ [4.0, 2.0] ]Sua saída
4 testes ocultos também serão executados ao enviar.
Compilador e depurador C# online
Escreva, compile, execute e depure C# online. Use pontos de interrupção, execução passo a passo e inspeção de objetos em uma IDE com vários arquivos, sem Visual Studio.
🚀 350,747 execuções totais (1 este mês)
Pratique C# com desafios de código
Resolva problemas práticos direto neste editor: rode os testes de exemplo, envie sua solução e receba uma revisão de código por IA.
🔷 Sobre este Executor Online de C# / .NET
O CodeUtility C# Executor permite escrever e executar código C# real diretamente no navegador - sem necessidade de instalar, configurar o Visual Studio ou o .NET SDK. Ele é alimentado por um sandbox seguro que oferece suporte ao runtime do .NET e a versões modernas da linguagem C#, incluindo C# 9 e posteriores.
Esta ferramenta usa dotnet-script nos bastidores para compilar e executar seu código com comportamento real do .NET, permitindo experimentar recursos básicos e avançados de C#, como LINQ, async/await, pattern matching e generics.
Você pode testar scripts simples, funções e fluxos de lógica, ou explorar conceitos como classes, structs, herança e interfaces - tudo em um ambiente de codificação limpo e sem distrações.
Seja para aprender C#, testar algoritmos ou experimentar recursos do .NET, o CodeUtility C# Executor oferece uma forma rápida, segura e confiável de executar código C# instantaneamente a partir de qualquer navegador.
Mais do que um executor de código
Use no mesmo executor um editor de vários arquivos, um terminal de execução isolado, bibliotecas específicas do ambiente, espaços de trabalho persistentes, compartilhamento e colaboração em tempo real.
Como usar este executor?
Escolha um ambiente de execução, abra ou crie um arquivo, escreva o código e selecione Executar. A saída aparece no terminal; usuários conectados podem manter arquivos em um espaço de trabalho, instalar bibliotecas e colaborar por meio de compartilhamentos.
- Selecione uma versão e edite o arquivo atual ou abra outro arquivo do espaço de trabalho.
- Execute o código, forneça dados no terminal quando solicitado e consulte o histórico de execuções salvo.
- Use bibliotecas, ferramentas do espaço de trabalho, compartilhamento e chat quando a tarefa exigir mais de um trecho de código.
💡 Fundamentos de C# e Exemplos que Você Pode Testar Acima
1. Declarando Variáveis e Constantes
C# usa declarações de variáveis com tipagem forte. Use const para constantes de compilação e readonly para constantes de tempo de execução.
int age = 30;
double pi = 3.14159;
char grade = 'A';
string name = "Alice";
bool isActive = true;
// Constantes
const int MaxUsers = 100;
const string Company = "CodeUtility";
2. Condicionais (if / switch)
Use if, else if e switch para controle de fluxo.
int x = 2;
if (x == 1)
{
Console.WriteLine("Um");
}
else if (x == 2)
{
Console.WriteLine("Dois");
}
else
{
Console.WriteLine("Outro");
}
switch (x)
{
case 1:
Console.WriteLine("Um");
break;
case 2:
Console.WriteLine("Dois");
break;
default:
Console.WriteLine("Outro");
break;
}
3. Laços
C# oferece os laços for, while e foreach.
for (int i = 0; i < 3; i++)
{
Console.WriteLine(i);
}
int n = 3;
while (n > 0)
{
Console.WriteLine(n);
n--;
}
4. Arrays
Arrays armazenam coleções de tamanho fixo de elementos do mesmo tipo.
int[] numbers = { 10, 20, 30 };
Console.WriteLine(numbers[1]);
5. Manipulação de Listas
Use List<T> para coleções dinâmicas.
List<int> nums = new List<int> { 1, 2, 3 };
nums.Add(4);
nums.Remove(2);
foreach (int n in nums)
{
Console.Write(n + " ");
}
6. Entrada/Saída no Console
Use Console.WriteLine e Console.ReadLine para I/O básico.
Console.Write("Digite seu nome: ");
string name = Console.ReadLine();
Console.WriteLine($"Olá, {name}!");
7. Funções
Defina métodos usando um tipo de retorno, nome e parâmetros.
int Add(int a, int b)
{
return a + b;
}
Console.WriteLine(Add(3, 4));
8. Dicionários
Dictionary<TKey, TValue> armazena pares chave-valor.
Dictionary<string, int> ages = new Dictionary<string, int>();
ages["Alice"] = 30;
Console.WriteLine(ages["Alice"]);
9. Tratamento de Exceções
Trate erros em tempo de execução usando try, catch e finally.
try
{
throw new Exception("Algo deu errado");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
10. Entrada/Saída de Arquivos
Use File e StreamReader/StreamWriter para operações com arquivos.
File.WriteAllText("file.txt", "Olá, arquivo");
string text = File.ReadAllText("file.txt");
Console.WriteLine(text);
11. Manipulação de Strings
Strings em C# oferecem métodos como Length, Substring, Contains.
string message = "Olá Mundo";
Console.WriteLine(message.Length);
Console.WriteLine(message.Substring(0, 5));
Console.WriteLine(message.Contains("Mundo"));
12. Classes e Objetos
C# suporta programação orientada a objetos por meio de classes e objetos.
class Person
{
public string Name;
public Person(string name) => Name = name;
public void Greet() => Console.WriteLine($"Olá, eu sou {Name}");
}
Person p = new Person("Alice");
p.Greet();