Saltar al contenido

Sumar sin usar un signo + o –

Puede que se de el caso de que encuentres algún error en tu código o proyecto, recuerda probar siempre en un ambiente de testing antes subir el código al proyecto final.

Solución:

R (24 caracteres)

length(sequence(scan()))

Qué hace esto:

  • scan lee la entrada de STDIN (o un archivo)
  • sequence genera secuencias enteras a partir de 1 y concatena las secuencias. Por ejemplo, sequence(c(2, 3)) da como resultado el vector 1 2 1 2 3
  • length calcula el número de elementos en el vector concatenado

Ejemplo 1:

> length(sequence(scan()))
1: 123
2: 468
3:
Read 2 items
[1] 591

Ejemplo 2:

> length(sequence(scan()))
1: 702
2: 720
3:
Read 2 items
[1] 1422

Perl (sin +/-, sin desempates, 29 caracteres)

s!!xx!;s!x!$"x<>!eg;say y!!!c

Como beneficio adicional, puede hacer que el código sume más de dos números agregando más xs a la s!!xx!.

Alternativamente, aquí hay dos soluciones de 21 caracteres con 1 y 3 desempates respectivamente

say length$"x<>.$"x<>

say log exp(<>)*exp<>

Nota: Estas soluciones utilizan el say función, disponible desde Perl 5.10.0 con la -E interruptor de línea de comando o con use 5.010. Consulte el historial de edición de esta respuesta para conocer las versiones que funcionan en perls anteriores.


¿Cómo funciona la solución sin desempates?

  • s!!xx! es un operador de reemplazo de expresiones regulares, que opera de forma predeterminada en el $_ variable, que reemplaza el vacío string con el string xx. (Usualmente / se usa como delimitador de expresión regular en Perl, pero en realidad se puede usar casi cualquier carácter. elegí ! ya que no es un desempate). Esta es solo una forma elegante de anteponer "xx" para $_ — o, desde $_ comienza vacío (indefinido, en realidad), es realmente una forma de escribir $_ = "xx" sin usar el signo igual (y con un carácter menos, además).

  • s!x!$"x<>!eg es otro reemplazo de expresiones regulares, esta vez reemplazando cada x en $_ con el valor de la expresión $" x <>. (Él g el interruptor especifica el reemplazo global, e especifica que el reemplazo debe evaluarse como código Perl en lugar de usarse como un literal string.) $" es una variable especial cuyo valor predeterminado pasa a ser un solo espacio; usarlo en lugar de " " guarda un carácter. (Cualquier otra variable conocida por tener un valor de un carácter, como $& o $/funcionaría igual de bien aquí, excepto que usando $/ me costaría un desempate.)

    Él <> El operador de entrada de línea, en contexto escalar, lee una línea de la entrada estándar y la devuelve. Él x antes de que sea el Perl string operador de repetición, y es realmente el núcleo de esta solución: devuelve su operando izquierdo (un carácter de espacio único) repetido el número de veces dado por su operando derecho (la línea que acabamos de leer como entrada).

  • y!!!c es solo una forma oscura de (ab) usar el operador de transliteración para contar los caracteres en un string ($_ por defecto, de nuevo). Podría haber escrito say length, pero la versión ofuscada es un carácter más corta. 🙂

D

main()
    int a,b;
    readf("%d %d",&a,&b);
    while(b)a^=b;b=((a^b)&b)<<1;
    write(a);

un poco jugando por la victoria

como beneficio adicional, el código compilado no contiene una operación de agregar (aunque no puedo hablar por la llamada readf)

Calificaciones y reseñas

Tienes la opción de ayudar nuestra publicación fijando un comentario y puntuándolo te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *