streszczenie
Wprowadzono nowy język manipulacji ciągami, wykorzystujący tylko znaki $+#-!*|@>! Twoim zadaniem jest zaimplementowanie dla niego interpretera w jak najmniejszej liczbie bajtów.
Wejście
Ciąg, który jest pojedynczą linią tego języka. Można to wziąć w dowolny rozsądny sposób (standardowe, parametr funkcji, argument wiersza poleceń itp.) Lub jako predefiniowaną zmienną. Jeśli program prosi o podanie danych przez użytkownika, zaakceptuj wszystkie dane wprowadzone przez użytkownika od standardowego wejścia i nic więcej, patrz poniżej. Możesz założyć, że jest to prawidłowy program.
Wynik
Bez względu na język, specyfikacje poniżej. Musisz wyprowadzić ciąg znaków w dowolny rozsądny sposób (standardowe wyjście, wyjście funkcji itp.) Lub wartość zmiennej. Gdy język wypisuje jawnie, musi to przejść do standardowego wyjścia. Standardowe luki są zabronione.
Specyfikacje językowe
Przetwarzanie i składnia
Język ma bardzo prostą formę przetwarzania, ponieważ wykonuje jedynie operacje na łańcuchach: zaczyna się od pustego łańcucha ( "") i zmienia go z każdym terminem. Termin składa się z jednej lub dwóch części: funkcji (poniżej), a następnie ewentualnie parametru (poniżej), który edytuje jego zachowanie. Warunki są oddzielone potokami ( |). Możesz założyć, że nie będzie to pusty program i żaden termin nie będzie pusty. Powinieneś wypisać wartość na końcu programu.
Funkcje
Język ma tylko 6 funkcji, jak pokazano poniżej. Każda funkcja akceptuje jeden lub zero parametrów.
+konkatenuje łańcuchy (pobiera jeden parametr łańcucha, łączy go z bieżącą wartością)!odwróć kolejność znaków bieżącej wartości (bez parametru)*powtórz ciąg (pobiera jeden parametr liczby całkowitej, wielokrotnie powtarza bieżącą wartość)-usuwa wszystkie wystąpienia wartości (pobiera jeden parametr ciągu, usuwa wszystkie jego wystąpienia z bieżącej wartości)$[pseudo-] losowo tasuje bieżącą wartość (bez parametru)<wyślij aktualną wartość dostdout(bez parametrów)
Wartości
Są to wartości, które można przekazać do funkcji, reprezentowane przez wyrażenia regularne, które by do nich pasowały:
@[^|]*literał łańcuchowy, w tym dowolny znak inny niż fajka. Może być pusty.#[0-9]+literał całkowity>następny wierszstdin. Jeśli jest używany z*, przekonwertuj na liczbę całkowitą.
Przypadki testowe
╔════════════════════════╤═════════════╤══════════════╗
║code │input │output ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|!|+@hello|*> │13 │31hello31hello║
║ │2 │ ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|+@abcdefg|$ │hello │hcloeebafdlg ║
╟────────────────────────┼─────────────┼──────────────╢
║+@how areyou|-@o|-> │w │h areyu ║
╟────────────────────────┼─────────────┼──────────────╢
║+@out|<|*#3 │ │out ║
║ │ │outoutout ║
╟────────────────────────┼─────────────┼──────────────╢
║+> │what ever 345│what ever 345 ║
╟────────────────────────┼─────────────┼──────────────╢
║+@$pe<i@l|<|-@$pe<i@l|+>│A|$o $pe<!@| │$pe<i@l ║
║ │ │A|$o $pe<!@| ║
╟────────────────────────┼─────────────┼──────────────╢
║<|+>|!|< │input text | ║
║ │ │txet tupni ║
║ │ │txet tupni ║
╟────────────────────────┼─────────────┼──────────────╢
║+@># │ |># ║
╚════════════════════════╧═════════════╧══════════════╝
Zauważ, że przypadek testowy 2 jest losowy, więc każda kombinacja znaków w nim jest poprawna. Ponadto wyniki w tabeli są oddzielone znakami nowej linii, ale twój program nie musi robić tego samego. Ostatnia wartość w każdym przypadku końcowy wynik.
Przykład (nie golfa) interpretera Pythona
Wypróbuj online! IMO lepiej, jeśli uruchomisz go przez IDLE lub cokolwiek używasz. (Grałem w golfa do 424 bajtów później, ale jestem pewien, że dużo lepiej zrobisz).
<napotkasz. Czy to jest obowiązkowe?
+@>#? Użyłem #również.