Nadszedł czas, aby pochwalić się umiejętnościami pisania złego kodu. Próbuję nowego rodzaju łamigłówki programistycznej, najbardziej podobnej, jak sądzę, do podstępnego konkursu C. Główną różnicą jest to, że nie jest to tak nikczemne: to tylko dobra czysta zabawa. Celem układanki jest spakowanie jak największej liczby błędów do programu. Zwycięzcą tego konkursu jest ten, który pisze program z największą liczbą błędów na postać.
Aby uniknąć ogromnego wątku komentarzy z prośbą o wyjaśnienia, powinienem teraz zdefiniować, co uważam za kwalifikujące się błędy.
Po pierwsze, błąd nie jest błędem . Jeśli jest to problem, który może zostać wykryty przez interpretera jako błąd (np. Niedopasowane ograniczniki, źle sformułowana składnia, dostęp do właściwości obiektu zerowego itp.) Lub jeśli uniemożliwia on wykonanie lub kontynuację programu, nie jest błąd. W przeciwnym razie możesz wpisać cztery znaki, a tłumacz może wymienić osiem błędów składniowych i możesz zgłosić stosunek liczby błędów do 2.
Po drugie, błąd nie może być oczywiście zły, a błąd nie jest pisanką . Jest to z pewnością subiektywne kryterium, ale uważam, że jest to niezbędne w tego rodzaju konkursach. Oznacza to, że nie możesz mieć kodu warunkowego, który wyraźnie zmienia kod w oczywisty sposób. (Przeczytaj: użyj języka Turing Pit, ponieważ nikt nie pozna różnicy).
Po trzecie, błąd musi być wiarygodny . Jest to subiektywne, jak powyższy, ale błąd musi wyglądać tak, jakby mógł zostać napisany przez osobę mniej niż drobiazgową lub być może ignorancką lub przez kogoś, kto właśnie popełnił błąd. Obejmuje to na przykład błędy i składnie off-by-one, które są poprawne i wyglądają poprawnie, ale powodują niepożądane zachowanie (np. Użycie nawiasów kwadratowych zamiast nawiasów).
Błąd może powodować wszelkiego rodzaju niepożądane zachowanie programu, w tym między innymi niepożądane wyjście w niektórych wyjątkowych przypadkach, ma różne zachowanie oparte na czymś, co wydaje się niezwiązane (np. Wyjście wyświetla się inaczej w zależności od tego, czy kończy się bieżący czas z nieparzystą lub parzystą liczbą sekund), wycieki pamięci, utrata danych i tak dalej.
Przykładowy problem:
Stwórz program, który wyświetla wszystkie znaki ASCII w porządku rosnącym według ich wartości liczbowej.
Przykładowa odpowiedź:
Brainf ***, 5 znaków, 1 błąd, współczynnik błędu-0,2
+[+.]
Błąd: nie wyświetla znaku ASCII dla 1. Można go naprawić, zmieniając na .+[.+]
.
Ok, myślę, że powinieneś już to zdobyć, oto Twoja łamigłówka:
Dekoduj szyfr Cezara i sortuj słowa alfabetycznie
Szyfr Cezara powstaje poprzez pobranie serii liter i przesunięcie ich n liter w alfabecie. Jeśli ciągnie się aż do początku lub końca alfabetu, A następuje po Z, a Z występuje przed A. Na przykład:
Mannequin
Nboofrvjo //Shifted over 1 or -25
Wkxxoaesx //Shifted over 10 -16
Ftggxjnbg //Shifted over -7 or 19
Otrzymasz dwa dane wejściowe (możesz uzyskać dane wejściowe, ale jest to dla ciebie najwygodniejsze, z rozsądku). Pierwsze wejście to słowa, a drugie wejście to wartość, o którą się przesuwa. Twoim zadaniem jest wyprowadzenie zdekodowanych słów, a następnie wyodrębnienie zdekodowanych słów po ich posortowaniu alfabetycznym.
Przykład (bez obrazy dla złych chłopców, to tylko przykład):
Pierwsze wejście: gtdx wjbfwiji. ljy Gfi hfssty
Drugie wejście: 5
Pierwszy wynik: chłopcy nagrodzeni. dostać Bad nie może
Drugi wynik: Bad Boys nie mogą zostać nagrodzeni.
Powodzenia!