Заміна магніту на холодильник


29

Коли ви пишете повідомлення магнітами для холодильника, ви часто опинитесь заміною " 1an" 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, де перші два 3s повертаються на 180 градусів, щоб зробити два Es, а останній 3повернути на 90 градусів проти годинникової стрілки, щоб зробити an M. Пробіли можуть бути включені до повідомлень, але вони не повинні враховуватися у вашому рішенні, оскільки вони зроблені, розміщуючи магніти на холодильнику.

Вхідні дані

Два рядки (або масиви символів). Усі повідомлення будуть відповідати^[A-Z0-9 ]+$

Вихід

Truthy, якщо два вхідних рядка є дійсними перестановками один одного, фальсифікуйте інакше.

Приклади

["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 днів від опублікування. Щасливого гольфу!

Зразок розчину, не гольф

Пов'язані

EDIT : Зробив помилку в замінах, зробив G = 6і, 6 = 9як окремі заміни, об'єднав їх в одну.


2
Я думаю, що 48 годин трохи недовго. Що з людьми, які займаються гольфом лише у вихідні дні?
Адам

Добрий момент, я дам це за тиждень.
maxb

1
Інші заміни, які ви можете вважати допустимими, - це 7 для T, H для I (але не 1 для H) і 2 для N або Z
Джефф Зейтлін

1
@JeffZeitlin У нас в дискусії про це було обговорено питання, і я вирішив виключити всі заміни, які не є оборотними. Оскільки Tі Lне підлягають обміну, я не можу додати T = 7. Те саме стосується N = Z = 2, що це означало б N = Z = R = 2. Однак заміни, які ви пропонуєте, спричинили б більш складну версію цього виклику, яку я можу опублікувати пізніше. Мені просто хотілося зрозуміти, чи вдасться спочатку прийняти подібні виклики.
maxb

1
@ 3D1T0R так, заміна повинна йти обома способами. Перевірка полягає в тому, чи є два рядки дійсними перестановками один одного . Ваш приклад повернеться false.
maxb

Відповіді:


4

Japt , 38 36 33 30 байт

Приймає дані як масив з 2 рядків.

®d`z³m`i`oiglbg`í)Ôu)ñ xÃr¶

Спробуйте або запустіть усі тестові приклади

3 байти збережено завдяки ETHProductions

®d`z...m`i`o...g`í)Ôu)ñ xÃr¶
                                 :Implicit input of array U
®                                :Map each Z
 d                               :  For each pair of characters in the following string,
                                 :  replace all occurrences of the 1st character in Z with the 2nd
  `z...m`                        :    The compressed string "znewem"
         i                       :    Prepend
          `o...g`                :      The compressed string "oireasglbg"
                 í               :      Interleave 0-based indices
                  )              :    End prepend
                   Ô             :    Reverse
                    u            :    Convert to uppercase
                     )           :  End replace
                      ñ          :  Sort
                        x        :  Trim
                         Ã       :End map
                          r      :Reduce
                           ¶     :  By testing equality

Приємно, в даний час побиває желе! Я думаю, ви можете зробити в кінці, щоб зберегти 3 байти.
ETHproductions

О, так, я це забував. Дякую, @ETHproductions.
Кудлатий


10

Рубі , 99 72 71 байт

->a{!!a.map{|x|x.tr("0-9UZMW","OIREASGLBGCNE").chars.sort-[" "]}.uniq!}

Спробуйте в Інтернеті!

Займає масив рядків, передбачає введення великими літерами, як і у всіх тестових випадках.

-1 байт у гольф від benj2240.


Мені подобається такий підхід! Посипте ще трохи, !щоб зберегти байт
benj2240

Так, спасибі.
Кирило Л.

9

JavaScript (ES6), 102 100 байт

Приймає введення як два масиви символів у синтаксисі currying (a)(b). Повертається булева.

a=>b=>(g=s=>s.map(c=>'648UD3F6H1JK73Z0PQ25TUV3'[parseInt(c,36)-9]||c).sort().join``.trim())(a)==g(b)

Спробуйте в Інтернеті!

Як?

