Zadanie jest proste: twój program odczytuje liczbę całkowitą jako dane wejściowe i drukuje, czy jest liczbą pierwszą, czy nie. Możesz wydrukować „tak / nie”, „prawda / fałsz” lub cokolwiek, co jednoznacznie identyfikuje wynik.
Wyzwanie polega na tym, że kod musi działać z transponowanymi wierszami i kolumnami.
Aby wykluczyć oczywiste rozwiązanie (najkrótsze „proste” rozwiązanie powtarzane pionowo char-by-char za pomocą komentarzy), metryka różni się nieco od zwykłego golfa kodowego:
Ponieważ formatowanie jest bardzo ważne w tym wyzwaniu , rozmiar kodu jest mierzony w obszarze najmniejszego prostokąta, w którym mieści się kod. Innymi słowy, białe spacje się liczą, a linie powinny być wypełnione, aby były równej długości (nie trzeba to zrobić po opublikowaniu rozwiązania, dla uproszczenia). Na przykład
int main()
{
return 0;
}
miałby rozmiar 4 * 13 = 52 (i oczywiście nie spełnia żadnego z dwóch kryteriów: detekcji pierwotnej i transpozycji).
Najmniejszy rozmiar wygrywa.
Możesz używać dowolnego języka i dowolnej funkcji biblioteki, z wyjątkiem przypadków, gdy jedynym celem tej funkcji jest wyszukiwanie, generowanie lub wykrywanie liczb pierwszych.
Edytować:
Podczas gdy zwycięzcą prawdopodobnie byłoby rozwiązanie Golfscript, przyznam 50 punktów nagrody za najlepsze rozwiązanie C lub C ++!
Odpowiedzi:
GolfScript, 13 × 1
GolfScript uderza ponownie!
Powtarza dane wejściowe, jeśli jest liczbą pierwszą, w przeciwnym razie drukuje dane wejściowe połączone z najmniejszym właściwym dzielnikiem. Tak, wiem, że to rozszerza definicję „wszystkiego, co jednoznacznie identyfikuje wynik”, ale zrobienie czegoś bardziej wymyślnego kosztowałoby kilka dodatkowych znaków. Jeśli chcesz uzyskać lepszy wynik, dołączenie trzech znaków
;]!
do kodu daje1
liczby pierwsze i0
zespolonych.Algorytm jest naprawdę nieefektywny, wystarczy podział na brutalną próbę od 2 do n- 1. Większość operatorów GolfScript to tylko pojedyncze znaki, więc ten kod działa równie dobrze transponowany. Irytujące jest jednak to, że operator przypisania
:
nie dopuszcza spacji między sobą a jego celem, więc musiałem to zrobić całkowicie bez zmiennych.źródło
!
? A może miałeś na myśli coś bardziej wyszukanego?)
przed tym,,
aby zawsze znajdował dzielnik i=
na końcu.:
następnie linią, przenosi na znak nowej linii - więc nie jest to, że spacje nie jest dozwolone, jest to po prostu, że spacje, co zostanie przypisana do:
nie dopuszcza spacji ani niczego innego między sobą a celem: cokolwiek następuje bezpośrednio po nim, czy to spacja, czy jakikolwiek inny token (tak, liczby parzyste, ciągi znaków lub bloki kodu), jest przypisywana. Jednak spacja jest dokładnie tym, o czym oficjalnie ostrzega oficjalna dokumentacja, i to nie bez powodu - ponieważ w większości innych miejsc dodawanie białych znaków między tokenami w GolfScript nic nie robi (normalnie, chyba że jest przypisane do ...).C,
2 * 702 * 60Drukuje
y
na liczbach pierwszych, nic poza tym.EDYCJA : Zmieniono kod, aby zapisać 10 znaków. Musi być uruchamiany bez parametrów (tak
m=1
).Metoda obsługi transpozycji jest dość ogólna i można ją zastosować w dowolnym programie.
Polega na konwersji tego:
Do tego:
I oba oznaczają po prostu
abcd
.źródło
C - 13x13
Odczytuje dane wejściowe ze standardowego wejścia i wypisuje wartość „
1
za pierwszą” i „0
za pierwszą”.edycja: kompiluje się teraz z gcc i clang, inne kompilatory nie były testowane
źródło
C, znaki 12x12
Dwuwymiarowe rozwiązanie, w przeciwieństwie do mojej innej odpowiedzi , oparte na tym samym kodzie (i podoba mu się to, że drukuje
y
za pierwszą, nic za kompozytową).Struktura jest podobna do odpowiedzi Quasimodo , ale mój kod jest krótszy i myślę, że użycie komemntów jest nieco bardziej wydajne, więc mogę zmieścić 12x12.
źródło
Perl, 14 x 14
Myślę, że rozumiem. Podaj liczbę jako argument wiersza poleceń, wyniki
0
lub1
. Prawdopodobnie więcej miejsca na ulepszenia.źródło
Q
Nadużywane komentarze do symetrycznego, nieefektywnego rozwiązania.
Pobiera dane wejściowe ze STDIN, zwraca wartość logiczną.
źródło
sqrt
tam. Szukając liczb pierwszych w golfie kodowym, zwykle korzystne jest (nieekonomiczne) dzielenie się do n zamiast zatrzymywania się na sqrt n.Galareta , kwadrat 2x2
Wypróbuj online!
Myślę, że mam poprawną część transpozycji, a jeśli tak, to transponowana wersja jest
Wypróbuj online!
(który jest tym samym kodem)
źródło
05AB1E ,
1x51x3 (53 bajty )To nie jest jeden duży program; każda linia jest oddzielnym alternatywnym programem do sprawdzania liczby pierwszych (bez użycia wbudowanej liczby pierwszej).
-2 bajty dzięki Grimy .
Białe spacje między wierszami nie występują w 05AB1E, a ponieważ używam tylko poleceń 1-bajtowych, działa to dobrze po transpozycji.
Wyjścia
1
/ odpowiednio0
dla truey / falsey.Wypróbuj pierwszy online lub sprawdź kilka innych przypadków testowych dla wszystkich (z wbudowanym eval
.V
) .Transponowano: Wypróbuj pierwszy online .
Wyjaśnienie:
UWAGA: Jeśli tylko wartość prawda / falsey jest prawidłowa i nie musi być ona odrębna, albo
Òg
alboÕα
może być użyta jako ważna 2-bajtowa, ponieważ tylko1
prawda jest w 05AB1E, a wszystko inne jest falsey: Wypróbuj oba dla niektórych przypadków testowych .Gdyby wbudowane były dozwolone, wystarczyłoby jedno
p
: Wypróbuj online lub sprawdź więcej przypadków testowych .źródło
ÑPQ
lubÒgΘ
lubÒQP
dla 3 bajtów. (Ñ
iÒ
oba mają inne cele niż „znajdowanie, generowanie lub wykrywanie liczb pierwszych”, więc według mojego czytania nie są one objęte zakazem).ÕαΘ
,fQO
,fs¢
,f`Q
Õα
Jednak nie wiedziałem o tym ! To całkiem niezłe.Zaklęcia Runiczne , 7 × 1
Wypróbuj online!
Runiczna nie dba o twoje słabe próby zmiany źródła! Zgodność z wymogiem dalszego działania po transponowaniu źródła kosztował +3 bajty (+2 szerokość prostokąta) dla modyfikatora odbicia i punktu wejścia.
Transponowane lub transponowane, ale pozostawiając łączącą postać dołączoną do jej rodzica .
źródło
dzaima / APL, 8 × 9 = 72
Wypróbuj oryginał lub transponuj !
źródło
Python 3 , 28 x 28
Wypróbuj online!
źródło
JavaScript (Node.js) ,
2625x5Wypróbuj online!
Transponowano:
Wypróbuj online!
źródło
APL (Dyalog Unicode) , 10x11
Wypróbuj online!
Poprawiono funkcję zgodną ze specyfikacjami. Dzięki @ Adám za heads-up.
Zwraca 0 za prawda, 1 za fałsz .
W jaki sposób
Wersja transponowana jest dokładnie taka sama.
źródło