Código más largo para agregar dos números [cerrado]

38

Tarea:

Sé que todos podemos sumar dos números de la manera corta, usando +. Su tarea es crear el código más largo posible para agregar dos números de entrada.

Reglas:

  • Todo el código debe estar en el tema (no lo llene con código de no adición para agregar longitud)
  • El recuento está en caracteres, pero no cuente las pestañas, los espacios o las nuevas líneas.
  • No use nombres de variables extraños
  • Este es , ¡así que gana la respuesta más larga!
TheDoctor
fuente
2
¿Cuál es el rango de los números de entrada (máximo y mínimo)? ¿Se espera que el programa funcione con números enteros o flotantes? ¿Se espera agregar números negativos? ¿Hay algún formato de entrada específico? (Por ejemplo, sistema de números? Es decir, decimal / binario, etc.)
pastebin.com slash 0mr8spkT
3
No a + b - b + b...cuentan? Sería infinito
phuclv
1
El algoritmo más largo para agregar dos números es (bastante trivialmente) probablemente infinito. Para este problema, el ganador debe ser el más creativo y tortuoso (que es un desafío) en lugar de simplemente el más largo (que no lo es).
J ...
En caso de que no cuente ningún espacios y saltos de línea, o sólo los que no se requiere para el programa para la función? Yo diría que lo último sería más sano.
nyuszika7h
1
@ LưuVĩnhPhúc Si haces eso infinito, creo que eso equivale a a + b/2, no a + b(es similar a la serie de Grandi ).
Tim S.

Respuestas:

6

C ++ MÁS DE 3x10 ^ + 618 (SIN ESPACIOS BLANCOS, pestañas o líneas nuevas)

¡Este código tomó más matemáticas que lógica! en contar el número de bytes

CÓDIGO CORTO

#include<iostream>
#include<conio.h>
long double sumofxandy(long double,long double);
int main()
{
    long double x,y;
    cin>>x>>y;
    sumofxandy(x,y);
    getch();
    return 0;
}
long double sumofxandy(long double x,long double y)
{
    ...
    ...
    ...
    if(x==0)if(y==-1)return -1;
    if(x==0)if(y==0)return 0;
    if(x==0)if(y==1)return 1;
    ...
    ...
    ...
    ...
    if(x==1)if(y==0)return 1;
    if(x==1)if(y==1)return 2;
    ...so....on.
}  

SALIDA

De Verdad ? ¡seriamente! quieres ver salida? ¡Este código tardaría semanas en escribirse y meses en compilarse!

Mukul Kumar
fuente
44
Robar ... err quiero decir adquirir computadora cuántica
MisterBla
@RichardA Por cierto, la etiqueta de ataque es '<strike>' y no <s>
Mukul Kumar
1
@TheDoctor, los nuevos usuarios (1 día - 2 meses) nunca miran hacia abajo, se quedan boquiabiertos ante la primera respuesta, denles un voto positivo y respondan a otra pregunta
Mukul Kumar
1
Hay un error en tu código. ¿Qué pasa si xo yno es un número entero?
Cole Johnson
1
Una lástima que esta respuesta sea aceptada solo debido al uso prolongado, mientras que la idea ya está presente en la respuesta de la Comintern más votada a continuación.
solo
148

C - 2.739.341.494.945.868.415.002 (sin incluir espacios en blanco)

Fuerza bruta para la victoria. Solo maneja enteros y conserva el comportamiento de desbordamiento. Aquí hay un fragmento del código:

int addnumbers(int x, int y)
{
    if (x == -2147483648 && y == -2147483648) return 0;
    if (x == -2147483648 && y == -2147483647) return 1;
    if (x == -2147483648 && y == -2147483646) return 2;
    if (x == -2147483648 && y == -2147483645) return 3;
    if (x == -2147483648 && y == -2147483644) return 4;
    if (x == -2147483648 && y == -2147483643) return 5;
    if (x == -2147483648 && y == -2147483642) return 6;
    if (x == -2147483648 && y == -2147483641) return 7;
    if (x == -2147483648 && y == -2147483640) return 8;
    if (x == -2147483648 && y == -2147483639) return 9;
    if (x == -2147483648 && y == -2147483638) return 10;
    if (x == -2147483648 && y == -2147483637) return 11;
    if (x == -2147483648 && y == -2147483636) return 12;
    if (x == -2147483648 && y == -2147483635) return 13;
    if (x == -2147483648 && y == -2147483634) return 14;
    if (x == -2147483648 && y == -2147483633) return 15;
    if (x == -2147483648 && y == -2147483632) return 16;
    if (x == -2147483648 && y == -2147483631) return 17;
    if (x == -2147483648 && y == -2147483630) return 18;
    if (x == -2147483648 && y == -2147483629) return 19;
    if (x == -2147483648 && y == -2147483628) return 20;
    if (x == -2147483648 && y == -2147483627) return 21;
    if (x == -2147483648 && y == -2147483626) return 22;
    if (x == -2147483648 && y == -2147483625) return 23;
    if (x == -2147483648 && y == -2147483624) return 24;
    if (x == -2147483648 && y == -2147483623) return 25;
    if (x == -2147483648 && y == -2147483622) return 26;
    if (x == -2147483648 && y == -2147483621) return 27;
    if (x == -2147483648 && y == -2147483620) return 28;
    if (x == -2147483648 && y == -2147483619) return 29;
    if (x == -2147483648 && y == -2147483618) return 30;
    if (x == -2147483648 && y == -2147483617) return 31;
    if (x == -2147483648 && y == -2147483616) return 32;
    if (x == -2147483648 && y == -2147483615) return 33;
    if (x == -2147483648 && y == -2147483614) return 34;
    if (x == -2147483648 && y == -2147483613) return 35;
    if (x == -2147483648 && y == -2147483612) return 36;
    if (x == -2147483648 && y == -2147483611) return 37;
    if (x == -2147483648 && y == -2147483610) return 38;
    if (x == -2147483648 && y == -2147483609) return 39;
    if (x == -2147483648 && y == -2147483608) return 40;
    if (x == -2147483648 && y == -2147483607) return 41;
    if (x == -2147483648 && y == -2147483606) return 42;
    if (x == -2147483648 && y == -2147483605) return 43;
    if (x == -2147483648 && y == -2147483604) return 44;
    if (x == -2147483648 && y == -2147483603) return 45;
    if (x == -2147483648 && y == -2147483602) return 46;
    if (x == -2147483648 && y == -2147483601) return 47;
    if (x == -2147483648 && y == -2147483600) return 48;
    if (x == -2147483648 && y == -2147483599) return 49;
    if (x == -2147483648 && y == -2147483598) return 50;
    if (x == -2147483648 && y == -2147483597) return 51;
    if (x == -2147483648 && y == -2147483596) return 52;
    if (x == -2147483648 && y == -2147483595) return 53;
    if (x == -2147483648 && y == -2147483594) return 54;
    if (x == -2147483648 && y == -2147483593) return 55;
    if (x == -2147483648 && y == -2147483592) return 56;
    if (x == -2147483648 && y == -2147483591) return 57;
    if (x == -2147483648 && y == -2147483590) return 58;
    if (x == -2147483648 && y == -2147483589) return 59;
    if (x == -2147483648 && y == -2147483588) return 60;
    if (x == -2147483648 && y == -2147483587) return 61;
    if (x == -2147483648 && y == -2147483586) return 62;
    if (x == -2147483648 && y == -2147483585) return 63;
    if (x == -2147483648 && y == -2147483584) return 64;
    if (x == -2147483648 && y == -2147483583) return 65;
    if (x == -2147483648 && y == -2147483582) return 66;
    if (x == -2147483648 && y == -2147483581) return 67;
    if (x == -2147483648 && y == -2147483580) return 68;
    if (x == -2147483648 && y == -2147483579) return 69;
    if (x == -2147483648 && y == -2147483578) return 70;
    if (x == -2147483648 && y == -2147483577) return 71;
    if (x == -2147483648 && y == -2147483576) return 72;
    if (x == -2147483648 && y == -2147483575) return 73;
    if (x == -2147483648 && y == -2147483574) return 74;
    if (x == -2147483648 && y == -2147483573) return 75;
    if (x == -2147483648 && y == -2147483572) return 76;
    if (x == -2147483648 && y == -2147483571) return 77;
    if (x == -2147483648 && y == -2147483570) return 78;
    if (x == -2147483648 && y == -2147483569) return 79;
    if (x == -2147483648 && y == -2147483568) return 80;
    if (x == -2147483648 && y == -2147483567) return 81;
    if (x == -2147483648 && y == -2147483566) return 82;
    if (x == -2147483648 && y == -2147483565) return 83;
    if (x == -2147483648 && y == -2147483564) return 84;
    if (x == -2147483648 && y == -2147483563) return 85;
    if (x == -2147483648 && y == -2147483562) return 86;
    if (x == -2147483648 && y == -2147483561) return 87;
    if (x == -2147483648 && y == -2147483560) return 88;
    if (x == -2147483648 && y == -2147483559) return 89;
    if (x == -2147483648 && y == -2147483558) return 90;
    if (x == -2147483648 && y == -2147483557) return 91;
    if (x == -2147483648 && y == -2147483556) return 92;
    if (x == -2147483648 && y == -2147483555) return 93;
    if (x == -2147483648 && y == -2147483554) return 94;
    if (x == -2147483648 && y == -2147483553) return 95;
    if (x == -2147483648 && y == -2147483552) return 96;
    if (x == -2147483648 && y == -2147483551) return 97;
    if (x == -2147483648 && y == -2147483550) return 98;
    if (x == -2147483648 && y == -2147483549) return 99;
    if (x == -2147483648 && y == -2147483548) return 100;
    //etc...
}

Obviamente, esto es demasiado grande para cargarlo aquí o en Pastebin, por lo que aquí hay un programa que generará el código fuente de la función (dirige la salida a un archivo, suponiendo que tenga el espacio en el disco):

#include <stdio.h>

int main()
{
   int x, y;
   printf("int addnumbers(int x, int y)\n{\n");
   for (x=-2147483648;x<2147483648;x++) 
   {
      for (y=-2147483648;y<2147483648;y++) 
      {
         printf("\tif (x == %d && y == %d) return %d;\n", x, y, x+y);
      }
   }
   printf("}\n");
}

Me estremezco por cuánto tiempo sería la función durante largos largos ...

EDITAR: recalculó la puntuación (debe ser correcta) para dar un recuento exacto. Prefiero pensar que jugué golf por 10²² caracteres cuando eliminé el espacio en blanco.

Comintern
fuente
52
Me tienes en el fragmento del código .
Dennis
23
Cada vez que alguien describe el desarrollo basado en pruebas como "hacer lo mínimo para que la nueva prueba pase", este tipo de código siempre aparece en la mente ...
Izkata
22
Sabes que podrías hacer esto más largo si lo usas else if.
Radiodef
40
También podría definir constantes con nombre separadas para cada uno de los enteros ( LEFT_SIDE_NEG_2147483648 = -2147483648) ... es una buena práctica usar nombres descriptivos en lugar de valores codificados, ya sabe.
Jason C
35
¿Te pagaron por línea de código?
Pieter Witvoet
20

C ++, 3573

3573, entonces se estaba volviendo aburrido, pero puedo continuar agregando más capas de abstracción.

#include <iostream>
#include <vector>

class Number
{
public:
   typedef int Representation;
   class InvalidNumber
   {
   };

   Number();
   Number( const InvalidNumber& invalid );
   explicit Number( const Representation& v );
   friend Number operator + ( const Number& rop, const Number& lop );

   bool operator == ( const Number& v );
   bool operator != ( const Number& v );
   bool operator == ( const Representation& v );
   bool operator != ( const Representation& v );

   bool IsValid() const;
   Representation GetRepresentation() const;
private:
   Representation mValue;
   bool mValid;
};

Number::Number()
   : mValue { 0 },
     mValid { false }
{
}

Number::Number( const Number::InvalidNumber& invalid )
   : mValue { 0 },
     mValid { false }
{
}

Number::Number( const Representation& v )
   : mValue { v },
     mValid { true }
{
}

bool Number::IsValid() const
{
   return mValid;
}

Number::Representation Number::GetRepresentation() const
{
   return mValue;
}

bool Number::operator == ( const Number& v )
{
   return ( v.mValid == mValid ) && ( v.mValue == mValue );
}

bool Number::operator != ( const Number& v )
{
   return ( v.mValid != mValid ) || ( v.mValue != mValue );
}

bool Number::operator == ( const Number::Representation& v )
{
   return ( mValid ) && ( v == mValue );
}

bool Number::operator != ( const Number::Representation& v )
{
   return ( !mValid ) || ( v != mValue );
}

Number operator + ( const Number& rop, const Number& lop )
{
   if( rop.mValid && lop.mValid )
   {
      return Number { rop.mValue + lop.mValue };
   }
   else
   {
      return Number { Number::InvalidNumber() };
   }
}

Number NumberParser( const char* numberString )
{
   const char* p = numberString;
   while( *p != '\0' )
   {
      if( !isdigit( *p ) )
      {
         return Number { Number::InvalidNumber() };
      }
      ++p;
   }
   Number::Representation value = atoi( numberString );
   return Number { value };
}

std::ostream& operator<< ( std::ostream& os, const Number& num )
{
   if( num.IsValid() )
   {
      os << num.GetRepresentation();
   }
   else
   {
      os << "Invalid number";
   }
   return os;
}

