-
Trình Thực Thi
Trình biên dịch Python Trình biên dịch C++ Trình biên dịch C Trình biên dịch Matplotlib Trình thông dịch Node.js Trình thông dịch PHP Trình biên dịch C# / .NET Trình biên dịch Rust Ruby Interpreter Trình biên dịch Java Trình biên dịch Go Trình biên dịch Kotlin Trình biên dịch Swift Trình biên dịch TypeScript
-
Học lập trình
Học Python Ví dụ chạy được, NumPy, pandas và nhiều nội dung khác Học AIMạng nơ-ron, học máy và LLM từ đầu Học C và C++ Con trỏ, bộ nhớ, STL và C++ hiện đại Học C#C# cơ bản, OOP, LINQ, async và bài tập .NET Học MatplotlibBiểu đồ đường, cột, phân tán và tròn với visualizer tương tác Thuật toán Python Tìm kiếm, sắp xếp, đệ quy và trình mô phỏng O(n) Thuật toán C và C++ So sánh cách cài đặt bằng C và C++ Lập trình cho trẻ em Vừa chơi vừa học lập trình!
- Thử tháchMới
- Cho giáo viênMới
- Cập Nhật mới nhất
- Mời mình một ly cà phê
Mô hình ngôn ngữ chọn token tiếp theo từ một phân phối xác suất. Hai thiết lập định hình phân phối đó:
- Top-k: chỉ giữ k token có logit cao nhất (nếu logit bằng nhau, chỉ số nhỏ hơn xếp trên).
- Temperature T: chia các logit được giữ cho T trước khi tính softmax. T thấp làm lựa chọn dễ đoán hơn; T cao làm nó ngẫu nhiên hơn.
Để có thể kiểm thử, số ngẫu nhiên được cho sẵn:
- Giữ k token đứng đầu, rồi liệt kê chúng theo chỉ số ban đầu (tăng dần).
- Tính softmax(logit / T) trên các token được giữ (trừ giá trị lớn nhất trước khi tính e^x).
- Đi qua danh sách và cộng dồn xác suất; trả về chỉ số của token đầu tiên làm tổng cộng dồn lớn hơn
random_value. Nếu không có token nào (do làm tròn), trả về token được giữ cuối cùng.
Với k = 1, đây là giải mã tham lam: luôn chọn token khả năng cao nhất.
Hãy cài đặt sample_token(logits, temperature, k, random_value).
Đầu vào
logits: Mỗi token trong từ vựng một điểm.
temperature: T, lớn hơn 0.
k: Số token đứng đầu cần giữ.
random_value: Một số ngẫu nhiên trong [0, 1).
Đầu ra
Trả về chỉ số của token được chọn.
Ràng buộc
1 ≤ k ≤ số logit ≤ 1.000
0 < temperature ≤ 100, 0 ≤ random_value < 1
-100 ≤ mỗi logit ≤ 100
Ví dụ
Ví dụ 1
Đầu vào:
logits = [1.0, 3.0, 2.0, 0.5]
temperature = 1.0
k = 1
random_value = 0.99
Kết quả mong đợi:
1
Giải thích
k = 1 chỉ giữ logit cao nhất, 3.0 ở chỉ số 1. Xác suất của nó là 1, nên nó được chọn bất kể số ngẫu nhiên: đây là giải mã tham lam.
Ví dụ 2
Đầu vào:
logits = [2.0, 1.0, 0.0]
temperature = 1.0
k = 2
random_value = 0.8
Kết quả mong đợi:
1
Giải thích
Top-2 giữ chỉ số 0 và 1 (logit 2 và 1). softmax cho khoảng 0.731 và 0.269. Tổng cộng dồn là 0.731 sau chỉ số 0 (chưa vượt 0.8) và 1 sau chỉ số 1, nên chọn chỉ số 1.
Tham khảo
-
Ví dụ 1 Chưa chạyĐầu vào:
logits = [1.0, 3.0, 2.0, 0.5] temperature = 1.0 k = 1 random_value = 0.99Kết quả mong đợi:1Kết quả của bạn -
Ví dụ 2 Chưa chạyĐầu vào:
logits = [2.0, 1.0, 0.0] temperature = 1.0 k = 2 random_value = 0.8Kết quả mong đợi:1Kết quả của bạn
Có 4 kiểm tra ẩn sẽ chạy khi bạn nộp bài. Nếu code chưa vượt qua một bài, bạn sẽ thấy bài đó. Giải xong thử thách để xem tất cả.
Trình biên dịch Rust online
Viết, biên dịch, chạy và gỡ lỗi code Rust trực tuyến trong IDE đầy đủ tính năng. Làm việc với nhiều tệp, lưu workspace, chia sẻ và cộng tác theo thời gian thực.
🚀 252,702 tổng số lượt thực thi (135 trong tháng này)
Luyện Rust với thử thách lập trình
Giải các bài tập thực tế ngay trên trình soạn thảo này: chạy kiểm thử mẫu, nộp bài và nhận đánh giá code từ AI.
🦀 Về Trình thực thi Rust trực tuyến này
Trình thực thi Rust của CodeUtility cho phép bạn viết và chạy mã Rust trực tiếp trong trình duyệt - không cần cài đặt, thiết lập toolchain hay môi trường cục bộ. Công cụ được vận hành bởi một sandbox an toàn hỗ trợ các phiên bản trình biên dịch Rust thực 1.70, 1.72, 1.73, và 1.74.
Công cụ này biên dịch và thực thi chương trình Rust của bạn trên đám mây bằng trình biên dịch rustc chính thống,
đảm bảo kết quả chính xác và nhất quán. Bạn có thể dễ dàng thử nghiệm với biến, ownership, borrowing,
so khớp mẫu, trait, generic và nhiều tính năng hiện đại khác của Rust.
Rất lý tưởng để học các khái niệm cốt lõi của Rust - đặc biệt là an toàn bộ nhớ, xử lý lỗi và lập trình đồng thời - mà không cần cài đặt Cargo hay bất kỳ cấu hình cục bộ nào. Mọi thứ chạy trực tiếp trong trình duyệt chỉ trong vài giây.
Không chỉ là công cụ chạy mã
Sử dụng trình soạn thảo nhiều tệp, terminal thực thi biệt lập, thư viện riêng theo môi trường chạy, không gian làm việc lâu dài, tính năng chia sẻ và cộng tác theo thời gian thực ngay trong cùng một trình thực thi.
Cách sử dụng trình thực thi này?
Chọn môi trường chạy, mở hoặc tạo tệp, viết mã rồi nhấn Chạy. Kết quả xuất hiện trong terminal; người dùng đã đăng nhập có thể lưu tệp trong không gian làm việc, cài thư viện và cộng tác qua liên kết chia sẻ.
- Chọn phiên bản rồi chỉnh sửa tệp hiện tại hoặc mở một tệp khác trong không gian làm việc.
- Chạy mã, nhập dữ liệu trong terminal khi được yêu cầu và xem lại lịch sử chạy đã lưu.
- Sử dụng thư viện, công cụ không gian làm việc, chia sẻ và trò chuyện khi tác vụ cần nhiều hơn một đoạn mã.
💡 Kiến thức cơ bản về Rust & Ví dụ bạn có thể thử ở trên
1. Khai báo biến và hằng
Dùng let để khai báo biến. Dùng const cho hằng và mut cho biến có thể thay đổi.
let x = 10;
let pi: f64 = 3.14;
let name = "Alice";
let is_active = true;
const MAX_USERS: u32 = 100;
2. Câu điều kiện (if / match)
Rust dùng if cho điều kiện và match cho so khớp mẫu.
let x = 2;
if x == 1 {
println!("One");
} else if x == 2 {
println!("Two");
} else {
println!("Other");
}
match x {
1 => println!("One"),
2 => println!("Two"),
_ => println!("Other"),
}
3. Vòng lặp
Rust hỗ trợ for, while và loop vô hạn.
for i in 0..3 {
println!("{}", i);
}
let mut n = 3;
while n > 0 {
println!("{}", n);
n -= 1;
}
4. Mảng
Mảng kích thước cố định trong Rust dùng dấu ngoặc vuông. Dùng slice để truy cập một phần mảng.
let nums = [10, 20, 30];
println!("{}", nums[1]);
5. Vector (Mảng động)
Vec được dùng cho mảng động.
let mut fruits = vec!["apple", "banana"];
fruits.push("cherry");
fruits.pop();
for fruit in &fruits {
println!("{}", fruit);
}
6. Nhập/Xuất console
Dùng println! để xuất và std::io để nhập.
use std::io;
let mut name = String::new();
println!("Enter your name:");
io::stdin().read_line(&mut name).unwrap();
println!("Hello, {}", name.trim());
7. Hàm
Hàm dùng fn và có thể trả về giá trị với ->.
fn greet(name: &str) -> String {
format!("Hello, {}", name)
}
println!("{}", greet("Alice"));
8. HashMap
Dùng std::collections::HashMap cho dữ liệu key-value.
use std::collections::HashMap;
let mut person = HashMap::new();
person.insert("name", "Bob");
println!("{}", person["name"])
9. Xử lý lỗi
Rust xử lý lỗi bằng Result và match hoặc unwrap().
fn fail() -> Result<(), String> {
Err("Something went wrong".to_string())
}
match fail() {
Ok(_) => println!("Success"),
Err(e) => println!("{}", e),
}
10. I/O tệp
Dùng std::fs để đọc và ghi tệp.
use std::fs;
fs::write("file.txt", "Hello File").unwrap();
let content = fs::read_to_string("file.txt").unwrap();
println!("{}", content);
11. Xử lý chuỗi
Chuỗi trong Rust được cấp phát trên heap và hỗ trợ nhiều phương thức.
let mut text = String::from(" Hello Rust ");
println!("{}", text.trim());
println!("{}", text.to_uppercase());
text = text.replace("Hello", "Hi");
println!("{}", text);
12. Struct & Phương thức
Rust dùng struct cho kiểu dữ liệu và impl để định nghĩa phương thức.
struct Person {
name: String,
}
impl Person {
fn greet(&self) -> String {
format!("Hi, I'm {}", self.name)
}
}
let p = Person { name: "Alice".to_string() };
println!("{}", p.greet());
13. Tham chiếu & Mượn
Rust dùng & để mượn giá trị và &mut cho tham chiếu có thể thay đổi.
fn update(x: &mut i32) {
*x += 1;
}
let mut value = 10;
update(&mut value);
println!("{}", value);