Calcule el Divmod superior


13

Tarea

Dados dos números enteros positivos (divId e nd y divis o r), calculan la q uotient y el r emainder.
Normalmente se calcularía como e = o*q+rdónde q*o<=ey 0<=r<o.
Para este desafío sigue siendo e = o*q+rpero q*o>=ey -o<r<=0.
Por ejemplo , e=20y o=3normalmente sería 20/3 -> 20=3*6+2, ya que 18<=20y 0<=2<3. Aquí será 20/3 -> 20=3*7-1donde 21>=20y-3<-1<=0

Casos de prueba

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

No necesitas manejarlo o=0.


3
Lo llamó por ser una variante trivial de divmod regular.
Neil

¿Es aceptable dar salida rcomo la negación de lo real rpara los idiomas que usan bytes sin firmar para almacenar datos o asumir un desbordamiento? ( -11/ 255)
Uriel

@Uriel sí, pero agregue una nota sobre esto en la respuesta
Rod

Respuestas:



8

Jalea , 3 bytes

NdN

Pruébalo en línea!

Cómo funciona

Abusando de divmod nuevamente \ o /. Mira ma 'no unicode!

NdN - Programa completo / cadena diádica. El | Ejemplo: 7, 20

N: niega la primera entrada. El | -7
 d - Divmod por el segundo. El | [-1, 13]
  N - Niega cada vez más. El | [1, -13]


5

Mathematica, 21 bytes

{s=⌈#/#2⌉,#-#2s}&

Pruébalo en línea!


¿Puedes agregar una explicación, por favor?
Rod

2
@Rod ⌈#/#2⌉calcula el límite máximo de su división, y lo almacena en una variable s, y luego resta el argumento 2 * s del argumento 1.
Sr. Xcoder

1
@ Mr.Xcoder eres rápido!
J42161217

5

05AB1E , 4 bytes

(s‰(

Pruébalo en línea!

5 bytes

(‰ćÄJ

Pruébalo en línea!

Cómo trabajan ellos

Abusa del módulo de Python! \ o /

(s ‰ (| Programa completo. Sean A y B las dos entradas. | Ejemplo: 100, 13.

(| Calcular -A. | -100
 s | Intercambiar (invertir la pila, en este caso). El | 13, -100
  ‰ | Divmod. El | [-8, 4]
   (| Negativo (multiplica cada uno por -1, básicamente). | [8, -4]

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

(‰ ćÄJ | Programa completo. Toma la entrada en orden inverso.

(| Negativo. Presione -A.
 ‰ | Divmod
  ć | Empuje la cabeza extraída divmod (haga la pila [cociente, [resto]].
   Ä | Valor absoluto (opera en el cociente).
    J | Únete a la pila.

Ah sí, olvidé que el divmod funciona con números negativos :)
Emigna

Y también, esa es una nueva funcionalidad de J¿no? Nunca he visto eso antes. Definitivamente podría ser útil.
Emigna

@Emigna Se describe como Join. Presione '' .join (a) si a es una lista; De lo contrario, presione '' .join (pila) . Creo que es la nueva funcionalidad, aunque nunca la he usado Jantes: P
Mr. Xcoder

Definitivamente es nuevo. Probé en mi versión local de agosto y 5)6da ['5']6:)
Emigna

4

Alice , 15 bytes

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

Pruébalo en línea!

Explicación

La división de enteros y el módulo de Ruby (en los que se implementan los de Alice) se definen de tal manera que usar un divisor negativo ya hace lo que queremos. Si negamos el divisor, obtenemos automáticamente el módulo correcto, y obtenemos menos el cociente que queremos. Entonces, la forma más fácil de resolver esto es negando un montón de números:

/   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

Julia , 18 bytes

x$y=.-fldmod(-x,y)

Pruébalo en línea!

.-es una negación sabia del elemento, y fldmoddevuelve una tupla hecha de los resultados de la división con piso y el residuo correspondiente.


3

MATL , 5 4 bytes

_&\_

Pruébalo en línea!

-1 byte gracias a Luis Mendo

      # 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 bytes

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

Esta es esencialmente la solución de Mathematica de Jenny_mathy reescrita en J.

Cómo funciona:

a=.>.@% Encuentra el límite máximo de la división de los argumentos izquierdo y derecho y lo almacena en la variable a

,~ concatenado a (invertido)

([-]*a) resta un * argumento derecho del argumento izquierdo

Pruébalo en línea!



2

Lisp común, 7 bytes

La función incorporada ceilingdevuelve dos valores: el techo del cociente y el resto para que coincida:

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

2

JavaScript (ES6), 37 31 29 27 25 bytes

Saved 2 bytes thanks to @Rod
Saved 2 bytes thanks to @ETHproductions

Takes input in currying syntax. Returns [q,r].

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

Test cases


You can probably q=(a+b-1)/b+|0 instead q=a/b+.9|0
Rod

@ETHproductions Sounds like a plan. ;)
Arnauld


1

4, 55 50 bytes

3.711712114001231311141130013513213131211513115154

Try it online!

Representa el recordatorio por su negación (en 10lugar de -10), ya que el lenguaje utiliza la entrada y salida de bytes, considerada válida por el comentario de OP.








0

SNOBOL4 (CSNOBOL4) , 124 123 105 bytes

 E =INPUT
 O =INPUT
 Q =E / O
 R =E - Q * O
 EQ(0,R) :S(A)
 R =R - O
 Q =Q + 1
A OUTPUT =Q
 OUTPUT =R
END

Pruébalo en línea!

Toma datos como E, entonces O, separados por una nueva línea e imprime Q, luego R, separados por una nueva línea.


0

TXR: 8 bytes

Construido en función ceil-rem. Por ejemplo, (ceil-rem 20 7)rendimientos (7 -1).



Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.