summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormRnea <[email protected]>2024-08-22 00:24:19 +0300
committermRnea <[email protected]>2024-08-22 00:24:19 +0300
commit4c8409da359cf0da14214ccc939c10ac759f76a5 (patch)
treeb9af87c1a47a401503992b280b5253d00957ceb6
parent4367febcd70e9bb7538cd168917ec3c7d3b0a6f3 (diff)
added new examples
-rw-r--r--examples/euler/1.kurt19
-rw-r--r--examples/euler/2.kurt21
-rw-r--r--examples/euler/3.kurt16
-rw-r--r--examples/euler/4.kurt32
-rw-r--r--examples/euler/5.kurt31
-rw-r--r--examples/rule110/rule110.c23
-rw-r--r--examples/rule110/rule110.kurt40
-rw-r--r--lib/std.kurt (renamed from test/std.kurt)18
-rw-r--r--test/include.kurt3
-rw-r--r--test/print.kurt6
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