99 to język programowania, który wymyśliłem na początku tego tygodnia dla mojego wyzwania. Napisz tłumacza na 99 . (Wymyślony, ale nigdy nie musiałem go wdrażać dzięki tuzinowi z was;)) Pełna specyfikacja języka jest w tym wyzwaniu, więc nie zawracam sobie głowy ponownym opublikowaniem tego wszystkiego.
W 99 możesz wydrukować pojedyncze znaki ASCII na standardowe wyjście, ale ze względu na ograniczenia językowe nie zawsze jest jasne, jak wydrukować konkretny znak tak zwięźle, jak to możliwe.
Dla każdego ze 128 znaków ASCII napisz program 99 , który nie przyjmuje danych wejściowych i wyprowadza ten jedyny znak. Możesz ręcznie zakodować jedną lub wszystkie z tych odpowiedzi lub napisać inny program (w dowolnym języku, który lubisz), aby wygenerować je dla Ciebie.
Suma znaków w każdym z twoich 128 99 programów to twój wynik. Najniższy wynik wygrywa. Nowe linie liczą się jako jeden znak.
Pamiętaj, że w 99 tylko zmienne wielkości parzyste, takie jak 9999
wyjściowe znaki ASCII (zmienne nieparzyste, wyjściowe liczby całkowite). Ich wartość jest dzielona przez 9, a następnie pobierana mod 128, więc wartości nie muszą znajdować się w pewnym zakresie, aby odwzorować na znaki ASCII. Na przykład wszystkie wartości wewnętrzne 297, 1449 i -855 odpowiadają znakowi, !
ponieważ po podzieleniu przez 9 i pobraniu mod 128, wszystkie stają się 33, co jest kodem znaku !
.
Jeśli potrzebujesz tłumacza na 99 , proponuję odpowiedź Mac w Pythonie .
Wiem, że powiedziałem, że moje następne wyzwanie będzie bardziej interaktywne, ale wciąż pracuję nad tym.
źródło
Różnorodne techniki, 42109
W przypadku liczb zamiast obliczać duży znak ASCII, właśnie obliczyłem wartość liczby. Mówiłeś tylko, że możesz wypisać postać, więc to powinno nadal działać.EDYCJA: Zmieniłem liczby, aby używać znaków ASCII, więc zignoruj to. Zostawiłem oryginalny kod numeryczny w kodzie Java, ale skomentowałem na wypadek, gdyby ktoś chciał go użyć.
Niektóre z nich zrobiłem ręcznie, większość po prostu napisałem program do napisania.
Składają się one z 1-4 wierszy, więc są dość przyjazne do kopiowania i wklejania do programu. Należy zauważyć, że nie działają one kolejno, ponieważ mój wygenerowany kod nie zachowuje stanów zmiennych.
Najczęściej stosowaną tutaj techniką było to samo, co podejście orlp:
Moja wersja różni się od używania niestandardowych przypadków i układania dużej części matematyki w jednym wierszu. Przypadki niestandardowe są tam, gdzie postać może być reprezentowana za pomocą tylko kilku cyfr i żadna matematyka ani mój kod generacyjny nie mogą zostać skrócone.
Programy
Umieściłem dane wyjściowe w Pastebin dla tych z was, którzy nie mają ochoty uruchamiać programu:
http://pastebin.com/Cs6WZUfb
Użyty kod Java:
źródło
999
na końcu muszą zostać naprawione.99 999\n99
( zmienić przypisanie,999
aby99
wydrukować jako postać).Powtarzane odejmowanie, 65280
Trywialne rozwiązanie do porównania. Odejmuj 9 od 99, a następnie wyprowadzaj. Przykład znaku 10 ASCII:
Istnieje 128 programów. Pierwszy program ma dwa znaki (99), a każdy po nim jest o 8 znaków (99 99 9 \ n) dłuższy niż poprzedni.
Program w języku Python generujący programy oddzielone pustymi liniami i obliczający wynik:
źródło