Manufaktura: wygeneruj najwolniejszy możliwy program akceptacji


18

Napisz program Manufaktury , który zaakceptuje pustą taśmę wejściową. Ale nie rób tego szybko! Mam na myśli, że napisz program szybko, ale nie pozwól mu działać szybko. Im wolniejszy program, tym lepiej, o ile w końcu się zakończy. Przykładowy program poniżej zajmuje 3:51 („całkowity czas” zgłoszony przez symulator).

wprowadź opis zdjęcia tutaj

http://pleasingfungus.com/Manufactoria/?lvl=36&code=g12:5f3;r9:8f1;p12:9f3;c13:9f0;r11:9f0;r10:9f0;r9:9f1;b11:8f0;b10:8f1 ; r9: 7f2; c10: 7f2; c11: 7f2; c12: 7f3; q12: 8f3; y13: 8f2; y14: 8f2; y15: 8f1; y15: 7f0; y14: 7f0; y13: 7f0; g12: 6f3; & ctm = Slow_Accepter!; Generate_the_slow_possible_accepting_machine;:; 7; 3; 0 ;

Twój program zaczyna się od pustej taśmy. Musi trochę rysować, ale ostatecznie osiąga kwadrat wyjściowy. Możesz zostawić dane na taśmie, jeśli chcesz. Zwycięża najwolniejszy program na płycie Manufaktury 7x7!

Twój prawy klawisz strzałki jest twoim przyjacielem, przyspiesza symulator.

Punkty bonusowe za awarię symulatora!


Więc nie ma żadnych wymagań dotyczących akceptowania / odrzucania danych wejściowych innych niż pusta taśma?
Zmienność

@ Lotność: poprawna.
Keith Randall

Irytujące jest to, że symulator nie zgłosi czasu działania, chyba że taśma na końcu będzie pusta, ponieważ nie odpowiada oczekiwanej wydajności wyzwania. (Na szczęście łatwo było mi skasować taśmę na końcu, nie potrzebując zbyt wiele dodatkowej przestrzeni.)
breadbox

Odpowiedzi:


22

~ 10 23 iteracji ~ 10 15 iteracji ~ 10 8 iteracji

Konfiguracja manufaktury

http://pleasingfungus.com/Manufactoria/?lvl=32&code=g9:7f2;b12:8f2;p13:8f5;p11:8f3;r14:8f0;q11:10f3;q13:7f1;y13:9f1;r10:10f1 ; c12: 9f2; c9: 9f2; i11: 9f7; i10: 9f4; c9: 8f3; i10: 8f2; c14: 9f0; c15: 9f0; c15: 8f3; c15: 7f3; c14: 7f2; g12: 7f0; c11 : 7f3; c10: 7f2; q9: 6f7; r10: 6f1; r9: 5f3; c11: 6f0; r10: 5f2; r11: 5f1; r9: 4f3; r10: 4f0; r11: 4f0; y12: 5f2; y13: 5f2 ; y14: 5f3; y14: 6f0; y13: 6f0; y12: 6f0; & ctm = Slow_Accepter!; Generate_the_sl Największą_ możliwą_akceptację_machine;:; 7; 3; 0 ;

Maszyna jest w zasadzie licznikiem przebiegu przebiegającym na podstawie trzeciej, używając symboli czerwonego, niebieskiego i żółtego, odpowiednio dla cyfr 0, 1 i 2. Zielony symbol służy do oznaczenia końca numeru. Na początku taśma jest inicjowana za pomocą 49 czerwonych symboli. Odbywa się to za pomocą części w trzech górnych rzędach maszyny. Cztery dolne rzędy obsługują zadanie zwiększania liczby w pętli. Podczas każdej iteracji dwie komórki rozgałęzione po lewej stronie sprawdzają, jak zastosować przyrost do bieżącej liczby, a następnie komórki rozgałęzione po prawej stronie kopiują pozostałe, niezmienione cyfry.

Wcześniej próbowałem oszacować czas działania maszyny, jeśli pozwolono jej uruchomić się do końca, ale na tym poziomie bardziej sensowne jest po prostu przechodzenie przez liczbę iteracji. Z grubsza mówiąc, ukończenie jednej iteracji zajmuje około minuty - ale nawet jeśli zajęłoby to sekundę, to skróciłoby czas działania tylko o jeden rząd wielkości.


4
Ok, poddaję się ...
Zmienność

2
Nie poddawaj się! Nie mam wątpliwości, że to tylko drapanie po powierzchni. Na przykład, kompaktowanie logiki licznika przebiegu za pomocą tylko jednej lub dwóch komórek pozwoliłoby na zwiększenie rzędu czasu pracy o rząd wielkości.
breadbox


5
Jeśli to pomaga, często przedkładałem odpowiedzi na golfa, które były daleko w tyle za liderem, tylko dlatego, że było to inne podejście. Jedną z rzeczy, które uwielbiam w tej witrynie jest to, że zachowuje ona różnorodność odpowiedzi.
breadbox

1
@SimplyBeautifulArt Można poprawić, wprowadzając pary symboli będących cyframi (w takim przypadku można użyć 15 z 16 zamiast 3 z 4). Oczywiście przy małych rozmiarach plansz napotkałbyś wiele trudności, próbując to zaimplementować.
feersum

8

603: 25

Test online

Ponownie przeczytałem dzisiaj pytania z Manufaktury i nagle wpadłem na pomysł, który radykalnie spowolniłby ten proces: zamiast tylko 50 wartości i trzykrotnej zmiany kolorów, nowy program to robi, ale potem zmniejsza liczba wartości o 1 i ponownie przechodzi przez zmianę kolorów, aż do pojawienia się pustej taśmy, w której program się zatrzymuje.

W kolejce nie będzie przechowywanych więcej niż 50 wartości naraz, więc nie ma sensu wrzucać zbyt wielu wartości na taśmę - są one po prostu natychmiast wypychane. Tak jak poprzednio, przenośniki taśmowe mają na celu maksymalizację czasu potrzebnego na uruchomienie rzeczy. W rzeczywistości było minimalne ulepszenie, aby osiągnąć ogromny wzrost czasu działania.

Nadal jednak nigdzie w pobliżu odpowiedzi na breadboksa .


Ciekawe, jak podobne są nasze rozwiązania. Obaj zaczęliśmy od mnożnika 9x6 i umieściliśmy gałąź i grupę x6 w tym samym miejscu! Twój jest jednak bardziej elegancki - wykorzystałeś każdą komórkę i zakończyłeś czystą taśmą.
Igby Largeman

5

33:33

Pracowałem nad tym przez dość długi czas ( zmienność ustawiła poprzeczkę dość wysoko), ale kiedy trafiłem 33:33, pomyślałem, że to dobry moment, żeby się zatrzymać.

Strategia jest dość tępa: w zasadzie wypełnij taśmę jednym kolorem, potem drugim, potem drugim i zawsze staraj się przechodzić jak najwięcej komórek między każdym zapisem (lub grupą zapisów).

Jestem pewien, że istnieją sposoby, dzięki którym możemy pójść o krok dalej.

Zajęty bóbr

Łącze poziomu


+1 Zobaczę, co mogę zrobić, aby go pokonać;) (choć prawdopodobnie nie za daleko się
posunę
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.