class SimpleOperation
{
public:
   typedef Number Result_t;
   typedef Number Parameter_t;
   virtual ~SimpleOperation();
   virtual Result_t operator()( const Parameter_t&, const Parameter_t& ) = 0;
};

SimpleOperation::~SimpleOperation()
{

}

class AssociativeOperation : public SimpleOperation
{
};

class SimpleSum : public AssociativeOperation
{
public:
   virtual Result_t operator()( const Parameter_t&, const Parameter_t& );
};

SimpleSum::Result_t SimpleSum::operator()( const Parameter_t& a, const Parameter_t& b )
{
   Result_t res = a + b;
   return res;
}

class PackOperation
{
public:
   AssociativeOperation::Result_t operator()( const std::vector<AssociativeOperation::Parameter_t>& );
   virtual AssociativeOperation& getOperation() = 0;
};

AssociativeOperation::Result_t PackOperation::operator()( const std::vector<AssociativeOperation::Parameter_t>& parameters )
{
   AssociativeOperation& operation = getOperation();
   AssociativeOperation::Result_t tempResult = AssociativeOperation::Result_t { 0 };

   for( auto param : parameters )
   {
      tempResult = operation( tempResult, param );
   }
   return tempResult;
}

class PackSum : public PackOperation
{
public:
   virtual AssociativeOperation& getOperation();
private:
   SimpleSum mSum;
};

AssociativeOperation& PackSum::getOperation()
{
   return mSum;
}

void print_usage()
{
   std::cout << "Sum operator1 operator2\n";
   std::cout << "print the sum of the operator \n";
}

void print_parsingError( int argIndex )
{
   std::cout << "Error while parsing argument " << argIndex << "\n";
   std::cout << "Aborting...\n";
}

void print_result( Number res )
{
   std::cout << res << "\n";
}

int main( int argc, char* argv[] )
{
   if( argc < 3 )
   {
      print_usage();
      return 1;
   }
   std::vector<Number> addends;
   int opIdx = 1;
   while( opIdx < argc )
   {
      Number n = NumberParser( argv[opIdx] );
      if( n == Number::InvalidNumber() )
      {
         print_parsingError( opIdx );
         return 1;
      }
      addends.push_back( n );
      opIdx++;
   }
   PackOperation* op = new PackSum();
   Number result = ( *op )( addends );
   delete op;
   print_result( result );
   return 0;
}
ilmale
fuente
77
Lo que da miedo es que esto se parece al código que he visto en mi empresa para tareas tan mundanas = d.
Serdalis
12

Ruby, 29048 (puede ser tan alto como sea necesario, pero tuve que ponerlo por debajo del límite de caracteres para las publicaciones)

require 'zlib'

