При написании сообщения с магнитами на холодильник вы часто будете заменять 1
собой I
. В этой задаче ваша цель - выяснить, можно ли написать сообщение, используя буквы другого сообщения. Разрешенные замены:
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
Например, сообщение CIRCA 333
может быть преобразовано в заклинание ICE CREAM
, где первые два 3
s повернуты на 180 градусов, чтобы сделать два E
s, а последние 3
повернуты на 90 градусов против часовой стрелки, чтобы сделать M
. Пробелы могут быть включены в сообщения, но они не должны учитываться в вашем решении, так как они сделаны путем размещения магнитов на холодильнике.
вход
Две строки (или символьные массивы). Все сообщения будут совпадать^[A-Z0-9 ]+$
Выход
Правда, если две входные строки являются допустимыми перестановками друг друга, иначе ложь.
Примеры
["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
Более правдивые примеры
Это все 15+ буквенных слов, которые соответствуют другому слову. Некоторые являются тривиальными заменами, но я включил все, что нашел.
["ANTHROPOMORPHISE","ANTHROPOMORPHISM"]
["ANTIPHILOSOPHIES","ANTIPHILOSOPHISM"]
["CIRCUMSTANTIALLY","ULTRAMASCULINITY"]
["DECENTRALIZATION","DENEUTRALIZATION"]
["DIMETHYLNITROSAMINE","THREEDIMENSIONALITY"]
["INSTITUTIONALISE","INSTITUTIONALISM"]
["INTERCRYSTALLINE","INTERCRYSTALLIZE"]
["INTERNATIONALISE","INTERNATIONALISM"]
["OVERCENTRALIZATION","OVERNEUTRALIZATION"]
["OVERCENTRALIZING","OVERNEUTRALIZING"]
["PREMILLENNIALISE","PREMILLENNIALISM"]
["TRANSCENDENTALIZE","TRANSCENDENTALIZM"]
Поскольку это сложная задача для игры в гольф, выигрывает самое короткое решение! Я приму самое короткое решение за 7 дней с момента публикации. Удачного игры в гольф!
Пример решения, не для игры в гольф
Связанный
РЕДАКТИРОВАТЬ : сделал ошибку в заменах, имел G = 6
и 6 = 9
как отдельные замены, объединил их в одну.
T
иL
не подлежат обмену, я не могу добавитьT = 7
. То же самоеN = Z = 2
, что подразумевает этоN = Z = R = 2
. Тем не менее, предлагаемые вами варианты заменят более сложную версию этой задачи, которую я мог бы опубликовать позже. Я просто хотел посмотреть, будут ли такие вызовы хорошо приняты в первую очередь.false
.Ответы:
Japt ,
38363330 байтПринимает ввод как массив из 2 строк.
Попробуйте или запустите все тесты
3 байта сохранены благодаря ETHProductions
источник
r¶
в конце, чтобы сохранить 3 байта.Python 2 ,
145131130129125 байтПопробуйте онлайн!
Alt:
Python 2 , 125 байт
Попробуйте онлайн!
источник
Рубин ,
997271 байтПопробуйте онлайн!
Принимает массив строк, предполагает ввод в верхнем регистре, как и во всех тестовых случаях.
-1 байт в гольфе от benj2240.
источник
!
чтобы сохранить байтJavaScript (ES6),
102100 байтПринимает ввод в виде двух массивов символов в синтаксисе карри
(a)(b)
. Возвращает логическое значение.Попробуйте онлайн!
Как?
Используя вспомогательную функцию g () , для каждого входа s :
Цифры от 0 до 8 и буквы X , Y и Z остаются без изменений. Все остальное явно переведено.
Код:
Мы сортируем символы (которые приводят все пробелы в начале), соединяем их и удаляем все начальные пробелы.
Код:
Наконец, мы сравниваем оба выхода.
источник
Сетчатка 0.8.2 , 42 байта
Попробуйте онлайн! Принимает ввод в отдельных строках, но Link включает тестовые случаи и заголовок. Объяснение:
Сопоставьте все буквы с минимальным набором, удалив пробелы.
Сортировка каждой строки в порядке.
Сравните два значения.
источник
APL (Dyalog Unicode) , 49 байтов SBCS
-1 благодаря нгн.
Функция анонимного молчаливого префикса.
Попробуйте онлайн!
⎕R
PCRE R eplace:'UMWZ '
эти пять символов⎕D,
с цифр по,¨
отдельности (каждый из них превращается в строку, а не в один символ)с:
⊂⍬
ничем не'OIREASGLBGCEEN',
предшествуют эти символы(
…)
Примените к этому следующую молчаливую функцию:(
…)¨
Применить следующую молчаливую функцию к каждому:⊂
приложить это (рассматривать это в целом)⍋⌷¨
использовать каждый из индексов, которые будут сортировать его, чтобы индексировать всю строку (сортирует)≡/
они идентичны? (Лит. сокращение матча)источник
''
->⍬
Python 2 , 108 байт
Попробуйте онлайн!
Существует 23 класса эквивалентности символов. Используя строку из 36 символов
'85930A4614012B3C4D5EF6378GH9AI2J3KL7'
, мы сопоставляем каждый символ с его классом эквивалентности (игнорируя пробелы), а затем сортируем полученный массив. Две строки эквивалентны, если результирующие списки равны.источник
Java 10,
262260258216208174 байта-2 байта благодаря @Arnauld .
-76 байт благодаря @ OlivierGrégoire .
Попробуйте онлайн.
Объяснение:
источник
"A4B8CUEMEWE3G6G9I1L7NZO0R2S5".split("(?<=\\G.{2})")
кажется, работает ... хотя я даже не уверен, как именно. : p{2}
может быть.
еще 2 байта. Я также не уверен на 100%, как это работает. Я знаю,(?<= ... )
что используется для разделения, но сохраняю конечный разделитель для каждого элемента . Но я немного сбит с толку, почему(?=\\G..)
(продолжайте приводить разделитель) не работает в этом отношении. И также на самом деле не знаю, как\\G..
vs..
действует в расколе здесь. Посмотрим, смогу ли я где-нибудь это выяснить, потому что мне не любопытно. ; p В любом случае спасибо за сохраненные байты. Нужно помнить\\G
при разделении на четные блоки. :)(?<=\\G..)
внутри раскола, я задал вопрос StackoverFlow, который пролил некоторый свет. По сути, это неопределенное поведение, работающее по-разному почти на каждом языке. Хотя\G
это нулевая длина, в Java с положительным вниманием к разделению, она как бы противоречит обоим правилам, вызывающим поведение, которое мы видим здесь. Лично для меня это все еще немного расплывчато, но в этом ответе, по крайней мере, сэкономлено 4 байта. ;)R , 123 байта
Попробуйте онлайн!
utf8ToInt
преобразует строку в вектор кодовых точек Unicode.но это не помогает, потому что я имею дело с целыми числами, а не с логикой.!sd(a-b)
на один байт короче,all(a==b)
источник
!any
вместо того,!sd
чтобы элементы могли быть все равны, но 1. Попробуйте:f(list("BCDEF","ABCDE"))
J , 56 байт
Попробуйте онлайн!
Объяснение:
&
для левого и правого аргумента-.&' '
удаляет пробелы из ввода,rplc
Заменяет'0123456789UMWZ';"0'OIREASGLBGCEEN'"1
символы на входе путем замены символов в левом столбце на символы в правом: (здесь транспонировано для экономии места)/:~@
и сортирует полученные строки-:
равны ли отсортированные строки?Мое первоначальное решение:
J ,
7773 байтаПопробуйте онлайн!
Объяснение:
(' '-.~])
удаляет пробелы из обоих аргументов иe."1
проверяет каждый символ на принадлежность к следующей таблице:[:(,a.,.@-.,)'EMW3','G69',9 2$'A4B8CUI1L7NZO0R2S5'"1
ссылка:1#.
складывает таблицы сравнения для каждого аргумента-:&
они совпадают?источник
Perl 6 , 55 байт
Попробуйте онлайн!
Работает с произвольным количеством строк.
источник
Python 2 , 111 байт
Попробуйте онлайн!
116 байт
Попробуйте онлайн!
источник
Python 3 , 105 байт
Попробуйте онлайн!
источник
Желе ,
3934 байтаПопробуйте онлайн!
источник
05AB1E ,
3833 байтаПопробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
См. Этот мой совет 05AB1E (разделы Как сжимать строки, не являющиеся частью словаря? И Как сжимать большие целые числа? ), Чтобы понять, почему
.•2Θ`ĆĀÑεÉ•
есть"abemwgilorsuz"
и•B/óÕ¦•
есть48333917025
.источник