tło
Manufaktura została wprowadzona na rynek jako gra, ale my, golfiści, widzimy ją taką, jaka naprawdę jest: dwuwymiarowy język programowania. Język programowania Manufaktury opiera się na jednej kolejce , która zawiera serię kolorowych znaczników. Wskaźnik instrukcji porusza się po planszy za pomocą przenośników taśmowych i napotyka szereg pisarzy i gałęzi, które czytają i piszą do kolejki.
Język jest bardzo łatwy do zrozumienia, więc najszybszym sposobem na naukę jest zagranie pierwszych kilku poziomów gry (link powyżej).
Wyzwanie
Twoim wyzwaniem jest stworzenie programu, który może podzielić jedną liczbę na inną w jak najkrótszym czasie.
Wejściem do programu będzie ciąg X niebieskich znaczników, a następnie Y czerwonych znaczników. Wymaganym wyjściem będzie ciąg czerwonych znaczników o długości X / Y.
Plansza do wykorzystania znajduje się na tym oficjalnym poziomie konkursu:
Ma wymiary 13 x 13 (maksymalny rozmiar) i jest wstępnie wyposażony we właściwe testy (patrz sekcja punktacji).
Punktacja
Wynik twojego programu to łączny czas, jaki zajmuje programowi zaliczenie wszystkich testów na oficjalnym poziomie konkursu. Całkowity czas podany jest na ekranie ukończenia poziomu.
Podczas uruchamiania testów najprawdopodobniej będziesz musiał użyć suwaka przyspieszenia 50x w lewym dolnym rogu, aby szybko otrzymać wyniki (przyspieszenie czasowe nie wpływa na wynik).
Oto lista problemów z podziałem związanych z testami:
6/2 = 3
3/3 = 1
4/1 = 4
0/1 = 0
12/4 = 3
12/3 = 4
9/3 = 3
10/2 = 5
Przykład I / O
12/3=4
in: BBBBBBBBBBBBRRR
out: RRRR
10/2=5
in: BBBBBBBBBBRR
out: RRRRR
9/3=3
in: BBBBBBBBBRRR
out: RRR
0/1=0
in: R
out:
źródło
Odpowiedzi:
Ocena 3:29
Może być także przypadek specjalny dzielący przez 1,2,3,4. Sprawia, że jest to znacznie szybsze.
http://pleasingfungus.com/Manufactoria/?lvl=34&code=c9:13f2;c10:13f2;c11:13f2;p12:2f7;y13:2f0;p11:2f0;c11:4f3;c10:3f0;p11:5f0 ; c10: 5f0; c9: 5f0; c11: 6f3; p11: 7f0; c10: 7f0; p11: 3f0; r10: 6f1; q8: 5f4; q8: 6f1; q9: 6f1; c7: 5f3; c7: 6f3; q10 : 2f0; r10: 1f3; r10: 4f1; q9: 3f4; q9: 4f1; c9: 2f3; c8: 3f3; c8: 4f3; r10: 8f1; q10: 9f6; q9: 9f1; q9: 8f4; q9: 7f4 ; c8: 8f3; c8: 9f3; c8: 10f3; c8: 11f3; c8: 12f3; c8: 13f2; c7: 7f2; c8: 7f3; r11: 9f3; r11: 10f0; r10: 10f0; r9: 10f3; r9 : 11f2; p11: 11f6; r11: 12f1; g11: 8f3; b10: 11f2; c16: 10f2; q17: 10f6; q17: 11f3; g18: 11f0; c12: 11f1; c12: 10f2; c13: 10f2; c14: 10f2 ; c15: 10f2; c17: 12f0; p16: 12f4; c16: 11f3; c16: 13f1; q15: 12f0; r15: 13f1; c14: 12f3; c14: 13f0; c13: 13f0; q17: 7f6; q17: 9f1; q18 : 9f6; q18: 8f5; q17: 6f1; g16: 6f2; y18: 6f0; p17: 5f5; r18: 5f0; c16: 5f0; p15: 5f0; r15: 6f3; b15: 7f2; p16: 7f6; r16: 8f1 ; q14: 5f0; y14: 4f3; g14: 6f1; p13: 5f0; p13: 6f0; p13: 7f0; p13: 8f0; p13: 9f1; g12: 9f0; c17: 8f1; & ctm = Divide_and_Conquer;Input_will_be_X_blues_followed_by_Y_reds, _output_X / Y_reds; bbbbbbrr: rrr | bbbrrr: r | bbbbr: rrrr | r: | bbbbbbbbrrr: rbr bbbbrrrbbrrrb:;
źródło
Wynik: 15:51
Czy dzieli przez powtarzające się odejmowanie. Korzysta z Y między R, aby śledzić, ile dzielnika odejmowaliśmy do tej pory. Używa Gs do zliczania ilorazu.
Na przykład stan na początku każdej zewnętrznej pętli (zaraz po początkowym module zapisującym G) dla 12/4 to:
Gdy nie ma już Bs, gadżet w lewym dolnym rogu obciąża Rs, a następnie generuje # G-1 Rs.
Wewnętrzna pętla rozdziela po jednym B na raz i używa Y do śledzenia pozycji. Zaczynając od zewnętrznej pętli:
Pętla wewnętrzna to pudełko 3x4 w prawym dolnym rogu. Układ pozostałych można prawdopodobnie nieco poprawić, ale wewnętrzna pętla jest ciasna.
http://pleasingfungus.com/Manufactoria/?lvl=34&code=c11:13f2;g12:2f3;p12:3f7;c13:3f3;p13:4f3;b12:4f2;r14:4f3;p14:7f7;r13:7f2 ; q14: 8f7; g13: 8f2; p14: 9f4; r13: 10f2; p14: 10f7; b15: 10f0; q14: 11f7; p15: 11f3; r16: 11f1; p15: 8f0; r15: 9f1; c16: 8f0; c13 : 2f0; c15: 2f0; c16: 2f0; c17: 2f0; c11: 3f3; c11: 4f3; c11: 6f3; c11: 7f3; c11: 8f3; c11: 9f3; c11: 5f3; p11: 10f7; q11: 11f6 ; q11: 12f7; r10: 12f2; c10: 10f2; q16: 10f5; y14: 6f3; q14: 5f3; g15: 5f1; c15: 4f1; c15: 3f1; c17: 9f1; c17: 8f1; c17: 7f1; c17 : 6F1, C17 5f1, C17 4F1, C17 3F1; Y16: 9f1, G17: 10f1, P14: 2f4, G14: 1F3; & CTM = Divide_and_Conquer; Input_will_be_X_blues_followed_by_Y_reds, _output_X / Y_reds; bbbbbbrr: rrr | bbbrrr: r | bbbbr : rrrr | r: | bbbbbbbbbbbbrrrr: rrr | bbbbbbbbbbbbrrr: rrrr | bbbbbbbbbrrr: rrr | bbbbbbbbbbrr: rrrrr; 13; 3; 0 ;
źródło
Wynik 20:35
Zupełnie inne podejście - mniej części, ale znacznie wolniej.
http://pleasingfungus.com/Manufactoria/?lvl=34&code=p12:2f3;g11:2f3;b11:3f3;c12:4f2;c11:4f2;c13:2f3;c13:3f3;c13:4f3;c12:5f3 ; c11: 5f1; c10: 5f2; c9: 8f3; c9: 9f3; c10: 11f2; c11: 11f1; c11: 9f1; c11: 10f1; c11: 12f2; c13: 8f0; c11: 8f0; c13: 7f0; c14 : 7f0; c14: 6f3; c12: 7f3; y14: 5f0; y10: 6f1; y11: 7f1; g12: 6f2; g9: 11f2; g10: 10f0; q9: 10f3; q13: 5f7; q13: 6f7; b11: 6f1 ; b10: 9f1; p10: 7f1; r9: 7f2; p10: 8f4; p12: 8f3; q12: 12f3; r13: 12f0; r8: 10f2; c12: 9f3; c12: 10f3; c12: 11f3; & ctm = Divide_and_C_be_s , _output_X / Y_reds; bbbbbbrr: rrr | bbbrrr: r | bbbbr: rrrr | r: | bbbbbbbbbbbbrrrr: rrr | bbbbbbbbbbbbrrr: rrrr | bbbbbbbbbrrr: rrr | bbbbbbbbbbrr: rrrrr; 13; 3; 0 ;
źródło