# gzip deflated data
data = "x\x9C\x01\xA3'\\\xD8x\x9C\x01\x98'g\xD8x\x9C\x01\x8D'r\xD8x\x9C\x01\x82'}\xD8x\x9C\x01w'\x88\xD8x\x9C\x01l'\x93\xD8x\x9C\x01a'\x9E\xD8x\x9C\x01V'\xA9\xD8x\x9C\x01K'\xB4\xD8x\x9C\x01@'\xBF\xD8x\x9C\x015'\xCA\xD8x\x9C\x01*'\xD5\xD8x\x9C\x01\x1F'\xE0\xD8x\x9C\x01\x14'\xEB\xD8x\x9C\x01\t'\xF6\xD8x\x9C\x15\xD0S@%\x8A\x02@\xD1\\\x93m\xE3d\xDB\xB6m\xDB\xB6\xED\x9Al\xDB\x93m\xDB\xB6m\xFB\xBD\xFB\xB5\xBE\xF7\xF6\xC8\x06~\x05@\xAD{d\x03_\x01P\xFEc\x1F\x80\xFF\x1F+\x00\xCA\xFF\x98\x04\xB0\xFCG\x1F\x80\xFF?\x9A\x01R\xFFQ\tP\xFD\x8F<\x80\xC1\x7F$\x03\xAC\xFF#\x12\xE0\xF6\x1F~\x80\xC0\xFFp\x06\xC4\xFC\x87\x05 \xED?t\x01\x85\xFF\xA1\x04\xA8\xF9?h+\xC6\xC2dQ \x02\xF36r\xE96\x9B-\xB6\x9B+&\x9B-\xD7I\xB6\x9B\xE91I\x9C\xEB\xB5\xAF7e\xCF(//S\xE0h\x85g\xBBwS\xE0\xA6e\xE9\x1F\b\xD8Q)\xBF\x84\xC5k\x9F\b.Q\xD1\xBF\x01%\x1E?\xF1\xF6Ns\xD3\xBF\x8F\x02qw\x04\xE6G\xBD\xBF\xA0\x12r\x0F\x04\xFE\xE3\xE7\xBF\xC6\xD9\xD9\x97\xFC^c\xA2\xBFE\t:\xFB\xFC\x13\xE3\xCD\xBF$\xE1[W\xFC\xC8\xE3x\xBF\b#\xE5\x15\x88~4\x98cA\xEF+36Y\xDFj\x9B)\xEF3%\x10\xDD\xE7b\xBBa\x9F.Y\xDF\x86\xB7\xD3\xE4\xAD\xFDaH\x14\x1F\xF9\xD7\xBF\x8E\x02\xF6_\x8Ci\xBD\xDC\xD7\xE2\xF9\x1F?3\xF9H\xFE\xD0\x7F\xD5\xEC\xDE\x7Fh9\xB8\x10\xE7\xCAI_\x1F\xB3|\x9E\xF4\x81*\x91wN\xED3\xE7\xCB\x80\f\x8Fs\xEBXun\x8E_\xF3\xEC\xA0\xC7\xEB\xBC\x1CN\xF7\b\xF0\x1E\xA2f\x81j,qP\x9EFx\x0FoN\xCFQ\xC2\xB98\xB4\xA0a\x95\v#\xC8\xDB\xE3\xC9;\xDF\tL\xCCK\xC9rOKl\x8E\xBDs\xF8\xB6\x18\xA0\xADn\x9E\xE9\xAE\xFE\xF5\xB4;\xEA\xBF\x87\xB2\xF4\xD6=\xDC\xDEl\xBA\x10\x8B\xED\x10\xF8\\7\xDE\x9A\x90p\xE5\xD1\xF3/\xCF\xAD\x96\x13\xC9\x15\xCB\xC3\x84U\xCB#\x19\xE2\x0E\xDB\x83wt\xB8\xFF\x99[c\xDD%(y\xCB\xDB#\xAC\x956\xE1l\xE6\xCF\xDB\xFF\xF4\xF1\x8A\xC8\x03\xCA\\e\x91L\xCD\a@\x87u\xAD\x1EZZ\xB2\xFEB\x999\x97l8\xEB\xC4q.\xF3\xC5\x19\x1Fk\xD6\x95\xC17:\xEAI \x93?\x91(\xEDG\x0E^\x0EW\xA4\xF0\xB4\xFD\x9D\xAC\x8B\x1A\x9Fqw\x8B)J\xF2\xEB0\xE1\x01\xD0\xC4\x04\x13@/M\xEB\x13*$w?\x95fmS\xBF]>\xB7\xD9\xA4\xF8[\x1E?\xF0\xE7m|\x89\x1C\xD0-\xE7\xF7h\xDF\xC3\xC0\xF0\xC4\x12\x06\xF9\xF0\xCD\xDD\xE9\xFB\x94\x1A\x98:\x98\xD6\xAF\xC6YH\x1A2\xF0\xF2\xF9\r\xFE\x94O\xEEtm\x8F\xB7\x92xL\x88\xEA\xF9\x1CM\xA5\x89\x8D\xC4<9\xA1\x95\tJ\xE4\xDA\xF2U\xE3\x84uO\xD3\x84\xC6CN\x87\xFC{a\x99\xF9\x9D|g\xD31\xD8+*\x16\xF2YD!F\xEC\x8D[\xFA\xD3\xBE.Rs\xAD\xBC\x05\x81T\x11\x1FLJn]H\ev\xFAvB?\x99S7\x9Ad8X\xC0s\x93\xF6\x12\xB4\x8C\\\xEE)\x90\"Y`\xE5\xC7\xE6\xA4\xF1\xC1\xB0\xFE\x128V\x1A6\xE9\\\xDF\xBFVM\xAEa(\x8E\xEC .\xC4^)$B~^\xAD\x9A2\x8E\x84\x05J\x04\xCF\xA8\xD2\x82\xB4-\x06RvfU? \x02j\xF0\xDE\e\xCC\xD3\x1FW\xAA\xF2\xD6\xCD\xB21a\x8D\xCE\xC7\xAC\xC6eH\xA2\xF6E\x97\xE9\x1D\x1F\x1A2\x85\xFF\xC7\xD5'\xA2\xDD\xCE\xEBk\x11l\x93\xB1\a)/\xA1i\xBF\x9E\xE3\x82m\xF8|\x9E\x13Y#\xE5\x9C\xED0p\f\xC3\x97_\xBEB\xFE\xB0\xE4\xF0\xC4\xF5bu\x84n\x16\xF2\x12\xBE\xFE\x05<\xDD\xB5\x8E\xDE\xCAq\e\xB6\x17\xDE$\x1F\xD4V8Le\xDC\xDB\xC2\xAB\xF1\x03\xCE\xEF\xA22\xDD\xE3cxt\xB8\xD9\x97*d{\x8F\xC7\xF0\x9F\xF5\xB7L\x8D\xED\t V\x1D\b\xABz\xF2\x82\xFB\xFE\xE0~/z\x7F\xCA\xD2\xF2\x1F\x01\xEDD\x9CM\xDE4t\xFE|\xAF\xE3\xC8\x90E\xB8\\\xAC\xFDs\xFB\xDF:\xF0h\xE5K\x18\xD3\x14\x80\xDC\xB8we\xA2!\x83\r\xF71\x9C\x82\xA9K\x84\xB0\x98b\x13\x85\xAF\xD4\x10\xF0\xC0\x05\x94\t\xA1j\xF4v\xA7\x7F\xD8\x89\x18\aj\xAD<Ymvv\xC7\xA9L\xC7\xE2\x93\xFE}F&\n\xDD\bE\x9B\xDC^jW/g\xDA\xF5\xA6\x87\v\xE3\e`d\xC7\x9F\xF1\v\xCA\x9As\xA0\xB3\r\xDCt\xC1\x9AL\xEDU\xCF\x03\xAD\x181\x18|?\x16\xF2\xB7\xCD\xC1x=B\xB4'\xD0E\xE8\x00\xDA\xC7F\x14\xD1H\x13%\xC18\x16\x82\xF8I\x92\xE5\xE9\aw\xFD\x93$\xB1\xB5\x98d\xD4\xBF\x9A<\x1F\xC9\x0F\xFD\xAB\x82\xF5\x0E\x92i&\bQ\xAA\x9Eb\xEDg\vF6\xC6\xC0i\xDBF\xE0\x06[U\xA8\x82\xA8\x17\xF8\xDA\xA0\xB9\xED}J\xF0>\x91\xEB\x0F\x8F\xC3\x96\xA9\xF0\x02\x9C\xA1\x1F]\xFC\xE2X\x11)\xDF\xC5F\xC1*\xD6Y\xEB\x05F\xD7VI\xCF\x1D\xBD\x1E\x13\x8EN~t\xD8(\x81\xC2\xCC\xE97\xC3\x91\xAC\x10\x18\r\xA8\x9D\xC9S\xD4\x81\"d\x81\xF9c\x8A\xF3\xDAe\xE6~\xEFan\x03\xBEQ\xB2\xFD\x9A\xFC\x13\xDCkz\xB8\xBDa\xAD\x15\xAC9\x9C>\xDC\x00\xD1\xE6\xAB\xC7\xC4\x0F\x1A\x9B\x9E:\xC3\xE2\x14\xF7\xC8hz\xC0\x1CT\x06\xC3=\xCD}j\xE7\xDD\x90\xF2\xCD!\x9E\x95\x8A6\x01\xE2\xBAfw<\xD3I\x88\x80\x80\xD8\xA8\xD3\x96\x91o\nFY\xDB\eg\x84\xB5\x0E\xEE\x04\b-\xA6\e\x05\xE5\xF1\x99\x92w\x1A\\|\xE8\xE8K\xD1\xCD\x99\xC69\xDC\x87\x16\xC4\x12uJ\x87b\x80\xDF&}\xF3\xEF\x83\xBA\x8F\x95\x9A\xCDD\x01\xA7\xC9\xB3u\xE5$\f\x05\xBD\x94\xD3\x90\x0FX\xDC\xED\xB6\x8A*9\xB7\xCE?\x0E\xDBl\xC6J\xFC\xBD-\rna\x94\x0E\x18*U\xF5\xC9\a\x197\x9A\xD9\xB9Q+,'\xDC\x1A\xBD\x83\x9DV\t\x7Fak\xBE~'\xBDb\xDAL*\x98\xF6\xB6Xbpvx\xD8\xCC\x12\xB6\xFB\xBDG\x18\xB5qE:q\xD8\xB4\xE0\x04\xBB\xAB\"\x1AF\xAB;\xC7_\xE5\x8Cg\xAFQ3\xACN\x91\f<\xAF\xE9Zh\"7\xA3N[Q93\xBA\xEFp\xDDQ@\xBC|\xF9/\xD6\x949\xD9\xCA,\xB5\xD9s\xCC\x03b@\xB7\xEE\xD8HR\x1A#%\"~\x93\x95\x7F\x90~ZR\x8Fsm\xC0\x9C\xCD%J\x00\x90\x84\x992\xE8\x87\xC9\xE2\xDCj\x1DF\x03\xC5\x19\x85\x15\xBE\xF2\xA4\xF1\xB1j\xAA\x93\xA8\xA9\x82\xD1|\xC5\xC3\xD2\xF9\xAC\x16\b\xAD\xABE|\xE7\xF9`\xE7A2;\xA8\x98\xF5:\xD0\x8C\x94\xDF\xD8\x04\xFC\a\xE3vU\xA2L\x8AnE\x8A\x12S\av\xE9\xAD\x9B\x92\xEA\xD2\xD4s\x0E\x14 \xE3\x89m'\x8EY\x95,9\xC2\xC8\xDEM\xCE\xEC_\xD3\x1Eec\xE4\x8C\xAB&\xD4\xC0\x1C\xB0\x87\x10\xE3km\xCF\x96\xBB,\n\x9B\xE8g,\xDE\x06\x03\xD4\x1FGG\x91~\x10Fw\xC1\xD1\x8A\xC7>2\xE6\xD4F\a\xC8\xDD8\xCA+\xEE\xE6s\xB6h\x87\x12\xBFL\xEE\xE8T\x96\xCD\xC4X\xB1VK\xCF&\xCE\x9C\x05Q\xD4\xC1r\xFE\x0F\xE8L\xD1\xD9\xDCb\x8F\xAA3\xE5\xBC\xD5\x8B\xBB\x8A\"Q\r\xC5\x84{\xCB|\xDB\xAC\x90\x1Ei\xD6\xE0GIc_\xDE(\xF9d\xFA\xA0\x9C.\xF7\x8Cc\n\xA4\xB9\a\xD7\xB1\xA10\xA5i\xEBW\x8B\xF5VV~\a\xEE_\x9F\x85\x18\xD3 \xC8\x14\x10\xE4\xB4\vDf\x0E&\x96\xAE\x180\xCFX\x01\xCB\x80&\x9E\xDC\xF4\xB9\rx\xB2\\i\xAA\xE5^\x9C\x15\x8FY\x10\x03H\xEB\xBC,c\xA3k\x84>\x88|\xA3K\xCFD\xE5\x92\x8Ev\x80\xE3\xED\xB2I3\x0EH-Kh%3;\xFD\x8BfS\xE0\x82z\xBF\x1E\x8A(W\xF8P\xA0\xBF\x1F$\xBA3s\f\x92\xD5w\xA4m\x1D\x0Fa\x10\x10\xF74\x02<\t\xB4$k\x15%\xD2m\x85\xB8n\t]dv\xE1\r\x93!k\x8C\xC4\xC1\xE776>a8\xAC-\x1A\x03\xC6Uj~\x8A\x91F\x0E\xEDM\xEF\x9B\xD2\xDBY\xAE\xF8K\xB7n\xA4\xD4\xA0i\xFAa\xF7\xD6\xDFn\x13s\x8E\x98`\xE3Ku`\xE9\xDD\xDB;\x8A\xDE\x0E\x87\xA7\xA4\xF4c:\xE2\xB9\xBBf*\xEE\x03\x80E\x1F\xD7\x92\xE9\xB3\x14\x18\x1D\xE3\xBF\xF0`\xE3\"\xFE\xC4d\x82eqq\xE7\x83\xB2\xFE\x8BH\x01\x8Fe\x850>V\x8A\xE2\xD50 \xCF\xAE5]\x9F\xDFdm\xF6\x9Dr\x86\xF7\xF7#z)\x87\xCE\xA1\x86\xB9\xF7\xF6XO\xC5\xD7P\x0Fx5\xA8\xD4Buj\xDD\xD7\x83\b\xE3\xBF\xEA~\xB6\xA5\xBC>\x8A\x99Gp\x87\n\xA6s\x9A\x11\xC0\xE1VD\xE0\xB4\xF3\x9A\xE9\xA5\x89\xB6\xF7oQ\xD7\xEF<\x7FB\xC9/p2\xEE\xD4\xDD\xE5;\xAAc\x1F\xECWP\xB0/\xAE:\xEE1\xF8\x9D\xEF\x94\xD1\x87i\x82it\x0E\x86\xEAA\x9C\x1A\xC7*\xFA\xAA\x05\xC8l\xCD\xD3\x84W\xB0\\\x9F\xA9\xDD\xFF\xF2`8\xDF_,\xB8\xA7q\xE07=V %\xE1\x9DX\x80\e\x15k\xCDe\x18k \xAAz\xCCb\xD3\xDD[\xAC,\xFE\xCB\x1D\xBC\xA6\xD8\xED\x7F\xC9f-\x1C\x8B\xF6\xDF\xCA\x05\xBE\xEC\x15q\xB7[=\r,R\xC5|\xAFX\xAAR\xCBd~\x8D\x1Fs\xD8Ow\xE4\x1F\x18\xF4A$\xF7k\x11\xB0\x10E\xB0>\x12\xE5\x99\x88\xF7n'\xAAPg\x1A\xD0\xC7\x1E!\xBF\x85\xBF\xF7aL\x9E\xF0\xA7\x9D\x91c\xAC-%s\xFFT\xC1\f\x84X\x1D\x06\xA8\x13\xF2T\xF0V*\x8Ay4\x84\xE8Z\x83Q\x9A\xA0D\xC1\x1D$=0\xEB?\xB4\x94\x91K\xBF\xB6\x8C\x1C\x82\xB2\xC5\xB3\x9D\xE3]\x00aU\xB4\x8F\xCB\eo\x8F\x8E\xF5\xB7.h\f+9\e\x8F5\xD8s<\x11O\xEC\x84\x02\a\x1A\xA1\xEFy\xE6\xA2d/\x03\xB7\x87ey:\x93\xC6eL0-\xA69%~\xE6C\xB7\x8A!i\xD5>b\xA2\x91\x19\xF2\xFB\xB4b\xEF\xA2E \x8Amm\xAE\x97\xDC\x98\xFAH%h\xBE\xC7\xDAk\x9E\t\x7F\xE2\xE5\xEF8\x8A\xE3\xF0\x99\x94\xA8#K\xFB\xF5s|\x13\xF6$\x9A\xDFg@\x8D\xEF.]\xDB\xFBw\xA2\xCB\n6r\x9Ex\x9A\xCC\x88\x80\xF2\xF2\xC5x)q&\xFD\xFD]\x11h\xD9M\x924\xAB\x83\xDE\xAE\xB8\x87\xDF\x93\xFF\xFB[\x8F\xBF\xCAM{#\x11I\x849\xA7\xC1\xE9-\xFD\xFA\x11\v\xE7\x13\xE0\xF8\x02\xDD%\xF6\xBD\x06\x18\x8A\xA7n\xA8rh\xD5\xFA}\x1E\xC1Gee\rrx\xC3\xA8\x80~y\xED@\x8B\x99\x91\x81\x93y\xD3\xF0\v5E\x12\xFD\x19{\xF0B\x8Fr\x12J-\x9A|x\xEF\xBD\xA8\x96\xA3_\xA8\x96\xF3-\xEB\\/\xF6\x03\xEFGf\xA6\xB1)\xF2?ex\f\r\xD7\x16\x16y\x7F\xD3\xD6j\x81\x9C\xFE\x90\xB7\xD8\xE6\x83\x02NG\xE8p\xEC,r{\v=\x03\xE0\xC9\xD6\x8A\xF1\xCD}\xBFjTf$Ezw|\xBD\x92\x03A`\vn\xB4\xE8\x86\v\x04\xDB\xCA\xEB \x8F\xDC\xFFx%|\xE5\xE7F\xD1K\xCE\x9F\x86\xD8\xA5o\xDB$\xDD\x86\x8E\xE6\xF88t\xFB\xF9\xFC#\x19\xDBtA\x1Een}\x90\xEEZndo\x99D!W\x8E\xF6\xFB\x03w8\x0E\xC6\xB2\x96f\xF2\x9C\x12Y\xFA\x84G\x8A\xF8\x1A\xB0\xAE*$\x82{\xF3\xC3\xCEc\x87\x03\xFF\xEF\xC0s\xD0&8\xA5\xF7\xC5X\x11\x1C+\xF5X\xA9\x05\x04\xDE4\x1A\xD3\xB1\xCB\x9C\x8F\\\xB7\xE5\xE2\x83\xC9\xB1\xC8\x88b \x8E\xA3\xC1+Q<\x05=\xA6d\xE9%?\x18\xA5\a;\xF5\xD9\xF8`\xC2\xAA\xE7\x1DZ\xD2\xEE\xEEw\xEA3\xC9\x9D\xE4\xDB\xFF\xBBM\xEC\xFC\x1E\xCA\xDBf\xB1\xBEE\x82\xB8A\xAC\xE5\x9Ab\xFAU\xC7\xF1!\x16z\x03\x99`\xD8\xF1D\xF2\xD0\xE1\xD2\x85\"\xDC.\xFE\x98\n\xD2\x18\x06\x81!\xBB\xA8\x01F\x0F\x0F\xDF\"\n^\xD8R\xFF\xDF\xA5\x04'<y\x95m\x97\xDA\xB6\xD9\xD2\xF4\x976\xB2\xACw\x83[\x8B\x18\xDD\x99opw\x93T\xD2.\x91O\xA8\x91\x80\x86\xB7a\xB8\xEF\xFA\xA6\xCBIB\xFD\"\x1A}\bk\xD5\x98\xA4i\xFCj\xA40\xEB-#\xF1\x17\xDF\xD3(\xB5\x85K\xE3\xDD\x94\xD9\xAA\xDBo\x94\xF4\x04\xA1;\xAC\xB0\x186[},\x1Ee \xBB\xD6V\xC1\xC4J\xD3\x00\x9D\xEDD\xA6\xC9\x87\xFA.7eN\xD4:\x9B\x85\x989N\xC5\xEE\xE4\xE2\xB5\xCBE\xE8\xF8H<\xF23\xCA\xD4\xDEy|'\xCF\xE7G,\xB3\n\x18\xC8\x81G\xA0\xDBm\x1D\xA7Q\xC5\xCF\xB3\x03a\xB1\xEF\xBAuL&\enD\x89\f\x8E\xFB\xB9\xC73mT\f\xB3\xEFJ\xC6\xA0_k3\x84}\xD1%r\xAB\xB5\xBD\x05\x01K(\xAD\n\xE1\x1D\xA0\xF4R\fA{\xF5W\xF3%\xE9\xFA\xF0\xE4\x98\xAF\x05\\c\v\x98\xB7a\x8B\xD9\xD6\"\r\xC74p\x9D\x8C\xB0:\xFD\x8E\xBB]\xEB\xC7OR\xBF\t'|B\xC1\xFC`\x85\xAF\xE8y7\x11\x82p\xA4\xFDF\xA4\xFB'iD\x95p\x88\xC9\x94\xE1\xBB\xBD\x91\xA5\xF9\xAFTL\xB1\xD4C\x01\xF3\xC7\xFE\xD0\x8C \x82})\x1E\x7F\x99\xAF\xD4%a\x03\xC1\xFE\xB7#\x11\xDA\x9F\x82\x93\xB5nq\x11|\x03\x99\xC4\xD3\xA8\xBB\xC5&<z\xE4\xFAE6c:\x02\x13r\xF3#\xB9\xB5I\x9E\x05C<\x052\x92\x7F6\v\tIt\x0E\xAA\x1C\x1Cw\xB0C\x99[\xDD\xEB\xD0\x12\x84\xED\f\xA3\xD82\xAC,d'\xB5\x12g\xD74\xFC\xF3\xE2\x8AB\xB4{r\xB7\xFE\xDB:\xFC\b2\xAA\xD5\x06\xEFS\xBB,\x834\xE2\xB7D\xD4x\xB9!\e\xA1\x10\xE1#\xF3_\xA6\x9F[\xA5\xFE7g\x8A&_/`\xC4\xAD\x8FB\xE5\xFC.\x96\xB0\vn\xB6c\x17\xF1\x8F\x1E{r=\xABQ\xE0 \x1C\xC7\x1A\xFC\xE5w\xEEbl/lW\xBB\x9B\xE6\xA6\xAF\x01<%\xF0\x12\xAA*\xB3\xEC\xF8\x84=\x16\x1D\x91:\xE3ss\xCFg\x18n\v\xD7Q\x93.\xFA\x9B-U\x86K\x06xn\xF9\xB1\xE9\x8E\x7F\x03\xDB\x91\xF1\xE1\xEC\r[\xFD\xBF[\x1Ajkpc5\x1D\xCA\xCB\xC44_\x1F\xB4\xB3\x15\xC8\xC3\x8A\xD33O~K,$\x1C@\xB2s8\x81\xFC\xBC\x89,L\xD8\xA0\xC6\xBC\xB4\x88Y\xEDE\xF9~\xC805\nAc\xFE~\x11\xDF\xBA&\xA1591\xDC]\xD6\xE8\xA5D\xE1\xD0}>\xAA\x9A\xF8\x19\t\xCB\xD6s\xEA=\x99=\xDBac\x81R\xD9\xBBN\xB4S\x95\x1A\xF9\tpz\xFD\x8D\xFF\x90#|\xF5:\xE4#\xE8\x8F\xFA\xA7Y\xF6%\x82\r\x97X#wTS1b\xFE\xA2I\x1D}\x97\x88\xAC\xD6\x17\xB3\xA2\xB6~\xF0#X\xE1\xF6\xDA\xBC'G\xF1!\x8F*\xC3nb\xA5\x80\x9D\x81.\x14\xA0\xF3\xD8\x9E^$\x89\x7F\xB9\bU@,J$\x1A\xB3\xCB\xD4\xB3|\x82*^\xCAn\xF3\xF0**V\x17\f.\xF3\xAD\x91\x1Eh\xEA\x98\xB4\xC1h\xE0\xFD\b4\xE9\x8E\xB5v\x03\x9Er\x82A\x03\vA;\xC6B\xF1\xB3\xFD\x9A\x8C:\xC2!\xBC\xB1\xDC3Z\xEA\r\x9D\xCF\"\xBE\x92mK\x9F<\x9E\x06/\xD6\xF1\xEC\xC8\xD8\xFC\x9E9\xFE\\\x99z\xDF\x90,\xA9'\x9E\x9DS\xE96\xBC\x96as\xB3x\xC9S\xCC\x96\xEAqg\x02\xA5\xDE\x17=\x80\xBC'\xAD\xF0f=\x9C\x84g:\xAD]\xA4\xE0/\x9D\xF5\xA0\xBA\x1E\xBC\xA1\x86\x99\x98\xB3\xA5\xA4\xE5j'\xB7),b\xED\aR\x96%HM\x1E\xC9\x837\xB5w-\xD9(\x17\xF5\x9B\x9D\xBC\xCB\x89\x1D\x11\x16RO\xC7f\xB1z\x16K\xBA6\xE6\xAA\xF5\x9C\xD9\x1E\xDFz:oE(\xC9\xD2m\x19\xCA\x93\xAF\xD7k\xC4\xFAB\x11N\xFCw\fp\xD6\x8B\x04\\\xBC\x04\x04v\r\xE5\xC3\xA4\xC0\x0F5\xE7\xD1\xA2\xD7\xE4\xF9\\c\x1C,\x00\x054\xCD\x94;\xF6\xF5t1\x7F\x99qj\xCF\xD8\xDC\xB83\x9C1\xB0-\\\xDFA\xE9\xF2\x00%XQ\xD7\xA3Lb\aF\xEB\xD3\xF2\xF5\x93=\x1C\x19h\x90n\xFCB\xAF\x9B\xDC\xCDo\xC0W\xCD\x0E\xC8 qO\xBA\x97<\xEF)\x98\xEB[\xB4wD\xE9\xEEQ\rD3\x97\a\xC7\x912\xD1\xE6aq'\xEC\x1A\xE4\xBF\xC9\xE093\xCF\xECy!>\x14:_\xCA\xFF\xB8\xC1u\xBF\xE7?\x90O\xEFv\aa\x8Ex\x1A\xCC\xC0\xAAO:\x84\xFF2\xA6\xA4H\b\x06]\x93N\x88\xD3\xBFx\xD5U]\x92\xC4\xE1\xC1\xDB\xC1\xFCq8Se\xE2\x931\xCD\xB7\x8C\xCF\xD4\">\a\x8DS\e\tH\xC5\xEB\rM\xDD%\x0F\xA2\xF8\x9D\xA0\nZ\xDE(\x17\xB0\xCF\xCD\xB9\xE8\x9F\xFA\xFFh#x\xCB\x8C\x1F\xC7\x19~\xCD\xB8FI1\x96\xEA\t\x02\x14\xAB\x0FV#m\x16\x92;LU\x81\xBB6\x1C\x03\xE5\x90p\xA2\xEF\xC3\x8E\xFC\x0EF\xBD\xF7{({jC\xB7<R\xB1=%\xC7\xA2\xAD\x03\xE9\x91\xE9\xF7\xAAb\n~\x92\xF7\xE1\x16\xA1]\xF2\xFD8\xA2\\0\xC7\xEA\a\xE8\x14\x1E/\xF2=X\t\xE7\x99N\x93\xFC\xB1A\x89\xD2\xED2\xAA\xF9&\xF7\xB3\xD0ls\xFC\xD23\xCB\xA1\x84%HP\xF6G3\x8B\xA0\x82ga\x82I\xFB{\bqY\xC2\x97\xD5\xF8\xCF\xD7\x99\xA9\xA6\x01\xD0\x0FH\x99*Deu\xA9\xFD|\xF6BI\xC8\xD79}\xD1\x14>~>p\xBDh[T\x88\xFDk[N\xB3\x8E\xAA\xDA<\x89\x83\xDE\xF0\xEF\x0E\xB6\xCF\x9A]\xFA\xFA\x10\xFB\x96\xFE~\xEAs\xEE\xA7\xB7|\xCC\x9C9Yh\xFC-\xFC{6W\x8B\x95\xA5-\xDC\x1C\t\x1A\x9F\xF9\xF4m\x8B#\xFB;\xE0\xA6\xA8\xA7|<\xAF\v\xE3\xF6\x10r\xBD\xCFW12\xE5E\xD6\xC1\xC2.\xD6hr\xEC\x13\xD2\x84\n\xD8\x1Eyd\xE4_\xAB\xA9K\x8D<;\x11[\\,\x04\xE2\"\x92uQ\xE3\x83\xD1zt\x16+\xE4<Y[#\x06\x8C\xD95\xAD\xF5\xD1\x1C\xE9f\xEF\x06EAW\x90\xA2jK\xFA\x9BW\xE4/\xD9\x8F\x02L\xB8\x7Fx\xD7\xCC\xAB\xFA\xCC\xF7FY\xF4$\t\x1E\xCD\xED\xAF\x99\x92(\xAC\xC2\xAF\x17e\xAC\xB0iP\xFAp\xA0}5\f2\xAFp\xFAL\xE9\xC1\x8A\xC8\x10\xDC\xE2\xD3\xD5a\xCF#e\x19\xCE\xE9S\x8A\xD4.F0?\x04 \x9CQ$z\x8E\xDD\\Q\x95\x90\x01\xEF\xBC\xD7\x88\xF5\x97\xD8\xF7g\a\x1D\xAD\xF8Z\x85\xC2\xD5\xF6\xC9'\xA2n\xB7\xA3\x9A,\xCD=K\xE4\xF8\x8A\xDE\xBF\"\x99\xBD\\GN\x99M\x89\x93\x10\xFC\xBF\xCC\x03\xEES\xAE\b)\xBC\xDE\xDB\xA6\x01+%\xBCdW![-\x91\x85|\x89 \f\x1DI\x1Fpq\xD1\xFF\x1C\xD3*3\xB3\xF4\x03\xF2\xA4\\\a\x14\xCF\xF6u*\xB3D(zS \xE6\x17\xB6d4\x99\x88\xAE\xCD\x99\xBD\xF5.\xE9\xE7G6\"\f\x00x8`9\xD7\xD9\x19\xC1\xE9\xE3\xD2\xFF\x8F+{`\x1C\xA9\xA7\x8D\x0E-\xD5\x02I\xB8\x82]B\xA2T\xA7\xB9\x18\xDB\xCA\x86]\xCC>\xB4\xC59\xB8`\xAD\x84\x17\x94\xBCg\xD1\xDB@\x1E\x93o\x0Fo?\x00\xDF\xD2\xD3\x95\x925\xAF%\xC8\x957O\x95\xC2\xD2C0\xF2Ci\xBD\xEE\xB2uZRL\xF9\tY;f\xE2\xD5!w?\xA5\xA93\x96\xBE\xB8\xD3w\x14\xED\xAB[\x94\x0F\x98\xF4\xFB\x80=f/\xDF\xAB\x05\xBD\xDA\x11\x03>\xE7\xC6\xAC-e\xDCb\xE6:\x85!<\xEC\xFF\x82\x82j\x9B\xE1\x05\xD9\x138N\x9C\x0E\xB3{\xD0\xF1\xE9\v7\b\xDF\xBDU\x176&\xFF\xD3W\xC2\xFD\x8D\xFF\x84\x03\x0E\xD87\x83\xC1\xB2\xB1\xF6S\xF19\xA9\xF0\xB2l\xA0r\x0F\xDC\xA1A\ae\xF1\x9D(\r\x97)y\x14\xEFi\xBD\xFE\xBC\xB3\e\xFB\x9B\xC4wTD\xF5\nc\x99\xBDW}lJ\x1A\xC7J0*\x8A\x9F\xD4u\xD7T\xB8\x04\xFDm\xD2\x93\xE5J\x1E\n>\xEF~\xAE\e\x9442\xD6K]\x89Y45\xBC\x9E\"P\xC0)6,)\xAB\f\xED\xF3\x9C\x85\x80\xAD\"\x8C\x8A*\xA7\xCB\xDAz\xCCk\xF8\xA2(C\xDA\xDEB\xE4\x12\xED\xDAa4\xB6\x14\xB9S\xB2\xB8!\xC1\x18eH\xB9\xD5\xF4M\xDEg`\xEE\x9B\xD4\x91\xFCl\x92\x15\xF1\"@\x7F#\x7F\xC1\x10p\xC8%C'\xF3R=\xCD\xD0\xE7|\n\xBB\xB7<\xB6\xEE\xF3X\xA2O9\xFE]+\xB0#\x91\xFA&\xD3\xE4e\x9C4\xA1\xB3\xDF\xA8r\xCF\x8F\xC8\xC3\x92\x04\x02e=T\xD6QO\x88i\x920g\xA4u\x18\a\xBB\xC1\xAAY\x13\xBA\xCDt#<\x9C\x80\x11\xE4N\xA9\xE2!W\xC2\x7Fb\x1D\xBEU\x86\xE0%\x18\xAF=a5\x96\xC4\v\xBF\x88\x86>S\x84\xC8\xEC\x9CR\xABk3\xDA\x7FXh\xA3\at\xF6\xE2\x97\xCF\xB2\x8C\xA3\xDB}b\xC9\x95\x91\xCE3\xC70\xA0\xDD[Sv \x95\n\x96\xEC\x97Ti\xE6\x91\xB9\xE9w\x96f>OH\x03x\x1C\xB4?G\e4k\xC2\x11\xA9\xB4'\xF2\x06\xAA]\xE4\x0F\x93\x98\x84t\xFA\v\xDB*\t\xB9\xDB\xC3\xEA\xF4\x81O4\xD3\xF1]6\xBA\x89\x94\xD6\x1A\x9D\xE1\xB6\xEF\xE25\x10\x1F\x16\x00QK\x06\x8B4\x17%\x95\x85\xAF\x89?^\xE6\xC1+\xAF\xFFK\x04\xE6\xBB_\x81\xCB\x93PU\xF4\x05A\x97\x99\xE7\xF7f\x9C\xD9\xE1%\xA2\xF4\xDD\xD2\xA7J:\xA4\xA3\x8E\x90\xE2\xC5\xF9F\xDAr\xC2\x96B\xEB\xAD\x8F\x84u\xEA\xDF\e\x14Y\xFEp\xAF{nJ\xBF\xE3\xE0\x17\xADRq\xB2k`\xC0\x9D\x92\b\x1D\xFE\x9CKU]\xDD2\xC2\xA8\xA08\xF0\xE2\xD1T\xAF\x97\xE5\xDEl\xC6|Ju\x88-r\xD3C\x16\xC1$\xBB,?\xA2\xF1\x95\xF5\xF6\x00\xDA\x0E]\x8E\x1D\xA3S'c\x91\xAA(\xDF/d2g\xA3\xDD\xEDp\xD8X\xB1\xDA\xD5xfn3\xBB\xD0\x9B;\x02\xDBAI\xDE)\xED7\x17\xDB5\xEEL\x137\x0E\xE7\xDC\xD0M\x98\xE2\x18\f\xE6\x19\xFE\x14\xBF.\xCF9H\ek\xF9\xC5Lz\xB8\xC8\xD3L\x95\v&\x16\fS\xB1c\xB5\xAE\x04S\x8A\x8Cgf!:gr\xBAf\x01\x8FI,\xBA\xDC\r\xAF!v\xA1\xF0)\n\xDC;)\xF9!\x84\x8E\x0F\xCE\x1A\xC89\x1A\xF2(\xA7\xF5Nu\xD6\x19\xCB\x98\xFE\xFD\x80\x89w$i\xEA\n\xA7\xB2\xCD\xDB\xD5\v$\vt\x98C/\x8E\xCF/\x83\xAE\xB3VD\xD2\xE9\xB4\x9E\xEEv\x8AV\xAAq\xAF\x8D\xED\xE4\xEFL;=\xE2\xACOf\x15R\x86WP\xFE\xD7\xA5J\xEDDl\x8B\x1A2ws\xE3udc\xA6I.\xF8p\xAE\x85\xBA\x83%\xFF\xC9\x13\xDB\xDD/v\xD2\x1FR:\x80\xDF\xAFC9\xBC\xA8\xF9i\xFC\xB1(\xCA\x13\xCB\xCFt7\\V\x90:\x13\x82$\x15\x1F\xBD\xB6\xBD>\x15\xEA\xE2K\xCB\xB2\xEF\xA2\xD1\xCD4\xF7\xF9\xCF\xDD\xBF(\xAB\xE9\xBB\x14r\x93\xA2R2\eY\r\xD8\x18<s\xC85\r\xCA\xC1_\xD7^S\xD5./\x18\xD8K\xEF\xE8\x8A\xD1\eg&\xC8\xEB\x94\xB3$dv\"b\xD67\f\xF7\x93\x13mI\xA7\xA8/Y\xC73sl\x884\x9E\xCA@\x04\x818\xAF,e\x85m\x97Hp\xAC-*#\xCC\xDE\x8CVQ\xD8\xE3\xE2\xDE0wp\xCEI%b^<Dq\x8F\x1AZb\xEB\t\xF6{\xA3\xD2\xEE\xCDp\xED\xC7\xADiv\xB0\x9C\xF3\xB5\xEC\x19\xB6\xE7\x95\xA5\x05yFf\x02\xBA]\x1A*x\x06\xE5\xDD\xE0\xC1\\\xDE!\x97\x194\xDE\xFDAPX\x19\x97(\x1C\xB0\x8F\x05\x99]mZ\x14Z\xC8\xFA\xAC\x89n\xA4EC\xF6\xC3\x0Ee\xB0\xD6\x05T\xF2z\xF7\f\xD9\x91p\xD1\xD4\x10\e\xF9\xC1\x962\xFBy\x1D\xDB\x81R\x83\xE0O\xFCF\xCC\xCC`\x06D\xC9\xF1\xD0\x1A0\x04\xA1\xD0\x0E\xEAw\xA6u\xBE\xB0\xE3/2\x9B*\xBC8i\xFBL\rLt\x920\x1E\t\x1D\x0F -\xF9w\x0F!\xCE`m\xFE\xE6\n$\x1D\xC6qp\xA8qq\xD1\xD4\x86\xA8\x83\x02\xA3\x02\x81\x83TI\x86\xBB\x12\xC0*\f\xF3^\x95\x0Ek\xFB2\xB1\xF2\x81\xBD\xC4^\x14\xFF\xF3\xBETv\xF6[\a\x83W\xB7WT5\xD0\xC1mV\vZ\x95\xF5\xDC\xAB\x97<b\x92N\xA3\x80\xF8\xDEU\xA7J\x81-*\xB4\x91\x96i\x00\xB7\n\xA9S\xF5G\xBDv\x9A\xCC\xA1\xC2P\x97\xDCc\xAC3x\xAC\x02\x17\xE0)!\xD2\x03\x90E\x1C\x04\a\x1E\x06a\x15\xBE\x8Fz\xDB_\xC5u|\xF3`\x1F#\x99\x91\x16\x00\xDDF\xD0\x82\x92\xF6\xCA3W\xAF\xA0\xD4a\xBF\xC7\x81QIm\xEE'\xA0\x9F\xBF\xCE\xA0\x9FmZ\t\xEF\x89\xEA2+\xCBp\x87\x11b\vP=\xFB\xB3\xD9\xE9\xD2\xDE\x1D\fVS\xD6\xF4NO\xF7\xC7bt>\xA8\xAE\xF0pf\xD6\t\xA8v\xFE\x00\x03 \x84V\xB6\x88%s\xB3\xA9\xDBv-\x85$\xBF\x192\xD7\xA9XY\xF9Q'\x1E>\xB2>\\y,\x84B;\x03\x16#\xFBY\xF2\xDA }\x8D\r\"M\x9D 8N\x9C,E\x8A\x16\xF9\xA8\xFB\x87\xFA\xC7\xA0/\r\x1Ed\xDE\xC6\xDCArD\x13\xD3\xD4\xFA\x89\xCA\n\xFF$\xD9\xCEB\xD4w\x8A1\x9Dm\xDDU\x18f\xCFz\xDDD\x9Dd\xFC\xA0\x95\xD1\xCC!\xA0\xE2J\x006\xF8\xE3\xF11?.U\xA2\xF2>\x05\xE7\xAD\x8BY\xCB\xF8\x89\xBB:\x17\xC8N\xDD['{\a\xF1\x1Ec:]\xAE\x100\xD2\x9E\x18\xF3X\x8C\x8EWH\x94\ry\xECf\x8B>\x1C\x90p\xEF\xF2r\xCFq\x7F\xD6\x86\xDF\x17;\xC0\x91\x9A\xEF%\xBB\xF4\x03n\xC5\x05\xE5*\xAE\xFD\x03\x94\xB3\xA81y\xB1]\xC9,4\xCA\xC4\xA9\xCEn\xFB\xD5\x9F\x8C\xF4\xFB\xB3M\"\xCA7\xE6\x16<+\xEB\xD0\x8A\x88\xB3\x17\x9C^\xEC6\xAA\x0EQ\xDA\xED+\xB6s\xD0\xE8\xB5k(%\x95~\x10z5\x86o\xE0F]\x9EB\xAD\x8D\x15g\xF4^\xE6lKQ\xD8Q\xC36\x1A\x82\xF1\xD1\xB1Q\xC5X\xF8\x84\xE8\xCC\xA0\x9B\fC\xCC\x10,\xC1{_{\xB5\x1DR( 8\x9B'8\xB4\xCD\xFFf\x8F\b\x959\xD4t\xCEH\xDF\x1FQ\xF3s\xE9\xBB\xCC=\xD4\x96(\x86\xE5\xDFt\xD7_\xA3A\xFF\x8B\xDAE\xEF#M\xDDH\x03SvHy;\x88d\xBE\x9D<\x1A\xF6\xFD|;\xE9\xB4\xCF$\a\xE6bF\x851\n\x8A=4\x95r50\x81\x89T4\x80\xA7\xABz\xDA/\xFF\xAE\xEF\xA5;\xACq\x03\e#E\x13\x06\xA6zD\xD0\xDB}+\xCF\x8Fp\x1E\x10AI\xE5\v^\xF2\xF7X\xA2HIv\xDB\xBB\xFC\xDF9\xD6t[\x94\xF7\xD9\xFE\x91\xD8\xFEZ\xC5C\x0EZ\x0F\xFF\x96\xB6\xF2~\x01'4\xAA\xA9\xD8\x11a\xD0\x9F%\xB9\xD7_\xE4\x8D0\xAAr\x80~\x10\xE5t\xC7of~\xBC\xE2pImR\xA4\xAB\xD2\xDCkx\x19\x96\xFDG\xDA\x02\x1F\xD1,\x7F\xA4C1\xC7\x95\v\x02r;\xA1^!\x90\x9B]+_\xC1\x11\x14\x13\xE8\xEE\xD3\x06\x11Fq\xC2dB\xBF}\x16c\xB4C\xAB\xA6\xDA\xD4\xD0\xFB\x86\xA6\x9B4\xF0\x85|J\xA9ES\xA3[\xCF\x0E)\"\xFA\x90\x17\x82\x82r\xB3\xD5LVJ\xD7\f=\xB1S\x9E\n=\xE3\x9B+k(\xFE\x8Eh\x1DI\xDE9\x96\xAEVlT\xB4\x97\x04j\x92S\xBD+\xD7\xB9u\xAE\xD2L\xD8\xA1\xC3\xCE\xD66n\xCEXO=\xD6\xA4s\xE4\xDB\x8F\ewz\x93\xB7\x15x\x96\xA2\xDB\xA1\x9A\x10\x92\xE1\xCE\xE7\xF5\xDA\x8E\xE50\x81\xC2@\x81\xF8\xFBru\x9Co\xF8O]\x82\x15H-\x93\xF8\xC5g\x13R\xB9\xCF',\xC1\x93\xD97\xEF^w\xB0M\xD4\x8D\xE6@\x85\xED\x9E\xE5\x9EG]\xA5\xDF\f\xE7H\xC6\xCAJ]\xE4\x9C\xE0\x9A\xB1_3%\xB7\x93\xA7\x9A\xE1\xA3H!AU\xED\xDD<a\xBB\xA7\xC6\x99_\xB1\x8D\x8Aty2\xBC\xC1\xC3P\xFE\x84B8\xD9\xBA\xD2\x81+0\xF6\x05\x97\xD4\x8D\xD5h\x94I\xE2\x1CDMu\x96\xFE\xB8\x93,At\xDE\xE6[\x01\xEFh\xB6\xB7\x8F\xB2\x11/\xEA\xC7\x1E\xCB\xD44\xF8\x02\xFF\r\xEED\xA5\xAA7$<\xCCr\xAC\xBFJe\x8C\xB6\x13T\xDBQZ/{0\x96\xCDuc\xBA\xD3\xB2(\xA8\xC6-Q$}\xF3\x82\xA6%\x18d\xDF\xD8\xE6\x81v1\xA3\rl\xB9\x14\xF8%\x87|\x10'\xEAj\x15?\xF9\xE8\xF8\xBD\x80\#{\xCFAD\xB16\xDF|\xAFFp\xD47\xEA\x95\xA3\xAC\x92v\xDD\x9E[\x91\t\xF7\xD9%\xCC).\eG\t\xA8\x83\xE9\xEEl\xAE\x93K\rG\x80\xF4v\b'\xAB\xF3c\"\xDB\xA9e\xD1\xF5\x1F6Q\x15k\x10a\xFA\xCEG=\xDC\xA8Dr\xDB%\xA23Nt\xC2\xEF\x7F\xF9\x14\x87q\x06ih\xB7;\xA9\x1F4\x05\xC9Qm\xDC\xD3\xCC0\\\\<\xF4\x9FL\xEE\x84Wj$F\x92\x1D\xAF\xC7\x16\xA3\xB4$F\x88.&\x11\x98\x94\xB9\x94C\x96\xA4\xBE$a\x8B\x1F4C\x892MotV\x82\xB0\xEF\r.Fh)b\x1D\xD4eP\nt_\xC95\xBE\xE0#!7\xC6k9zo\x03\xC3s\x05\xC5\xF8E\xC4p\xD0\xEA\"^\v\xFE\x98|\a\xC2\xDA\xD1\xF1\x0F\x85<\xDC9\xB9\x0E\x8F@\xB3\xB9c\x03\x9A\xE7\xD5U\n\xA9\xE0\xD9\xD4\xD0\xD4\x90\xF6\xA9\xA3M\xD6\xBCom \xC2\xDBe9\xA3\xEF\xC2q\xC57\xB5hTr\xED\xCE\xED^\xF0w\xAC\xE7\x91Z\x11\x9E\x91\x87\x133L\xB6/D\xE6\xF1aN\xF0h\xA8\x1F\x8B\xD3\f\xA8\xFE\x87\xBDh$\x94\x91\xB8,\xB7\x1C\xCE\xE3SP4\xD1B\v\x13\xBA8\\\xFAi\x82\\\x9E\xBC.\xCE<W\xFF\x1CL\r\xD9\xCA\xED\e!K\xD2\x12\"</\x1Eo\x16\x1C\xB2\x87\x12p0\t3\xEC?s\xD3\xB5\xE93\x15ne\x15G\xAE\xCB\xD1\xE2P\xDFG\x82\x1D\x87s\x1Fm\xC8k\xD8\xEC\xDF\xFA\xDB\xAB\xDF\x90\xB6\f\xE3\xE5*\xB8\xB8t\x81HgH\xAD\xCB\xA6X\x99F?5/\e\xFA\xEC\xBFQ\xC6WU\t\x1A\xBD\xF1\xA1\x87\xEE\x96\xC6Xd\xDDDY\xFC\xCA\"\n9V%\ep\xEF\xE0\x11\v\xA0\xE4S\x850\xFDd\xC9\xA3\e>\x18\x94\xEC<l\x92\xECb\x88m\xCE\x1E\xCE\x94\xEC\xA3\v\x11nK.\x19\x16\xE9@L\xF3\x8Cr\xF7B\xC5\xB4S\xED\xF5JR7\xC7\xB2\xDC\xBB9\xA5X\"m\xDF\x85\xD7\x05Y\xD0\xF3\x00b\x17\v\xD1m}\x89Os\xEA$j\xC9W\xDD\x16Z\xEC\x19\x88\xA7Wn\xB5W\x9D\x97\xD7c\x81\x9F\xDA@\x8A:M\xA9TN\xE6\x8B\xB1,\xFA\x17\xC2t\x13\xA7[\vlP\x10\xA5\xB6\xD9t\x88\xE7T\xC2\xCAE\xEC\xCCb\xEF\xF1\b\x82\x91\x0F\x97\xB0\x00\xF3\x11\x13\xBAf\xB2#\xE9swi\xD1\xA1\x90\xE9\\7\xAA\xE1S\xAE\x16\xC2\xDF\xB4M\xC4\xFE\x01\xFD;\xB7=\xD9:\xF4\xFB'S\x14\x8E\x93\xE6v\xF9`3\xAE\v\xAEB\xED\xED\tp\xEA%\xFAy\xC9\xAFG\xF3P\x15\xB8\vPY\x060\xDCt\x01\x92D\xDCa\x9E\x1C}!\xC0\xBA\x85\xADa\xD0\xD7\xD3`\xA6\xF4\x91\x00\xDAA\x9DtX\xD6\xC22\x9A\xBF\x9A\x94\xED$v\xEB\x90\xBAEd\x11\xB6\xFE\xDC\xF9\xD4\xBE\x8D\x83i\x90n}\xC7Io\xCC\xCC\xAA}\xA0\xF96!0\xD6#\x8F\x01\x16\x19]\xEFv\xA4+&#\xC3\xA7;\xDD\xD9}2j\n\x89@\x9F\xDA\xBB\xEF-\xB3\xE0dZ\x06W!\xF0R$F\"\xEAm\xF3\x88\xCE\ve\xE7\x97\x16\xFA#T\x15\t\x91p\v\xF3\x1F\xB2\x9A\"B\x88^3A\x9D\xA6\x93\x8A\xD6~\xF6\xA8\xECe\x10R\xCCK\xB6\x06\xC6-\x89xren\x96\xEE\xBFW,\xE6\xE8\x97\x82q\xDAl\xB1\xB7\"#\x05\xC9\xC7\x96\xCA\x10\xC0\xB5\xC9\xEB\xB4\xC2\x9DE\x06\xEE\xED\xFB\xF9H<\x9Eg\x9B\f\xEF\x1Ak\xAB\f\x1A\xA7\xBFgH\xA7'\xEFTm@|+\xD5\xE3t\xD8\x9Bl\xF8\xE7\xCEw!\x14\xD5FA\xF7\x11\xFA\xE7-\xC90\x9B\xA5\x10\xBC\x12\xEC\x9B\xD0\x8B1\xF2\xE3\x83\x9Ath\xB4\xA4\xF8`ZO\xBD\x87\xF7\x97\x81B\x7F\xBCB\xA7v\xA5.x\x82\xE3\xDE\x17\xF3g\xB3[\xC1\xE71\x95\xCB\xB4\xFE\x00\xD8\xEF\x15$H\xCEeU\x91de\x1D\xEEs\x922]\v\xF7#q\x16HJ\xC0e\a\xFC\xD8)\xF35A\x10<z{L\x15\\\xA3\x9F\xCB\xD99\x8D\xC8g\x8AL\xCC\f\x89\x04\xF2\x1E\xC2\x98\x87\x00\xB2\xE1\x9DMP\"R.\xB6b8\xA5\x16\x14\x9Fm\xBC\xEA\xFC\xF1\xB4u0\x03\x82\xCDL\xE9\xB6\xB3\x19X\x87\x99}F?tM\x94\xC6\xB8j\x03\x96\xE7T\xB5N\xB7\v\xC0\r\xD3\x93\x06\xA0\xD7[v\xD7K\x0E[!\r\xE5\x9D\x0F\xE2K\xDF\x8C/\x1AE\xE0\xF0t}\x9D\x81\x02Fb5\x8A\xF5\x0E\xC8\xA4hS\x94L:\xFE\x99\x15O\v<\xA3\x98\x985\x06$\x1E\xB0\xC0:H\x05\x90\x8C\x7F|\x1E\xE6\xC4\x90\e\x1D\xB8I\xB4\x01\xEB\xEC\x17o.\xE3\xEB\xDA'n\x8F\xB6`\xD6\x9C\xD5p \xFF\xA2\x1DY_\xBE\xA1p\xD8\xD2\xFD\xA8\x8E\x9E\xE1\x8BZ\x8F^P\x19\xF1\xA0i\xE6\x9D]\xAB\x7F\xBA\xE5s\xE7\a%\x85\x1E\eTJl\xD4\v\xE4\x06\x93\xC0\x93\xDD1\xCC/6V\xC1\xB6\x9B$m\xC6\xCF\xD1\xEE\xB0\xF1\x8D\xE1g\xB9i\x9A\xB5\xAA \x88\bM\xEF\x18\xF7U\xD9\\2U\xCE\xB9\x9D\x17L%w\x16\x87}f\xBB\xE3!3\xB2\xEB\xEF\x8Cm\xC3\xAE\xDB\xE0\xDA#\xAB\x81\xD0\xE6\x9Bj\xD9C\b>\x94\x9E\xB4>H\xC46c\xD0;@\x9B\xBB\x01k\xBB\x17uuI\xC3\x8D\xD5Q\x17*uj\x03\xA54\xEB\xD4N\xC6\e\xD8\x83&HR\x12:06\xDB\x17\x1F!\xB8p\xE2\x7F\xAA7\x17\xD0\xF7\x05<3F\xFC\xFE\xC0oZL\xDD\xB6\xAD?\xEF\xA0O\x8A\x9E\xCC[&\x1A\xB3=\xCB\xA8/\x1E\t$\x89\xCF\xBF\x90;\xFF\x92%Y\xED\x8C\xF5\x17\xB5\xE7r-x\xEC\"\xD6\xC5\xFF\r%\xF1\x98\xDA_P\x90\xAA\x9F\x0F/de\x86\xCBl\xB7\xCE\xD8\x80wj\xCD\x1E\x9D\x15\"\xDC\xB4\xF0\xA3LhYEJ\x9D\x0F\xC9]\xC6\xD8\x13\x87\x1Aw#\xC9\x1FL\xD3l@\xBC\xF1\b\xC4?\x9DwF\e\xD2\xCB\xB1\xB0O\\\x9E\xF4\a.S\xD0\xD9k$w\xE8}\x99\xC5M\v\xC4\x90\xC3\xE1v\x8C\xA0\xB5\x8F3Z\x1F\x00\xB3\x0E\x9E\x99\x94\xFB\x88\fpV\xAE\xD8&\xF9l\x9A\xC8w= \x88\x9CxR\xE1\xFE\xA5\x83ioH\x87\xF7\xFCC\xC8\x88\xD6\x1F\xE1u\x9A\x9D\xF9\xFC\x88\xFE\x9Dt\xA0\x96S)#e\x96#\bd-\xF9\xB0\xA2\xC2\x14\xC7\xAD\xFA\x80\xCC\xAF\x18Q\xB3\xA4N9\xA9\x18\xC8\xAE\x89\x91M\x95!/\x82\xDAo\xAA#[e\xDA\xA2\x9F\x14mL\x0E\xFD\xD9/W\x01s\x9B~\x89\xB0^\xBAs`G\xEF\xDF\xA1&=4\xC8\xB0\x95Kh\x0FV\x87\xD9\xD1b\x05\ey\xF4\xB7\xDA\xC2)C\xB2\xF5\xED\x95\x83\xFE\x1F58\xF9\xBA\xC7N/:i\xDA\xCF\xA5\xEC\xECV\xF2\xE7\x8E(Wi\xBD\xFF\xA4\x17-\xD3\xF2\xB8^\xF6\x8F\xF0?\xF4PJ\x8E#\xED\xF3\x81\xE7\xBDyE\xCA\x0F\n\xA2i\xFBA\xAD\x7F\xA6\x9C\xE2\xBA\xDF\x8A\e\xE3 U\x8Brr\xFD\xC9\x8F\x87\xE6L\x7Fk6\xDA\xD1\xB9)\xF7\xB4\xA1.H\xC07\x9Ej\xD7\a&{\x04\xC3\xD5\xD1\xF2\xDA\xD2\xE9\x91#\xC4\x94\x18\xFD\b\xAD\xBA\x06^\xDD\xED\xD4\x8D\xF6\x95V4\x80\xB9\xEAW\xF8r\xDD\xA6\x85\xA2\xA5\xAB\xE2\xC2\xC4b\x92>Dh\xFF\x80Q P\xA0\xBF\xEFw\x1E}E\xB6O\xAA\xC24!\xA6\xE3\xBC\x98\x8EGm'?\xFAP\xE7\xF0g\v\xEF\x19\">z\xE9v9OP)\xFA`\xAE9\xAA\xB5\xCC.Pw\x8A\x87|\x9C\xDB\xAD\a*s\xDB\xBDt?\xE3\n_\x8B\x19\xF4\x91\x05\xA7\x87\a\x9D\xEAh\x1C\xED\x99m\xDF\xEC\xEB]\xB2B\x8BW*|%,O\xD4^\xF2\xD4\xCB\x8C\xAA\xA0\xA89\x02Bi\xBC\xC02\xDEA\xA0\xA3*52\x12l\x86\xB1r\x91=at\xAAGg\xBE\xB6\xA7\x96%\n\xA6d\x04\x8C\x11\"\xE9\x832f\xDD\xD4\xFBT\x00\xB4\xE0\xBEo\xBF\xB1PLS\xEEmQ\e\xE8\x90\xD4 \xB0\xA1\xFCGUL{* \xB6\x83\xA0\xB7\x1D\x0E\x86\x12\xFE\xF3\xD5z\xBF\xDCZX\x8D\xBBHOc\xD5\xCB\xF7\x9A\x86\xC1X\x06=\xC1CD8\x97\x9AV\xB3/\xFE\xB6\xEDRS\x8C,\xEBw\xA9\x1C\xC31\xE8$M\xA1\xE0\x81\x05\xC7\xF8\xBFG\x95,J\t%\xF7{\xC1\xD2\x9CZ\xD2\xF0X\x86\x01\\\xBDi\xFE$n\x874\xA2@\xAF\xDC\xA8\xD8Ua\x19#\xD6\x96\xFC\x18\xF7.\x89\xEA\xEB\xBAe\xBC\xD2\x02\f\xE4\xCC\xED*\xC0)\x93\xC6\xE5\xDB\xFAo\xA1;[\x1E\xA1\xE5\xE1\xA2\xCE\x92\x13_`\xD0\x01\xFA<\xB2y\xEE/\x86\"y\x82\xA5H h*\xA9\x97\xF2\xD8\xD8u(\xD1u\xFB\x83\xA7\xE5lvT\xA111\xB5\xF8N\x94\bQ&t\xC6N\xB7\\\xB9@(\xAD\xD9\xA9Q\x8B\x88c\xC2\xA8l\xB3\xD1\b\xA4!z\xA0_R\xF7\x8B\xE1H\x82K=\x9D\xE6\xCEN2}K\xA3;\x97\xD6\xCF\xCF\x88\xAF(\xA0\x9D\x13\xA8c\xDE\x8A\xF4\xB6[\xB2\xC6\xD2eS\xD7\xADu\xA4\xD2v\xD2\x9E\x7F|\xA7\t\xC7\x11y\x9Bo\x95\f\xAA\x95\x19\x9D\x16V#\x7F:0\xE1\x1C\r\x9B\x1F\xEFz\xA6x\xD8\xC8p9j\xF4\xB6\f=Q\xA0\xEB47\x90\xA4\x13\xD0\xFA\x1E\xAF\x89ouVG\x8A\xFD+\xDC\xE1\x10\x19o&\xEB\x8D\t\x9B2*\xDB\xAE\x16{{\xF0_W2\xBF\xBC\xCE\x033\xF6]Cb\xB5\xAFZ\x05\xAF\x10\x12\xDFsB\xD9\xEF\xB0#\xA4\x7F\x0E}\x1AC\xB79\xC4\xDD\x85\x9E\xFE\xB4E\xAE%Z#H3o\x9B3N9Ne\x13\x88\xAA\xBF\xCE\xD5\xE8g\xE1g\xE2\xA9\xCE\xCC\x8E]\xA5.\xFF\xCE\xD7\xC8\x90 \x8E\x02\x00\xCF,\x14\xBE\xEB2\xDD'\x03\xB8N\x9F5\xB1\x9Fl<\xE3\x86\xA8t#\xB8'\xB5Ig\\\xC4\x93f\xE1$\xE3F\f\xC8\x82KB\xF5'\xA9\x8Fz\x16\xBA\xE1\x1C\x8E2/\x83\x94\xBE\xCFh$\xE2g\xACf\x9A-\x85\xDA\x1F\xE6{\xDE[\xE5r\x8A>\xAC\xD7C\x99=\xDAnU?\x93|5\xFF\xB4\xF5/,\x8D^xOE\xA2\xC8<Z\xFE@\x9F\b\xC1K\x13\xCF\xB0\xB6Z\xA0\xCDR\x93ha\x0F>\xB3\xF75\xC6\xD0\xE9\x90\x9E\x80L-\xA6jt\xB7\x10\xFF\xED\xC4\x0F\xD8T\xA9+\x8F_\x14u\x17\xF6Cp\x9F\x13\xBB,\xA0\x87\t\xCCnM+8s\xBE\x93\xB1\x96\xA0,\n\xF4m\x8A\x80\x9C\xF6= \xB2\xAE\"$\t0\xC2\xDA\xDA]\xBC\x91\xD6I\xA4\xC5\x91\x1Cw\xA4@\xA5\xC7Km]\xC64\x95\xD1\x16\xD2\b\xBA\xB1\xE2\"lfV\x88\x04$n)Wb\xD5\b\xFC\x85\xEE>\\\x8B\xD1\x0F\xEDV.\x94\xEBGi&\xCF\xD9\xD9\xB8N\xCA\xF0\xA1\x7F\xE78G7\x1C\xB43\x10\xB9\xAC[-\x82\xC9\xAC\x17\xAF\xFFQ\xD8\xC45\xF7\xBD(1S0\xE2X4\xBE\xF6X81\x9E\xA7Yod\xAFvi&\xD0I\xCCf\t\xB7\xD0\xB2\xD5~\xC9\x84Y\x1E\xC4\xC7\x81\xC9U\xAFgnk\x0F\xD0\x15\x0E83\x96\x89A\x00\xCEJlZ\xD7\xD4\xCFD7\xD3\x02\xC5<t!q\x8B\x1D\a\n!\xBA\x87b\xA0\x06/6\xC4\x1Ed\xDAk\xE0\xC1O\x91\xE6\x02\xC3\xA7\xF9\xA4\xF5\xCC\xCA\xC7-\x06\xA2\xEDL\x86\xD4a\n\x152J\xD9y_\xB4\xD7y\xD0\xDC\xA8\xE2R4\xF9\x9Dk\x1D\x18'~s\x0ExX\x9C:'\xDE\xE9\xA6\xDEfy\x8A\xD0$0\xE3C\x88h\xC3\xFA!N\xF7I\xC6\xD7\x97h\x9F\xCA\xAA;\xBA\x19\x95\xF0:\xF4\xED\x17\xE5\x9C}!!\xDF\xFF:a\\\eO<*/\xA2\x9AB\x8C\xB8t\x83\xC4\xAD\x1F\xC9zZ9\xAF\x9E\xC6J\xC5Y\xB0\xA2A`\x7F\xEC\x00\xA6dK\x1Dtrc\xC5\xDAU\e\x8C\xB0f'\b\xD2\x9E\x9B\xBFE\xCF(\xBEx\xF9\x95\\\x8B\xA1\xA8 \x97\x9F\xA9R\x80\x82\xE43\xCD\xF6\x8E\xAB(\a\x9F\x9A\x11\xEC\xBA\xA5\xD8m\x9A\xA5,\x8B\xB0k0\xFF\xB4\xBD\xE66\xB2\xA8!\x0F\xBAH\x14\\\x133 \xEBX\x81\xEB\x0F\x05[\x00\a\xDFr\xBA^\"\x0E\xD3s\x18\xB8\xBE0E\x9A<\xDFCY@\xD7R\xDEu]7\x97\x02\xA2\xD9\x15\xFB\xB6\x8F\xF7\x8D\tB[\xCA\xCE\x05~;YH\"\x87\xFF\xD80\xD4+\x9B,\xAF5\xD9B\xF4\x83p]\xAFm\b,\xCC3*\x00\xBC\x92\x17\x8D\xB9\xAB\xB7\x06y\xDA#\xF2\xA8\xB2\x1C\xE2\xA1;7\x82u\x04\xF9\xA7\b\x85\xAF@\xC5\xE3\xB5\xE0}\x9D\#@\x1D\xD9\xC9\xB7\xA8\xB2\xD1\xD5%\x06\" F\x98\xD5\xF9\xF1.\xEB\xDF\x98\x8A\xED\xCD\b\xFB\xCD\xF1c\x9ADd\xAE\xA7\x94\xCFY\xF1`\xD6\x06\xED\xAC\xBD\xFF\x82\xEA\x9E\xE2\x13\xBDn\x99J\x04\xCC[m\nd8\x84\xB0\xBD\xBB\x9A\x18\x17z\xF9\x8F8\xF9\xFF5H\n\xB9`d\x8A\xD2c\xA7\x8C\xEBr8H\xF2<\x90I\xBF\x88\xBE\xCF\xAD\xB1\xBB,\x0E\x8FJ\xAE\xC4\xDF\x8E\xAB\xC30\xCFk\xD2\xFE\x1F'P\xB9\x83\x06\xE7\xD2\vr\x14\xD6\xE8\x12\xC7\xDC?\xEA\xAA\xE1F\xFB\xB9\xE7\x14FA\xEC\xD6\xC69\xF22~\xE7\xF7ho~\xFD?\x97\xC4\x02\x8A\xF6\xA8\a\x84\x8C\x96\f\xC0W\xC3\x11\xC1X\x99\x16\xC0\x8E\xE1\e\x9A"

