diff options
author | mRnea <akannemre@gmail.com> | 2024-08-22 00:24:19 +0300 |
---|---|---|
committer | mRnea <akannemre@gmail.com> | 2024-08-22 00:24:19 +0300 |
commit | 4c8409da359cf0da14214ccc939c10ac759f76a5 (patch) | |
tree | b9af87c1a47a401503992b280b5253d00957ceb6 | |
parent | 4367febcd70e9bb7538cd168917ec3c7d3b0a6f3 (diff) |
added new examples
-rw-r--r-- | examples/euler/1.kurt | 19 | ||||
-rw-r--r-- | examples/euler/2.kurt | 21 | ||||
-rw-r--r-- | examples/euler/3.kurt | 16 | ||||
-rw-r--r-- | examples/euler/4.kurt | 32 | ||||
-rw-r--r-- | examples/euler/5.kurt | 31 | ||||
-rw-r--r-- | examples/rule110/rule110.c | 23 | ||||
-rw-r--r-- | examples/rule110/rule110.kurt | 40 | ||||
-rw-r--r-- | lib/std.kurt (renamed from test/std.kurt) | 18 | ||||
-rw-r--r-- | test/include.kurt | 3 | ||||
-rw-r--r-- | test/print.kurt | 6 |
10 files changed, 203 insertions, 6 deletions
diff --git a/examples/euler/1.kurt b/examples/euler/1.kurt new file mode 100644 index 0000000..e3a3032 --- /dev/null +++ b/examples/euler/1.kurt @@ -0,0 +1,19 @@ +;; test +;; (format nil "~a~%" 233168) + +;; https://projecteuler.net/problem=1 +;; 1000den küçük, 3 veya 5 in katı olan tüm sayıların toplamını bulun. +;; Örnek: 10 için 3 + 5 + 6 + 9 = 23 + +makro problem-girdi 1000 son + +0 3 döngü eş problem-girdi < iken + eş 3 % 0 = + üst 5 % 0 = + | ise + eş rot + değiş + yap + 1 + +yap düş +dump +
\ No newline at end of file diff --git a/examples/euler/2.kurt b/examples/euler/2.kurt new file mode 100644 index 0000000..a1c6a67 --- /dev/null +++ b/examples/euler/2.kurt @@ -0,0 +1,21 @@ +;; test +;; (format nil "~a~%" 4613732) + +;; https://projecteuler.net/problem=2 +;; Fibonacci serisi, +;; f(0) = 0, f(1) = 1 ve f(n) = f(n-1) + f(n-2) +;; şeklinde tanımlanmış bir dizidir. +;; 0 1 1 2 3 5 8 13 21 34 55 89... gibi +;; 4 milyondan küçük ve çift sayı olan ögelerin toplamını bulun. + +kütüphane "std.kurt" + +bel 0 store64 +0 1 döngü eş 4000000 < iken + eş 2 % 0 = ise + eş bel load64 + + bel değiş store64 + yap + değiş üst + +yap düş düş +bel load64 dump diff --git a/examples/euler/3.kurt b/examples/euler/3.kurt new file mode 100644 index 0000000..4589786 --- /dev/null +++ b/examples/euler/3.kurt @@ -0,0 +1,16 @@ +;; test +;; (format nil "~a~%" 6857) + +;; https://projecteuler.net/problem=3 +;; 13195 sayısının asal çarpanları 5, 7, 13 ve 29 dur. +;; 600851475143 sayısının en büyük asal çarpanını bulun. + +kütüphane "std.kurt" + +600851475143 2 döngü üst 1 > iken + 2eş % 0 = ise + değiş üst / değiş + yoksa + 1 + + yap +yap dump
\ No newline at end of file diff --git a/examples/euler/4.kurt b/examples/euler/4.kurt new file mode 100644 index 0000000..08bc962 --- /dev/null +++ b/examples/euler/4.kurt @@ -0,0 +1,32 @@ +;; test +;; (format nil "~a~%" 906609) + +;; palindrom sayılar ters çevrildiğinde kendine eşit olan sayılardır. +;; iki basamaklı iki sayının çarpımından oluşan en büyük palindrom +;; 9009 = 91 x 99 dur. +;; üç basamaklı iki sayının çarpımından oluşan en büyük palindromu bulun. + +kütüphane "std.kurt" + +makro palindrome? (a -- bool) + eş + 0 döngü üst 0 > iken + 10 * üst 10 % + ;;eş dump + değiş 10 / değiş + yap değiş düş + = +son + +bel 0 store64 +100 döngü eş 1000 < iken + 100 döngü eş 1000 < iken + 2eş * eş palindrome? ise + eş bel load64 > ise + eş bel değiş store64 + yap + yap düş + 1 + + yap düş + 1 + +yap düş +bel load64 dump diff --git a/examples/euler/5.kurt b/examples/euler/5.kurt new file mode 100644 index 0000000..f23dcc3 --- /dev/null +++ b/examples/euler/5.kurt @@ -0,0 +1,31 @@ +;; test +;; (format nil "~a~%" 232792560) + +;; 2520, 1den 10a kadar tüm sayılara tam bölünen en küçük sayıdır. +;; 1den 20ye kadar tüm sayılara tam* bölünebilen en küçük sayıyı bulun. +;; * kalansız bölünen + +kütüphane "std.kurt" + +makro N 20 son +makro cevap bel son + +makro gcd (a b -- c) + döngü üst iken + üst % değiş + yap + değiş düş +son + +makro lcd (a b -- c) + 2eş * rot rot gcd / +son + +cevap 1 store64 +1 döngü eş N < iken + cevap + üst cevap load64 lcd + store64 + 1 + +yap +cevap load64 dump
\ No newline at end of file diff --git a/examples/rule110/rule110.c b/examples/rule110/rule110.c new file mode 100644 index 0000000..76f3b75 --- /dev/null +++ b/examples/rule110/rule110.c @@ -0,0 +1,23 @@ +#include <stdio.h> + +#define BOARD_CAP 100 +static int board[BOARD_CAP]; + +int main() +{ + board[BOARD_CAP - 2] = 1; + + for (size_t i = 0; i < BOARD_CAP - 2; ++i) { + for (size_t j = 0; j < BOARD_CAP; ++j) { + fputc(" *"[board[j]], stdout); + } + fputc('\n', stdout); + + int pattern = (board[0] << 1) | board[1]; + for (size_t j = 1; j < BOARD_CAP - 1; ++j) { + pattern = ((pattern << 1) & 7) | board[j + 1]; + board[j] = (110 >> pattern) & 1; + } + } + return 0; +} diff --git a/examples/rule110/rule110.kurt b/examples/rule110/rule110.kurt new file mode 100644 index 0000000..181ca2e --- /dev/null +++ b/examples/rule110/rule110.kurt @@ -0,0 +1,40 @@ +makro boyut 100 son +makro stdout 1 son +makro sys-write 1 son +makro print-buffer + stdout bel boyut + boyut 1 + sys-write syscall-3 +son + +;; initialize board +0 döngü eş boyut < iken + eş bel + 0 yaz + 1 + +yap düş +boyut 2 - bel + 1 yaz + +;; iteration count +0 döngü eş boyut 2 - < iken + ;; write board to buffer + 0 döngü eş boyut < iken + eş bel + oku 1 = ise + eş bel boyut + + '*' yaz ;; 42 = '*' + yoksa + eş bel boyut + + ' ' yaz ;; 32 = ' ' + yap + 1 + + yap + bel boyut + + '\n' yaz ;; 10 '\n' + ;; write to screen + print-buffer + + ;; pattern init + bel 0 + oku 1 << bel 1 + oku | + 1 döngü eş boyut 1 - < iken + eş bel 1 + + oku ;; (pattern i cell) + rot 1 << 7 & | ;; (i new-pattern) + üst bel + üst 110 değiş >> 1 & yaz + değiş 1 + + yap düş düş + 1 + +yap + diff --git a/test/std.kurt b/lib/std.kurt index 97fc60b..b247604 100644 --- a/test/std.kurt +++ b/lib/std.kurt @@ -1,8 +1,14 @@ ;; Currently makro stack notation is ignored by the compiler. +makro stdout 1 son makro sys-write 1 son makro write (fd string -- ) - değiş sys-write syscall-3 son -makro stdout 1 son + değiş sys-write syscall-3 +son + +makro sys-exit 60 son +makro çık (çıkış-kodu -- ) + sys-exit syscall-1 +son makro / (a b -- (a / b)) divmod düş son makro % (a b -- (a % b)) divmod değiş düş son @@ -30,4 +36,10 @@ makro store64 (bel a -- ) 2eş byte-max & yaz 8 >> değiş 1 + değiş 2eş byte-max & yaz 8 >> değiş 1 + değiş 2eş byte-max & yaz 8 >> düş düş -son
\ No newline at end of file +son + +makro strlen (ptr -- len) + 0 değiş döngü eş oku iken + 1 + değiş 1 + değiş + yap düş +son diff --git a/test/include.kurt b/test/include.kurt deleted file mode 100644 index 80b69d2..0000000 --- a/test/include.kurt +++ /dev/null @@ -1,3 +0,0 @@ -kütüphane "std.lorth" - -stdout "Merhaba Dünya!\n" write
\ No newline at end of file diff --git a/test/print.kurt b/test/print.kurt new file mode 100644 index 0000000..f82f7a4 --- /dev/null +++ b/test/print.kurt @@ -0,0 +1,6 @@ +;; test +;; (format nil "Merhaba Dunya!~%") + +kütüphane "std.kurt" + +stdout "Merhaba Dunya!\n" write
\ No newline at end of file |