Oczywistym rozwiązaniem byłoby po prostu wydrukowanie ich jako łańcucha, ale czy można napisać krótszy kod?
Wymagania:
- Żadne dane wejściowe nie powinny być przetwarzane, a dane wyjściowe powinny mieć postać
2 3 5 7 11 13 ...
itp. - W ogóle nie są używane słowa zastrzeżone
- Język powinien przynajmniej umożliwiać programowanie strukturalne i mieć zarezerwowane słowa (w przeciwnym razie punkt 2 byłby dyskusyjny).
najpierw miałem na myśli wyłącznie C / C ++, ale rozszerzyłem to pytanie, wciąż próbując zapobiec oszustwom
Odpowiedzi:
C, 60 znaków
Ograniczenie „brak słów kluczowych” nie ma tutaj znaczenia. Jestem prawie pewien, że poprawa, jeśli to możliwe, nie zostanie dokonana przez dodanie słów kluczowych.
Alternatywna wersja:
wynik nie jest tak fajny, ale lubię
printf
nadużycia.Sztuką w obu rozwiązaniach jest połączenie dwóch pętli (zaimplementowanych przez rekurencję) w jedną.
n
jest następną potencjalną liczbą pierwszą,m
kolejnym potencjalnym dzielnikiem.W każdym wywołaniu rekurencyjnym zwiększamy
n
(przy ustawienium
do poprzedniej wartości) lub zmniejszamym
.źródło
Python, 108 znaków
Python nie został stworzony do tego wyzwania. Chcesz
print
? To jest zarezerwowane. A może skorzystamystdout
? To będzie kosztowaćimport
... zgadłeś, zarezerwowane. Cóż ... Jestem na Uniksie, więc mogę otworzyć deskryptor pliku 1, który jest zwyczajny. Włamać się!Człowiek i iteracja? Nic, tylko
eval
. Oczywiście żadnych pętli, ale nie możemy nawet zdefiniować funkcji za pomocądef
lublambda
. Aby dodać obrażenia do obrażeń, nie możemy nawet korzystać ze zrozumienia listy! Zawsze szukam wymówki, by używać takich rzeczy jakmap(p.__mod__,...)
w golfie kodowym ... rozumienie jest zawsze lepsze. To znaczy do tej pory.Teraz można narzekać, że
exec
jest to słowo kluczowe, choć nie użyć słowa kluczowego (I nawet nie ). Cóż, oto rozwiązanie 117 znaków, które nie używa .eval
exec
'exec'
źródło
__import__
, ale będzie to kosztować znakiJavaScript (80 znaków)
Uruchom w konsoli przeglądarki internetowej.
Zastosowano główne sito, które okazało się bardzo skondensowane.
źródło
C, 183 znaków
Oto szybka pierwsza próba. Uważam, że powinno to spełniać wymagania. Korzystam z prostego podziału prób, aby znaleźć liczby pierwsze, i rozwiniętą pętlę zbudowaną za pomocą preprocesora, aby iterować, dopóki nie znajdę wystarczającej ich liczby. Poprawiono liczbę powtórzeń, aby wydrukować dokładnie 128 liczb pierwszych.
źródło
C, 87 znaków
(Próbowałem napisać to w bardziej funkcjonalnym stylu, ale moja niezdolność do użycia
return
zabiła ten plan).źródło
C, 134 znaki
Oto alternatywne rozwiązanie, które stara się unikać używania słów tak często, jak to możliwe, zastrzeżone lub w inny sposób:
Wszystko to wykorzystuje to
printf
imain
za pomocą jednego argumentu.źródło
Mathematica 50 znaków
Nie jestem pewien, jak interpretować „zastrzeżone słowa” dla Mathematiki, ale chcę grać, więc wezmę to pod uwagę, że nie trzeba mieć wbudowanych funkcji generowania liczb pierwszych ani testowania pierwotności.
źródło
Haskell, 72 znaki
Co prawda, unikanie słów kluczowych nie jest zbyt trudne w Haskell.
źródło
K (ngn / k) , 31 bajtów
Wypróbuj online!
źródło