균형 잡힌 기지 사이를 전환하십시오!


13

균형 잡힌 기초 :

균형이 잡힌 염기는 숫자가 양수 또는 음수가 될 수 있다는 점을 제외하면 기본적으로 법선 염기와 동일합니다.

여기서부터, 평형 염기의베이스 bbalb-평형베이스 4 = 로 표현 될 수있다 bal4.

이 챌린지의 정의에서 균형이 잡힌 밑의 자릿수 범위 b는에서 -(k - 1)~입니다 b - k.

k = ceil(b/2)

다양한 균형 잡힌 밑의 자릿수 범위 예 :

bal10:
  k = ceil(10/2) = 5
  range = -(5 - 1) to 10 - 5 = -4 to 5
        = -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
bal5:
  k = ceil(5/2) = 3
  range = -(3 - 1) to 5 - 3 = -2 to 2
        = -2, -1, 0, 1, 2

균형 잡힌 염기의 숫자 표현은 기본적으로 보통 염기와 동일합니다. 예를 들어 숫자 27(기수 10)에서 bal4(균형 기수 4)의 표현은입니다 2 -1 -1.

  2 -1 -1 (bal4)
= 2 * 4^2 + -1 * 4 + -1 * 1
= 32 + (-4) + (-1)
= 27 (base 10)

직무:

당신의 작업은 세 가지 입력이 주어진다 :

  • 변환 할 숫자 ( n)
    • 이 입력은 유연 할 수 있습니다 ( "I / O 유연성"참조).
  • n현재 ( b) 에 있는 기지
  • n로 변환 될 밑 (( c)

어디 2 < b, c < 1,000.

의 균형 된 기본 c표현으로 숫자를 반환합니다 n. 출력도 유연 할 수 있습니다.

프로그램 / 기능은 n입력 자체 의 길이를 결정해야 합니다.

I / O 유연성 :

입력 n및 출력은 다음과 같은 방식으로 표현 될 수 있습니다.

  • 언어의 배열 정의
  • 문자를 구분자로 사용하는 문자열 (예 : 공백, 쉼표)

예 :

이것들은 파이썬 배열을 n출력으로 사용합니다. "I / O 융통성"의 정의에 해당되는 한 언어에 맞는 것을 사용할 수 있습니다.

[2, -1, -1] 4 7 = [1, -3, -1]
[1, 2, 3, 4] 9 5 = [1, 2, 2, -1, 2]
[10, -9, 10] 20 5 = [1, 1, 1, -2, 1, 0]

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!


첫 번째 대답에서 4는 유효한 bal7 숫자가 아닙니다. 답은 [1, -3, -1]이어야한다고 생각합니다. 그리고 두 번째 테스트 사례 ([1,2,2, -1,2])와 세 번째 테스트 사례 ([1,1,0, -2,1,0])에 대해 다른 답변을 얻습니다 ...?
Greg Martin

@GregMartin Ah, 으악-나는 그것들을 손으로 계산했기 때문에 몇 가지 문제가있었습니다. 알아 주셔서 감사합니다! 만약을 대비하여 솔루션을 다시 확인할 수 있습니까?
clismique

@GregMartin @ Qwerp-Derp 세 번째 테스트 사례는 다음과 같습니다[1,1,1,-2,1,0]
ngenisis

답변:


2

Mathematica, 85 바이트

#~FromDigits~#2~IntegerDigits~#3//.{p___,a_:0,b_,q___}/;b>⌊#3/2⌋:>{p,a+1,b-#3,q}&

설명

#~FromDigits~#2

변환 #1(1 암시 - 입력 1 자릿수의 목록) 정수로 기재 #2(입력 2).

... ~IntegerDigits~#3

결과 정수를 기수 #3(입력 3) 로 변환하여 숫자 목록을 만듭니다.

... //.{p___,a_:0,b_,q___}/;b>⌊#3/2⌋:>{p,a+1,b-#3,q}

자릿수 목록을 반복해서 바꿉니다. 숫자는 층 (보다 크면 #3/ 2) 다음 빼기 #3그것으로부터 추가 및 1왼쪽에 자리한다. 왼쪽에 아무것도 없으면 a를 삽입 0하고 추가하십시오 1.


일반적으로 솔루션에 대해 조금 이야기하고 Mathematica를 모르는 사람들을 위해 설명하는 것이 좋습니다.
ATaco

@ATaco 설명이 추가되었습니다!
JungHwan Min

나는 이것에 의해 약간의 신비입니다. 함수 정의 이외의 곳에서 사용되는 선택적 패턴은 본 적이 없습니다. {...}교체 규칙이 하나뿐이므로 외부가 필요하지 않습니다 .
ngenisis 2012 년

1
@JungHwanMin 사실, 혼란스러운 것은 이것이에 대한 경기에 어떤 영향을 미치는지 추측합니다 p___. 이 짧은 찾을 수 있습니까 p___중 다음 a_,b_이나 b_, 또는 선택 사양 인 패턴의 각을 필요로하는 전체 패턴을 확인 않으며이 일치 (또는 세 번째 옵션)를 발견 할 때까지 점진적으로 선택 패턴을 드롭?
ngenisis 2012 년

1
@ngenisis 나는 이전 의견에서 (삭제 된) 잘못된 결과라고 생각 FixedPointList[k=#3;#/.{p___,a_:0,b_,q___}/;b>⌊k/2⌋:>{p,a+1,b-k,q}&, #~FromDigits~#2~IntegerDigits~#3]&합니다. {p___,a_,b_,q___}먼저 (가능한 모든 p) {p___,b_,q___}일치 한 다음 일치합니다. 두 번째 교체 는 조건을 만족하는 중간에있는 경우 대신 일치 b하기 때문에 시작 시에만 적용됩니다 . b{p___,a_,b_,q___}
JungHwan Min

1

펄 6 , 121 바이트

->\n,\b,\c{sub f{sum [R,](@^n)Z*($^b X**0..*)}
first {f(b,n)==f c,$_},map {[$_-($_>floor c/2)*c for .base(c).comb]},0..*}

느린 무차별 솔루션.

작동 방식 :

  • map {[ .base(c).comb]}, 0..*-base에 게으른 무한의 자연수 시퀀스를 생성합니다. c각 숫자는 숫자 배열로 표시됩니다.
  • $_ - ($_ > floor c/2) * c- c층 (c / 2)보다 큰 각 숫자에서 빼서 변환합니다 .
  • first { f(b, n) == f(c, $_) }, ...-기본 c숫자 로 해석 될 때 기본 배열로 n해석 된 입력 배열 과 같은 시퀀스의 첫 번째 배열을 가져 옵니다 b.
  • sub f { sum [R,](@^n) Z* ($^b X** 0..*) }- 역전 된 배열을 기본의 거듭 제곱으로 압축하여 생성 된 곱의 합을 취하여 배열 @^n을 기본의 숫자로 바꾸는 도우미 함수입니다 $^b.

1

자바 스크립트 (ES6), 89 바이트

(n,b,c,g=(n,d=n%c,e=d+d<c)=>[...(n=n/c+!e|0)?g(n):[],e?d:d-c])=>g(n.reduce((r,d)=>r*b+d))

100 바이트는 음수 값으로 작동합니다 n.

(n,b,c,g=(n,d=(n%c+c)%c)=>[...(n-=d,n/=c,d+d<c||(d-=c,++n),n?g(n):[]),d])=>g(n.reduce((r,d)=>r*b+d))

0

Mathematica, 118114 바이트

IntegerDigits[#3~FromDigits~#2,k=⌊#/2⌋;#]//.{{a_,x___}/;a>k:>{1,a-#,x},{x___,a_,b_,y___}/;b>k:>{x,a+1,b-#,y}}&

3 바이트 문자입니다 U+230AU+230B각각. 변환 #3베이스 10기재로부터는 #2, 다음베이스 변환 #(인수 순서는 실시 예에서 반전되도록). 숫자가 허용되는 최대 자릿수보다 큰 경우 해당 자릿수 k=⌊#/2⌋를 줄이고 #다음 자릿수를 증가시킵니다 (앞에 추가해야 할 수도 있음 1). 모든 숫자가보다 작을 때까지이 작업을 계속하십시오 k.

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