Istnieje bardzo prosty szyfr, który zastępuje literę pozycją w alfabecie. Na przykład abc
stałby się 1 2 3
w tym szyfrze.
To wyzwanie stanowi alternatywne podejście do tego szyfru.
Wyzwanie
Utwórz program, który pobiera znaki ASCII i generuje ciąg znaków oddzielony spacjami:
liczby całkowite
-26
przez26
litery
a
przezj
Dane wyjściowe powinny pochodzić z STDOUT lub najbliższej alternatywy twojego języka.
Dane techniczne
Wielkie litery należy zanegować. Stolica
D
na przykład byłoby-4
, podczas gdy małed
byłoby4
.Cyfry należy zmienić na ich odpowiedniki alfa.
1
byciea
i tak dalej. Wszelkie zera na wejściu będąj
.Wszystkie znaki niealfanumeryczne (oprócz spacji) należy zignorować.
Przestrzenie są
0
.Sąsiednie spacje na wyjściu powinny zostać zredukowane do pojedynczego spacji.
Input: You + Me Correct Output: -25 15 21 0 -13 5 Incorrect Output: -25 15 21 0 0 0 -13 5
Dozwolona jest pojedyncza spacja lub znak nowej linii.
Przykłady
Input: programming puzzles
Output: 16 18 15 7 18 1 13 13 9 14 7 0 16 21 26 26 12 5 19
Input: Code Golf
Output: -3 15 4 5 0 -7 15 12 6
Input: Programming Puzzles & Code Golf
Output: -16 18 15 7 18 1 13 13 9 14 7 0 -16 21 26 26 12 5 19 0 -3 15 4 5 0 -7 15 12 6
Input: C0d3 G0lf
Output: -3 j 4 c 0 -7 j 12 6
Input: abc_ABC
Output: 1 2 3 -1 -2 -3
Tablica wyników
Twój wynik powinien pojawić się na tablicy, powinien mieć następujący format:
# Language, Bytes
Przekreślenia nie powinny powodować problemów.
źródło
Odpowiedzi:
CJam,
585754515049 bajtówWłaśnie kiedy napisałem wyjaśnienie, zauważyłem, że jedną z alternatywnych 50-bajtowych wersji można skrócić o bajt ...
Sprawdź to tutaj.
50 bajtów rozwiązań:
Wyjaśnienie
To musi być pierwszy raz, gdy zachowanie modulo CJam dla wartości ujemnych było dla mnie przydatne.
źródło
JavaScript (ES6),
110107133120 bajtówWeź to, stary ja!
Potencjalnie jest o wiele więcej miejsca na grę w golfa,
szczególnie w wyrażeniachregularnych, nieźle. Wersja bez golfa:Sugestie mile widziane!
źródło
All non-alphanumeric characters should be ignored.
. Test: „A $ b” powinno być-1 2
Pyth,
5049 bajtówWypróbuj tutaj .
Edycja: zrestrukturyzowane odkażanie łańcucha, aby upewnić się, że podkreślenia są obsługiwane poprawnie. Nawet zaoszczędził bajt, tak!
Ten program tworzy ciąg wyszukiwania, który służy do dezynfekcji danych wejściowych. Jest to następnie mapowane na odpowiedni indeks w tym ciągu. Wreszcie, każdy indeks większy niż 26 jest konwertowany na poprawny znak ASCII.
Poprzednia wersja, która korzystała z
\W
wyrażenia regularnego, o 50 bajtów:źródło
Julia,
145136 bajtówNie golfowany:
Aby uzyskać cyfry jako litery, dodajemy 58 do wartości ASCII i odejmujemy 10, jeśli bieżącym znakiem nie jest 0. To zapewnia, że 0 mapuje na
j
a pozostałe cyfry naa
-i
.Negowanie wielkich liter odbywa się za pomocą
cmp
. Zwróci -1 dla wielkich liter i 1 dla małych.Wypróbuj online
źródło
Perl 5,
120116113105 bajtówNajpierw usuwa niechciane postacie i dodatkowe spacje.
Następnie schodzi po stole ascii dla każdej postaci.
Test
źródło
s/ +/ /g
, pierwsze wyrażenie jest błędne, ponieważ \ w pasuje do znaku podkreślenias/[^\w ]|_//g
C
142138135Niegolf trochę:
Zalicza podane testy w GCC 4.9.3 i Clang 3.5.2.
źródło
> <> (ryba),
219209 bajtówWypróbuj tutaj
To jest moja pierwsza odpowiedź na golfa! Wreszcie mogłem użyć języka, którego chciałem użyć do gry w golfa kodowego, i wydawało się to idealne, biorąc pod uwagę, że znaki są automatycznie konwertowane na dziesiętne.
Spodziewałem się, że mój wynik będzie znacznie krótszy, ale najwyraźniej nie. Chociaż nie za bardzo grałem w golfa. Jest kilka miejsc, w których kod może być czystszy / bardziej sensowny, ale nie zapisuje żadnych bajtów, ponieważ są one w miejscach, w których i tak potrzebne są białe znaki. Może być sposób na zaoszczędzenie niektórych bajtów na ostatnim bicie w drugiej linii, dzięki czemu pójdzie on w przeciwnym kierunku i zetknie się z 00 już tam, będę musiał grać z tym później
Zasadniczo sprawdza, czy bieżący znak jest spacją, liczbą, wielką lub małą literą, sprawdzając, czy jest w zakresie najwyższych / najniższych wartości w tej grupie. Jeśli nie jest to żaden z nich, zostaje odrzucony. Jeśli jest w jednym z nich, jest konwertowany na liczbę, jeśli jest to litera, i na literę, jeśli jest liczbą (a raczej liczbą z 97-106, które są wartościami dla liter aj). Następnie sprawdza, czy najwyższa wartość jest mniejsza niż 28, w którym to przypadku jest liczbą i wypisuje liczbę, w przeciwnym razie jest to litera i wypisuje literę, którą reprezentuje liczba, wypuszcza spację, a następnie zapętla się, aż stos będzie pusty.
źródło
JavaScript (ES6), 108
122 124Edytuj Używając wyrażenia regularnego z komentarza @ Max
Edytuj2 14 bajtów zapisanych dzięki ETHProductions
EcmaScript 6 tylko dla funkcji strzałek, więc powinien działać w Firefoksie i najnowszym Chrome.
Przetestuj poniższy fragment kodu
źródło
[R](/ +/g,' ')[R](/./g,
na[R](/ +|./g,
. (Przepraszam za wychowywanie stary post, btw)Pyth, 57 bajtów
Prezentacje na żywo i przypadki testowe.
źródło
CJam, 52 bajty
Wypróbuj online
Kluczową częścią rozwiązania jest to, że używa CJam
er
(transliteracja). Jako argument dla operatora potrzebuje listy wszystkich znaków i listy odpowiednich wartości.Jako etap wstępnego przetwarzania danych wejściowych usuwa znaki, które nie są częścią tabeli translacji (znaki specjalne), i zmniejsza powtarzające się spacje do pojedynczej spacji.
Wyjaśnienie:
źródło
Python 2,
191179177173172168160 bajtówTest
źródło
PHP, 116 bajtów
pobiera dane wejściowe ze STDIN; Biegnij z
-nR
.awaria
Możesz zastąpić
@
znakiem backtick, aby obsłużyć spacje w małych literach.Zjabcdefghi0
cyframi możesz także skorzystać:
.źródło
"#_|[^\w ]#"
zamiast tego musisz zmienić kolejność"#[^\w ]|_#"
.Sód , 1156 bajtów
Bardzo długa odpowiedź
źródło
You + Me
produkuje dane wyjściowe-25 15 21 0 0 -13 5
.Dec
kolumnę.)Galaretka , 32 bajty, wyzwanie dla postdate języka
Wypróbuj online!
Wyjaśnienie
Funkcja pomocnicza
1Ŀ
(tłumaczy każdą literę / spację w danych wejściowych na liczbę)Funkcja pomocnicza
2£
(zwraca ciąg stały“jabcdefghi”
)Główny program
źródło
Retina,
7470 bajtów (niekonkurujące)Zwróć uwagę na spację wiodącą w linii 3, spację końcową w linii 6 i pustą drugą linię.
Wypróbuj online!
Chociaż język został stworzony przed wyzwaniem, myślę, że niektóre funkcje językowe, których użyłem po dacie wyzwania, oznaczyłem jako niekonkurujące.
źródło
Java 7,
257254 bajtówWypróbuj tutaj.
Wyjaśnienie:
Przykładowe wejście i wyjście:
źródło