# inflate compressed data
937.times do |counter|
    data = Zlib::inflate(data)
end

# request input
puts "Please input two numbers, each on its own line, to add."

# run data code
eval(data)

¿Y de dónde saqué esa enorme cuerda, preguntas? Este es el programa que utilicé para generarlo:

require 'zlib'
code = 'a,b=gets.to_i,gets.to_i;p a+b'
oldcode = nil
count = -1
until code.inspect.length > 29000; oldcode = code; code = Zlib::deflate code; count += 1; end
File.open(ARGV.shift, 'w') do |f| f.puts oldcode.inspect; end
puts count

¡Yay por "compresión"! :PAGS

Como puede ver, establecí el límite de longitud de la cadena en 29000, que está justo por debajo del límite de longitud para las publicaciones de Stack Exchange, pero podría hacerlo tan alto como quisiera.

Pomo de la puerta
fuente
9

PHP - 1299

Las reglas no prohíben el uso de bibliotecas externas, así que aquí está el código usando SimplePHPEasyPlus :

use SimplePHPEasyPlus\Number\NumberCollection;
use SimplePHPEasyPlus\Number\SimpleNumber;
use SimplePHPEasyPlus\Number\CollectionItemNumberProxy;
use SimplePHPEasyPlus\Parser\SimpleNumberStringParser;
use SimplePHPEasyPlus\Iterator\CallbackIterator;
use SimplePHPEasyPlus\Operator\AdditionOperator;
use SimplePHPEasyPlus\Operation\ArithmeticOperation;
use SimplePHPEasyPlus\Operation\OperationStream;
use SimplePHPEasyPlus\Engine;
use SimplePHPEasyPlus\Calcul\Calcul;
use SimplePHPEasyPlus\Calcul\CalculRunner;


