같은 숫자의 두 배가 아닌 여러 개의 밑


15

입력

비어 있지 않은 양의 정수 배열.

직무

각 숫자 ( 0 ~ F )가 최대 한 번 사용되는 방식으로 각 정수를 2 진, 8 진, 10 진 또는 16 진으로 변환하십시오 .

산출

퍼즐을 풀기 위해 사용 된 기지의 목록입니다.

자세한 예

[16, 17]에 대한 예상 출력 은 [8 진수, 10 진수] 입니다.

이유는 다음과 같습니다.

  • 두 숫자 모두 1을 포함하기 때문에 단순히 두 숫자에 십진수를 사용할 수 없습니다 .
  • 16 은이 밑 ( 10000 ) 의 표현에 여러 개의 0이 포함되어 있기 때문에 이진수로 변환 할 수 없습니다 .
  • 이 밑변 ( 10001 ) 의 표현 은 여러 개의 0 과 여러 개의 1을 포함 하므로 17 은 이진수로 변환 될 수 없습니다 .
  • 이 밑 ( 11 ) 에서의 표현 은 2 개의 1 로 구성 되므로 17 은 16 진수로 변환 될 수 없습니다 .
  • 남아있는 모든 가능성을 고려해 봅시다.

                   +---------+---------+--------+
                   | oct(16) | dec(16) | hex(16)|
                   | = 20    | = 16    | = 10   |
    +--------------+---------+---------+--------+
    | oct(17) = 21 | 20,21   | 16,21   | 10,21  |
    | dec(17) = 17 | 20,17   | 16,17   | 10,17  |
    +--------------+---------+---------+--------+
    

    유일하게 가능한 해결책은 16 을 8 진수 ( 20 ) 로 변환 하고 17 을 10 진수 ( 17 ) 로 유지하는 것 입니다. 이런 식으로 숫자 0 , 1 , 27 이 정확히 한 번 사용됩니다.

설명 및 규칙

  • 입력은 고유 한 솔루션으로 이어집니다. 코드는 여러 솔루션을 제공하거나 전혀 솔루션을 제공하지 않는 배열을 지원하지 않습니다.
  • 사용자 출력 할 수와 같은 임의의 적절한 형식의 염기 [ "빈", "10월", "12월", "진수"] , [ 'B', 'O', 'D', 'H'] , "BODH " , [2,8,10,16] , [0,1,2,3] 등. 그러나 귀하의 답변에 명확하게 설명되어야합니다.
  • 출력에서 밑의 순서는 입력 정수의 순서와 일치해야합니다.
  • 도움이되는 경우 입력이 최저에서 최고로 정렬되거나 최고에서 최저로 정렬되었다고 가정 할 수 있습니다.
  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다!

테스트 사례

아래 나열된 변환 결과를 출력 할 필요는 없습니다. 그들은 순수하게 정보를 제공합니다.

Input                                  | Output          | Conversion result
---------------------------------------+-----------------+------------------------
[ 119 ]                                | O               | 167
[ 170 ]                                | D               | 170
[ 64222 ]                              | H               | FADE
[ 16, 17 ]                             | O/D             | 20/17
[ 14, 64, 96 ]                         | H/H/D           | E/40/96
[ 34, 37, 94 ]                         | O/D/H           | 42/37/5E
[ 2, 68, 82 ]                          | B/D/H           | 10/68/52
[ 22, 43, 96 ]                         | O/O/O           | 26/53/140
[ 3639, 19086, 57162 ]                 | H/D/H           | E37/19086/DF4A
[ 190, 229, 771 ]                      | O/H/O           | 276/E5/1403
[ 2, 44, 69, 99 ]                      | B/H/H/H         | 10/2C/45/63
[ 75, 207, 218, 357, 385 ]             | H/H/H/D/O       | 4B/CF/DA/357/601
[ 12, 28, 46, 78, 154, 188, 222, 240 ] | D/O/O/D/H/H/H/H | 12/34/56/78/9A/BC/DE/F0

원시 입력 목록 은 여기에 있습니다 .


효율성의 일부 측면에 관심을 가져야합니까? (배열의 길이가 1000 또는 그와 비슷한 경우)
DanielIndie

3
@DanielIndie 아니오, 당신은 필요하지 않습니다. 또한 1000 개의 항목으로 구성된 퍼즐에는 사용되는 염기에 관계없이 많은 중복 숫자가 포함되므로 유효한 숫자가 될 수 없습니다. (이것은 첫 번째 규칙에 따라 발생하지 않을 것입니다.)
Arnauld

네, 당신 말이 맞아요 ... 바보 같은 ... :)
DanielIndie

1
실제로 시도해 보았지만 좋은 솔루션을 찾지 못했기 때문에 Japt 솔루션을 기대하고 있습니다.
Nit

2
@Scrooble Nope. :) 좋은 시도!
Arnauld

답변:


4

JavaScript (Node.js) , 192,155,154,152,151,145,136,113,99,92 90 바이트

  • [2,8,10,16] 인 [0,1,2,3]->를 반환 할 수 있음을 상기시켜 준 @Arnauld 덕분에 8 바이트를 절약하고 훌륭한 아이디어 (23 + 감소시키는 데 도움이 됨) 바이트)
  • 1 바이트 씩 줄인 @Kevin Cruijssen에게 감사합니다
f=([c,...a],t="")=>c?[1,4,5,8].find(b=>T=!/(.).*\1/.test(n=t+c.toString(b*2))&&f(a,n))+T:a

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

설명:

