미친하지만 합리적인 기지


11

우리는 base 10, base 2, base 36 또는 base -10을 기반으로 많은 도전을 겪지 만 다른 모든 합리적인 근거는 어떻습니까?

직무

밑이 10 인 정수와 합리적인 밑이 주어진 경우 해당 밑의 정수 (배열, 문자열 등)를 반환합니다.

방법

합리적인 근거를 상상하기는 어렵습니다 . 분해 점을 사용하여 시각화하십시오 .

기본 3에서 17을 표현하는이 애니메이션을 고려하십시오.

여기에 이미지 설명을 입력하십시오

각 점은 단위를 나타내고 상자는 숫자를 나타냅니다. 가장 오른쪽 상자는 한 자리, 가운데 상자는 3 ^ 1 장소, 가장 왼쪽 상자는 3 ^ 2 장소입니다.

한 곳에서 17 개의 점으로 시작할 수 있습니다. 그러나 이것은 밑이 3이므로 한 곳의 위치는 3보다 작아야합니다. 따라서 3 개의 점을 "폭발"하고 왼쪽 상자에 점을 만듭니다. 우리는 분해 가능한 점이없는 안정된 위치 (예 : 같은 상자에 3 개의 점)가 될 때까지이 과정을 반복합니다.

따라서 밑 10의 17은 밑 3의 122입니다.


분수 기준은 일부 점을 하나 이상의 점으로 분해하는 것과 유사합니다. 기본 3/2는 3 개의 점을 폭발시켜 2를 만듭니다.

기본 3/2에서 17 표현 :

여기에 이미지 설명을 입력하십시오

따라서 밑 10의 17은 밑 3/2의 21012입니다.


음수 기준은 비슷하게 작동하지만 부호를 추적해야합니다 (소위 반 도트 사용, -1, 열린 원으로 표시).

기본 -3에서 17 표현 :

여기에 이미지 설명을 입력하십시오

모든 상자의 부호를 동일하게 만들기위한 추가 폭발이 있습니다 (0 무시).

따라서 밑 10의 17은 밑 -3의 212입니다.

음의 합리적 염기는 위의 두 경우의 조합에서 유사하게 작동합니다.

규칙

  • 표준 허점이 없습니다.
  • 출력에서 각 "숫자"의 부호는 같아야합니다 (또는 0).
  • 모든 자릿수의 절대 값은 밑면 분자의 절대 값보다 작아야합니다.
  • 베이스의 절대 값이 1보다 크다고 가정 할 수 있습니다.
  • 합리적 기준이 가장 축소 된 형태라고 가정 할 수 있습니다.
  • 입력에서 염기의 분자와 분모를 따로 가져갈 수 있습니다.
  • 숫자에 여러 표현이있는 경우 그 중 하나를 출력 할 수 있습니다. (베이스 (10)의 예 12를하면 될 수 {-2, -8}{1, 9, 2}베이스 -10)

테스트 사례 :

체재: {in, base} -> result

{7, 4/3}        ->  {3, 3}
{-42, -2}       ->  {1, 0, 1, 0, 1, 0}
{-112, -7/3}    ->  {-6, -5, 0, -1, 0}
{1234, 9/2}     ->  {2, 3, 6, 4, 1}
{60043, -37/3}  ->  {-33, -14, -22, -8}

일부 입력에는 여러 표현이있을 수 있으므로 TIO에서이 Mathematica 스 니펫을 사용하여 출력을 테스트하는 것이 좋습니다 .

이것은 이므로 각 언어에서 가장 짧은 바이트 수로 제출하면 승리합니다!


점 폭발에 대한 자세한 내용 은 글로벌 수학 프로젝트 웹 사이트를 방문하십시오 ! 그들은 멋진 수학 물건을 많이 가지고 있습니다!


답변:


6

파이썬 2 , 42 39 바이트

n,a,b=input()
while n:print n%a;n=n/a*b

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

더 짧은 양식을 찾은 @xnor에게 감사합니다.

더 이상 사용되지 않는 버전 (42 바이트) :

f=lambda n,a,b:n and[n%a]+f(n/a*b,a,b)or[]

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

매개 변수 : 입력, 분자 (부호 포함) 및 분모.

가장 낮은 자릿수부터 배열을 반환합니다.

이것은 파이썬의 나누기와 모듈로가 분모의 부호를 따르기 때문에 작동하므로 동일한 부호를 명시 적으로 신경 쓸 필요가 없습니다.

테스트 케이스 출력 :

f(7, 4, 3)       == [3, 3]
f(-42, -2, 1)    == [0, -1, -1, -1, -1, -1, -1]
f(-112, -7, 3)   == [0, -1, 0, -5, -6]
f(1234, 9, 2)    == [1, 4, 6, 3, 2]
f(60043, -37, 3) == [-8, -22, -14, -33]

4
일반적으로 프로그램이 더 짧은 것 같습니다 .
xnor

@ xnor 고마워, 나는 항상 무언가를 쓰는 방법을 잊어 버린다 ...
Bubbler

4

Aheui (동위 원소) , 91 바이트

벙수벙섞벙석
희빠챠쌳뻐삭빠빠싻싸삯라망밣밭따맣사나삮빠싸사땨

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

소요 integer, numerator of base그리고 denominator of base.

TIO 인터프리터의 한계로 인해 각 입력은 개행으로 끝나야합니다.

@Bubbler의 Python 2 answer 구현 . 운 좋게도이 Aheui 인터프리터는 Python으로 작성되었으므로 동일한 트릭을 사용할 수 있습니다.


4
o_O 지구상에서이 언어는 무엇입니까 ... D :
HyperNeutrino

3

05AB1E , 11 10 바이트

[D_#²‰`,³*

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

소요 integer, numerator of base그리고 denominator of base모든 대답있다. 05AB1E 인터프리터는 Python (?)으로 작성되었으므로 Bubbler의 Python 2 답변 트릭은 05AB1E에서도 사용할 수 있습니다.

설명

[D_ # ² ‰`, ³ *
무한 루프
 D_ # 숫자가 0이면 루프를 종료합니다 (암시 적 입력
                                         첫 번째 반복에서)
     ² 염기의 분자를 구합니다
      ‰ Divmod
       `모든 요소를 ​​스택에 넣습니다
        , 나머지를 인쇄
         ³베이스의 분모를 구합니다
          * 곱하십시오.

따라서이 프로그램은이 Python 코드와 거의 동일하게 작동합니다.

i1, i2, i3 = 입력 ()
스택 = []
동안 1 :
 스택 = (스택 또는 [i1])
 스택 + = [스택 [-1]]
 스택되지 않은 경우 [-1] : 중단
 스택 + = [i2]
 스택 = 스택 [: -2] + [divmod (스택 [-2], 스택 [-1])]
 스택 = 스택 [: -1] + 목록 (스택 [-1])
 인쇄 스택 [-1]
 스택 = 스택 [: -1]
 스택 + = [i3]
 스택 = 스택 [: -2] + [스택 [-2] * 스택 [-1]]

11> 10 감사합니다 Neil


나는 당신 _0Q여기 대신 사용할 수 있다고 생각합니다 .
Neil

@ Neil Oh 사실, 부정적인 부울을 잊어 버렸습니다!
Shieru Asakoto
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.