$numberCollection = new NumberCollection();

$numberParser = new SimpleNumberStringParser();

$firstParsedNumber = $numberParser->parse('1');
$firstNumber = new SimpleNumber($firstParsedNumber);
$firstNumberProxy = new CollectionItemNumberProxy($firstNumber);

$numberCollection->add($firstNumberProxy);

$secondParsedNumber = $numberParser->parse('1');
$secondNumber = new SimpleNumber($secondParsedNumber);
$secondNumberProxy = new CollectionItemNumberProxy($secondNumber);

$numberCollection->add($secondNumberProxy);

$addition = new AdditionOperator('SimplePHPEasyPlus\Number\SimpleNumber');

$operation = new ArithmeticOperation($addition);

$engine = new Engine($operation);

$calcul = new Calcul($engine, $numberCollection);

$runner = new CalculRunner();

$runner->run($calcul);

$result = $calcul->getResult();
$numericResult = $result->getValue(); // 2
Yurii Shylov
fuente
10
Estoy realmente interesado en por qué se escribió esa biblioteca.
marczellm
2
@marczellm Quizás para un desafío anterior de bolos de código.
Gerrit
8

C (a través de perl) - 170,141,183,381,241,069,554,076,045,499,751,727,125 (eso es 1.70141183381241e + 38) para entradas sin signo de 32 bits