Використовуючи допоміжну функцію g () , для кожного входу s :

  • Цифри від 0 до 8 та літери X , Y і Z залишаються незмінними. Все інше явно перекладено.

    0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
             ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    .........648UD3F6H1JK73Z0PQ25TUV3...
    

    Код:

    s.map(c => '648UD3F6H1JK73Z0PQ25TUV3'[parseInt(c, 36) - 9] || c)
  • Ми сортуємо символів (який містить усі пробіли на початку), приєднуємо їх і видаляємо всі провідні пробіли.

    Код:

    .sort().join``.trim()

Нарешті, ми порівнюємо обидва результати.


6

Сітківка 0,8,2 , 42 байти

T` dUZMW`_\OIR\EASG\LBGCN\E
%O`.
^(.*)¶\1$

Спробуйте в Інтернеті! Вводиться в окремі рядки, але Link включає тестові випадки та заголовок. Пояснення:

T` dUZMW`_\OIR\EASG\LBGCN\E

Зіставте всі букви на мінімальному наборі, видаливши пробіли.

%O`.

Сортуйте кожен рядок за порядком.

^(.*)¶\1$

Порівняйте два значення.


5

APL (Dyalog Unicode) , 49 байт SBCS

-1 завдяки ngn.

Функція анонімного мовчання.

(≡/(⍋⌷¨⊂)¨)(,¨⎕D,'UMWZ ')⎕R('OIREASGLBGCEEN',⊂⍬)

Спробуйте в Інтернеті!

⎕R PCRE R eplace:
'UMWZ ' цим п'ятьма символами
⎕D, передують цифри
 окремо (введіть кожен у рядок, а не як один символ)
 з:
⊂⍬ нічого, що
'OIREASGLBGCEEN', передує цим символам

() Застосувати до цього таку негласну функцію:

( Застосувати таку негласну функцію до кожного:

   укласти його (розглянути його як ціле)

  ⍋⌷¨ використовувати кожен з індексів, який би сортував його для індексації у весь рядок (сортування)

≡/ вони однакові? (скорочення матчу)


''->
ngn

@ngn Не впевнений, чому це працює, але все одно дякую.
Адам

5

Python 2 , 108 байт

lambda a,b:g(a)==g(b)
g=lambda s:sorted('85930A4614012B3C4D5EF6378GH9AI2J3KL7'[int(c,36)]for c in s if'!'<c)

Спробуйте в Інтернеті!

Існує 23 класи еквівалентності символів. Використовуючи рядок 36 символів '85930A4614012B3C4D5EF6378GH9AI2J3KL7', ми відображаємо кожен символ на його клас еквівалентності (ігноруючи пробіли), після чого сортуємо отриманий масив. Два рядки рівноцінні, якщо отримані списки рівні.


4

Java 10, 262 260 258 216 208 174 байт

a->b->n(a).equals(n(b));String n(String s){return s.chars().mapToObj(x->x<48?"":"OIREASGLBG.......ABCDEFGHIJKLENOPQRSTCVEXYN".split("")[x-48]).sorted().reduce("",(a,b)->a+b);}

-2 байти завдяки @Arnauld .
-76 байт завдяки @ OlivierGrégoire .

Спробуйте в Інтернеті.

Пояснення:

a->b->                      // Method with two String parameters and boolean return-type
  n(a).equals(n(b))         //  Return if both Strings are equal in the end

String n(String s){         // Separated method with String as both parameter return-type
  return s.chars()          //  Loop over all characters as integers
          .mapToObj(x->x<48?//   If the current character is a space:
             ""             //    Replace it with an empty String to skip it
            :               //   Else:
             "OIREASGLBG.......ABCDEFGHIJKLENOPQRSTCVEXYN".split("")[x-48]
                            //    Convert multi-substitution characters to a single one
          .sorted()         //  Sort all of the converted characters
          .reduce("",(a,b)->a+b);}
                            //  And join all of them together as single String

2
"A4B8CUEMEWE3G6G9I1L7NZO0R2S5".split("(?<=\\G.{2})")здається, працює ... хоча я навіть не впевнений, як саме. : p
Арнольд

@Arnauld Дякую, -2 байти, а {2}може бути .ще -2 байти. Я також не на 100% впевнений, як це працює. Я знаю (?<= ... ), що використовується для розбиття, але зберігати відсталий роздільник на предмет . Але я трохи розгублений, чому (?=\\G..)(тримати провідний роздільник) у цьому плані не працює. А також насправді не знаю, як \\G..проти ..виступає проти розколу тут. Побачу, чи зможу я десь це зрозуміти, бо не мені цікаво. ; p Дякуємо будь-яким способом за збережені байти. Потрібно пам’ятати, \\Gрозбиваючи на парні блоки. :)
Кевін Кройсейсен

1
@Arnauld Якщо ви хочете ознайомитись (?<=\\G..)із розділенням, я поставив питання StackoverFlow, яке пролило трохи світла. В основному це невизначена поведінка, що працює по-різному майже в кожній мові. Незважаючи \Gна нульову довжину, у Java з позитивним оглядом всередині розколу він начебто суперечить обом правилам, викликаючи поведінку, яку ми бачимо тут. Мені все це все трохи розпливчасто, але принаймні це врятувало 4 байти у цій відповіді. ;)
Кевін Круїссен

