Cubically jest zbyt żmudny, aby ręcznie pisać dowolny kod. Twoim zadaniem jest przetłumaczenie tekstu ASCII na Cubicowy kod źródłowy.
Cubical
To tylko szybki przegląd Cubically; repozytorium ma bardziej kompletny podręcznik oraz szczegóły.
Cubically to esolang, który napisałem jakiś czas temu, zaprojektowany z myślą o bolesnym użyciu. Zawiera dwa fragmenty pamięci, Kostkę Rubika 3x3x3 i rejestr zwany „notatnikiem”.
Pamięć
Wewnętrzna kostka Rubika jest inicjowana w następujący sposób:
000
000 top face
000
111222333444 left, front, right, and back faces, respectively
111222333444
111222333444
555
555 down face
555
Po wykonaniu obrotu o 90 ° w kierunku zgodnym z ruchem wskazówek zegara na prawej powierzchni kostka pamięci wygląda następująco:
002
002
002
111225333044
111225333044
111225333044
554
554
554
Polecenia
Znak nie będący liczbą całkowitą ustawia polecenie domyślne. Dla każdej liczby całkowitej przed ponownym ustawieniem domyślnego polecenia polecenie jest wykonywane z tą liczbą całkowitą. Na przykład x524y312
wykonałby polecenie za x
pomocą 5, następnie za pomocą 2, następnie za pomocą 4, następnie wykonał polecenie za y
pomocą 3, następnie za pomocą 1, a następnie za pomocą 2.
Liczby całkowite używane przez polecenia reprezentują indeksy twarzy. Tak x0
by działał x
na powierzchni UP (indeksowanej 0). x1
działałby x
na LEWEJ (1 indeksowanej) powierzchni i tak dalej.
Wykonanie dowolnego polecenia 6
spowoduje wykonanie tego polecenia na wartości notatnika. Wykonanie dowolnego polecenia z dowolną liczbą całkowitą większą niż 6 spowoduje błąd.
Oto kilka przykładowych poleceń:
R1
- obróć PRAWĄ ściankę o 90 ° zgodnie z ruchem wskazówek zegara, aby wewnętrzny sześcian wyglądał jak drugi przykład powyżejR11
- obrócić prawą twarz dwa razy w prawo o 90 °, identycznie jakR2
+0
- dodaj wszystkie wartości powierzchni UP do notatnika+000
- trzykrotnie dodaj wszystkie wartości powierzchni UP do notatnika@6
- wydrukuj nieistniejącą twarz (pamięć) z 6. indeksem jako znak%4
- wydrukuj sumę wszystkich wartości na BACK face jako liczbę całkowitą
Pełna lista poleceń i składni jest dostępna w repozytorium .
Wyzwanie
Weźmiesz tekst ASCII jako dane wejściowe i wydrukujesz program Cubic jako dane wyjściowe.
Przykłady (skradzione tutaj i tutaj ):
Input -> Output
Hello, World! -> +53@6+1F2L2+0@6L2F2U3R3F1L1+2@66L3F3R1U1B3+0@6:4U1R1+00@6-000@6*0-4+000@6-00@6+2-000000@6-5+4000@6-00@6/0+00@6:0+0/0+00@6
1$2$3$4$5$6$7$8$9$10$ -> B1+2/2%6@4+00/0%6@4+00/1%6@4+21/1%6@4+30/0%6@4+22/1%6@4+22/1%6@4+40/1%6@4+52/1%6@4+42/1%6@4
Zasady
- Twój program nie może zawierać słownika zawierającego tłumaczenia dla 100 przypadków testowych.
- Twój program musi zakończyć się w mniej niż 180 sekund (bez programów typu brute force, które zajmują tygodnie).
- Twój program musi wypisać prawidłowy kod sześcienny, który kończy się w mniej niż 180 sekund.
- Twój program pobierze dane przez standardowe wejście, chyba że chcesz zadziałać ze sterownikiem testowym.
- Twój program musi wypisywać kod sześcienny, który nie generuje nic oprócz danych wejściowych programu po uruchomieniu. ಠ_ಠ
Punktacja
Testujesz swój program za pomocą 100 pseudolosowych ciągów o długości pseudolosowej. (Dostępny jest skrypt bash, który zrobi to za Ciebie.) Oto, jak zdobędziesz punkty:
- Niech długość programu wyjściowego być o .
- Niech długość ciągu wejściowego będzie równa l .
- Niech zmienna r będzie wynikiem o / l .
- Znajdź średnią wszystkich r : (r 1 + r 2 + r ... + r 100 ) / 100 .
Przetestuj za pomocą tego skryptu. Będziesz musiał go zmodyfikować zgodnie z instrukcją. Zauważ, że program nie sprawdza, czy dane wyjściowe są poprawne Kod sześcienny. Jeśli nie możesz uruchomić skryptu, mogę pomóc. Zawołaj mnie do pokoju czatu Cubically .
@6
- wydrukowałby sumę nieistniejącej twarzy z 6 indeksami (notatnika) jako znak„ byłby dokładniejszy? Czy to %4
także suma? Czy +
polecenia sumują twarz, a następnie dodają to do wszystkich wartości czy ...?
@6
/ %6
po prostu drukuje wartość notatnika jako znak / liczbę całkowitą. @x
/ %x
(gdzie x to dowolna istniejąca twarz) dodaje wszystkie wartości do x
twarzy -indexed i drukuje sumę jako znak / liczbę całkowitą. +
dodaje do rejestru wszystkie wartości z określonej twarzy.