KABAFORCEGeliştirici KabaOS'u edinin

Liste ve dizi

Fannkuch

9 öğenin bütün permütasyonları üretilir; her birinde baştaki öğe 1 olana dek ön ek ters çevrilir. Küçük listelerde dizinlemeyi, takası ve dallanmayı ölçer.

Bu sayfayı KabaLang ile yazılmış sunucu sundu.

Canlı ölçüm

Bu testi kendi bilgisayarınızda ölçün

Fannkuch tarayıcınızda, WebAssembly ile koşar: KabaLang, C++, JavaScript ve Python. Ölçüm sayfası bu testi seçili açar; sonuçlar cihazınızda kalır.

Bu testi canlı ölç

Fannkuch

C++'tan 1,04 kat hızlı

9 öğenin 362.880 permütasyonu · küçük liste işlemleri. Çubuk uzunsa daha hızlı.

DilReferans
KabaLang
16,1 ms
C++
16,6 msKabaLang 1,04 kat hızlı
Python
362 msKabaLang 23 kat hızlı
DilEn iyiOrtalamaDerlemeİkili boyutu
KabaLang16,1 ms16,5 ms768 ms990 KB
C++16,6 ms17,5 ms414 ms17 KB
Python362 ms368 ms––

Referans ölçüm: 21 Ekim 2026 14:53 · 11th Gen Intel(R) Core(TM) i7-11370H @ 3.30GHz · KabaLang 0.6.0 (94109b3+) · süreler milisaniye; ısınma koşusundan sonra 10 koşunun en iyisi.

Bu testte KabaLang / C++ oranı, zaman içinde

Fannkuch: KabaLang / C++ süre oranı0,75×1,00×1,25×1,50×20 Ekim 2026 21:18 · KabaLang 0.6.0 (b0e9258) · 24 / 18 msb0e925821 Ekim 2026 05:21 · KabaLang 0.6.0 (e4756c0) · 18 / 19 ms21 Ekim 2026 06:07 · KabaLang 0.6.0 (94109b3+) · 16 / 18 ms21 Ekim 2026 06:13 · KabaLang 0.6.0 (94109b3+) · 16 / 17 ms21 Ekim 2026 07:18 · KabaLang 0.6.0 (94109b3+) · 16 / 17 ms21 Ekim 2026 14:53 · KabaLang 0.6.0 (94109b3+) · 16 / 17 ms94109b3+0,97×

Ne ölçüyor?

Küçük listelerde dizinlemeyi, takası ve dallanmayı ölçer.

Kategori: Liste ve dizi. Liste okuma/yazma, dizinleme ve sınır denetimi. Üç program da aynı algoritmayı aynı adımlarla uygular ve aynı çıktıyı üretmek zorundadır; çıktı tutmazsa ölçüm geçersiz sayılır.

Beklenen çıktı

stdout
8629 30

Derleme

Komutlar ve bayraklar

KabaLang

Uçbirim
kabalang derle program.kbl -o program
./program

C++

Uçbirim
clang++ -O2 -o program program.cpp
./program

Python

Uçbirim
python3 program.py

Kaynak

Ölçülen programlar

Aşağıdaki dosyalar ölçülen programların kendisidir.

program.kbl
fonksiyon fannkuch(n: sayi) -> liste<sayi>:
    perm1 = [0] * n
    dongu i icinde 0..<n:
        perm1[i] = i
    sayac = [0] * n
    en_cok = 0
    saglama = 0
    sira = 0
    r = n
    iken dogru:
        iken r != 1:
            sayac[r - 1] = r
            r -= 1
        perm = perm1
        cevirme = 0
        k = perm[0]
        iken k != 0:
            i = 0
            j = k
            iken i < j:
                gecici = perm[i]
                perm[i] = perm[j]
                perm[j] = gecici
                i += 1
                j -= 1
            cevirme += 1
            k = perm[0]
        eger cevirme > en_cok:
            en_cok = cevirme
        eger sira % 2 == 0:
            saglama += cevirme
        degilse:
            saglama -= cevirme
        iken dogru:
            eger r == n:
                don [saglama, en_cok]
            ilk = perm1[0]
            dongu i icinde 0..<r:
                perm1[i] = perm1[i + 1]
            perm1[r] = ilk
            sayac[r] -= 1
            eger sayac[r] > 0:
                kir
            r += 1
        sira += 1
    don [saglama, en_cok]

