같은 숫자의 두 배가 아닌 여러 개의 밑 예 [16, 17]에

입력

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

직무

각 숫자 ( 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

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



답변

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라는 것을 알고있다


답변

펄 5 -alp , 55 바이트

용도 %x진수를 들면, %d10 진수, %o진수 및%b 바이너리에 대한

#!/usr/bin/perl -alp
($_)=grep{sprintf($_,@F)!~/(.).*\1/}glob"%{d,o,b,x}"x@F

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


답변

루비, 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 바이트가 절약되었습니다.


답변

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.

답변

Wolfram Language (Mathematica) , 71 바이트

Cases[2{1,4,5,8}~Tuples~Tr[1^#],b_/;UnsameQ@@Join@@IntegerDigits[#,b]]&

염기 목록을 반환합니다.

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


답변

젤리 , 17 16 바이트

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

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

염기 목록을 반환합니다.

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

답변

파이썬 2 , 128 바이트

from itertools import*
a=input()
for b in product(*['bdxo']*len(a)):
 s=''.join(map(format,a,b))
 if len(s)==len(set(s)):print b

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