[c,...a]-@Arnauld 트릭은 한 번에 하나의 항목을 가져옵니다 c?***:" ".-> c가 정의되지 않은 경우 최종 결과를 얻을 수있었습니다. []- ""를 입력하면 찾기가 해당 합법적 인 것으로 간주되지 않습니다. ([] + 5 = "5"JS FTW) [1,4,5,8].find우리가 올바른 밑을 찾을 때마다 (이 출력은 (1,4,5,8)-> (2,8,10,16) 합법적입니다.) 이제 찾기 작동 방식-> 무언가를 찾으면 요소 (1-8)를 반환하고 내부 솔루션의 결과를 추가하는 것보다 찾을 수 없으면 undefined를 반환합니다. + T는 이제 false-> NaN입니다. 부모 전화는 거짓으로 간주됩니다

!/(.).*\1/.test(n=t+b) 문자열에 중복이 있는지 확인하십시오.

f(a,n)) 다음 문자열로 이동하십시오 (a는 이제 array.slice (1))이며 새 문자열 (n)

우리는 find가 발견 될 때 find가 멈추기 때문에 결과의 T (temp)에 결과를 할당하고 마지막 결과는 f ()이며 결과는 B라는 것을 알고있다


1
t="",B=""에는 t="",B=t바이트를 저장합니다.
Kevin Cruijssen

(Arnauld와 당신) @KevinCruijssen 업데이트 솔루션, 감사합니다 :)
DanielIndie

@ Arnauld 나는 훌륭한 아이디어를 취하고 비슷한 것을했습니다. 해결책을 지금보십시오
DanielIndie

@ Arnauld 순수 awesomeness
DanielIndie

1
멋있는! 오프하자 면도를 2 바이트 이상 (그리고 필요 trim()이상).
Arnauld


3

루비, 72 71 바이트

->a{a.map{%w[b o d x]}.inject(&:product).find{|c|/(.).*\1/!~[p,c]*?%%a}}

출력 형식은 일종의 역 S- 표현 괴물입니다.

f[[12, 28, 46, 78, 154, 188, 222, 240]]
=> [[[[[[["d", "o"], "o"], "d"], "x"], "x"], "x"], "x"]

대신 슬래시 분리하면 3 바이트가 더 걸립니다 (추가 *?/).

이 형식은 더 많은 관용어보다 약간 짧은 루프 구조에서 나옵니다.이 repeated_combination(a.size)배열은 문자 배열을 생성 한 다음 교차 곱 함수보다 줄입니다.

편집 : Lynn 덕분에 1 바이트가 절약되었습니다.


2

Pyth, 21 20 바이트

f{Is.bjYNTQ^[8T2y8)l

가능한 모든 기본 목록 (항상 길이가 1 임)의 목록을 반환합니다.
여기 사용해보십시오

설명

f{Is.bjYNTQ^[8T2y8)l
           ^[8T2y8)lQ  Get the tuples of bases of the same length as the input.
f                      Filter to get those...
    .bjYNTQ            ... where converting bases elementwise...
   s                   ... and joining together...
 {I                    ... has no repeats.


2

젤리 , 17 16 바이트

⁴⁽%ʠḃṗL³bF⁼Q$ƲÐf

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

염기 목록을 반환합니다.

 == 설명 ==
link % ʠḃṗL³bF⁼Q $ ƲÐf 메인 링크.
 ⁽% ʠ 숫자입니다.
    bi bijective base로 변환 ...
⁴ 16. 결과는 [2,8,10,16]입니다.
     입력 길이에 따른 CartL 직교 전력.
             필터, 만족하는 것들을 유지 ...
       ³ 입력
        b 그 기지로 변환
         평평 할 때 F (\의 모든 숫자에 결합)
                      다른 숫자들)
          ⁼Q $는 자체 화되지 않은 것과 같습니다.


2

05AB1E , 17 바이트

2žv8T)sgãʒIsв˜DÙQ

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


나는 05AB1E를 모른다. 그래서 나는 이것을 묻기 전에 설명을 추가 할 때까지 기다려야하지만 왜 8문자 의 결과 '8'이고 다른 세 가지는 정수입니까? 그러나 +1은 더 긴 마지막 테스트 사례를 포함하여 정상적으로 작동하는 것 같습니다.
Kevin Cruijssen

2
@KevinCruijssen "2žv8T"에서 나왔습니다. 소스 코드의 숫자는 05AB1E에서 문자로 푸시되는 반면, žv (16) 및 T (10)은 각각의 숫자를 스택에 푸시하는 내장 기능입니다. 스택의 마지막 요소에 대한 05AB1E의 암시 적 표시가 숫자로 변환되기 때문에 이것은 일반적으로 눈에 띄지 않습니다. 그러나이 경우 표시된 결과는 요소의 배열이므로 해당 요소는 그대로 유지되므로 인용 부호가 그대로 유지됩니다. 예를 들어 ï 명령은 두 개의 char 요소를 int로 캐스트하는 데 사용할 수 있습니다.
Kaldo

@KevinCruijssen 내 설명의 예 : tio.run/##MzBNTDJM/f/fyPbQDtv//wE 코드 : 푸시 2, 인쇄, 배열에 랩핑, 인쇄.
Kaldo


1

껍질 , 19 바이트

fȯS=UΣz`B¹πmDd1458L

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

염기의 목록을 반환

설명

fȯS=UΣz`B¹πmDd1458L  Implicit input
                  L  Length of input
          π          Cartesian power of
             d1458     The digits of 1458  [1,4,5,8]
           mD          Double the digits   [2,8,10,16]
fȯ                   Filter by
      z`B¹             Zip with input by converting to its base
     Σ                 Concatenate
  S=U                  Equal to itself with unique elements
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.