sonuc = fannkuch(9)
yazdir(sonuc[0], sonuc[1])
program.cpp
#include <algorithm>
#include <iostream>
#include <vector>

std::pair<int, int> fannkuch(int n) {
    std::vector<int> perm1(n), perm(n), sayac(n, 0);
    for (int i = 0; i < n; ++i) perm1[i] = i;
    int en_cok = 0, saglama = 0, sira = 0, r = n;
    while (true) {
        while (r != 1) {
            sayac[r - 1] = r;
            --r;
        }
        perm = perm1;
        int cevirme = 0;
        int k = perm[0];
        while (k != 0) {
            std::reverse(perm.begin(), perm.begin() + k + 1);
            ++cevirme;
            k = perm[0];
        }
        en_cok = std::max(en_cok, cevirme);
        saglama += sira % 2 == 0 ? cevirme : -cevirme;
        while (true) {
            if (r == n) return {saglama, en_cok};
            int ilk = perm1[0];
            for (int i = 0; i < r; ++i) perm1[i] = perm1[i + 1];
            perm1[r] = ilk;
            if (--sayac[r] > 0) break;
            ++r;
        }
        ++sira;
    }
}

int main() {
    auto [saglama, en_cok] = fannkuch(9);
    std::cout << saglama << " " << en_cok << std::endl;
    return 0;
}
program.py
def fannkuch(n):
    perm1 = list(range(n))
    sayac = [0] * n
    en_cok = 0
    saglama = 0
    sira = 0
    r = n
    while True:
        while r != 1:
            sayac[r - 1] = r
            r -= 1
        perm = perm1[:]
        cevirme = 0
        k = perm[0]
        while k != 0:
            perm[: k + 1] = perm[k::-1]
            cevirme += 1
            k = perm[0]
        en_cok = max(en_cok, cevirme)
        saglama += cevirme if sira % 2 == 0 else -cevirme
        while True:
            if r == n:
                return saglama, en_cok
            ilk = perm1[0]
            for i in range(r):
                perm1[i] = perm1[i + 1]
            perm1[r] = ilk
            sayac[r] -= 1
            if sayac[r] > 0:
                break
            r += 1
        sira += 1


saglama, en_cok = fannkuch(9)
print(saglama, en_cok)
program.js · yalnız tarayıcı ölçümünde
function fannkuch(n) {
  const perm1 = Array.from({ length: n }, (_, i) => i);
  const sayac = new Array(n).fill(0);
  let enCok = 0, saglama = 0, sira = 0, r = n;
  for (;;) {
    while (r !== 1) {
      sayac[r - 1] = r;
      r--;
    }
    const perm = perm1.slice();
    let cevirme = 0;
    let k = perm[0];
    while (k !== 0) {
      // ilk k + 1 öğeyi ters çevir
      for (let i = 0, j = k; i < j; i++, j--) {
        const t = perm[i]; perm[i] = perm[j]; perm[j] = t;
      }
      cevirme++;
      k = perm[0];
    }
    enCok = Math.max(enCok, cevirme);
    saglama += sira % 2 === 0 ? cevirme : -cevirme;
    for (;;) {
      if (r === n) return [saglama, enCok];
      const ilk = perm1[0];
      for (let i = 0; i < r; i++) perm1[i] = perm1[i + 1];
      perm1[r] = ilk;
      if (--sayac[r] > 0) break;
      r++;
    }
    sira++;
  }
}

export default function program(yaz = console.log) {
  const [saglama, enCok] = fannkuch(9);
  yaz(saglama + " " + enCok);
}

// `node program.js` ile de koşar (tarayıcıda ölçüm işçisi program()ı çağırır).
if (globalThis.process?.argv?.[1]?.endsWith("program.js")) program();