CAPL 1.5+; 6 bez danych wejściowych; 10–10 = 0 z wejściem
Sidenote
Czytałem gdzieś [link?], Że niestandardowe języki są niedozwolone w pytaniach golfowych, ponieważ mogą one tworzyć wbudowane funkcje, które robią dokładnie to, o co pyta pytanie, jednak sprawiłem, że CAPL ogólnie ułatwia golfa . Jeśli uważasz, że nie jest to dozwolone tutaj, daj mi znać!
Mam pomysły od > <> i Befunge (możesz poruszać się między liniami i używać znaków szesnastkowych do wypychania liczb), niektóre od Ruby, a niektóre ode mnie, aby ułatwić grę w golfa.
CAPL odczytuje od lewej do prawej i przechodzi o jedną linię w dół na końcu linii. Jeśli jest to ostatni wiersz, program zostanie zamknięty.
Ponieważ nikt jeszcze nie zna tego języka, postaram się wyjaśnić jak najwięcej.
Wyprowadzanie y. 6 bajtów
bb*.n<
bb*
b
jest szesnastkowy dla 11
, więc bb*
jest 11*11
= 121
, co jest odpowiednikiem UTF-8 y
. Ta wartość jest wypychana na stos.
.
Wyrzuca najwyższą wartość ze stosu i wyświetla jako UTF-8. Tak jak 121
na szczycie stosu, indeks jest tutaj ignorowany.
n
Wysyła nową linię
<
Wysyła wskaźnik z powrotem na początek linii, w ten sposób powtarzając tę linię. Ponieważ nie oczekujemy danych wejściowych, możemy to zrobić bezpiecznie bez ponownego pytania o dane wejściowe.
Wyprowadzanie z wejścia. 10 bajtów, 0 po premii
i~a&{X:.)}
i
Pobiera dane od użytkownika, przesuwa jako UTF-8 na wierzchu stosu, a następnie przesuwa długość. Tj. [72,101,108,108,111,5]
~
Wyrzuca liczbę ze stosu, a następnie odwraca tę liczbę bajtów. Tzn. [111,108,108,101,72]
a
Szesnastkowy dla 10
znaku nowej linii
&{...}
Tworzy nieskończoną pętlę. Mamy dane wejściowe, więc nie możemy wysłać wskaźnika z powrotem do linii. Mógłbym umieścić tę funkcję w wierszu poniżej, co zabezpieczyłoby mnie bajtem, ale nowe wyzwania nie są dozwolone w tym wyzwaniu.
X
Usuwa najwyższą wartość ze stosu (Indeks z pętli)
:.
Duplikuje najwyższą wartość, a następnie wyprowadza jako UTF-8
)
Obraca stos w prawo. ( [1,2,3,4,5]
-> [5,1,2,3,4]
)
Jednak oznacza to, że zaczynamy od nowej linii, a następnie zaczynamy wypisywać dane wejściowe, następnie nową linię, następnie dane wejściowe itp. Jeśli nie możemy zacząć od nowej linii, użyj następującego kodu z 12 bajtami lub 2 po odjęciu premia.
iXa#~&{X:.)}
Jedynym nowym poleceniem tutaj jest #
przesunięcie liczby przedmiotów ze stosu na stos.
Usunąłem długość i
, ponieważ dodanie 1, a następnie zamiana z nową linią jest dłuższe niż usunięcie i odzyskanie długości ponownie.
Dla zabawy, oto program „Hello World”
"Hello World"#~
#?!;.<
?!
Działanie jest takie samo, jak> <> 's
y
lub\n
wewnątrz łańcucha dosłowny”?