위 Divmod를 계산


13

직무

감안 개의 양의 정수 (divId는의 E ND과 원격지에있는 DiViS O , R)는 계산 의 Q uotient 및 R의 emainder한다.
일반적으로 e = o*q+r위치 q*o<=e및 로 계산됩니다 0<=r<o.
이 도전을 위해 여전히 e = o*q+r있지만 q*o>=e-o<r<=0.
예를 들어 e=20o=3, 일반적으로는 것 20/3 -> 20=3*6+2, 이후 18<=200<=2<3. 여기는 20/3 -> 20=3*7-1어디에 21>=20있고-3<-1<=0

테스트 사례

Input -> Output
20, 3 -> 7, -1
10, 5 -> 2, 0
7, 20 -> 1, -13
100, 13 -> 8, -4

당신은 처리 할 필요가 없습니다 o=0.


3
일반 divmod의 사소한 변형이라고 부릅니다.
Neil

부호없는 바이트를 사용하여 데이터를 저장하거나 오버플로한다고 가정하는 언어 r의 경우 실제의 부정 으로 출력하는 것이 허용 r됩니까? ( -11/ 255)
Uriel

@Uriel 네,하지만 이에 대한 메모를 추가하십시오
Rod

답변:


8

파이썬 3 , 39 26 바이트

마틴 엔더 가 13 바이트를 절약했습니다

lambda x,y:(-(x//-y),x%-y)

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

파이썬 2 , 25 바이트

lambda x,y:(-(x/-y),x%-y)

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


나는 당신 x%-y이 나머지를 얻기 위해 할 수 있다고 생각합니다 .
Martin Ender

실제로, 모든 길을 가지 않는 이유는 ...(-(x//-y),x%-y)
Martin Ender

@MartinEnder 정말 좋습니다
Halvard Hummel

@ Mr.Xcoder 둘 다 포함
Halvard Hummel

8

젤리 , 3 바이트

NdN

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

작동 원리

divmod를 다시 사용하면 \ o /. 유니 코드를 보지 마라!

NdN-전체 프로그램 / Dyadic chain. | 예 : 7, 20

N-첫 번째 입력을 무효화합니다. | -7
 d-두 번째로 Divmod. | [-1, 13]
  N-각각 다시 부정하십시오. | [1, -13]



5

05AB1E , 4 바이트

(s‰(

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

5 바이트

(‰ćÄJ

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

작동 방식

파이썬의 모듈로를 남용합니다! \영형/

(s ‰ (| 전체 프로그램. A와 B를 두 개의 입력으로 설정하십시오. | 예 : 100, 13.

(| 계산 -A. | -100
 s | 스왑 (이 경우 스택을 뒤집습니다). | 13, -100
  ‰ | Divmod. | [-8, 4]
   (| 음수 (기본적으로 -1을 곱함). | [8, -4]

-------------------------------------------------- -

(‰ ćÄJ | 전체 프로그램. 입력을 역순으로 수행합니다.

(| 부정. -A를 누릅니다.
 ‰ | 디 모드
  ć | 헤드 추출 된 divmod를 밉니다 (스택을 quot, [remainder]].
   Ä | 절대 값 (몫에서 작동).
    J | 스택에 가입하십시오.

아 네, divmod가 음수로 작동한다는 것을 잊었습니다 :)
Emigna

또한, 그것은 새로운 기능 J입니까? 전에는 본 적이 없습니다. 확실히 유용 할 수 있습니다.
Emigna

@Emigna 조인이라고합니다. a가 목록이면 ''.join (a)을 누릅니다. 그렇지 않으면 ''.join (stack)을 누릅니다 . J이전 에는 사용해 본 적이 없지만 새로운 기능이라고 생각합니다 . : P
Mr. Xcoder

확실히 새롭습니다. 8월에서 내 로컬 버전을 시도하고 5)6있습니다 ['5']6:)
Emigna

4

Alice , 15 바이트

/O.
\io/R%e,R:R

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

설명

루비의 정수 나눗셈과 모듈로 (앨리스가 구현 된)는 음의 제수를 사용하여 이미 우리가 원하는 것을 수행하도록 정의됩니다. 제수를 부정하면 자동으로 올바른 모듈로를 얻게되고 원하는 몫을 빼게됩니다. 따라서 이것을 해결하는 가장 쉬운 방법은 많은 숫자를 무효화하는 것입니다.

/   Switch to Ordinal mode.
i   Read all input as a string "e o".
.   Duplicate the string.
/   Switch to Cardinal mode.
R   Implicitly convert the top string to the two integer values it
    contains and negate o.
%   Compute e%-o.
e,  Swap the remainder with the other copy of the input string. We can't
    use the usual ~ for swapping because that would convert the string 
    to the two numbers first and we'd swap e%-o in between e and o instead
    of to the bottom of the string.
R   Negate o again.
:   Compute e/-o.
R   Negate the result again.
\   Switch to Ordinal mode.
O   Output -(e/-o) with a trailing linefeed.
o   Output e%-o.

    The code now bounces through the code for a while, not doing much except
    printing a trailing linefeed when hitting O again. Eventually, the IP
    reaches : and attempts a division by zero which terminates the program.



3

MATL , 5 4 바이트

_&\_

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

Luis Mendo 덕분에 -1 바이트

      # implicit input
_     # unary minus (negates first input, o)
&\    # alternative output mod, returns remainder, quotient, implicitly takes e
_     # unary minus, takes the opposite of the quotient.
      # implicit output, prints stack as remainder
                                         quotient


2

J , 16 바이트

([-]*a),~a=.>.@%

이것은 본질적으로 J로 다시 작성된 Jenny_mathy의 Mathematica 솔루션입니다.

작동 방식 :

a=.>.@% 왼쪽과 오른쪽 인수의 나누기 한도를 찾아 변수 a에 저장합니다

,~ 연결됨 (역순)

([-]*a) 왼쪽 인수에서 a * right 인수를 뺍니다.

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



2

공통 리스프, 7 바이트

내장 함수 ceiling는 몫의 천장과 일치하는 나머지 값을 반환합니다.

$ clisp -q
[1]> (ceiling 20 7)
3 ;
-1

2

자바 스크립트 (ES6), 37 31 29 27 25 바이트

@Rod 덕분에
2 바이트 절약 @ETHproductions 덕분에 2 바이트 절약

카레 구문으로 입력을받습니다. [q, r]을 반환합니다 .

a=>b=>[q=~-a/b+1|0,a-q*b]

테스트 사례


q=(a+b-1)/b+|0대신에 가능 합니다q=a/b+.9|0
Rod

@ETHproductions 계획처럼 들립니다. ;)
Arnauld


1

4 , 55 50 바이트

3.711712114001231311141130013513213131211513115154

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

이 언어는 OP 주석에서 유효한 것으로 간주되는 바이트 입력 및 출력을 사용하므로 무시 () 10대신 알림을 나타 -10냅니다.









0

TXR : 8 바이트

내장 기능 ceil-rem. 예를 들어 (ceil-rem 20 7)수율 (7 -1).



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