냉장고 자석 대체


29

냉장고 자석 메시지를 작성하는 경우, 당신은 종종 자신이 대체 찾을 수 있습니다 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. 여기서 처음 두 3s는 180도 회전하여 두 Es 를 만들고 마지막 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 = 66 = 9별도의 대체로서, 하나의로를 합병했다.


2
나는 48 시간이 약간 짧다고 생각한다. 주말에만 골프를하는 사람들은 어떻습니까?
Adám

좋은 지적은 내가 일주일에 줄 것이다.
maxb

1
허용 할 다른 고려 사항은 T의 경우 H, I의 경우 H (1은 아님) 및 N 또는 Z의 경우 2입니다
Jeff Zeitlin

1
@JeffZeitlin 우리는 챌린지 샌드 박스에서 이것에 대해 토론했으며, 되돌릴 수없는 모든 대체를 제외하기로했습니다. 이후 TL교환하지 않은, 내가 추가 할 수 없습니다 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¶

사용해 보거나 모든 테스트 사례를 실행하십시오.

ETHProductions 덕분에 3 바이트 절약

®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.
Shaggy



9

자바 스크립트 (ES6) 102 100 바이트

카레 구문에서 두 개의 문자 배열로 입력을 (a)(b)받습니다. 부울을 반환합니다.

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

온라인으로 사용해보십시오!

방법?

헬퍼 기능 사용 g ()를 각각의 입력에 대해, S :

  • 숫자 08 및 문자 X , YZ는 그대로 남겨진다. 다른 모든 것은 명시 적으로 번역됩니다.

    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

ngn 덕분에 -1입니다.

익명의 암묵적 접두사 기능.

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

온라인으로 사용해보십시오!

⎕R PCRE R의 eplace :
'UMWZ ' 이 다섯 개 문자
⎕D, 숫자 앞에
 별도로 (오히려 단일 문자 것보다 문자열로 각을)
 :로
⊂⍬ 아무것도
'OIREASGLBGCEEN', 이러한 문자 앞에

() 그것에 다음의 암묵적 기능을 적용하십시오 :

( 다음의 암묵적 기능을 각각에 적용하십시오.

   동봉 (전체로 취급)

  ⍋⌷¨ 전체 문자열 (정렬)로 색인하기 위해 정렬하는 각 색인을 사용하십시오

≡/ 그들은 동일합니까? (점등 감소)


''->
ngn

@ngn 왜 작동하는지 잘 모르겠지만 어쨌든 감사합니다.
Adám

5

파이썬 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 문자열 string을 사용하여 '85930A4614012B3C4D5EF6378GH9AI2J3KL7'각 문자를 등가 클래스 (공백 무시)에 매핑 한 다음 결과 배열을 정렬합니다. 결과 목록이 동일한 경우 두 문자열이 동일합니다.


4

자바 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);}

@Arnauld 덕분에 -2 바이트 . @ OlivierGrégoire
덕분에 -76 바이트 .

온라인으로 사용해보십시오.

설명:

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

@Arnauld 감사합니다 -2 바이트이며 다른 -2 바이트 일 {2}수 있습니다 .. 나는 그것이 어떻게 작동하는지 100 % 확실하지 않습니다. 나는 항목마다 분리하지만 후미 구분 기호를 유지(?<= ... ) 하는 데 사용 된다는 것을 알고 있습니다. 그러나 나는 왜 그런 식으로 (?=\\G..)선행 구분 기호를 유지 하지 못하는지 약간 혼란 스럽습니다 . 또한 실제로 \\G....분할에서 어떻게 작용 하는지 모릅니다 . 내가 궁금하지 않기 때문에 어딘가에서 알아낼 수 있는지 알 수 있습니다. ; p 저장된 바이트에 대해 감사합니다. \\G짝수 크기의 블록으로 분할 할 때 기억해야합니다 . :)
Kevin Cruijssen

1
@Arnauld (?<=\\G..)분할 내부에 대한 배경을 원한다면 StackoverFlow 질문 을 작성하여 약간의 빛을 비췄 습니다 . 기본적으로 정의되지 않은 동작은 거의 모든 언어에서 다르게 작동합니다. \GJava에서는 길이가 0 이지만 분할 내부의 긍정적 인 표정이 있지만 여기에 보이는 동작을 일으키는 두 규칙이 충돌합니다. 그것은 여전히 ​​개인적으로 나에게 약간 모호하지만 적어도이 답변에서 4 바이트를 절약했습니다. ;)
Kevin Cruijssen

1
217 바이트 . 그래도 더 많은 바이트를 절약 할 수 있습니다.
Olivier Grégoire


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 문자열을 유니 코드 코드 포인트로 구성된 벡터로 변환합니다.

!sd(a-b)1 바이트보다 짧지all(a==b) 만 실제로 논리가 아닌 정수를 처리하기 때문에 여기에 도움이되지 않습니다.


아주 좋아요! 요소가 모두 같을 수는 있지만 1 !any대신에 대신 해야한다고 생각합니다 !sd. 시도 :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.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.