Biorąc pod uwagę dwa ciągi, znajdź tabelę translacji ( szyfr podstawienia ) między nimi, jeśli tłumaczenie nie jest możliwe, wyślij false. Odpowiedź należy zminimalizować i utworzyć od lewej do prawej. Pierwszym tłumaczonym znakiem między słowami musi być pierwszy w tabeli tłumaczeń. Oprócz tego żaden list, który nie został przetłumaczony (w tym samym miejscu, w którym był pierwotnie), NIE powinien znajdować się w tabeli tłumaczeń.
Prawdopodobnie najłatwiejszy do zdefiniowania za pomocą przykładów:
Ważne przypadki
"bat", "sap" => ["bt","sp"]
Zwróć uwagę na kolejność, wynik ["tb","ps"]
nie jest prawidłowy dla tego wyzwania.
"sense", "12n12" => ["se","12"]
Zauważ, że n
nie jest przetłumaczone, ponieważ jest to relacja 1 do 1.
"rabid", "snail" => ["rabd","snal"]
Zauważ, że i
nie jest przetłumaczone, ponieważ jest to relacja 1 do 1.
"ass", "all" => ["s","l"]
A nie jest uwzględnione, pozostaje takie samo, s
może zostać odwzorowane na podstawie l
dopasowania wzorca.
"3121212", "ABLBLBL" => ["312","ABL"]
Idealnie pasuje do wzoru.
Falsy Cases
"banana", "angular" => false
(nie tej samej długości, niemożliwe).
"animal", "snails" => false
(każdego znaku można użyć RAZ tylko po każdej stronie tłumaczenia).
"can","cnn" => false
(n jest domyślnie używane w tłumaczeniu, dlatego zdefiniowanie tabeli translacji za pomocą n-> a byłoby niepoprawne)
Tak więc, [aimal,sails]
jest to nieprawidłowa odpowiedź, czyniąca to fałsz.
"a1", "22" => false
Patrz „zastrzeżenia”, jest to wymienione jako fałsz. W tym przypadku, to dlatego, a
i 1
nie mogą oba mapowania 2
. (Każda postać może być użyta RAZ tylko po każdej stronie tłumaczenia).
Ta odpowiedź wydaje się być dobrym punktem odniesienia: /codegolf//a/116807/59376
Jeśli masz pytania dotyczące funkcjonalności dwóch niepublicznych par słów, przejdź do tej implementacji.
Zasady we / wy
- Dane wejściowe mogą być w postaci tablicy 2-elementowej lub 2 osobnych danych wejściowych.
- Dane wyjściowe mogą być rozdzielane tablicą lub znakiem nowej linii / spacji, podobnie jak to pokazano.
- Fałszywe wyjście może wynosić 0, -1 lub fałsz. Błąd / puste wyjście również jest w porządku.
- Masz gwarancję, że
a
nie będą równeb
i ania
nieb
będą puste. a
ib
są sekwencjami liter tylko do wydruku ASCII.
Ostrzeżenia
- Tłumaczenia muszą odbywać się od lewej do prawej, patrz przykład 1.
- Nie wolno wyprowadzać znaków, które pozostają takie same.
- Twój program może przyjmować tylko dwa ciągi
a
ib
. - Każda postać może być użyta RAZ tylko po każdej stronie tłumaczenia. To sprawia, że tłumaczenie
snails
jestanimals
niemożliwe. - Rekurencyjne zamiany nie powinny wystąpić. Przykład zamiany rekurencyjnej:
"a1","22"->[a1,12]
gdzie a jest najpierw zastępowane przez 1, wówczas oba wynikowe 1 są zastępowane przez 2. To nie jest poprawne, zakładamy, że wszystkie tłumaczenia odbywają się niezależnie od siebie, co oznacza, że jest to fałsz. Znaczenie: „a1” z tabelą translacji [a1,12] przyjmuje wartość 12 (nie 22)
źródło
Odpowiedzi:
JavaScript (ES6), 128 bajtów
źródło
ass
iall
powinno byćs,l
.JavaScript (ES6),
108107105106 bajtówEdycja : Naprawiono w celu obsługi danych wejściowych takich jak
"22" / "a1"
fałsz.Zwraca jeden
0
lub tablicę dwóch ciągów.Sformatowane i skomentowane
Przypadki testowe
Pokaż fragment kodu
źródło
f('22')('a1')
też powinien być fałszywy.PHP> = 7,1, 130 bajtów
18 bajtów zapisanych przez @Titus
Przypadki testowe
Rozszerzony
PHP> = 7,1, 148 bajtów
wypisuje 0 dla false Wypisuje true jako łańcuch
Przypadki testowe
Rozszerzony
PHP> = 7,1, 131 bajtów
Drugą odpowiedź można skrócić, jeśli dozwolone są tablice asocjacyjne
wypisuje 0 dla false Wypisuje true jako tablicę asocjacyjną zamiast ciągu
Przypadki testowe
PHP> = 7,1, 227 bajtów
drukuje 0 dla fałszu
Przypadki testowe
Rozszerzony
źródło
array_values()
wewnątrzjoin()
jest całkowicie bezużyteczny i można go upuścić.a1 22 => false
przypadku testowym. Ponadto twój pierwszy program nie działa w testerze online.($p=$x[$i])==$o?:$k[$c[$p]=$o]=$p;
w pętli i$y==strtr($x,$c)
na pierwszy test.Galaretka , 18 bajtów
Nienazwany link monadyczny (funkcja jednego wejścia) pobiera listę, która zwraca:
pobiera pustą listę w przypadkach falsey; lub
listę zawierającą dwie listy znaków w prawdziwych przypadkach.
Wypróbuj online! (stopka dzieli listę spacją, aby uniknąć wydrukowania reprezentacji wygładzonej)
... lub zobacz a pakiet testowy .
W jaki sposób?
źródło
Retina ,
194191185229225241 bajtówWypróbuj online!
Oddziela dane wejściowe
;
. Wyjście jest również;
oddzielone. Fałszywe dane wejściowe są oznaczone pustymi wyjściami.Wiem, że to boleśnie gadatliwe, wciąż próbuję zmniejszyć bajty. Większość tych bajtów służy do usuwania fałszywych danych wejściowych.
Edycje
Okazuje się, że mój program miał znaczną wadę. Zostało to naprawione teraz, ale kosztem ponad 40 bajtów.
Znalazłem kolejny błąd, w którym mój program nie zadeklarował danych wejściowych jako
a1;22
fałszywych, ale po naprawieniu byłem w stanie utrzymać program poniżej 250 bajtówWyjaśnienie
(bardziej szczegółowe wyjaśnienia będą dostępne wkrótce)
Najpierw musimy sprawdzić, czy długości sznurków
a
ib
są takie same czy nie. Jeśli nie są, usuwamy wszystko.Duplikuje dane wejściowe, aby zachować je podczas wykonywania testów długości.
Teraz w pętli usuwamy pierwszy znak
a
i pierwszy znak,b
aż jeden z ciągów stanie się pusty.Teraz są możliwości dla „przestrzeni wzorów”.
;;abc
Oba ciągi mają jednakową długośćdef;;abc
a
jest dłuższy niżb
;def;abc
b
jest dłuższy niża
Teraz musimy opróżnić dane wejściowe, jeśli ciągi nie są tej samej długości (scenariusze 2 i 3). To właśnie robi poniższe podstawienie. Usuwa tekst pasujący do scenariuszy 2 i 3.
To usuwa znaki, które nie są transliterowane w ciągach
a
ib
.abc;1b2
=>ac;12
Następnie musimy usunąć zduplikowane znaki.
sese;1212
=>se;12
, ale zachowuje dane wejściowe takie jakaba;123
Na koniec usuwamy dane wejściowe, jeśli istnieją zduplikowane znaki, które są odwzorowane na różne znaki, takie jak
aba;123
luba1;22
.I wreszcie usuń zduplikowane znaki.
źródło
(?(1)(?!))
czego nauczyłem się z twojej odpowiedzi :);
.Galaretka ,
2826 bajtówWypróbuj online!
źródło
Rubin, 133 bajty
Wypróbuj online!
Bardziej czytelnie:
Tylko dla kopnięć, oto wersja 84-bajtowa w Gorubach, którą jest Ruby, ale z flagą golfową ustawioną podczas kompilacji interpretera. Między innymi pozwala skracać wywołania metod do ich najkrótszego unikalnego identyfikatora.
źródło
Python 2 ,
198,193,189,182,179,175,169,165 bajtówWypróbuj online!
-4 bajty! dzięki mbomb007 za sugerowanie użycia tabulacji zamiast spacji.
zmodyfikowałem format wejściowy, ponownie dzięki mbomb007.
źródło
Python 3.6,
211185181178 bytesExits with an error for falsy results.
This requires Python 3.6, which you can run in a shell here.
You can test it without the correct output ordering on TIO here. (TIO doesn't have 3.6).
Ungolfed:
If only order didn't matter...
źródło
a1,12
returna1,12
instead ofFalse
? Under the Caveats section it is said that "a1" with translation table of [a1,12] evaluates to 12.False
.1a 21
would also be wrong, as the oeder has to be preserved.a1,12
instead ofa1,22
.Röda,
108119 bytesTry it online!
This is a function that takes two lists of characters from the stream and pushes two lists to the stream.
This could be sorter if I was allowed to return pairs.
Explanation (out-dated):
Here's an underscore solution that contains no variables (114 bytes):
That's a lot of underscores.
źródło
<>
do?a() <> b()
is same asinterleave([a()], [b()])
(or justinterleave(a, b)
, ifa
andb
are arrays).a1 22 => false
test case. "all translations occur independent of each other, meaning this is falsy."AWK, 140 bytes
Usage: Place code in
FILE
then:The input strings need to be whitespace separated.
The output is empty if they fail, or 2 strings separated by a space.
źródło
k, 28 bytes
Explanation:
źródło
APL (Dyalog) with AGL, 22 bytes
Try it online!
{
…}
anonymous function:If…
⍺⍵
the arguments⍳⍨¨
when self-indexed (i.e. the first occurrences of their elements in themselves)≡/
are equivalent:
then:⍺(
…)⍵
apply the following tacit function to the arguments:,¨
concatenate corresponding elements (errors on mismatching lengths)é
then filter by (é
is just the primitive function/
)≠
where the strings are different∪
unique (remove duplicates)↓⍉↑
transpose list-of-pairs to pair-of-lists (lit. mix into table, transpose table, split into lists)else, do nothing
źródło
↓⍉↑
still has me a little confused.CJam, 38 bytes
Input and output are arrays on the stack.
źródło
PHP (>=7.1), 165 bytes
prints
0
for falsy, associative array else. Run with-r
or test it online.breakdown
źródło
Output can be as an array or ...
, so I´d say yes. Current PHP version is implicit for all my postings; but if I find something important to edit, I´ll add the version.array_unique($r)!=$r
is in every casearray_unique($r)<$r
I will upvote your post alone for this trick. In the moment I am searching for an explanationarray_unique($t)<$t
(had to change that becausecan
tocnn
is invalid) works, because array comparison (unlike string comparison) compares lengths before anything else.can
tocnn
cost me 17 Bytes Forget my suggestion