Ṅ×ịß
Wypróbuj online!
Łącze TIO dodaje stopkę do wywołania funkcji za pomocą przykładowego programu Tip pokazanego na stronie Esolang („automatyczne opakowanie” M do wywoływania funkcji tak, jakby były programami, które nie mogą obsługiwać liczb wymiernych lub stałych, a przynajmniej nie mam nie wymyśliłem, jak to powiedzieć, więc muszę ręcznie przekształcić tę funkcję w pełny program, aby móc ją uruchomić.)
To faktycznie wypisuje przydatne wyjście debugowania; program nie może być napisany w 3 bajtach w M, ponieważ program składający się z dokładnie trzech dyad wywołuje specjalny przypadek w parserze, więc musiałem dodać dodatkowe polecenie, aby uniknąć specjalnego przypadku. Wykonanie go Ṅ
(wydrukuj za pomocą nowego wiersza) daje przynajmniej użyteczny cel.
ı
i=−1−−−√
Nie implementuje operacji wejścia / wyjścia (innych niż zatrzymanie / brak zatrzymania). I / O jest rozszerzeniem Tip (nie jest częścią samego języka) i nie jest wymagane dla kompletności Turinga.
Wyjaśnienie / tło
Ṅ×ịß
Ṅ Print {the left argument} and a newline; also resolves a parser ambiguity
ị {The left argument}th element of {the right argument}, wrapping on OoB
× Multiply {the left argument} by {the chosen element}
ß Recursive call; arguments: {the product} and {the same right argument}
[1,2,3]
[1,2,3,1,2,3,1,2,3,…]
rx+s, który jest wielomianem, a wbudowana „konwersja podstawowa”, którą ma wiele języków golfowych, jest w rzeczywistości ukrytym oceniaczem wielomianów ogólnego przeznaczenia. Więc wszystko, co musimy zrobić, to zindeksować listę cyfr, przekonwertować je i już gotowe, prawda?
xx
ḅ
x⊕(x⊗y)x⊗y⊕. Pewnie, moglibyśmy zastąpić łańcuchowe zachowanie prawie wszystkim, czego chcemy, ale to kosztowałoby cały bajt, a wpisy języka golfowego w tym pytaniu stają się tak krótkie, że bajt to dużo.
Spojrzałem więc za siebie i ponownie trochę oceniłem. Czy są jakieś operacje, których moglibyśmy użyć zamiast oceny wielomianowej? Idealnie te, które są przemienne, więc nie musimy się martwić kolejnością argumentów? Wkrótce potem zdałem sobie sprawę, że funkcje Collatz są bardziej złożone niż powinny.
s
I oczywiście, w przeciwieństwie do konwersji podstawowej ( ḅ
), mnożenie ( ×
) jest przemienne, a zatem nie ma znaczenia, w jakiej kolejności są umieszczone argumenty. Musimy więc tylko napisać ×ị
, a następnie umieścić program w nieskończonej rekurencji ß
, i mamy kompletny język Turinga. Dobrze?
(x⊙y)⊕(x⊗y)¹×ịß
¹
¹
Ṅ
jest dobrym wyborem, ponieważ daje użyteczne wyjście debugowania.
Czy możliwe są trzy bajty? Chyba że czegoś mi brakuje, nie z tym konkretnym wyborem języka implementacji i implementacji, ale w tym momencie z pewnością wydaje się, że byłoby to możliwe, ponieważ istnieje tak wiele sposobów na zrobienie tego w czterech i tak wielu Turinga języki, które możesz wdrożyć.
eval
rozwiązaniom.