Mimo twojego protestu szef został zmuszony do pracy nad programem, który przyjmuje jedną liczbę całkowitą bez znaku jako dane wejściowe i wypisuje ciąg „liczba pierwsza”, jeśli ta liczba całkowita jest liczbą pierwszą, a „nie liczba pierwsza”, jeśli nie jest. Możesz wybrać język, w którym to robisz, o ile wynikowy program jest krótki; twój szef bardzo docenia niską liczbę postaci. (W rzeczywistości ręcznie policzy znaki po wydrukowaniu kodu źródłowego.)
Więc lepiej się do tego zabrać, wygrywa najmniejsza liczba postaci.
Część zabawy
To tylko między tobą a mną, ale twój program powinien być również ważny w innym języku. W tym języku powinien jednak wypisać ciąg „Jeśli szef to znajdzie, wychodzę”. Upewnij się, że twój szef nie odkrywa, że istnieje ukryta zniewaga podczas czytania kodu w kółko, ponieważ ciągle zapomina, czy do tej pory policzył do 17 czy 18 lat. Z tego powodu nie możesz używać żadnego słowa w „szef znajduje to wyjście” w części kodu, ani nie możesz używać ani anagramów tych 5 słów.
Bonusowe wyzwanie, za które stworzyłem nagrodę
Napisz program, który faktycznie wygląda tak, że rozwiązuje pierwsze pytanie dla niewprawnego oka i nie zawiera niepotrzebnych znaków. Obejmuje to komentarze i segmenty kodu, które oczywiście nic nie wnoszą. W idealnym przypadku laik wierzyłby, że twój program jest tak krótki, jak to tylko możliwe, bez niemożności zarządzania. Pomocny komentarz tutaj i tam jest w porządku.
Zasady wyzwania premiowego są nieco luźniejsze, zamiast oceniać je na podstawie łatwych do zmierzenia kryteriów, twój program będzie oceniany bardziej na podstawie tego, jak się do mnie zbliży (i oczywiście wyborców)
Będę ostatecznym sędzią, którego zgłoszenie najbliżej zasłuży na tę nagrodę.
Edytować:
Po kilku minutach liczenia szefa kazał jednemu z twoich kolegów napisać dla niego program liczenia znaków. Zatem nawet niewidoczne postacie liczą się do twojej postaci.
Odpowiedzi:
CJam ( GolfScript ),
6059 bajtówDzięki @mnbvmar za grę w golfa na 1 bajcie!
Jak to działa (CJam)
Wypróbuj online!
Jak to działa (GolfScript)
Wypróbuj online!
źródło
Python 2 / Python 3 - 128
Identyfikuje liczby pierwsze w Pythonie 2 , wpadasz w kłopoty z Pythonem 3 .
Premia
Wypróbuj z Python 2 lub Python 3 ! (W przeciwieństwie do wersji golfowej powyżej zmienione role: Python 3 jest identyfikatorem liczby pierwszej. Python 2 zawiera pisankę).
Proszę wybaczyć mój zły angielski w tekście pomocy! ;)
I używam słowa „rzucić”. Ale w jakiś sposób muszę opisać, kiedy mój program się zakończy. ;)
źródło
/
problem”? (dzielenie liczb całkowitych vs. dzielenie zmiennoprzecinkowe)Przekazanie premii (C / C ++ 11)
Testowanie pierwszorzędności przy użyciu zwykłej naiwnej metody jest tak powszechne. Właśnie dlatego wymyśliłem zupełnie nową randomizowaną naiwną metodę! Ten test jest następujący:
sqrt(n)
.not prime
.20sqrt(n)
czas testu , wyjdźprime
, w przeciwnym razie powtórz.Jeśli liczba jest złożona, prawdopodobieństwo , że nie zadziała , jest bardzo małe (około 10–9 ). Oczywiście nie wierzę, że generator liczb pseudolosowych C / C ++ jest wystarczająco mocny. Dlatego używam własnego 256-bitowego generatora LFSR !
C ++ 11 działa poprawnie. Wydaje się jednak, że kompilator C wydaje wadliwy program dla n> 2 ...
Uwaga : pamiętaj, że C potrzebuje
-lm
opcji (biblioteka matematyczna linków), aby się kompilować.Jeśli znajdziesz następujące wadliwe dane wyjściowe:
niepoprawnie, po prostu usuń odpowiedni
fprintf
wiersz.źródło
Mathematica / Brainfuck, 260
źródło
Golfscript / JavaScript (126
125129130132134205207 207)Wypróbuj Golfscript tutaj i JavaScript tutaj .
Powiedziałbym, że jest szokująco blisko tych rozwiązań Mathematica, które mają wbudowane sprawdzanie liczb pierwszych.
Edycja: Dzięki Peterowi za zapisanie kolejnych
dwóchsześciu bajtów!Oto kilka szczegółów:
1.
jest potrzebny, ponieważ poniżej//
jest komentarz w JavaScript, ale wykonuje dwukrotnie podział w Golfscript. Spowoduje to błąd, jeśli na stosie nie ma nic, więc musimy podać dwie liczby. Nawiasem mówiąc,1.
jest to całkowicie poprawna składnia w JavaScript i zostanie po prostu zignorowana."…"{(}%
bierze ciąg, zmniejsza ich wartości kodu znakowego o jeden i wypycha go jako ciąg. To powoduje, że musimy wydrukować ciąg.'
uruchamia ciąg w Golfscript, który domyślnie rozciąga się na kilka wierszy, powodując, że poniższy JavaScript jest wstawiany tylko do ciągu';#'
zamyka ciąg wieloliniowy w Golfscript, odrzuca go, a następnie ignoruje resztę wiersza. W Javascript jest to po prostu literał ciągu, który zostanie zignorowany.źródło
1+
jest)
. I1 1
jest1.
, co podejrzewam, że JS byłby równie szczęśliwy jak1
{)}/]""+
może być{)}%
.C ++ / C99 / C90 - 248
Kod będzie działał ładnie w C90, ale może pokazywać coś jeszcze w C99 / C ++.
Bez golfa dla przejrzystości:
Jak to działa: Ponieważ C90 nie rozpoznaje komentarzy jednowierszowych, ciąg problemu nie jest już mnożony przez zero.
źródło
for
. Drukuje „not not prime”, jeśli wpiszesz 6. Drukuje równieżprime
dla zera i jednegon
na początku ustawia liczbę pierwszą do znalezienia.prime
dla zera i jeden, jak zauważył wcześniej pqnet.CJam / Ruby,
132959187Moje poprzednie rozwiązanie było znacznie przeprojektowane; ten był w dużej mierze zainspirowany rozwiązaniem Martina Büttnera, w tym jego zdaniem sobie sprawy, że
#bytes
metoda może najwyraźniej zrobić blok.Jak to działa?
Komentarz Ruby (
#
) jest operatorem potęgowania w CJam, więc zanim zaczniemy, będziemy potrzebować co najmniej dwóch liczb na stosie, ale dwie puste liczby (0 0
) to błąd składniowy w Ruby. Jedna jest w porządku i, pomocne, liczby Ruby mogą zawierać znaki podkreślenia jako separatory (1_234
)._
jest operatorem duplikacji CJam, więc musimy wstawić dwukrotnie (;;
), gdy znajdziemy się w komentarzu.limp
odczytuje wiersz ze standardowego wejścia, konwertuje go na liczbę całkowitą, wyskakuje i wypycha, czy jest liczbą pierwszą.Aby przejść do trybu Ruby, otwieramy ciąg i przechodzimy do następnego wiersza, abyśmy nie byli już w komentarzu Ruby (dlatego nowa linia jest znacząca i należy ją policzyć). Każdy znak wiadomości jest dekodowany i drukowany, a następnie rozpoczynamy kolejny komentarz Ruby, abyśmy mogli bezpiecznie zamknąć ciąg CJam przed jego usunięciem. To, co zostało na stosie, to to, czy dane wejściowe były pierwsze, które są drukowane po zakończeniu programu CJam.
CJam / Whitespace, 353 (25 znaczących po wydrukowaniu) znaków
Biorąc pod uwagę niedoceniany charakter wyzwania i fakt, że szef będzie drukował nasze programy w celu policzenia postaci, podjąłem sugestię zrobienia rozwiązania z udziałem Whitespace .
W przeciwieństwie do mojego poprzedniego twierdzenia, że najkrótszy możliwy program do białych znaków, który wypisuje „Jeśli szef to znajdzie, rezygnuję”. miałby 372 znaków, ten robi to w 330. Sztuczka polega na tym, aby użyć
copy
instrukcji, aby wyrywać powtarzające się znaki z jakiegoś miejsca na stosie, zamiast wypychać wszystkie wartości ASCII, które zawsze będą znacznie większe i dlatego wymagają więcej spacji i tabulatory do zakodowania. Oto pseudo-montażowa reprezentacja programu dla ciekawskich:źródło
#chars
i#lines
również, o których będę musiał pamiętać podczas przyszłych wyzwań.chars
i z jakiegoś powodu to nie działało.limp4*"not prime">
go, aby był jeszcze krótszyZgłoszenie nagrody premiowej (Perl / B? F? N? E-? 3)
Edycja: Pierwotnie zapomniałem wydrukować zdanie, a potem zauważyłem, że wydrukuje je w odwrotnej kolejności. Zauważyłem to po zakończeniu . Byłem gotowy zabić kotka, ale teraz go naprawiłem.
Nie jest to już w żaden sposób krótkie, ale uważam, że uczynienie go podejrzliwym i krótkim jest jednym piekielnie trudnym zadaniem. Przeważnie ponownie wykorzystałem jedną z moich rzeczywistych propozycji golfowych, ale w tym jednym powiedziałbym, że drugi język jest naprawdę trudny do zauważenia.
Jeśli szef to znajdzie, naprawdę rezygnuję, ponieważ nigdy nie będę w stanie potajemnie go obrazić, a jeśli nie mogę tego zrobić, jaki jest sens?
Gięcie
i łamaniezasad:Używam tam słowa „the”, ale nie drukuje się „the”. Może to być technicznie nieważne, pozwolę PO zdecydować, czy reguły muszą być tak surowe w przypadku wyzwania bonusowego. Jeśli tak, to niech tak będzie.źródło
^
= przejście w górę). Niektóre listy komentarzy są umieszczane na stosie, który jest drukowany na końcu, drukującIf the boss finds this, I quit.
Zobacz przykład za pomocą adresu URL w reakcji Ingo:"!dlrow olleH">:#,_@
Mathematica / Ruby,
115106 bajtówCzęść Mathematica została nieco zainspirowana poddaniem się Petera Olsona, ale poliglota z Ruby jest tutaj nieco bardziej rozbudowana.
Ruby działa, ponieważ oboje
#
komentują wszystko, co Mathematica. Powód, dla którego działa Mathematica, jest nieco bardziej interesujący. Kod, który chcę wykonać to:Ale to nie jest poprawne, Ruby, więc muszę coś dodać
#
.#
jest parametrem Mathematica dla funkcji anonimowych. Stawiam więc#
z przodu, co zwielokrotnia argument przez wynikIf
. Tak, pomnoży to przez łańcuch , cokolwiek to znaczy. Następnie zamieniam to w anonimową funkcję&
i wywołuję ją natychmiast z argumentem1
. Cóż, Mathematica jest na tyle sprytna, by wiedzieć, że mnożenie przez 1 jest zawsze tożsamością i wyprowadza tylko ciąg. Następnie kod Ruby jest po prostu wstawiany w komentarzu blokowym.źródło
C (przesłanie bonusu)
Wersja C to sprawdzanie liczb pierwszych, tablica wejściowa u góry. Spróbuj zgadnąć, jaki język daje
If the boss finds this, I quit.
(to nie jest biała spacja).Inny język:
źródło
Perl / Befunge-93 (108
106110)Moje drugie zgłoszenie, tylko dlatego, że. Używa również wyrażeń regularnych. Założę się, że jest lepszy wybór niż Perl, na przykład Octave, ale nie mogłem wymyślić, jak drukować warunkowo w skrócie.
Nadużywam reguły drukowania łańcucha, ponieważ unikam anagramów, dzieląc go na kilka łańcuchów.
Numer do sprawdzenia pochodzi ze standardowego wejścia.
if
zamiastunless
zapisanych 4 bajtów.źródło
Lua / PBrain (proceduralny Brainf * ck) - 813
Heh ... Przepraszam, że złapałem się na próbach przebiegłości. PBrain jest jak BF, ale umożliwia wyzwalanie i definiowanie bloków kodu BF wielokrotnego użytku. Jego użycie było całkowicie niepotrzebne.
źródło
Python 2 / Rot13 - 270 bajtów (69 nie licząc komentarzy)
Wykorzystuje to bardzo prosty (tzn. Nieefektywny) algorytm. Po uruchomieniu z rot13 (prawdopodobnie nie językiem programowania), generuje wymagane zdanie (wraz z innymi nonsensami).
Najgorsze jest to, że komentarze stwierdzają oczywistość i są zupełnie bezużyteczne.
To jest poliglotka w inny sposób, zawierająca zarówno angielski, jak i „esperanto”. Mam nadzieję, że sam szef nie jest poliglotą.
źródło
05AB1E / galaretka , 28 bajtów
Nie jeden, ale DWA języki gry w golfa!
Objaśnienie w 05AB1E:
Objaśnienie w galarecie:
Wypróbuj online! (Galaretka) Wypróbuj online! (05AB1E)
źródło
Python, 403 bajty
Jest to przeznaczone na wyzwanie premiowe. Komentarze nie liczą się do bajtecount.
Testy na dole kodu drukują:
Ta maksymalna liczba całkowita, którą zdefiniowałem (mi), ukrywa sekret. W przypadku konwersji na szesnastkową reprezentacja liter ASCII co dwie cyfry heksadecymalnej powoduje „Jeśli szef to znajdzie, wychodzę”. Podstępna część korzysta z funkcji chr. Jeśli szef wie, co to robi i szuka wystarczająco uważnie, będzie wiedział, że kod ukrywa tajną wiadomość. Jednak trochę to zaciemniłem i podałem wystarczające wyjaśnienie całej wartości maksymalnej liczby całkowitej, aby, mam nadzieję, zapewnić szefa, że jest to uzasadniona część programu
Zauważ, że dla większości parametrów działa tak, jak chce szef, ale jeśli wejście nie jest liczbą całkowitą lub liczba jest jakoś większa niż mi, p zwraca błąd zawierający ukryty ciąg. Mogłem wstawić wywołanie drukowania do funkcji, ale pomyślałem, że wyglądałoby bardziej realnie, gdyby zostało zwrócone.
źródło
C # - 288
Z pewnością nie najkrótszy, ale może minąć wielu bossów:
Czytelna wersja:
źródło