Todos nos han dicho en algún momento de nuestras vidas que dividir por 0 es imposible. Y en su mayor parte, esa afirmación es cierta. Pero ¿y si no era una forma de realizar la operación prohibido? Bienvenido a mi nueva creación: b
-números.
b
-los números son un poco como números imaginarios: el pronumeral principal involucrado representa una expresión que no es matemáticamente imposible ( i
representa ). En este caso , se dirá que representa la expresión . A partir de aquí, es fácil determinar a qué sería igual:
La tarea
Dada una expresión que involucra una división por 0, genera el valor simplificado en términos de . Tenga en cuenta que la entrada tendrá la forma de donde n es cualquier número racional o cualquier número en forma decimal. Los ceros iniciales y los ceros finales no se incluirán.n/0
b
Entrada de ejemplo
4/0
1/0
0/0
80/0
-8/0
1.5/0
2.03/0
-1/0
-3.14/0
b/0
3b/0
-b/0
121/0
Salida de ejemplo
4b
b
0
80b
-8b
1.5b
2.03b
-b
-3.14b
b
3b
-b
121b
Puntuación
Este es el código de golf, por lo que gana menos bytes. Las lagunas estándar están prohibidas.
Tablas de clasificación
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
# Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
b/0 = b
entonces divido ambas partes parab
entonces1/0 = 1
. ¿Necesitoc
números para dividir así?b/b = 0
cuando normalmente (y estoy bastante seguro de que se puede comprobar fácilmente a partir de todos los diferentes axiomas) se espera que sea 1 (de lo contrario, el inverso multiplicativo de b parece no ser su inverso multiplicativo). Estoy bastante seguro de que simplemente no puede hacer una escapatoria contra la división por cero agregandob=1/0
o algo similar.0b
lugar de0
? Si las dos expresiones fueran equivalentes, entonces la pregunta no tendría premisa3.1b/0
Respuestas:
Malbolge Unshackled (variante de rotación de 20 trits), 3,62e6 bytes
El tamaño de esta respuesta excede el tamaño máximo de programa postable (eh), por lo que el código se encuentra en mi repositorio de GitHub (nota: no copie el código usando CTRL + A y CTRL + C, solo haga clic derecho y haga clic en "Guardar elemento de destino como. .. ").
¿Cómo ejecutar esto?
Esto podría ser una parte difícil, porque el ingenuo intérprete de Haskell tardará siglos en ejecutarlo. TIO tiene un intérprete decente Malbogle Unshackled, pero lamentablemente no podré usarlo (limitaciones).
La mejor que pude encontrar es la variante de ancho de rotación fija de 20 trits, que funciona muy bien, calculando (más o menos) al instante .
Para que el intérprete sea un poco más rápido, eliminé todas las comprobaciones del intérprete Malbolge Unshackled de Matthias Lutter.
¡Esta funcionando!
fuente
PHP ,
65646158 bytes-1 byte usando un en
b
lugar de''
(cadena vacía). Como las "b" se recortan, será lo mismo que una cadena vacía en este caso específico.-3 bytes usando en
substr
lugar deexplode
obtener la primera parte de la entrada.-3 bytes mediante el uso de mejores métodos para detectar
1
y-1
.Pruébalo en línea!
Pruebas: ¡ Pruébelo en línea!
Si la primera parte de la entrada antes de "/" (la llamamos
$n
) es 0, imprime 0.De lo contrario, se imprime
$n
con cualquier "b" en el extremo recortado y se manejan casos especiales de -1 y 1, por lo que el dígito "1" no se imprime. Y al final se agrega una sola "b". La parte de recorte es asegurarse de que no obtengamos una doble "b" al final como "3bb".fuente
$n==-1
con$n>0
(-2 bytes) parece funcionar. Podrías intentar eso.$n<0
, eso tampoco funcionará, ya que tenemos entradas como-8/0
.$n==-1?'-':$n
por$n+1?$n:'-'
para guardar 2 bytes!Jalea , 19 bytes
Pruébalo en línea!
Programa completo
fuente
Jalea , 18 bytes
Terminé robando Erik's
ṾṖ$İƑ¡
para este (de lo contrario, también tendría 19) ...Un programa completo que imprime el resultado.
Pruébalo en línea! O vea el conjunto de pruebas .
¿Cómo?
fuente
v
...: DPerl 6 , 32 bytes
Pruébalo en línea!
Un par de expresiones regulares, uno para comprobar si la entrada es
0/0
, y el otro para reemplazar el arrastre/0
con sólob
(y para eliminar el viejob
,1
y / o-1
)Explicación (antigua)
fuente
Retina ,
2824 bytesPruébalo en línea!
Primero intente usar Retina, por lo que probablemente haya un espacio considerable para jugar al golf.
fuente
\b
hace (soy tan inexperto con la expresión regular), me decepcionó un poco descubrir que no se puede acortar al carácter de retroceso no imprimible. De todos modos, gracias\b
es simplemente una representación ASCII del carácter de retroceso en cadenas normales: PPython 3 , 68 bytes
Pruébalo en línea!
fuente
import re
aumenta el bytecount a 64.Barril , 18B
Todo el crédito es para Jono 2906.
Explicación
TIO!
fuente
Wolfram Language (Mathematica) , 37 bytes
Pruébalo en línea!
Toma una lista de caracteres como entrada.
fuente
JavaScript (ES6), 45 bytes
Pruébalo en línea!
Comentado
fuente
C,
209203137 bytes-66 bytes gracias a ceilingcat
TIO
fuente
naz , 64 bytes
Explicación (con los
0x
comandos eliminados)fuente
Brainfuck, 25 bytes
Explicación
fuente
b/0
esperadob
, conseguidobb
;0/0
esperado0
, conseguido0b
;-1/0
esperado-b
, conseguido-1b
./0
parab
y no toma en cuenta ninguno de los casos de0b
,1b
,-1b
o cualquier entrada que ya contienen unb