Wyzwanie
Biorąc pod uwagę dowolną listę 2-krotek i jednego elementu w jednym z tych krotek, wypisz „partnera”, tzn. Dane a
i [(i,j),...,(a,b),...,(l,m)]
, wyjście b
. Możesz założyć, że wszystkie krotki są unikalne i że wszystkie elementy w krotkach są łańcuchami. Dalej zakładamy, że nie masz obu (x,y)
i (y,x)
.
Przypadki testowe
Input Output
[("(", ")"), ("{", "}"), ("[", "]")], "}" "{"
[("I'm", "So"), ("Meta", "Even"), ("This", "Acronym")], "Even" "Meta"
[("I", "S"), ("M", "E"), ("T", "A")], "A" "T"
[("test", "cases"), ("are", "fun")], "test" "cases"
[("sad", "beep"), ("boop", "boop")], "boop" "boop"
Wygrywa najmniej bajtów!
code-golf
array-manipulation
search
Nate Stemen
źródło
źródło
[a, b, c, d]
zamiast[(a, b), (c, d)]
. Ogoliłoby to tonę bajtów mojej odpowiedzi. : P(a,a)
i powiedziano mi, że to się nie stanie . Nate następnie nawet zredagował pytanie, aby sprecyzować ten fakt. Dodałeś jednak przypadek testowy z takim wpisem i zredagowałeś specyfikację odwracając tę decyzję - dlaczego? Złamał wiele odpowiedzi.Odpowiedzi:
Japt, 6 bajtów
Działa z ciągami lub liczbami całkowitymi.
Sprawdź to
Wyjaśnienie
Domniemane wprowadzanie tablicy
U
i łańcucha / liczby całkowitejV
.Pobierz pierwszy element (podtablicę) z
U
tego ...Zawiera
V
.Usuń
V
i niejawnie zwróć wynikową tablicę jednoelementową.źródło
f
zamiastæ
w tym czasie. Duh: Pæ
i próbuję się z tym pogodzićf
! : DHaskell , 33 bajty
Wypróbuj online!
Definiuje operator binarny
!
, który jako lewy argument przyjmuje wartośćx
typu τ, a jako prawy argument listę krotek (τ, τ). Wzór definicji pasuje do nagłówka(a,b)
i ogonac
podanej listy; jeślix==a
tob
zostanie zwrócone; jeślix==b
następniea
zostanie zwrócone, a w przeciwnym razie będziemy przeglądać resztę listy przez rekurencję.(Jeśli na liście nie ma „partnera”, nastąpi awaria, ponieważ nie zdefiniowaliśmy, co
x![]
powinno być.)źródło
JavaScript (ES6), 39 bajtów
Traktuje wpis i tablicę tablic jako argumenty curry. Najlepsza nierekurencyjna wersja, jaką mogłem zrobić, to 44 bajty:
źródło
a=>b=>a.map(e=>b=e[1-e.indexOf(b)]||b)&&b
(a,b)=>
=>a=>b=>
, ale wersja nierekurencyjna rozpoczęła się od wersji rekurencyjnej, która była curry, ponieważ mogłem zaoszczędzić 2 bajty na rekurencyjnym wywołaniu (samo curry faktycznie kosztuje bajt).MATL ,
41456 bajtówWypróbuj online!
Dane wejściowe to tablica jak
[{a;b},{c;d}]
. Liczba bajtów zmienia się silnie, podczas gdy OP zastanawia się, co jest faktycznie dozwolone.Zacząłem od 4-bajtowej wersji, która mogła obsługiwać tylko ciągi jednoznakowe, co było jedynym testem w oryginalnym wyzwaniu. Kiedy okazało się to nieważne, stworzyłem bardzo długą 14-bajtową wersję, która była ładna i zhackowana (sprawdź historię wersji!), Kazała mi odkryć błąd, a następnie okazała się całkowicie niepotrzebna, ponieważ
Y=
z odpowiednim wejściem , działał tak samo dobrze, jak mój oryginalny 4-bajtowyy=P)
.źródło
Python 2 , 37 bajtów
Wypróbuj online!
Proton , 31 bajtów
Wypróbuj online!
(Te dwie odpowiedzi są tak podobne, że zamieszczam je razem, aby uniknąć ponownej instalacji)
źródło
reversed
nareverse
w Proton na -1 bajt. \ s: P Mówiąc poważniej, czyreverse
jest o wiele lepsze imię, nie? : PPerl 5 , 30 + 1 (-p) = 31 bajtów
Wypróbuj online!
źródło
Python 2 ,
594542 bajtów-14 bajtów dzięki Emignie. -3 bajty dzięki Maltysen.
Wypróbuj online!
Nadal chcę jednak używać curry. ; -;
źródło
y+[1,-1][y%2]
. Po prostu nie sądziłem, że to trochę bitowe ... Dzięki!C ++, 179 bajtów
C ++ z typem mapy, 162 bajty
W MSVC kod kompiluje się, nawet jeśli ostatnia
return
instrukcja (return"";
) zostanie pominięta. Sprawia, że kod 9 bajtów jest lżejszy, ALE wychodzenie z końca funkcji (tj. Nie wychodzenie przezreturn
instrukcję w pętli) bez instrukcji return spowoduje niezdefiniowane zachowanie i nie będzie działać, jeśli tablica krotek nie zawiera elementu „klucz”źródło
PowerShell, 36 bajtów
znajduje element zawierający intput, a następnie pobiera element „inny”, wykluczając z niego dane wejściowe, PowerShell nie ma najbardziej niesamowitego zarządzania tablicą, ale może istnieć wbudowana funkcja, której nie jestem świadomy.
źródło
("boop", "boop")
przypadku testowym.Röda , 30 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Mathematica
2724 bajtówCases
wybiera elementy listy pasujące do wzorca. W połączeniu ze strzałką elementy pasujące do wzorów można przekształcić.Stosowanie:
Objaśnienie: W tym przykładzie po napotkaniu pierwszego argumentu 3, funkcja,
Cases[{3,x_}|{x_,3}:>x]
która jest formą operatoraCases
, jest następnie stosowana do drugiego argumentu,{{1, 2}, {3, 4}}
wybierając w ten sposób towarzysza 3, niezależnie od tego, czy znajduje się on w pozycji odciętej, czy rzędnej. W szczególności funkcja ta wyświetli listę wszystkich towarzyszy, jeśli w rzeczywistości pierwszy argument pojawia się więcej niż raz w drugim argumencie, innymi słowy, wykracza to nieco poza założenia zadanego pytania.Glify otaczające muszą być nawiasami klamrowymi. Zapisano 3 bajty z sugestią „Currying” z @Notatree
źródło
Cases[{#,x_}|{x_,#}:>x]&
używane jak%[3][{{1,2},{3,4}}]
R , 47
42bajtówWypróbuj online!
Działa na macierzy lub na prostym wektorze. v = wartość wyszukiwania, a = tablica krotek.
źródło
Galaretka , 6 bajtów
Dyadyczny link prowadzący do listy partnerów po lewej i utraconego partnera po prawej i zwracający partnera.
Wypróbuj online!
W jaki sposób?
źródło
(a,a)
i powiedziano mi, że nie musimy sobie z tym poradzić). Jestem pewien, że mógłbym to naprawić, ale nie jestem pewien, czy specyfikacja jest zgodna z zamierzeniem.Pyth -
1198 bajtówWypróbuj online tutaj .
źródło
Haskell ,
6562 bajtówWypróbuj online!
Wyjaśnienie
Używa span, aby znaleźć pierwszą instancję, w której
x
znajduje się krotka. Następnie chwyta pierwszy element krotki, jeśli nie jest równy, a drugi w przeciwnym razie.Haskell Lambdabot,
5956 bajtówWypróbuj online!
Wyjaśnienie
Korzysta z funkcji
Data.List
s,first
aby zmniejszyć liczbę używanych bajtów(!!0).snd.span
, ponieważfirst
zwraca wartość,Maybe
którą musimy dodaćJust
do dopasowania wzorca w#
.źródło
x!((a,b):c)|x==a=b|x==b=a|1<2=x!c
ma 33 bajty.05AB1E , 7 bajtów
Wypróbuj online!
Alternatywne rozwiązanie 7-bajtowe
Wypróbuj online!
źródło
˜D²k>è
dla 6, chyba że istnieje konkretny powód XOR'ingu z 1?Common Lisp, 74 bajty
Wypróbuj online!
źródło
Java 8, 78 bajtów
Lambda (curry) od
Stream<List<String>>
do lambda odString
doString
(chociaż zdarza się, że niejawne pisanie pozwala na to, aby działało to na dowolnych listach). W języku nie ma dedykowanych klas krotek i nie znam ich w standardowej bibliotece, więc pary wejściowe są reprezentowane jako listy. Można przypisać doFunction<Stream<List<String>>, Function<String, String>>
.Wypróbuj online
Poświęcę oszczędność ostatnich 6 bajtów każdemu, kto może mnie przekonać, że zwrócenie an
Optional
jest ważne. Nie byłem w stanie się przekonać.Jedną z interesujących części tego rozwiązania było dla mnie określenie najtańszego sposobu uzyskania wyjścia ze strumienia. Rozważyłem
reduce
,findFirst
imin
/max
, ale żaden nie był krótszy niż intuicyjnyfindAny
.źródło
Ruby, 31 bajtów
Zwraca tablicę singletonów.
źródło
JavaScript (ES6), 45 bajtów
Przyszedł do mnie wczoraj, a potem zauważył, że Neil pobił mnie do lepszego rozwiązania JS; pomyślałem, że i tak mogę to opublikować.
Działa z ciągami i liczbami całkowitymi.
źródło
Prolog (SWI) , 43 bajty
Wypróbuj online!
źródło
C # (.NET Core) ,
101100 + 18 bajtówdziękuję Grzegorzowi Puławskiemu za zmniejszenie kilku bajtów.
Wypróbuj online!
C # (.NET Core),
122121120 bajtówWypróbuj online!
źródło
x=>y=>
jest krótszy niż(x,y)=>
(Func<a, b, c>
staje sięFunc<a, Func<b, c>>
if(a, b)
staje się wywołanie funkcjif(a)(b)
) - Świetna odpowiedź btw!using System.Linq;
porównaniunamespace System.Linq{}
)Łuska , 10 bajtów
Wypróbuj online!
Niegolfowane / Wyjaśnienie
Uwaga : powyższy przykład działa na liczbach całkowitych tylko ze względu na czytelność, sam typ nie ma znaczenia (o ile można go porównać).
źródło
Swift 4 , 43 bajty
Dane wyjściowe to tablica, która jest albo pusta (nie znaleziono partnera), albo ma pojedynczy element (partner).
Przypadki testowe:
źródło
QBIC , 30 bajtów
QBIC nie jest silny na listach i krotkach. Powyższy kod przyjmuje
a
jako parametr wiersza poleceń, a następnie pyta o dane wejściowe użytkownika parami dla krotek. Gdy podany jest pusty element, jest on generowanyb
.Przykładowy przebieg
Wyjaśnienie
Alternatywna wersja, 22 bajty
Zasadniczo działa to tak samo jak dłuższa wersja, ale natychmiast kończy pracę, gdy znajdzie dopasowanie. Wymieniłem to jako alternatywę, ponieważ nie możesz wprowadzić wszystkich krotek do tego programu, biorąc pod uwagę, że kończy się wcześnie.
źródło
Mathematica, 50 bajtów
Wypróbuj online!
źródło
{'boop','boop'}
testowego.Skumulowane , 21 bajtów
Wypróbuj online! To pobiera dane wejściowe ze stosu i pozostawia dane wyjściowe na stosie. Po rozwinięciu wygląda to następująco:
Wyjaśnienie
Weźmy
(('sad' 'beep') ('boop' 'boop'))
i'boop'
jako dane wejściowe. Następnie taka tablica jest konstruowana przez:$revmap,
:Oznacza to, że kopia tablicy jest odwzorowana, każdy element jest odwrócony, a oba są łączone razem.
KeyArray
z kolei tworzy hasz z podanych wartości, takich jak:Następnie
\
umieszcza szukany ciąg na górze stosu i uzyskuje klucz z tablicy KeyArray, która pasuje do#
. Zwraca tylko jedną wartość, więc nie trzeba się martwić o zduplikowany klucz w tablicy kluczy.Inne podejścia
32 bajty: (wejście ze stosu, wyjście do STDOUT)
[@x:$revmap,uniq[...x=$out*]map]
36 bajtów:
{%x[y index#+]YES 0# :y neq keep 0#}
38 bajtów:
[@x:$revmap#,[KeyArray x#]map:keep 0#]
46 bajtów:
[@x:KeyArray\$revmap KeyArray,[x#]map:keep 0#]
źródło
Excel, 18 bajtów
Anonimowa formuła skoroszytu programu Excel, która przyjmuje dane wejściowe jako
<Lookup Value>
z zakresuA1
,<Key Array>
z zakresuB:B
i<Def Array>
z zakresuC:C
i przekazuje wartość definicji powiązanej z wartością wyszukiwania do komórki wywołującejPróbki we / wy powinny być uwzględnione, jeśli to możliwe
źródło