Testy pierwotności w Manufakturze

13

tło

Manufaktura to gra o programowaniu. Gracz musi używać formy dwuwymiarowego języka programowania do wykonywania zadań. Jeśli nigdy o tym nie słyszałeś, najłatwiejszym sposobem na naukę jest wypróbowanie kilku pierwszych poziomów gry.

Wyzwanie

Twoim wyzwaniem jest stworzenie programu, który testuje pierwotność liczby.

Dane wejściowe będą ciągiem N niebieskich znaczników w kolejce. Jeśli N jest liczbą pierwszą, wówczas twój program powinien ją zaakceptować (przenieść robota do mety). Jeśli N jest złożony, to twój program powinien go odrzucić (upuścić gdzieś na podłogę).

Opcje przesyłania

Ponieważ jest to bardziej złożone wyzwanie niż typowe wyzwanie Manufaktury, postanowiłem umożliwić więcej sposobów przesyłania odpowiedzi.

Wanilia

Stworzyłem niestandardowy poziom 13x13 do budowania i testowania zgłoszeń. Niestandardowy poziom testowania jest następujący.

Poziom niestandardowy 13x13

Gra pozwala tylko na 8 przypadków testowych na niestandardowym poziomie, ale twoje dzieło powinno teoretycznie być w stanie obsłużyć dowolną liczbę naturalną N, ograniczoną tylko dostępną pamięcią. Do celów informacyjnych przypadki testowe udostępnione na poziomie niestandardowym są następujące:

1 -> reject
2 -> accept
4 -> reject
5 -> accept
7 -> accept
9 -> reject
11-> accept
15-> reject

Rozszerzona siatka

Niektórzy użytkownicy mogą chcieć więcej miejsca niż siatka 13 x 13. Oto link do niestandardowego poziomu w grze 15 x 15, utworzonego przez zmianę liczby w adresie URL:

Poziom niestandardowy 15x15

Niestety większe niestandardowe poziomy nie działają, ponieważ dodatkowe komórki są niedostępne.

Manufaktura Esolang

Nastąpiła adaptacja Manufaktury na język oparty na ASCII. Jeśli chcesz inny sposób zaprojektowania / przetestowania swojego dzieła lub jeśli nie jesteś w stanie zmieścić ostatecznego rozwiązania na planszy, możesz użyć tego esolangu. Informacje na temat tego esolangu można znaleźć tutaj:

Manufaktura esolang

Istnieje kilka rozbieżności między esolangiem a rzeczywistą grą. Na przykład przejścia przez przenośniki są obsługiwane w różny sposób. Staraj się unikać korzystania z tych rozbieżności.

Szybszy sposób testowania

Gra jest bardzo wolna, jeśli chodzi o programy, których wykonanie wymaga kilku tysięcy kroków. Moje rozwiązanie sprawdzające koncepcję wymagało 28042 kroków, aby odrzucić 15. Nawet przy 50-krotnym przyspieszeniu w grze, to po prostu trwa zbyt długo.

Znalazłem tę bardzo pomocną stronę internetową . Wystarczy skopiować i wkleić link do swojej odpowiedzi, aby przetestować swoją odpowiedź przy użyciu określonych danych wejściowych. 28042-etapowy proces zajął sekundę.

Należy zauważyć, że często powie coś „niepoprawnie zaakceptowane”, nawet jeśli maszyna działała poprawnie. Wynika to z faktu, że strona internetowa zna tylko przypadki testowe. Na przykład oznaczałoby to, że moje rozwiązanie „nieprawidłowo zaakceptowało” cyfrę 3, mimo że moja maszyna była rzeczywiście poprawna.

Jak wygrać

Kryterium punktacji to liczba części (zajętych komórek). To jest kod golfowy, więc wygrywa zgłoszenie z najmniejszą liczbą części.

Dla zainteresowanych moje rozwiązanie porównawcze składa się z 96 części i pasuje do siatki 13x13. Znalezienie lepszego algorytmu może prowadzić do kolosalnych ulepszeń, ponieważ wiem, że użyłem algorytmu nieoptymalnego.

PhiNotPi
źródło

Odpowiedzi:

10

53 części - siatka 11x11

Właśnie nauczyłem się grać w Manufakturze 2 dni temu, więc prawdopodobnie nie jest zoptymalizowana pod kątem golfa, ale przynajmniej rozwiązuje problem. Wprowadza oczywiście podział próbny, poprzez wielokrotne odejmowanie. Wszystkie dzielniki od 2 do N-1 są sprawdzane. Wydaje mi się, że złożoność czasowa powinna wynosić O (N ^ 3).

53-częściowe rozwiązanie

Link do rozwiązania

Byłem bardzo rozczarowany, że musiałem użyć przenośnika taśmowego :)

feersum
źródło