입력
비어 있지 않은 양의 정수 배열.
직무
각 숫자 ( 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 , 2 및 7 이 정확히 한 번 사용됩니다.
설명 및 규칙
- 입력은 고유 한 솔루션으로 이어집니다. 코드는 여러 솔루션을 제공하거나 전혀 솔루션을 제공하지 않는 배열을 지원하지 않습니다.
- 사용자 출력 할 수와 같은 임의의 적절한 형식의 염기 [ “빈”, “10월”, “12월”, “진수”] , [ ‘B’, ‘O’, ‘D’, ‘H’] , “BODH “ , [2,8,10,16] , [0,1,2,3] 등. 그러나 귀하의 답변에 명확하게 설명되어야합니다.
- 출력에서 밑의 순서는 입력 정수의 순서와 일치해야합니다.
- 도움이되는 경우 입력이 최저에서 최고로 정렬되거나 최고에서 최저로 정렬되었다고 가정 할 수 있습니다.
- 이것은 code-golf 이므로 바이트 단위의 최단 답변이 이깁니다!
테스트 사례
아래 나열된 변환 결과를 출력 할 필요는 없습니다. 그들은 순수하게 정보를 제공합니다.
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
진수를 들면, %d
10 진수, %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