Comments 19
Сколько же у вас свободного времени...

Не осилил до конца, но это круто)
О, напомнили. Пока этим всем делом занимался, и такое мелькало:
https://codegolf.stackexchange.com/questions/198694/write-a-whitespace-interpreter
Прикольно, но жутковато.
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>+++++++++++++++.>+++++++++++++++.---.-----------.+++.+++++++.+++++++.<<++.>>--.---------------.---.+++.
Я тоже недавно сделал примерно такой же язык, транслирующийся в whitespace, для написания программ в рамках adventofcode. Выглядит так:
; Push "Hello world\n" to the stack
push '\n'
push 'd'
push 'l'
push 'r'
push 'o'
push 'w'
push ' '
push 'o'
push 'l'
push 'l'
push 'e'
push 'H'
push 12 ; string length
loop:
swap ; swap length with char
putchar
; length -= 1
push 1
sub
; if (length == 0) exit
dup
jz end
jmp loop
end:
exit
Ваш пост огорчает Malbolge
Решил перед полным прочтением написать аналогичную программу самостоятельно. Вот, что получилось:
; heap[0] - number, heap[1] - last_number
push 0
dup
; [sum, count]
loop:
push 0
dup
getnum
load
; [number, sum, count]
dup
jl check_input
; [number, sum, count]
dup
push 1
swap
store ; heap[1] = number
; [number, sum, count]
add
swap
push 1
add
swap
; [sum, count]
jmp loop
check_input:
; [-1, sum, count]
drop
swap
push 2
sub
; [count - 2, sum]
jl wrong_input
; [sum]
push 1
load
dup
; [last_number, last_number, sum]
jz zero_division_error
; [last_number, sum]
sub
; [sum - last_number]
dup
push 1
load
; [last_number, sum - last_number, sum - last_number]
mod
; [(sum - last_number) % last_number, sum - last_number]
push 1
load
swap
; [(sum - last_number) % last_number, last_number, sum - last_number]
push '('
push 't'
push 'n'
push 'u'
push 'o'
push 'm'
push 'a'
push ' '
push 'd'
push 'e'
push 'r'
push 'e'
push 't'
push 'n'
push 'e'
push 15
call print_string
; [(sum - last_number) % last_number, last_number, sum - last_number]
jz success
; failure [last_number, sum - last_number]
swap
putnum
; [last_number]
push ' '
push 'y'
push 'b'
push ' '
push 'e'
push 'l'
push 'b'
push 'i'
push 's'
push 'i'
push 'v'
push 'i'
push 'd'
push ' '
push 't'
push 'o'
push 'n'
push ' '
push 's'
push 'i'
push ' '
push ')'
push 22
call print_string
putnum
push ' '
putchar
call without_remainder
push '\n'
putchar
exit
wrong_input:
push '\n'
push 't'
push 'u'
push 'p'
push 'n'
push 'i'
push ' '
push 'd'
push 'i'
push 'l'
push 'a'
push 'v'
push 'n'
push 'i'
push ' '
push ','
push 'r'
push 'o'
push 'r'
push 'r'
push 'e'
push 21
call print_string
exit
zero_division_error:
push '\n'
push 'r'
push 'o'
push 'r'
push 'r'
push 'e'
push ' '
push 'n'
push 'o'
push 'i'
push 's'
push 'i'
push 'v'
push 'i'
push 'd'
push ' '
push 'o'
push 'r'
push 'e'
push 'z'
push 20
call print_string
exit
success:
; [last_number, sum - last_number]
swap
putnum
; [last_number]
push ' '
push 'd'
push 'e'
push 'd'
push 'i'
push 'v'
push 'i'
push 'd'
push ' '
push 's'
push 'i'
push ' '
push ')'
push 13
call print_string
call without_remainder
push ' '
push 'y'
push 'b'
push ' '
push 4
call print_string
putnum
push '\n'
putchar
exit
; void without_remainder(void)
without_remainder:
push 'r'
push 'e'
push 'd'
push 'n'
push 'i'
push 'a'
push 'm'
push 'e'
push 'r'
push ' '
push 't'
push 'u'
push 'o'
push 'h'
push 't'
push 'i'
push 'w'
push 17
call print_string
ret
; void print_string(int length, char *str)
print_string:
swap ; swap length with char
putchar
; length -= 1
push 1
sub
; if (length == 0) return
dup
jz end_print_string
jmp print_string
end_print_string:
drop
ret
Вот ссылка на интрепретатор с кодом: https://tio.run/##pVVJDsIwDDyPX@EPcGD5EEJIcEMCieeXZpzFCS4rFarr2BMvE@d@Ot@O18v@cJwmVRU@mv@iEKRfkueXrSnsS5E@BNRkmf5iJpLX@CIQ3Ys0a0E/FFTuBDQbc0eOJ29polY4atG0Taxai1kt4ALgsBpADWfQRvt6A8zZckWyraQ4MOxJnxpTxhlicuHraEpsFykCLQLblqsPpk8KY36dabBXW3c6lsAw@vzTurSeKLJKyJaK8xQaut5EXcCb5roydDUNS/YS1vl7nrTiOW1IJAqFKJY5xsx/wl2oDEKG/MmbOK7uMLiG6pDv4tmIz2PcyK9Y/iF1fWscTz8@vPpM/IHjL4um8Yjp9tRotAW48SFfGpPxQOhqXWvhxpyxt3RTyyVQJzs4/2G3Aa@O5DRNG9nKTlbrBw
Получилось 1635 байт whitespace. А теперь пойду читать
Посмотрел эту статью ради комментариев,
А она всём пофигу.
Автор, потратьте время на что-нибудь более полезное)
Обидно.
Как решение , могу предложить вам не читать такие статьи, если не хотите потреблять такой контент.
А насчет "всем пофигу" - мне после публикации этой и предыдущей статьи писали несколько человек, с благодарностями за интересную тему, мало известную в интернете, и просили разъяснения отдельных моментов.
Так что статья своего читателя нашла, просто это не вы.
Никогда бы не поверил, что у людей бывает настолько много ненужного свободного времени, если бы не увидел эту статью.
Спасибо за 2 великолепнейшие статьи!!! Сам недавно писал похожие задачи на brainfuck, тоже сделал себе генератор для упрощения кодинга, думал после этого взяться за whitespace, но Вы меня опередили ))
Пишем алгоритмы на самом ненужном языке в мире и страдаем