¡Mi filosofía es que, al implementar la adición desde cero, no es aconsejable confiar en los costos previos calculados como 2, 3, 7 o 65535! 0 y 1 deberían ser las únicas constantes que necesitamos, ¿verdad?

Por lo tanto, no precalculo ninguna constante, las calculo sobre la marcha, como se ve a continuación. Para admitir la entrada de entero con signo de 8 bits, necesitará un código fuente de 20.461.843 caracteres que no sean espacios en blanco. Para implementar una entrada de entero con signo de 32 bits, necesitará un código fuente de longitud 1.70141183381241e + 38 ;-)

¿Listo para un pequeño fragmento del código entero firmado de 8 bits? Aquí estás:

int add(int i, int j) {
  if (i == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) {
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1;
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1;
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1;
    ...
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return -1-1-1;
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return -1-1;
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return -1;
  }
  if (i == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) {
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1;
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1;
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1;
    ...
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return -1-1;
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return -1;
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return 0;
  }
  if (i == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) {
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1;
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1;
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1;
    ...
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return -1;
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return 0;
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return 1;
  }

  ...

  if (i == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) {
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1-1-1;
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1-1;
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1;
    ...
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
  }
  if (i == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) {
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1-1;
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1;
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return 0;
    ...
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
  }
  if (i == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) {
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return -1;
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return 0;
    if (j == -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1) return 1;
    ...
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
    if (j == 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1) return 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
  }
}

