Pisząc wiadomość za pomocą magnesów na lodówkę, często zdarza się, że zamieniasz ją 1
na I
. W tym wyzwaniu Twoim celem jest sprawdzenie, czy wiadomość można napisać przy użyciu liter innej wiadomości. Dozwolone podstawienia to:
A = 4
B = 8
C = U
E = M = W = 3
G = 6 = 9
I = 1
L = 7
N = Z
O = 0
R = 2
S = 5
Na przykład, wiadomość CIRCA 333
może zostać zmieniona na pisownię ICE CREAM
, gdzie pierwsze dwa 3
s są obracane o 180 stopni, aby uzyskać dwa E
s, a ostatnie 3
jest obracane o 90 stopni przeciwnie do ruchu wskazówek zegara, aby zrobić M
. Białe wiadomości mogą być zawarte w wiadomościach, ale nie powinny być uwzględniane w twoim rozwiązaniu, ponieważ są tworzone przez umieszczenie magnesów na lodówce.
Wkład
Dwa ciągi (lub tablice znaków). Wszystkie wiadomości będą pasować^[A-Z0-9 ]+$
Wydajność
Prawda, jeśli dwa ciągi wejściowe są poprawnymi wzajemnymi układami, w przeciwnym razie falsey.
Przykłady
["CIRCA 333", "ICE CREAM"] => true
["DCLV 00133", "I LOVE CODE"] => true
["WE ARE EMISSARIES", "33 423 3315542135"] => true
["WE WANT ICE CREAM", "MET CIRCA 334 MEN"] => true
["I HAVE ICE CREAM", "HAVE 2 ICE CREAMS"] => false
Bardziej realistyczne przykłady
To są wszystkie 15+ literowe słowa, które odwzorowują na inne słowo. Niektóre są trywialnymi zamiennikami, ale zawarłem wszystko, co znalazłem.
["ANTHROPOMORPHISE","ANTHROPOMORPHISM"]
["ANTIPHILOSOPHIES","ANTIPHILOSOPHISM"]
["CIRCUMSTANTIALLY","ULTRAMASCULINITY"]
["DECENTRALIZATION","DENEUTRALIZATION"]
["DIMETHYLNITROSAMINE","THREEDIMENSIONALITY"]
["INSTITUTIONALISE","INSTITUTIONALISM"]
["INTERCRYSTALLINE","INTERCRYSTALLIZE"]
["INTERNATIONALISE","INTERNATIONALISM"]
["OVERCENTRALIZATION","OVERNEUTRALIZATION"]
["OVERCENTRALIZING","OVERNEUTRALIZING"]
["PREMILLENNIALISE","PREMILLENNIALISM"]
["TRANSCENDENTALIZE","TRANSCENDENTALIZM"]
Ponieważ jest to wyzwanie dla golfa, wygrywa najkrótsze rozwiązanie! Przyjmę najkrótsze rozwiązanie w ciągu 7 dni od opublikowania. Miłej gry w golfa!
Związane z
EDYCJA : Popełnił błąd w podstawieniach, miał G = 6
i 6 = 9
jako oddzielne podstawienia, połączył je w jedno.
T
iL
nie można ich wymienić, nie mogę dodaćT = 7
. To samo dotyczyN = Z = 2
, co implikuje toN = Z = R = 2
. Jednak proponowane przez Ciebie zmiany podstawiłyby trudniejszą wersję tego wyzwania, którą mogę opublikować później. Chciałem tylko sprawdzić, czy tego rodzaju wyzwania zostałyby najpierw dobrze przyjęte.false
.Odpowiedzi:
Japt ,
38363330 bajtówPobiera dane wejściowe jako tablicę 2 ciągów znaków.
Wypróbuj lub uruchom wszystkie przypadki testowe
3 bajty zapisane dzięki ETHProductions
źródło
r¶
na końcu, aby zaoszczędzić 3 bajty.Python 2 ,
145131130129125 bajtówWypróbuj online!
Alt:
Python 2 , 125 bajtów
Wypróbuj online!
źródło
Ruby ,
997271 bajtówWypróbuj online!
Pobiera tablicę ciągów, przyjmuje dane pisane wielkimi literami, jak we wszystkich przypadkach testowych.
-1 bajt golfowany przez benj2240.
źródło
!
aby uratować bajtJavaScript (ES6),
102100 bajtówPobiera dane wejściowe jako dwie tablice znaków w składni curry
(a)(b)
. Zwraca wartość logiczną.Wypróbuj online!
W jaki sposób?
Używając funkcji pomocniczej g () , dla każdego wejścia s :
Cyfry od 0 do 8 oraz litery X , Y i Z pozostają niezmienione. Cała reszta jest wyraźnie przetłumaczona.
Kod:
Sortujemy postacie (na początku wszystkie spacje), łączymy je i usuwamy wszystkie wiodące białe znaki.
Kod:
Na koniec porównujemy oba wyniki.
źródło
Retina 0.8.2 , 42 bajty
Wypróbuj online! Pobiera dane wejściowe w osobnych wierszach, ale Link zawiera przypadki testowe i nagłówek. Wyjaśnienie:
Zamapuj wszystkie litery na minimalny zestaw, usuwając spacje.
Posortuj każdy ciąg w kolejności.
Porównaj dwie wartości.
źródło
APL (Dyalog Unicode) , 49 bajtów SBCS
-1 dzięki ngn.
Anonimowa ukryta funkcja prefiksu.
Wypróbuj online!
⎕R
PCRE R eplace:'UMWZ '
te pięć znaków⎕D,
poprzedzonych cyframi,¨
osobno (każdy z nich tworzy ciąg, a nie pojedynczy znak)z:
⊂⍬
nic'OIREASGLBGCEEN',
poprzedzonego tymi znakami(
…)
Zastosuj do tego następującą milczącą funkcję:(
…)¨
Zastosuj następującą milczącą funkcję do każdego:⊂
załączyć (traktować jako całość)⍋⌷¨
użyj każdego z indeksów, który by go posortował, aby zindeksować cały ciąg (sortowanie)≡/
czy są identyczni? (lit. zmniejszenie dopasowania)źródło
''
->⍬
Python 2 , 108 bajtów
Wypróbuj online!
Istnieją 23 klasy równoważności znaków. Używając ciągu 36 znaków
'85930A4614012B3C4D5EF6378GH9AI2J3KL7'
, mapujemy każdy znak na jego klasę równoważności (ignorując spacje), a następnie sortujemy wynikową tablicę. Dwa ciągi znaków są równoważne, jeśli powstałe listy są równe.źródło
Java 10,
262260258216208174 bajtów-2 bajty dzięki @Arnauld .
-76 bajtów dzięki @ OlivierGrégoire .
Wypróbuj online.
Wyjaśnienie:
źródło
"A4B8CUEMEWE3G6G9I1L7NZO0R2S5".split("(?<=\\G.{2})")
wydaje się działać ... chociaż nie jestem nawet pewien, jak dokładnie. : p{2}
może być.
na kolejne -2 bajty. Nie jestem też w 100% pewien, jak to działa. Wiem, że(?<= ... )
służy do dzielenia, ale zachowuję ogranicznik końcowy na element . Ale jestem trochę zdezorientowany, dlaczego(?=\\G..)
(kontynuuj ogranicznik) nie działa w tym zakresie. A także tak naprawdę nie wiem, jak działa\\G..
vs..
w tym podziale. Zobaczę, czy mogę gdzieś to rozgryźć, bo nie jestem ciekawy. ; p Dziękujemy w obu przypadkach za zapisane bajty. Trzeba pamiętać o\\G
dzieleniu na bloki o równej wielkości. :)(?<=\\G..)
wewnątrz podziału, zadałem pytanie StackoverFlow, które rzuciło nieco światła. Zasadniczo jest to niezdefiniowane zachowanie działające inaczej w prawie każdym języku. Chociaż\G
w Javie ma zerową długość, z pozytywnym spojrzeniem za siebie w podziale, niejako koliduje z obiema regułami, powodując zachowanie, które tutaj widzimy. Dla mnie nadal jest to trochę niejasne, ale przynajmniej zaoszczędziło 4 bajty w tej odpowiedzi. ;)R , 123 bajty
Wypróbuj online!
utf8ToInt
konwertuje ciąg znaków na wektor punktów kodu Unicode.ale to nie pomaga tutaj, ponieważ mam do czynienia z liczbami całkowitymi, a nie logicznymi.!sd(a-b)
jest o jeden bajt krótszy niż,all(a==b)
źródło
!any
zamiast tego,!sd
ponieważ elementy mogą być wszystkie równe, ale do 1. Spróbuj:f(list("BCDEF","ABCDE"))
J , 56 bajtów
Wypróbuj online!
Wyjaśnienie:
&
zarówno dla argumentów lewego, jak i prawego-.&' '
usuwa spacje z wejścia,rplc
zastępuje'0123456789UMWZ';"0'OIREASGLBGCEEN'"1
znaki na wejściu poprzez zastąpienie znaków w lewej kolumnie znakami w prawej: (tutaj transponowano dla zaoszczędzenia miejsca)/:~@
i sortuje powstałe ciągi-:
czy posortowane ciągi są równe?Moje wstępne rozwiązanie:
J ,
7773 bajtówWypróbuj online!
Wyjaśnienie:
(' '-.~])
usuwa spacje z obu argumentów ie."1
sprawdza każdą postać pod kątem członkostwa w poniższej tabeli:[:(,a.,.@-.,)'EMW3','G69',9 2$'A4B8CUI1L7NZO0R2S5'"1
referencje:1#.
dodaje tabele porównawcze dla każdego argumentu-:&
czy oni pasują?źródło
Perl 6 , 55 bajtów
Wypróbuj online!
Działa z dowolną liczbą ciągów.
źródło
Python 2 , 111 bajtów
Wypróbuj online!
116 bajtów
Wypróbuj online!
źródło
Python 3 , 105 bajtów
Wypróbuj online!
źródło
Galaretka ,
3934 bajtówWypróbuj online!
źródło
05AB1E ,
3833 bajtówWypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (sekcje Jak kompresować ciągi znaków, które nie są częścią słownika? I Jak kompresować duże liczby całkowite? ), Aby zrozumieć, dlaczego
.•2Θ`ĆĀÑεÉ•
jest"abemwgilorsuz"
i•B/óÕ¦•
jest48333917025
.źródło