Dwuwymiarowe języki programowania często mają polecenia lustrzane, takie jak /
i \
do przekierowania wskaźnika instrukcji na siatce:
>>>>\
v
v
<<<</
W tym wyzwaniu otrzymasz kierunek i lustro i musisz określić kierunek wychodzenia.
Zasady
Kierunek nadejścia będzie podany jako jeden z znaków, NESW
a lustro podany jako jeden /
lub \
. Możesz otrzymać je w dowolnej kolejności. Musisz używać wielkich liter.
Możesz przyjmować dane wejściowe w dowolnym dogodnym formacie, w tym ciąg dwóch znaków, ciąg znaków, używając separatora między znakami, parę znaków na liście, a nawet parę ciągów singletonów. Jeśli używasz łańcucha z separatorem, separator nie może użyć żadnego ze znaków NWSE\/
.
Dane wyjściowe powinny być znakami NESW
lub ciągami jednoznakowymi.
Możesz napisać program lub funkcję i użyć dowolnej z naszych standardowych metod otrzymywania danych wejściowych i dostarczania danych wyjściowych.
Możesz używać dowolnego języka programowania , ale pamiętaj, że te luki są domyślnie zabronione.
To jest golf golfowy , więc wygrywa najkrótsza ważna odpowiedź - mierzona w bajtach .
Przypadki testowe
Jest tylko 8 możliwych danych wejściowych, które musisz obsłużyć, więc nie ma wymówki, aby nie testować kodu na wszystkich z nich:
N / --> W
N \ --> E
E / --> S
E \ --> N
S / --> E
S \ --> W
W / --> N
W \ --> S
źródło
\
. Jeśli twoją odpowiedzią jest przesłanie funkcji, która pobiera ciąg znaków, wtedy oczywiście będziesz potrzebować\\
kodu źródłowego, aby wywołać go poprawnie, ale jeśli na przykład czytasz dane wejściowe ze standardowego wejścia, powinno to być pojedyncze\
. Innymi słowy, jeśli wywołasz funkcję wejściową odpowiedniej długości łańcucha w swoim języku, wynik powinien zawsze być taki sam, niezależnie od tego, czy dane wejściowe zawierają/
lub\
.readline()
sobie z tym poradzę.Odpowiedzi:
Python,
4038 bajtów-2 bajty dzięki @MitchSchwartz
(ord(d)+ord(m))%8
->ord(d)+ord(m)&7
proste wyszukiwanie odpowiedzi na liście (ciąg znaków AKA) indeksowanej przez najmniejszy mod sumy działających rzędnych.
Przypadki testowe są na ideone
źródło
%8
i robiąc indeks. Potem widzę, że opublikowałeś to samo rozwiązanie ponad godzinę temu. Hah Masz +1.Python 2, 40 bajtów
Sp3000 zapisał jeden bajt (
.index
→.find
).Wyjaśnienie
Chcemy tak mapować kierunki:
Możemy przypisać kierunki 2-bitowe kody i zobaczyć oba przerzuty jako XOR-y dla pierwszego i drugiego bitu:
Mapowanie między łańcuchami bitów i kierunkami odbywa się za pomocą łańcucha
k
. Teraz musimy tylko odwzorować znaki lustrzane'/'
oraz'\\'
na wartości1
i2
. Odtąd'/' < '\\'
moglibyśmy naiwnie używać(m>'/')+1
jako formuły. Ale poczekaj! Leksykograficznie,i do czego
'NWES'
ładnie przypisaliśmyk
! Więc możemy użyć(m>k)+1
zamiast tego.źródło
CJam, 14 bajtów
(@MartinEnder przeniósł moją odpowiedź w języku Python )
W jaki sposób?
Testy odbywają się na aditsu
źródło
JavaScript (ES6),
50414037 bajtówOszczędność 3 kolejnych bajtów dzięki zastosowaniu porównania dzięki odpowiedzi Lynn
Stosowanie
źródło
MATL ,
1917 bajtówWypróbuj online! Lub sprawdź osiem przypadków .
Wyjaśnienie
źródło
Pyth,
171615 bajtówDzięki @Jakube i @Maltysen za -1 bajt każdy
Program, który pobiera dane z dwóch ciągów cudzysłowu oddzielonych znakiem nowej linii, najpierw kierunek, a następnie odbicie lustrzane i wypisuje wynik.
To jest port odpowiedzi na Python @ Lynn .
Wypróbuj online
Jak to działa
źródło
<QE
go>E
.05AB1E , 14 bajtów
Wypróbuj online!
źródło
Galaretka ,
14 1312 bajtów(port mojej odpowiedzi w Pythonie )
-1 bajt dzięki @MartinEnder (dodaj spację na końcu łańcucha i usuń potrzebę modulo 8)
-1 bajt dzięki @LuisMendo (weź jeden argument ciągu zamiast dwóch)
W jaki sposób?
Przetestuj na TryItOnline
źródło
Java 7,
717068 bajtówSzkoda
charAt
iindexOf
zajmuje tyle bajtów ...Nieskluczone i wszystkie przypadki testowe:
Wypróbuj tutaj.
Wydajność:
źródło
Python,
636159 bajtówDość proste. Zdecydowanie można golfa więcej. Decyduje, czy dodać 1 czy -1 do indeksu wejścia w
'NESW'
.To jest wyrażenie lambda; aby z niego skorzystać, należy go poprzedzić
f=
.Ideone to!
źródło
Java 8,
625856 bajtówNie testowany program testowy
źródło
PowerShell v2 +, 34 bajty
Bierze dane wejściowe jako dwa jawne
char
s, wyniki achar
.Działa to w następujący sposób: Jeśli sortujemy dane wyjściowe, chcemy
S
/
w jakiś sposób równać się z tymN
\
,W
/
aby być równymE
\
itp. Lub przynajmniej produkować liczby, które są „wystarczająco blisko”, a jednak nadal różnią się między sobą. Jeśli spojrzymy na wartości ASCII, otrzymamy tabelę taką jak poniżej:Uruchomienie szybkiego brute-forcera w kolumnie podsumowań (pochodzącej ze zsumowania punktów kodu ASCII danych wejściowych) pokazuje, że jeśli weźmiemy sumę modulo
8
, otrzymamy następujące2 2 | 6 1 | 3 4 | 5 7
. Dowodem na to, że w ciągu"xNESSWNW"
, coE
jest wskaźnikiem2
,N
jest6
i1
, i tak dalej.Musimy więc tylko zsumować dane wejściowe (pośrednio rzutując od
char
doint32
), wziąć to%8
i użyć do indeksowania w naszym ciągu.Przypadki testowe
źródło
Partia, 111 bajtów
Akceptuje np. Dwuznakowy
W/
parametr wiersza poleceń.\
I/
zrobić pętlę niewygodne; zajęłoby 124 bajty.źródło
\r
z tego?Oktawa, 30 bajtów
Używał tej samej kolejności argumentów co Jonathan Allan.
Pobiera dane wejściowe jako ciąg dwóch znaków
'W\'
.Wypróbuj online .
źródło
'NESSWNW 'is)
(zobacz wszystkie przypadki testowe ).i
jestinput
,s
jestsum
i)
indeksuje, który jest modułowy. Dodałem spację w ciągu, aby modulo miało wartość 8C,
44,35,34 bajtówWymaga dwóch znaków jako dwóch zmiennych. Zajmuje zarówno małe, jak i wielkie litery. Używa wielu manipulacji bitowych. Fragment
a&a/2
daje wartość, która ma unikalne wartości dla dwóch niższych bitów,&3
odcina wszystkie wyższe bity. Użyto go jako indeksu w ciągu „NWES” dla\
lustra. Na szczęście dwa dolne bity znaków ASCII\
oraz/
odpowiednio 00 i 11, są idealne dla XOR z wyżej wymienionym indeksem, aby uzyskać właściwy kierunek dla/
zwierciadła.źródło
return"NWES"[...]
(pomiń spację).CJam , 17 bajtów
Wejście jest oddzielone spacją.
Wypróbuj online! (Jako pakiet testowy oddzielony od linii).
To jest rozwiązanie, które znalazłem przed opublikowaniem wyzwania. Nie tak krótki jak cykliczne indeksowanie Jonathana, ale pomyślałem, że to podejście jest dość interesujące (i nowatorskie).
Wyjaśnienie
Celem jest użycie transliteracji (tj. Użycie odwzorowania między znakami) w celu zastąpienia znaku wejściowego znakiem wyjściowym. Aby to zrobić, musimy wybrać poprawną mapę w oparciu o to, czy lustro jest
/
czy\
. Zmapujemy zSWEN
listy na inną, którą wybieramy warunkowo. Jeśli lista wejściowa toSWEN
, dwie mapy wyjściowe muszą być następujące:Zauważ, że są one posortowane i posortowane odwrotnie (dlatego wybraliśmy pozornie losową
SWEN
kolejność jako zestaw danych wejściowych). Możemy je wygenerować, sortując listę danych wejściowych i odwracając wynik, jeśli dane wejściowe mają\
, ale istnieje lepszy sposób:źródło
SED
48(42 + 1 dla -r) 43Oszczędności 5 dzięki Martinowi Enderowi ♦
Pobiera dane wejściowe jako ciąg dwóch znaków.
źródło
Mathematica, 98 bajtów
Funkcja anonimowa. Pobiera dwa łańcuchy jako dane wejściowe i zwraca łańcuch jako dane wyjściowe.
źródło
C, 81 bajtów
Stosowanie
Wydajność:
źródło
Pyth, 13 bajtów
Zestaw testowy
Zsumuj punkty kodowe, indeks modułowy, skompresowany ciąg.
źródło
TI-Basic, 40 bajtów
Zakoduj wejścia. Nudna, ale najkrótsza droga.
źródło