Tenga en cuenta que este código tiene algo de golf, no digo, por ejemplo:

if(x==1 and y==1) ...
if(x==1 and y==1+1) ...
if(x==1 and y==1+1+1) ...

No es necesario verificar si x es igual a uno cada vez, ¿verdad? Entonces, mi código es mucho más eficiente † y conciso †, y hace esto en su lugar:

if(x==1) {
  if(y==1) ...
  if(y==1+1) ...
  if(y==1+1+1) ...
}

Ciertamente podría extender aún más la longitud del código cambiando al método menos conciso =)

Y aquí está el código fuente que usé para generar estas monstruosidades, pero tenga cuidado: representar un número entero de 24 bits en este formato (33 MB cada uno) da como resultado que Perl coma más de 1 GB de memoria en mi máquina. Si tiene más de 512 GB de memoria a su disposición, debería poder seguir adelante y probarlo con enteros de 32 bits =)

#!/usr/bin/perl

use strict;
use warnings;

my ($MININT, $MAXINT);
my $abbrev;
if($ARGV[0] =~ /-a(?:=(\d+))?/) {
  $abbrev = defined $1 ? $1 : 3;
  shift @ARGV;
}
if($ARGV[0] =~ /^(\d+)([su]?)$/ && !defined $ARGV[1]) {
  my $unsigned = $2 && $2 eq "u"; #default to signed
  my $bits = $1;
  my $range = 2**$bits;
  $MININT = $unsigned ? 0          : 2**($bits-1)-$range;
  $MAXINT = $unsigned ? $range - 1 : 2**($bits-1)-1;
} else {
  $MININT = shift @ARGV;
  $MAXINT = shift @ARGV;
}

sub componentize {
  my $x = shift;
  return $x < 0 ? "-1" x abs($x) :
         $x > 0 ? "1".("+1"x abs($x-1)) :
         0;
}

my @range = $abbrev ? ($MININT..($MININT+$abbrev), "x", ($MAXINT-$abbrev)..$MAXINT)
                    : ($MININT..$MAXINT);

my $indent="  ";
print "int add(int i, int j) {\n";
for my $i (@range) {
  if($i eq "x") { print "$indent...\n"; next };
  print "${indent}if (i == ".componentize($i).") {\n";
  for my $j (@range) {
    if($j eq "x") { print "$indent$indent...\n"; next };
    print "${indent}${indent}if (j == ".componentize($j).") return ".componentize($i+$j).";\n";
  }
  print "$indent}\n";
}
print "}\n";

Menos mal, eso es =)

skibrianski
fuente
1
† en caso de que te lo hayas perdido, eso fue sarcasmo =)
skibrianski
7

Java - 2406 (3220 con espacios en blanco)

Todos sabemos que las computadoras son buenas para manejar bits y no tan buenas para todo lo demás. ¡Por lo tanto, mi programa realiza la adición usando una adición eficiente a nivel de bits!

/**
 * Solution for PCG22921.
 * 
 * The program adds two natural numbers using efficient bit addition.
 */
public class PCG22921 {
    /**
     * Contains the program.
     * 
     * @param   args    Exactly two integer numbers.
     */
    public static void main(String[] args) {
        // check whether sane arguments were given
        if (args.length != 2) {
            throw new IllegalArgumentException("You must provide exactly two numbers");
        }

        // transform the arguments into integer
        int number1 = Integer.parseInt(args[0]);
        int number2 = Integer.parseInt(args[1]);

        // convert number1 into bits
        String bits1 = "";
        while (number1 > 0) {
            bits1 = (number1 % 2) + bits1;
            number1 = number1 / 2;
        }

        // convert number2 into bits
        String bits2 = "";
        while (number2 > 0) {
            bits2 = (number2 % 2) + bits2;
            number2 = number2 / 2;
        }

        // ensure both numbers have the same length
        while (bits1.length() < bits2.length()) {
            bits1 = "0" + bits1;
        }
        while (bits2.length() < bits1.length()) {
            bits2 = "0" + bits2;
        }

        // stores whether the last addition overflowed
        boolean overflow = false;

        // bits of the result
        String resultBits = "";

        // keep adding until the bits are empty
        while (bits1.length() > 0) {
            // grab the last bit of each number
            char lastBit1 = bits1.charAt(bits1.length() - 1);
            char lastBit2 = bits2.charAt(bits2.length() - 1);

            // Quick lookup table to speed up addition!
            if (lastBit1 == '1' && lastBit2 == '1' && overflow) {
                resultBits = "1" + resultBits;
                overflow = true;
            }
            else if (lastBit1 == '1' && lastBit2 == '1' && !overflow) {
                resultBits = "0" + resultBits;
                overflow = true;
            }
            else if (lastBit1 == '1' && lastBit2 == '0' && overflow) {
                resultBits = "0" + resultBits;
                overflow = true;
            }
            else if (lastBit1 == '0' && lastBit2 == '1' && overflow) {
                resultBits = "0" + resultBits;
                overflow = true;
            }
            else if (lastBit1 == '1' && lastBit2 == '0' && !overflow) {
                resultBits = "1" + resultBits;
                overflow = false;
            }
            else if (lastBit1 == '0' && lastBit2 == '1' && !overflow) {
                resultBits = "1" + resultBits;
                overflow = false;
            }
            else if (lastBit1 == '0' && lastBit2 == '0' && overflow) {
                resultBits = "1" + resultBits;
                overflow = false;
            }
            else if (lastBit1 == '0' && lastBit2 == '0' && !overflow) {
                resultBits = "0" + resultBits;
                overflow = false;
            }
            // error handling is importent
            else throw new RuntimeException("This should not happen");

            // remove the processed bits
            bits1 = bits1.substring(0, bits1.length() - 1);
            bits2 = bits2.substring(0, bits2.length() - 1);
        }
        // check whether there is overflow left
        if (overflow) resultBits = "1" + resultBits;

        // Convert the bits into a result number again
        int result = 0;
        int bitValue = 1;
        while (resultBits.length() > 0) {
            char lastResultBit = resultBits.charAt(resultBits.length() - 1);

            if (lastResultBit == '1') {
                result = result + bitValue;
            }
            resultBits = resultBits.substring(0, resultBits.length() - 1);

            // each bit is twice as worthy as the last one
            bitValue = bitValue * 2;
        }

        // show the result
        System.out.println(result);
    }
}
TimWolla
fuente
Podría agregar algún error al capturarlo a granel ...
Yoda
3
Esperaba que una versión de Java utilizara BitFactory, BitFactoryStrategy, un montón de archivos de configuración XML, etc.
RemcoGerlich
@RemcoGerlich Normalmente no soy un desarrollador de Java, lo elegí porque era bastante detallado en comparación con otros idiomas.
TimWolla
4

Java - 309 731 759

