Lógica ternaria equilibrada
Ternario es normalmente otro nombre para la base 3, es decir, cada dígito es 0, 1o 2, y cada lugar vale 3 veces más que el siguiente lugar.
El ternario equilibrado es una modificación del ternario que utiliza dígitos de -1, 0y 1. Esto tiene la ventaja de no necesitar una señal. Cada lugar todavía vale 3 veces más que el siguiente. Los primeros números enteros positivos son, por lo tanto [1], [1, -1], [1, 0], [1, 1], [1, -1, -1]mientras que los primeros son números enteros negativos [-1], [-1, 1], [-1, 0], [-1, -1], [-1, 1, 1].
Tienes tres entradas x, y, z. zes o bien -1, 0, o 1, mientras que xy ypuede ser desde -3812798742493a 3812798742493inclusive.
El primer paso es convertir xy yde decimal a ternario equilibrado. Esto debería darte 27 trits (dígitos digitales). Luego tiene que combinar los trits desde xy yen pares usando una operación ternaria y luego convertir el resultado a decimal.
Puede elegir qué valores de zmapear a una de estas tres operaciones ternarias cada uno:
A: Dado dos trits, si cualquiera es cero, entonces el resultado es cero; de lo contrario, el resultado es -1 si son diferentes o 1 si son iguales.B: Dados dos trits, si uno es cero, entonces el resultado es el otro trit, de lo contrario el resultado es cero si son diferentes o la negación si son iguales.C: Dados dos trits, el resultado es cero si son diferentes o su valor si son iguales.
Ejemplo. Supongamos que xes 29y yes 15. En ternario equilibrado, estos se convierten en [1, 0, 1, -1]y [1, -1, -1, 0]. (Los 23 trits cero restantes se han omitido por brevedad). Después de cada una de las operaciones respectivas se convierten en A: [1, 0, -1, 0], B: [-1, -1, 0, -1], C: [1, 0, 0, 0]. Convertidos a decimales los resultados son 24, -37y 27respectivamente. Pruebe la siguiente implementación de referencia para obtener más ejemplos:
La implementación de referencia sigue los pasos anteriores, pero, por supuesto, puede utilizar cualquier algoritmo que produzca los mismos resultados.
Este es el código de golf , por lo que gana el programa o la función más corta que no viole ninguna laguna estándar.

ztiene que ser uno de-1,0,1los tres valores consistentes o distintos? He seleccionado1,2,3en mi respuesta, y hay algo de confusión al respecto.Respuestas:
Limpio ,
231... 162 bytesDefine la función
@, tomando tresIntsy dando unInt.Los operadores mapean como
1 -> A, 0 -> B, -1 -> C.Pruébalo en línea!
La función
$pliega una lambda sobre los lugares de los dígitos[0..26], en una lista de dígitos ternarios. Utiliza el encabezado de la lista que produce para mantener una diferencia total actual del número requerido (por lo que se sigue antes de regresar), ysign(2*t/3^p)para determinar el dígito actual a ceder. El truco del signo es equivalente aif(abs(2*t)<3^p)0(sign t).fuente
$n(creo). ¿Podría agregar una explicación para eso?Jalea , 39 bytes
Un programa completo que toma dos argumentos
[x,y], yz... ¿dónde
zestá el{A:-1, B:0, C:1}que imprime el resultado?
Pruébalo en línea! Nota: el método de golf lo hace lento: esta versión alterada es más rápida (registra 3, techos e incrementos antes de cada producto cartesiano)
¿Cómo?
fuente
R ,
190172151 bytesPruébalo en línea!
Calcula todas las combinaciones de trits y selecciona la correcta. Realmente arrojará un error de memoria
27, ya que3^27es un número algo grande, pero en teoría funcionaría. El enlace TIO solo es11compatible con trit integer; No estoy seguro de en qué momento se agota el tiempo o los errores de memoria primero, ¡y no quiero que Dennis se enoje conmigo por abusar de TIO!respuesta anterior, 170 bytes
Este debería funcionar para todas las entradas, aunque con solo enteros de 32 bits, existe la posibilidad de imprecisión ya que R los convertirá automáticamente
double.Pruébalo en línea!
Toma
-1paraA,0paraBy1paraC.Transmite el enfoque de esta respuesta para la conversión a ternario equilibrado, aunque dado que tenemos la garantía de no tener más de 27 trits equilibrados, está optimizado para eso.
R , 160 bytes
Pruébalo en línea!
Esta versión terminará extremadamente lentamente. El bogosort de la conversión de base, esta función selecciona aleatoriamente los trits hasta que de alguna manera mágica (
3^-54posibilidad de que ocurra) encuentre los trits correctos paraayb, y luego realice la operación requerida. Esto básicamente nunca terminará.fuente
zestá restringido a{-1, 0, 1}.zmapa para una de estas tres operaciones ternarias cada uno: [...]zes o bien-1,0o1, y creo que esos son los "valores dez" hacía referencia.switch(z,...)porswitch(z+2,...)lo que sería un cambio trivial independientemente.Jalea , 47 bytes
Pruébalo en línea!
Programa completo
-1=C,0=A,1=BArgumento 1:
[x, y]Argumento 3:
zfuente
xyyen ternario balanceado: "x e y pueden ser de -3812798742493 a 3812798742493 inclusive. El primer paso es convertir x e y de decimal a ternario balanceado".