Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
198 changes: 44 additions & 154 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,180 +1,70 @@
<div align="center">
<img src="./which-language.jpg" alt="Which Language Banner" width="100%" />

# 🚀 The AI Native Language Initiative

**AI doesn't just write code—it speaks it. But which language does it speak best?**

[![Join the Movement](https://img.shields.io/badge/Join-The_Movement-blue?style=for-the-badge&logo=github)](./AGENT.md)
[![Codexes](https://img.shields.io/badge/Supported_Codexes-5-success?style=for-the-badge)](#-supported-codexes)
[![Problems](https://img.shields.io/badge/Benchmarks-2-orange?style=for-the-badge)](#-the-arena-problems)

*We are on a mission to map the "native tongue" of Large Language Models. Join us in benchmarking Claude, Gemini, OpenAI, and more across every programming language known to humanity.*
</div>
# mini-grades

---

## 🌟 The Vision

When we ask an AI to build a system from scratch, the language we choose matters. Does an LLM reason better in the strict, typed world of **Rust**, or the dynamic flexibility of **Python**? Does it write better **Ruby** than **Go**?

This isn't just another benchmarking tool. It's an **exploratory movement** to understand the cognitive alignment between Artificial Intelligence and programming paradigms. We are building the definitive matrix comparing **AI coding systems** (Codexes) against **Programming Languages** through standardized real-world **Problems**.

Be part of the discovery. Help us find the ultimate AI-native programming language.

> 🧠 **Explore Deeper:** Internals → [CLAUDE.md](./CLAUDE.md) · Architecture → [program.md](./program.md) · Roadmap → [plan.md](./plan.md)
Komut satırı tabanlı öğrenci not yönetim sistemi.
Veriler `grades.txt` dosyasında saklanır.

---

## ⚡ Quick Start: Join the Arena

You don't need to be an expert to contribute. You can run your first benchmark in less than 2 minutes and join the movement.

### 1️⃣ Gear Up
You'll need `ruby`, toolchains for your target languages, and at least one API key or active tool (Claude CLI, Gemini API, or OpenAI API).

### 2️⃣ Configure Your AI
Create `config/codexes.local.yml` (this will be gitignored to protect your keys):
## Kullanım

```yaml
codexes:
gemini:
enabled: true
config:
api_key: "${GOOGLE_API_KEY}"
```
```bash
export GOOGLE_API_KEY="your-key-here"
python mini-grades-v2.py <komut> [argümanlar]
```

### 3️⃣ Run Your First Benchmark
Test the waters with a lightning-fast dry run:
```bash
bin/which-language run gemini minigit --dry-run --lang python --trials 1
```
Or unleash the full power for a real benchmark:
```bash
bin/which-language run gemini minigit --lang python --trials 1
```

*Your pristine outputs, including raw data, markdown reports, and gorgeous PNG graphs will be waiting for you in the `artifacts/` directory. You are now officially a benchmark runner!*
## Komutlar

**Platform Setup Shortcuts:**
- **Windows**: `.\scripts\install_windows.ps1` (run as Administrator)
- **macOS**: `chmod +x scripts/install_mac.sh && bash scripts/install_mac.sh`

---
| Komut | Açıklama |
|-------|----------|
| `init` | `grades.txt` dosyasını oluşturur |
| `ogrenci-ekle <isim>` | Yeni öğrenci ekler |
| `not-gir <id> <not>` | Öğrenciye not ekler (0-100) |
| `listele` | Tüm öğrencileri listeler |
| `ara <kelime>` | İsme göre öğrenci arar (büyük/küçük harf duyarsız) |
| `ortalama <id>` | Öğrencinin not ortalamasını hesaplar |
| `not-listele <id>` | Öğrencinin tüm notlarını listeler |

## 🧩 The Matrix Model
## Örnek

Think of this initiative as a living, breathing matrix. Every benchmark run is an intersection of three dimensions:

| Dimension | Defined by | Example |
|----------|------------|---------|
| 🎯 **Problem** | `problems/<problem>/problem.json` + assets | `minigit`, `minigrades` |
| 🧠 **Codex** | `lib/codexes/*.rb` + `config/codexes*.yml` | `claude`, `gemini`, `openai` |
| 🗣️ **Language**| `config/languages.yml` | `python`, `rust`, `ruby/steep` |
```
python mini-grades-v2.py init
python mini-grades-v2.py ogrenci-ekle "Ali Veli"
python mini-grades-v2.py not-gir 1 85
python mini-grades-v2.py not-gir 1 90
python mini-grades-v2.py ara "Ali"
python mini-grades-v2.py ortalama 1
python mini-grades-v2.py not-listele 1
python mini-grades-v2.py listele
```

---

## 📊 Current State of the Matrix

We are constantly expanding our coverage. Here is where the initiative stands today:
## Sürüm Geçmişi

### 🧠 Supported Codexes
| Codex | Status | Notes |
|------|:---:|-------|
| **Claude Code** | ✅ | Default CLI adapter |
| **Gemini** | ✅ | API adapter, Flash-Lite/Pro |
| **OpenAI** | ✅ | Responses API, cost accounting |
| **Groq** | ✅ | API adapter, robust parsing |
| **Aider** | 🚧 | CLI adapter, *needs validation* |
### v0
- `init`, `ogrenci-ekle`, `not-gir` komutları eklendi
- Temel dosya okuma/yazma ve ID yönetimi

*More warriors (DeepSeek, Qwen, Grok, Cline) are entering the arena soon. See [plan.md](./plan.md).*
### v1
- `listele` komutu eklendi (`while` döngüsü ile satır satır okuma)
- Bilinmeyen komut hatası eklendi
- SPEC v1 olarak güncellendi

### 🗣️ Supported Languages
- **Dynamic:** `python`, `ruby`, `javascript`, `perl`, `lua`
- **Static:** `rust`, `go`, `c`, `typescript`, `java`
- **Functional:** `scheme`, `ocaml`, `haskell`
- **Typed Variants:** `python/mypy`, `ruby/steep`

### 🎯 The Arena (Problems)
- 💾 **minigit** — Minimal version control system
- 🎓 **minigrades** — Student grade manager
- 🎵 **miniplaylist** — Playlist management system
### v2
- `ara` komutu eklendi: isim araması (`for` döngüsü + string `in` operatörü)
- `ortalama` komutu eklendi: `for` döngüsü ile not toplama ve ortalama hesabı
- `not-listele` komutu eklendi: belirli öğrencinin notlarını `for` ile listeler
- SPEC v2 olarak güncellendi

---

## 🛠️ Power User Commands

Command the benchmarking pipeline like a pro:

```bash
# 🔥 Full pipeline (benchmark + report + figures)
bin/which-language run gemini minigit --lang python --trials 1
## Veri Formatı

# 🏃 Benchmark only
bin/which-language benchmark gemini minigit --lang python --trials 1

# ⚔️ Epic Codex Battles (Compare systems head-to-head)
bin/which-language run claude minigit --lang python --trials 3
bin/which-language run gemini minigit --lang python --trials 3
```

---

## 🏆 Hall of Fame

This project thrives on the brilliant minds driving it forward. We celebrate every contribution! Here are the legends who have shaped the initiative:

<div align="center">

| [<img src="https://github.com/mame.png?size=100" width="100px;"/><br /><sub><b>mame</b></sub>](https://github.com/mame) | [<img src="https://github.com/berkevnl.png?size=100" width="100px;"/><br /><sub><b>berkevnl</b></sub>](https://github.com/berkevnl) | [<img src="https://github.com/Ahmetngz.png?size=100" width="100px;"/><br /><sub><b>Ahmetngz</b></sub>](https://github.com/Ahmetngz) |
| :---: | :---: | :---: |
| 🚀 Visionary | 💻 Core Architect | 💻 Core Architect |

</div>

### Become a Legend
Want your face on the Hall of Fame? See our strict but fair [Contributor Protocol (AGENT.md)](./AGENT.md). We are actively hunting for:
- **Codex Whisperers:** Implement new adapters in `lib/codexes`
- **Data Scientists:** Run benchmarks on your machines and submit results
- **Problem Architects:** Design new, brutal testing scenarios in `problems/`
- **Linguists:** Add support for new programming languages to `config/languages.yml`

---

## 🏗️ Repository Layout

For the curious minds, here is how our engine is built:

```text
.
├── bin/ # CLI Application binaries (which-language)
├── src/ # Core application scripts (benchmark, report, plot)
├── problems/ # The arena: problem definitions
├── lib/codexes/ # The minds: codex adapters
├── config/codexes.yml # Codex configuration layer
├── config/languages.yml # Languages and toolchain configuration
├── scripts/ # Productivity accelerators (installers)
├── program.md # Agent entry point
├── AGENT.md # Contributor protocol & rules
├── plan.md # Living iteration roadmap
├── walkthrough.md # Proof-of-work documentation
├── CLAUDE.md # Technical internals and secrets
└── artifacts/ # The spoils: benchmark outputs
STUDENT|1|Ali Veli
GRADE|1|85
GRADE|1|90
```

---

## 🏛️ Historical Context

This entire movement was ignited by a single, powerful question: *Which Programming Language Is Best for Claude Code?*

- 📖 [Read the original publication that started it all](https://dev.to/mame/which-programming-language-is-best-for-claude-code-508a)
- 🇯🇵 [Japanese version available here](https://zenn.dev/mametter/articles/3e8580ec034201)

## 🌌 The Multiverse (Similar Projects)
We proudly stand alongside other incredible benchmarking initiatives:
- [AutoCodeBench](https://autocodebench.github.io)
- [LiveCodeBench](https://livecodebench.github.io)
Geliştirici: Davud Kılıç — 251478023
135 changes: 135 additions & 0 deletions problems/minigrades/SPEC.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
PROJECT: mini-grades
AUTHOR: Davud Kılıç - 251478023
VERSION: v2
DATE: 2026-04-19

========================================
OVERVIEW
========================================

mini-grades is a command-line student grade manager.
It stores student records and their grades in a plain text file
and supports adding students, entering grades, calculating
averages, generating reports, and deleting students.

All data is persisted in a file called grades.txt
in the current working directory.

========================================
COMMANDS
========================================

--- init ---
Usage: python grades.py init
Creates an empty grades.txt file.
If grades.txt already exists, print "Already initialized" and exit.

--- ogrenci-ekle ---
Usage: python grades.py ogrenci-ekle "Ali Veli"
Adds a new student with no grades yet.
Each student has: id , name.
Prints "Added student #<id>: <name>"

--- not-gir ---
Usage: python grades.py not-gir 1 85
Appends a grade for student #1.
Valid grades are integers between 0 and 100.
Prints "Grade 85 added for student #1."
If student does not exist, prints "Student #1 not found."
If grade is not between 0 and 100, prints "Invalid grade: <grade>. Must be between 0 and 100."

--- listele ---
Usage: python grades.py listele
Lists all students in the file, one per line.
Format: #<id> - <name>
Example output:
#1 - Ali Veli
#2 - Ayse Kaya
If no students exist, prints "No students found."
NOTE: Intermediate command. "rapor" will replace/extend it in a future version.

--- ara ---
Usage: python grades.py ara <keyword>
Searches all students whose name contains the given keyword (case-insensitive).
Prints matching students one per line in the same format as listele.
If no match found, prints "No students found matching '<keyword>'."
Example:
python grades.py ara Ali
-> #1 - Ali Veli

--- ortalama ---
Usage: python grades.py ortalama 1
Calculates and prints the average of all grades for student #1.
Prints "Student #1 (<name>) average: <avg>"
Average is rounded to 2 decimal places.
If student has no grades, prints "Student #1 has no grades yet."
If student does not exist, prints "Student #1 not found."

--- not-listele ---
Usage: python grades.py not-listele 1
Lists all grades for student #1, numbered.
Format:
Student #1 (<name>) grades:
1. 85
2. 90
If student has no grades, prints "Student #1 (<name>) has no grades yet."
If student does not exist, prints "Student #1 not found."

--- rapor ---
Usage: python grades.py rapor
Prints all students and their averages, one per line:
[1] Ali Veli - Average: 87.50 (3 grades)
[2] Ayse Kaya - No grades yet.
If no students exist, prints "No students found."
STATUS: Not yet implemented.

--- ogrenci-sil ---
Usage: python grades.py ogrenci-sil 1
Removes student #1 and all their grades from grades.txt.
Prints "Deleted student #1: <name>"
If student does not exist, prints "Student #1 not found."
STATUS: Not yet implemented.

========================================
DATA FORMAT
========================================

File: grades.txt
Format: One record per line, fields separated by |
Student record: STUDENT|<id>|<name>
Grade record: GRADE|<student_id>|<grade>

Example:
STUDENT|1|Ali Veli
GRADE|1|85
GRADE|1|90
STUDENT|2|Ayse Kaya
GRADE|2|70

========================================
ERROR HANDLING
========================================

- Running any command before "init": print "Not initialized. Run: python grades.py init"
- Invalid command: print "Unknown command: <command>"
- Missing arguments: print "Usage: python grades.py <command> [args]"
- Non-integer grade input: print "Invalid grade: <input>. Must be an integer."
- Non-integer student ID input: print "Invalid ID: <input>. Must be an integer."

========================================
CHANGELOG
========================================

v0 (2026-03-13)
- init, ogrenci-ekle, not-gir komutlari eklendi.
- Temel dosya I/O ve ID yonetimi implemente edildi.

v1 (2026-03-28)
- listele komutu eklendi.
- while dongusu ile dosyadan satir satir okuma implemente edildi.
- Unknown command hatasi eklendi.

v2 (2026-04-19)
- ara komutu eklendi (string 'in' operatoru + for dongusu ile isim araması).
- ortalama komutu eklendi (for dongusu ile not toplama ve hesaplama).
- not-listele komutu eklendi (belirli bir ogrencinin notlarini for dongusu ile listeler).
Loading