1
217 байт . Однак можна зберегти більше байтів.
Олів'є Грегоар


3

R , 123 байт

function(x,y=chartr("48UMW36917Z025","ABCEEEGGILNORS",gsub(" ","",x)))all(g(y[1])==g(y[2]))
g=function(z)sort(utf8ToInt(z))

Спробуйте в Інтернеті!

utf8ToInt перетворює рядок у вектор кодових точок Unicode.

!sd(a-b)є на один байт коротше,all(a==b) але це не допомагає тут, оскільки я фактично маю справу з цілими числами, а не з логіками.


Дуже хороша! Я думаю, що вам потрібно !anyзамість того !sd, що елементи можуть бути рівними, але до 1. Спробуйте:f(list("BCDEF","ABCDE"))
JayCe

2

J , 56 байт

-:&(-.&' '/:~@rplc'0123456789UMWZ';"0'OIREASGLBGCEEN'"1)

Спробуйте в Інтернеті!

Пояснення:

& і для лівих, і для правої аргументів

-.&' ' видаляє пробіли з входу,

rplc замінює

'0123456789UMWZ';"0'OIREASGLBGCEEN'"1 символи введення шляхом заміни знаків у лівій колонці на знаки у правій: (тут перекладено для економії місця)

      |:'0123456789UMWZ';"0'OIREASGLBGCEEN'
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│0│1│2│3│4│5│6│7│8│9│U│M│W│Z│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│O│I│R│E│A│S│G│L│B│G│C│E│E│N│
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

/:~@ і сортує отримані рядки

-: чи відсортовані рядки рівні?

Моє початкове рішення:

J , 77 73 байт

-:&(1#.(' '-.~])e."1[:(,a.,.@-.,)'EMW3','G69',9 2$'A4B8CUI1L7NZO0R2S5'"1)

Спробуйте в Інтернеті!

Пояснення:

(' '-.~]) видаляє пробіли з обох аргументів і

e."1 перевіряє кожного персонажа на приналежність до наступної таблиці:

[:(,a.,.@-.,)'EMW3','G69',9 2$'A4B8CUI1L7NZO0R2S5'"1 посилання:

EMW3
G69 
A4  
B8  
CU  
I1  
L7  
NZ  
O0  
R2  
S5  
.
.
.  
All other symbols one in a row

1#. додає таблиці порівняння для кожного аргументу

-:& вони відповідають?






1

05AB1E , 38 33 байт

εðK.•2Θ`ĆĀÑεÉ•u6«•B/óÕ¦•…CN9«‡{}Ë

Спробуйте в Інтернеті або перевірте всі тестові випадки .

Пояснення:

ε                   # Map each value in the (implicit) input-list by:
 ðK                 #  Remove all spaces
   .•2Θ`ĆĀÑεÉ•      #  Push compressed string "abemwgilorsuz"
              u     #  To uppercase: "ABEMWGILORSUZ"
               6«   #  Append a 6: "ABEMWGILORSUZ6"
   B/óÕ¦•          #  Push compressed integer 48333917025
          CN9«     #  Append "CN9": "48333917025CN9"
                   #  Transliterate; map all characters in "ABEMWGILORSUZ" in the
                    #  map-string to "48333917025CN9" at the same indices
    {               #  Then sort all characters
}                   # Close the map
 Ë                  # And check if both are equal (which is output implicitly)

Ознайомтесь із цією підказкою 05AB1E (розділи Як стискати рядки, які не є частиною словника? Та Як стискати великі цілі числа? ), Щоб зрозуміти, чому .•2Θ`ĆĀÑεÉ•це так "abemwgilorsuz"і •B/óÕ¦•є 48333917025.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.