No es la más larga, pero podría ser la interpretación errónea más plausible.

editar: ¡Vaya! Acabo de notar que esto no es .

La adición de números mayores a un bit se realiza agregando bits individuales usando un sumador completo , que toma como entrada dos bits y un arrastre de la etapa anterior, y genera el bit de suma y un bit de arrastre. Por simple adición, el arrastre para la primera etapa debe ser cero.

public class Adder {
    public static void main(String[] args) throws Exception {
        int a = 135;
        int b = 87;

        int result = 0;
        int carryIn = 0;

        // Assume 8 bits, so we have 8 full-adders:
        for (int i = 0; i < 8; i++) { // Assume numbers are 8 bits long
            // Get the Nth bits from the numbers
            int bitA = a >> i & 1;
            int bitB = b >> i & 1;

            // Full adder, using the truth table:
            int bitC = 0;
            int carryOut = 0;
            if (bitA == 0 && bitB == 0 && carryIn == 0) {
                bitC = 0;
                carryOut = 0;
            }
            else if (bitA == 0 && bitB == 0 && carryIn == 1) {
                bitC = 1;
                carryOut = 0;
            }
            else if (bitA == 0 && bitB == 1 && carryIn == 0) {
                bitC = 1;
                carryOut = 0;
            }
            else if (bitA == 0 && bitB == 1 && carryIn == 1) {
                bitC = 0;
                carryOut = 1;
            }
            else if (bitA == 1 && bitB == 0 && carryIn == 0) {
                bitC = 1;
                carryOut = 0;
            }
            else if (bitA == 1 && bitB == 0 && carryIn == 1) {
                bitC = 0;
                carryOut = 1;
            }
            else if (bitA == 1 && bitB == 1 && carryIn == 0) {
                bitC = 0;
                carryOut = 1;
            }
            else if (bitA == 1 && bitB == 1 && carryIn == 1) {
                bitC = 1;
                carryOut = 1;
            }

            // Append the bits to the result
            result |= bitC << i;

            // Carry for next stage
            carryIn = carryOut;
        }

        // Verify the result
        System.out.println("Result = " + result + ", CarryOut = " + carryIn);
        System.out.println("Should be: " + (a + b));
    }
}

Resultado = 222, Realización = 0
Debería ser: 222

Mark Jeronimus
fuente
1
En los primeros años de mi carrera, estaba trabajando en algo que parecía un lenguaje de programación, pero en realidad estaba describiendo las puertas que se implementarían en un chip. Esto parece dolorosamente familiar ... excepto que no creo que tengamos algo tan elegante como un forbucle para decir "replicar esto en todos los bits de los buses de entrada". (Imagínese un lenguaje con una sintaxis de procedimiento y ejecución funcional ... donde la principal herramienta para la edición era una representación altamente procedimental como diagramas de flujo ... ¿qué puedo decir, que fue un esfuerzo temprano.)
keshlam
3

Python 2.7 (agregando el buen camino)

def add(x,y):
    while True:
        a = x & y
        b = x ^ y
        x = a << b & 0xffffffff
        y = b
        if a == 0:
           break
    return b

number_1 = int(raw_input("Please enter a number(1)"))
number_2 = int(raw_input("Please enter a number(2)"))

print "result is: %d" % add(number_1, number_2)

el crédito va a https://stackoverflow.com/questions/366706/bitwise-subtraction-in-python

gh0st
fuente
¿Es este Python 2?
Hosch250
1
@ hosch250, sí: utiliza la versión de impresión no compatible (en python3)
puckipedia
2
@puckipedia Sí, lo sabía por eso raw_input(). Estaba insinuando al OP que es una buena práctica indicar el idioma.
Hosch250
2
function add(a, b)
{
    while (b) {
        a ^= b;
        b &= a ^ b;
        b <<= 1;
    }
    return a;
}
Neil
fuente
¿Qué lenguaje es este? ¿Asumo JavaScript?
Erik the Outgolfer
@EriktheGolfer Wow, sí, esta debe haber sido una de mis primeras presentaciones.
Neil
0

C # - 5395

Vamos a emitir código para usando un método dinámico. En realidad, emito código, que a su vez emite código para llamar a la suma de enteros. La Add()siguiente función crea un método dinámico, que cuando se ejecuta crea un método dinámico para llamar a la suma de enteros.

using System;
using System.Reflection.Emit;

namespace JA
{
class Program
{
    static void Main(string[] args)
    {
        int z=Add(1, 2);
        // z = 3
    }

    // Emit MSIL to emit MSIL
    public static int Add(int x, int y)
    {
        Type delegate_type=typeof(Func<int, int, int>);
        DynamicMethod method=new DynamicMethod(typeof(int).ToString()+".op_Addition",
            typeof(int),
            new Type[] { typeof(int), typeof(int) }, typeof(Program));
        ILGenerator generator=method.GetILGenerator();

        LocalBuilder method1=generator.DeclareLocal(typeof(DynamicMethod));
        LocalBuilder generator1=generator.DeclareLocal(typeof(ILGenerator));
        LocalBuilder add1=generator.DeclareLocal(typeof(Func<int, int, int>));
        LocalBuilder args1=generator.DeclareLocal(typeof(Type[]));
        generator.Emit(OpCodes.Ldtoken, typeof(int));

        generator.Emit(OpCodes.Call,
            typeof(Type).GetMethod("GetTypeFromHandle",
                System.Reflection.BindingFlags.Public|
                System.Reflection.BindingFlags.Static));
        generator.Emit(OpCodes.Callvirt,
            typeof(object).GetMethod("ToString",
                System.Reflection.BindingFlags.Public|
                System.Reflection.BindingFlags.Instance));
        generator.Emit(OpCodes.Ldstr, ".op_Addition");
        generator.Emit(OpCodes.Call,
            typeof(string).GetMethod("Concat",
                new Type[] { typeof(string), typeof(string) }));
        generator.Emit(OpCodes.Ldtoken, typeof(int));
        generator.Emit(OpCodes.Call,
            typeof(Type).GetMethod("GetTypeFromHandle",
                System.Reflection.BindingFlags.Public|
                System.Reflection.BindingFlags.Static));
        generator.Emit(OpCodes.Ldc_I4, 2);
        generator.Emit(OpCodes.Newarr, typeof(Type));
        generator.Emit(OpCodes.Stloc_3);
        generator.Emit(OpCodes.Ldloc_3);
        generator.Emit(OpCodes.Ldc_I4, 0);
        generator.Emit(OpCodes.Ldtoken, typeof(int));
        generator.Emit(OpCodes.Call,
            typeof(Type).GetMethod("GetTypeFromHandle",
                System.Reflection.BindingFlags.Public|
                System.Reflection.BindingFlags.Static));
        generator.Emit(OpCodes.Stelem_Ref);
        generator.Emit(OpCodes.Ldloc_3);
        generator.Emit(OpCodes.Ldc_I4, 1);
        generator.Emit(OpCodes.Ldtoken, typeof(int));
        generator.Emit(OpCodes.Call,
            typeof(Type).GetMethod("GetTypeFromHandle",
                System.Reflection.BindingFlags.Public|
                System.Reflection.BindingFlags.Static));
        generator.Emit(OpCodes.Stelem_Ref);
        generator.Emit(OpCodes.Ldloc_3);
        generator.Emit(OpCodes.Ldtoken, typeof(Program));
        generator.Emit(OpCodes.Call,
            typeof(Type).GetMethod("GetTypeFromHandle",
                System.Reflection.BindingFlags.Public|
                System.Reflection.BindingFlags.Static));

        generator.Emit(OpCodes.Newobj,
            typeof(DynamicMethod).GetConstructor(
                new Type[] { typeof(string), typeof(Type), typeof(Type[]), typeof(Type) }));

        generator.Emit(OpCodes.Stloc_0);
        generator.Emit(OpCodes.Ldloc_0);
        generator.Emit(OpCodes.Callvirt,
            typeof(DynamicMethod).GetMethod("GetILGenerator",
                Type.EmptyTypes));
        generator.Emit(OpCodes.Stloc_1);
        generator.Emit(OpCodes.Ldloc_1);
        generator.Emit(OpCodes.Ldtoken, typeof(int));
        generator.Emit(OpCodes.Call,
            typeof(Type).GetMethod("GetTypeFromHandle",
                System.Reflection.BindingFlags.Public|
                System.Reflection.BindingFlags.Static));
        generator.Emit(OpCodes.Callvirt,
            typeof(ILGenerator).GetMethod("DeclareLocal",
                new Type[] { typeof(Type) }));
        generator.Emit(OpCodes.Pop);
        generator.Emit(OpCodes.Ldloc_1);
        generator.Emit(OpCodes.Ldsfld,
            typeof(OpCodes).GetField("Ldarg_0",
                System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Static));
        generator.Emit(OpCodes.Callvirt,
            typeof(ILGenerator).GetMethod("Emit", new Type[] { typeof(OpCode) }));
        generator.Emit(OpCodes.Ldloc_1);
        generator.Emit(OpCodes.Ldsfld,
            typeof(OpCodes).GetField("Ldarg_1",
                System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Static));
        generator.Emit(OpCodes.Callvirt,
            typeof(ILGenerator).GetMethod("Emit", new Type[] { typeof(OpCode) }));
        generator.Emit(OpCodes.Ldloc_1);
        generator.Emit(OpCodes.Ldsfld,
            typeof(OpCodes).GetField("Add",
                System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Static));
        generator.Emit(OpCodes.Callvirt,
            typeof(ILGenerator).GetMethod("Emit", new Type[] { typeof(OpCode) }));
        generator.Emit(OpCodes.Ldloc_1);
        generator.Emit(OpCodes.Ldsfld,
            typeof(OpCodes).GetField("Stloc_0",
                System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Static));
        generator.Emit(OpCodes.Callvirt,
            typeof(ILGenerator).GetMethod("Emit", new Type[] { typeof(OpCode) }));
        generator.Emit(OpCodes.Ldloc_1);
        generator.Emit(OpCodes.Ldsfld,
            typeof(OpCodes).GetField("Ldloc_0",
                System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Static));
        generator.Emit(OpCodes.Callvirt,
            typeof(ILGenerator).GetMethod("Emit", new Type[] { typeof(OpCode) }));
        generator.Emit(OpCodes.Ldloc_1);
        generator.Emit(OpCodes.Ldsfld,
            typeof(OpCodes).GetField("Ret",
                System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Static));
        generator.Emit(OpCodes.Callvirt,
            typeof(ILGenerator).GetMethod("Emit", new Type[] { typeof(OpCode) }));
        generator.Emit(OpCodes.Ldloc_0);
        generator.Emit(OpCodes.Ldtoken, typeof(Func<int, int, int>));
        generator.Emit(OpCodes.Call,
            typeof(Type).GetMethod("GetTypeFromHandle",
                System.Reflection.BindingFlags.Public|
                System.Reflection.BindingFlags.Static));
        generator.Emit(OpCodes.Callvirt,
            typeof(DynamicMethod).GetMethod("CreateDelegate",
                new Type[] { typeof(Type) }));
        generator.Emit(OpCodes.Isinst, typeof(Func<int, int, int>));
        generator.Emit(OpCodes.Stloc_2);
        generator.Emit(OpCodes.Ldloc_2);
        generator.Emit(OpCodes.Ldarg_0);
        generator.Emit(OpCodes.Ldarg_1);
        generator.Emit(OpCodes.Callvirt,
            typeof(Func<int, int, int>).GetMethod("Invoke",
                System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Instance));
        generator.Emit(OpCodes.Ret);

        Func<int, int, int> add2=method.CreateDelegate(typeof(Func<int, int, int>)) as Func<int, int, int>;

        return add2(x, y);
    }
}
}
ja72
fuente
1
PD. Traté de emitir código que emite código, pero al final obtuve un{System.SystemException}: {"JIT Compiler encountered an internal limitation."}
ja72
0

Supongamos que desea que el código sea más largo que n caracteres. El siguiente código es mucho más largo.

public class Add
{
    int main(int a, int b)
    {
        return (a + (b/2^1) + (b/2^2) + (b/2^3) ... (b/2^n) + (b/2^n));
    }
}
S Basak
fuente
0

do

#include<stdio.h>

int Max(int a,int b)
{
    if(a>b)
    return a;
    else
    return b;
}
int Min(int a,int b)
{
    if(a<b)
    return a;
    else
    return b;
}
int main(void)
{
    int a,b,sum,i,m;
    i=0;
    m = Min(a,b);
    scanf("%d", &a);
    scanf("%d", &b);

    if(Min(a,b) == Max(a,b))
    {
        sum = 2*a;
        printf("%d", sum );
    }
    else
    {
        do
        {
            i++;
            m++;
        }while(m < Max(a,b));



        sum = i + 2 * Min(a,b);
        printf("%d", sum);
    }
    return 0;
}

No funciona bien para grandes cantidades, pero puede ser reemplazado por esto

#include<stdio.h>

int Max(int a,int b)
{
    if(a>b)
    return a;
    else
    return b;
}
int Min(int a,int b)
{
    if(a<b)
    return a;
    else
    return b;
}
int main(void)
{
    int a,b,sum,i,m;
    i=0;
    scanf("%d", &a);
    scanf("%d", &b);

    if(Min(a,b) == Max(a,b))
    {
        sum = 2*a;
        printf("%d", sum );
    }
    else
    {
        i = Max(a,b) - Min(a,b);
        sum = i + 2 * Min(a,b);
        printf("%d", sum);
    }
    return 0;
}
Mhmd
fuente