Advertisement
Guest User

rusthon fannkuch

a guest
Sep 20th, 2015
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var __$UID$__=0;
  2. __NULL_OBJECT__ = Object.create(null);
  3. __WEBWORKER__ = false;
  4. __NODEJS__ = false;
  5. __BROWSER__ = false;
  6. if (typeof(process) !== "undefined")
  7. {
  8.     __NODEJS__ = true;
  9. }
  10. if (typeof(window) !== "undefined")
  11. {
  12.     __BROWSER__ = true;
  13. }
  14. if (typeof(importScripts) === "function")
  15. {
  16.     __WEBWORKER__ = true;
  17. }
  18. if ((! (__NODEJS__) && ! (__WEBWORKER__)))
  19. {
  20.         if (typeof(HTMLDocument) === "undefined")
  21.     {
  22.         HTMLDocument = Document;
  23.     }
  24. }
  25. var __$UID$__ = 1;
  26. IndexError = function(msg) {this.message = msg || "";}; IndexError.prototype = Object.create(Error.prototype); IndexError.prototype.name = "IndexError";
  27. KeyError   = function(msg) {this.message = msg || "";}; KeyError.prototype = Object.create(Error.prototype); KeyError.prototype.name = "KeyError";
  28. ValueError = function(msg) {this.message = msg || "";}; ValueError.prototype = Object.create(Error.prototype); ValueError.prototype.name = "ValueError";
  29. AttributeError = function(msg) {this.message = msg || "";}; AttributeError.prototype = Object.create(Error.prototype);AttributeError.prototype.name = "AttributeError";
  30. RuntimeError   = function(msg) {this.message = msg || "";}; RuntimeError.prototype = Object.create(Error.prototype);RuntimeError.prototype.name = "RuntimeError";
  31. WebWorkerError = function(msg) {this.message = msg || "";}; WebWorkerError.prototype = Object.create(Error.prototype);WebWorkerError.prototype.name = "WebWorkerError";
  32. TypeError = function(msg) {this.message = msg || "";}; TypeError.prototype = Object.create(Error.prototype);TypeError.prototype.name = "TypeError";
  33. var __invalid_call__ =  function __invalid_call__(msg, args)
  34. {
  35.    
  36.     console.log("[INVALID CALL ARGUMENTS]");
  37.         if (typeof(args) !== "undefined")
  38.     {
  39.         var i;
  40.         i = -1;
  41.         while (i++ < args.length)
  42.         {
  43.             console.log(((("    argument:" + i) + " -> ") + args[i]));
  44.         }
  45.     }
  46.     throw new RuntimeError(msg);
  47. }/*end->    `__invalid_call__`  */
  48.  
  49. var __array_fill__ =  function __array_fill__(arr, items)
  50. {
  51.    
  52.     var i;
  53.     i = -1;
  54.     while (i++ < items.length)
  55.     {
  56.         arr[i] = items[i];
  57.     }
  58.     return arr;
  59. }/*end->    `__array_fill__`    */
  60.  
  61. var isinstance =  function isinstance(ob, klass)
  62. {
  63.     var T;
  64.         if ((typeof(ob) === "undefined" || ob === null))
  65.     {
  66.         return false;
  67.     }
  68.     else
  69.     {
  70.                 if (typeof(klass) === "string")
  71.         {
  72.             T = typeof(ob);
  73.                         if (T === "number")
  74.             {
  75.                                 if ((klass === "int" || klass === "π‘°π’π’•π’†π’ˆπ’†π’“"))
  76.                 {
  77.                     return true;
  78.                 }
  79.                 else
  80.                 {
  81.                                         if ((klass === "float" || klass === "𝑭𝒍𝒐𝒂𝒕"))
  82.                     {
  83.                         return true;
  84.                     }
  85.                     else
  86.                     {
  87.                         return false;
  88.                     }
  89.                 }
  90.             }
  91.             else
  92.             {
  93.                                 if (T === "string")
  94.                 {
  95.                                         if ((klass === "string" || klass === "str" || klass === "π‘Ίπ’•π’“π’Šπ’π’ˆ"))
  96.                     {
  97.                         return true;
  98.                     }
  99.                     else
  100.                     {
  101.                         return false;
  102.                     }
  103.                 }
  104.                 else
  105.                 {
  106.                                         if ((klass === "Array" || klass === "list" || klass === "π‘³π’Šπ’”π’•"))
  107.                     {
  108.                                                 if (ob instanceof Array)
  109.                         {
  110.                             return true;
  111.                         }
  112.                         else
  113.                         {
  114.                             return false;
  115.                         }
  116.                     }
  117.                     else
  118.                     {
  119.                                                 if (ob.__class__)
  120.                         {
  121.                                                         if (ob.__class__.__name__ === klass)
  122.                             {
  123.                                 return true;
  124.                             }
  125.                             else
  126.                             {
  127.                                 return false;
  128.                             }
  129.                         }
  130.                         else
  131.                         {
  132.                             return false;
  133.                         }
  134.                     }
  135.                 }
  136.             }
  137.         }
  138.         else
  139.         {
  140.                         if (ob instanceof Array)
  141.             {
  142.                                 if (klass === list)
  143.                 {
  144.                     return true;
  145.                 }
  146.                 else
  147.                 {
  148.                                         if (klass === Array)
  149.                     {
  150.                         return true;
  151.                     }
  152.                     else
  153.                     {
  154.                         return false;
  155.                     }
  156.                 }
  157.             }
  158.             else
  159.             {
  160.                                 if (ob.__class__)
  161.                 {
  162.                     return issubclass(ob.__class__, klass);
  163.                 }
  164.                 else
  165.                 {
  166.                                         if (ob instanceof klass)
  167.                     {
  168.                         return true;
  169.                     }
  170.                     else
  171.                     {
  172.                                                 if (typeof(ob) === "number")
  173.                         {
  174.                                                         if ((klass === int && ob.toString().isdigit()))
  175.                             {
  176.                                 return true;
  177.                             }
  178.                             else
  179.                             {
  180.                                                                 if (klass === float)
  181.                                 {
  182.                                     return true;
  183.                                 }
  184.                                 else
  185.                                 {
  186.                                     return false;
  187.                                 }
  188.                             }
  189.                         }
  190.                         else
  191.                         {
  192.                                                         if (typeof(ob) === "string")
  193.                             {
  194.                                                                 if ((klass === str || klass === string))
  195.                                 {
  196.                                     return true;
  197.                                 }
  198.                                 else
  199.                                 {
  200.                                     return false;
  201.                                 }
  202.                             }
  203.                             else
  204.                             {
  205.                                 return false;
  206.                             }
  207.                         }
  208.                     }
  209.                 }
  210.             }
  211.         }
  212.     }
  213. }/*end->    `isinstance`    */
  214.  
  215. var issubclass =  function issubclass(C, B)
  216. {
  217.    
  218.         if (C === B)
  219.     {
  220.         return true;
  221.     }
  222.     else
  223.     {
  224.                 if (C.__bases__)
  225.         {
  226.                         for (var __n0 = 0; __n0 < C.__bases__.length; __n0++)
  227.             {
  228.                 var base = C.__bases__[ __n0 ];
  229.                                 if (issubclass(base, B))
  230.                 {
  231.                     return true;
  232.                 }
  233.             }
  234.         }
  235.     }
  236.     return false;
  237. }/*end->    `issubclass`    */
  238.  
  239. var len =  function len(ob)
  240. {
  241.    
  242.         if (ob instanceof Array)
  243.     {
  244.         return ob.length;
  245.     }
  246.     else
  247.     {
  248.                 if (__is_typed_array(ob))
  249.         {
  250.             return ob.length;
  251.         }
  252.         else
  253.         {
  254.                         if (ob.__len__)
  255.             {
  256.                 return ob.__len__();
  257.             }
  258.             else
  259.             {
  260.                                 if (isNaN(ob))
  261.                 {
  262.                     throw new RuntimeError("calling `len` with NaN in invalid");
  263.                 }
  264.                 else
  265.                 {
  266.                                         if (typeof(ob) === "number")
  267.                     {
  268.                         throw new RuntimeError("calling `len` on a number is invalid");
  269.                     }
  270.                     else
  271.                     {
  272.                         return Object.keys(ob).length;
  273.                     }
  274.                 }
  275.             }
  276.         }
  277.     }
  278. }/*end->    `len`   */
  279.  
  280. if (typeof(HTMLElement) !== "undefined")
  281. {
  282.             HTMLElement.prototype.__right_arrow__ =  function __auto_dom__()
  283.     {
  284.         var T;
  285.                 for (var __n0 = 0; __n0 < arguments.length; __n0++)
  286.         {
  287.             var item = arguments[ __n0 ];
  288.             T = typeof(item);
  289.                         if (item instanceof HTMLElement)
  290.             {
  291.                 this.appendChild(item);
  292.             }
  293.             else
  294.             {
  295.                                 if (item instanceof Text)
  296.                 {
  297.                     this.appendChild(item);
  298.                 }
  299.                 else
  300.                 {
  301.                                         if (T === "string")
  302.                     {
  303.                         this.appendChild(document.createTextNode(item));
  304.                     }
  305.                     else
  306.                     {
  307.                                                 if (T === "function")
  308.                         {
  309.                             throw new RuntimeError("HTMLElement.__right_arrow__(lambda function) is invalid");
  310.                         }
  311.                         else
  312.                         {
  313.                                                         if (T === "object")
  314.                             {
  315.                                                                 if (item.nodeType)
  316.                                 {
  317.                                                                         if (item.nodeType === Node.TEXT_NODE)
  318.                                     {
  319.                                         this.appendChild(item);
  320.                                     }
  321.                                     else
  322.                                     {
  323.                                                                                 if (item.nodeType === Node.ELEMENT_NODE)
  324.                                         {
  325.                                             this.appendChild(item);
  326.                                         }
  327.                                         else
  328.                                         {
  329.                                             throw new RuntimeError("HTMLElement unknown node type");
  330.                                         }
  331.                                     }
  332.                                 }
  333.                                 else
  334.                                 {
  335.                                                                         for (var __n1 = 0; __n1 < __jsdict_keys(item).length; __n1++)
  336.                                     {
  337.                                         var key = __jsdict_keys(item)[ __n1 ];
  338.                                         this.setAttribute(key, item[key]);
  339.                                     }
  340.                                 }
  341.                             }
  342.                             else
  343.                             {
  344.                                 throw new RuntimeError(("HTMLElement.__right_arrow__(invalid type): " + item));
  345.                             }
  346.                         }
  347.                     }
  348.                 }
  349.             }
  350.         }
  351.         return this;
  352.     }/*end->    `__auto_dom__`  */
  353.  
  354.             HTMLDocument.prototype.__right_arrow__ =  function __htmldoc_rightarrow__(arg)
  355.     {
  356.        
  357.                 if (arg.startswith("#"))
  358.         {
  359.             return this.getElementById(arg.__getslice__(1, undefined, undefined));
  360.         }
  361.         else
  362.         {
  363.             return this.createElement(arg);
  364.         }
  365.     }/*end->    `__htmldoc_rightarrow__`    */
  366.  
  367. }
  368. var dict =  function dict(d, _kwargs_)
  369. {
  370.     var msg,pairs;
  371.     var copy      = (_kwargs_===undefined || (typeof(_kwargs_)=='object' && _kwargs_.copy===undefined))     ?   false :   typeof(_kwargs_)=='object'?_kwargs_.copy: __invalid_call__('function `dict` requires named keyword arguments, invalid parameter for `copy`',arguments);
  372.     var keytype   = (_kwargs_===undefined || (typeof(_kwargs_)=='object' && _kwargs_.keytype===undefined))  ?   null  :   typeof(_kwargs_)=='object'?_kwargs_.keytype: __invalid_call__('function `dict` requires named keyword arguments, invalid parameter for `keytype`',arguments);
  373.     var valuetype = (_kwargs_===undefined || (typeof(_kwargs_)=='object' && _kwargs_.valuetype===undefined))?   null  :   typeof(_kwargs_)=='object'?_kwargs_.valuetype: __invalid_call__('function `dict` requires named keyword arguments, invalid parameter for `valuetype`',arguments);
  374.     var iterable  = (_kwargs_===undefined || (typeof(_kwargs_)=='object' && _kwargs_.iterable===undefined)) ?   null  :   typeof(_kwargs_)=='object'?_kwargs_.iterable: __invalid_call__('function `dict` requires named keyword arguments, invalid parameter for `iterable`',arguments);
  375.         if (d instanceof Array)
  376.     {
  377.         pairs = d;
  378.         d = {};
  379.                 for (var __n0 = 0; __n0 < pairs.length; __n0++)
  380.         {
  381.             var pair = pairs[ __n0 ];
  382.                         if (keytype !== null)
  383.             {
  384.                                 if (! (isinstance(pair[0], keytype)))
  385.                 {
  386.                     msg = __sprintf("INVALID KEY-TYPE: `%s` - expected type `%s`", [typeof(pair[0]), keytype]);
  387.                     throw new TypeError(msg);
  388.                 }
  389.             }
  390.                         if (valuetype !== null)
  391.             {
  392.                                 if (! (isinstance(pair[1], valuetype)))
  393.                 {
  394.                     msg = __sprintf("INVALID VALUE-TYPE: `%s` - expected type `%s`", [typeof(pair[1]), valuetype]);
  395.                     throw new TypeError(msg);
  396.                 }
  397.             }
  398.             d[ pair[0] ] = pair[1];
  399.         }
  400.     }
  401.         if (iterable !== null)
  402.     {
  403.                 for (var __n0 = 0; __n0 < iterable.length; __n0++)
  404.         {
  405.             var pair = iterable[ __n0 ];
  406.                         if (keytype !== null)
  407.             {
  408.                                 if (! (isinstance(pair[0], keytype)))
  409.                 {
  410.                     msg = __sprintf("INVALID KEY-TYPE: `%s` - expected type `%s`", [typeof(pair[0]), keytype]);
  411.                     throw new TypeError(msg);
  412.                 }
  413.             }
  414.                         if (valuetype !== null)
  415.             {
  416.                                 if (! (isinstance(pair[1], valuetype)))
  417.                 {
  418.                     msg = __sprintf("INVALID VALUE-TYPE: `%s` - expected type `%s`", [typeof(pair[1]), valuetype]);
  419.                     throw new TypeError(msg);
  420.                 }
  421.             }
  422.             d[ pair[0] ] = pair[1];
  423.         }
  424.     }
  425.     Object.defineProperty(d, "__class__", { value:dict, enumerable:false });
  426.         if ((keytype !== null || valuetype !== null))
  427.     {
  428.                 if (keytype !== null)
  429.         {
  430.             Object.defineProperty(d, "__keytype__", { value:keytype, enumerable:false });
  431.         }
  432.                 if (valuetype !== null)
  433.         {
  434.             Object.defineProperty(d, "__valuetype__", { value:valuetype, enumerable:false });
  435.         }
  436.                         var __setitem__ =  function __setitem__(key, value)
  437.         {
  438.             var msg;
  439.                         if (keytype !== null)
  440.             {
  441.                                 if (! (isinstance(key, keytype)))
  442.                 {
  443.                     console.log(("TypeError-KEY:" + key));
  444.                     msg = __sprintf("INVALID KEY-TYPE: `%s` - expected type `%s`", [typeof(key), keytype]);
  445.                     throw new TypeError(msg);
  446.                 }
  447.             }
  448.                         if (valuetype !== null)
  449.             {
  450.                                 if (! (isinstance(value, valuetype)))
  451.                 {
  452.                     console.log(("TypeError-VALUE:" + value));
  453.                     msg = __sprintf("INVALID VALUE-TYPE: `%s` - expected type `%s`", [typeof(value), valuetype]);
  454.                     throw new TypeError(msg);
  455.                 }
  456.             }
  457.             d[key] = value;
  458.         }/*end->    `__setitem__`   */
  459.  
  460.         Object.defineProperty(d, "__setitem__", { value:__setitem__, enumerable:false });
  461.     }
  462.         if (! (copy))
  463.     {
  464.         return d;
  465.     }
  466.     else
  467.     {
  468.         throw new RuntimeError("TODO dict(copyme)");
  469.     }
  470. }/*end->    `dict`  */
  471.  
  472. dict.__name__ = "dict";
  473. var __print__ =  function __print__()
  474. {
  475.    
  476.         for (var __n0 = 0; __n0 < arguments.length; __n0++)
  477.     {
  478.         var a = arguments[ __n0 ];
  479.         console.log(a);
  480.     }
  481. }/*end->    `__print__` */
  482.  
  483. /* notes:
  484.         . promotes keys to integers, also works on external objects coming from js.
  485.         . Object.keys(ob) traverses the full prototype chain. */
  486. var __object_keys__ =  function __object_keys__(ob)
  487. {
  488.     var test,arr,iarr,isdigits;
  489.     arr = [];
  490.         if (typeof(ob.__keytype__) !== "undefined")
  491.     {
  492.                 if (ob.__keytype__ === "int")
  493.         {
  494.             for (var key in ob) {arr.push(int(key))};
  495.         }
  496.         else
  497.         {
  498.             for (var key in ob) {arr.push(key)};
  499.         }
  500.         return arr;
  501.     }
  502.     else
  503.     {
  504.         isdigits = false;
  505.         test = 0;
  506.         for (var key in ob) { arr.push(key); if (key.isdigit()) {test += 1;} };
  507.         isdigits = test === arr.length;
  508.                 if (isdigits)
  509.         {
  510.             iarr = [];
  511.                         for (var __n0 = 0; __n0 < arr.length; __n0++)
  512.             {
  513.                 var key = arr[ __n0 ];
  514.                 iarr.push(int(key));
  515.             }
  516.             return iarr;
  517.         }
  518.         else
  519.         {
  520.             return arr;
  521.         }
  522.     }
  523. }/*end->    `__object_keys__`   */
  524.  
  525. var __jsdict_keys =  function __jsdict_keys(ob)
  526. {
  527.    
  528.         if (typeof(ob.__class__) !== "undefined")
  529.     {
  530.                 if (ob.__class__ === dict)
  531.         {
  532.                         if ((typeof(ob.__keytype__) !== "undefined" && ob.__keytype__ === "int"))
  533.             {
  534.                 return JSON.parse((("[" + __replace_method(Object.keys( ob ).toString(), "\"", "")) + "]"));
  535.             }
  536.             else
  537.             {
  538.                 return Object.keys( ob );
  539.             }
  540.         }
  541.         else
  542.         {
  543.             return ob.keys();
  544.         }
  545.     }
  546.     else
  547.     {
  548.                 if (ob instanceof Object)
  549.         {
  550.                         if ((typeof(ob.keys) !== "undefined" && isinstance(ob.keys, Function)))
  551.             {
  552.                 return ob.keys();
  553.             }
  554.             else
  555.             {
  556.                 return Object.keys( ob );
  557.             }
  558.         }
  559.         else
  560.         {
  561.             return ob.keys();
  562.         }
  563.     }
  564. }/*end->    `__jsdict_keys` */
  565.  
  566. Function.prototype.redefine =  function __redef_function(src)
  567. {
  568.    
  569.         if (isinstance(src, Function))
  570.     {
  571.         this.__redef = src;
  572.         this.__recompile = undefined;
  573.     }
  574.     else
  575.     {
  576.         this.__recompile = src;
  577.     }
  578. }/*end->    `__redef_function`  */
  579.  
  580.  
  581. var hasattr =  function hasattr(ob, attr)
  582. {
  583.    
  584.         if (Object.hasOwnProperty.call(ob, attr))
  585.     {
  586.         return true;
  587.     }
  588.     else
  589.     {
  590.                 if (typeof(ob[attr]) !== "undefined")
  591.         {
  592.             return true;
  593.         }
  594.         else
  595.         {
  596.             return false;
  597.         }
  598.     }
  599. }/*end->    `hasattr`   */
  600.  
  601. var list =  function list(ob)
  602. {
  603.     var a;
  604.     a = [];
  605.         if (typeof(ob) !== "undefined")
  606.     {
  607.                 for (var __n0 = 0; __n0 < ob.length; __n0++)
  608.         {
  609.             var e = ob[ __n0 ];
  610.             a.push(e);
  611.         }
  612.     }
  613.     return a;
  614. }/*end->    `list`  */
  615.  
  616. var tuple =  function tuple(ob)
  617. {
  618.     var a;
  619.     a = [];
  620.         if (typeof(ob) !== "undefined")
  621.     {
  622.                 for (var __n0 = 0; __n0 < ob.length; __n0++)
  623.         {
  624.             var e = ob[ __n0 ];
  625.             a.push(e);
  626.         }
  627.     }
  628.     return a;
  629. }/*end->    `tuple` */
  630.  
  631. String.prototype.__add__ =  function __string_add(a)
  632. {
  633.    
  634.     return (this + a);
  635. }/*end->    `__string_add`  */
  636.  
  637. String.prototype.__mul__ =  function __string_multiply(a)
  638. {
  639.     var out;
  640.     out = "";
  641.     var i;
  642.     i = -1;
  643.     while (i++ < a)
  644.     {
  645.         out += this;
  646.     }
  647.     return out;
  648. }/*end->    `__string_multiply` */
  649.  
  650. String.prototype.__contains__ =  function __string_contains(a)
  651. {
  652.    
  653.         if (this.indexOf(a) === -1)
  654.     {
  655.         return false;
  656.     }
  657.     else
  658.     {
  659.         return true;
  660.     }
  661. }/*end->    `__string_contains` */
  662.  
  663. String.prototype.__getslice__ =  function __string_slice(start, stop, step)
  664. {
  665.    
  666.         if ((typeof(start) === "undefined" && typeof(stop) === "undefined" && step === -1))
  667.     {
  668.         return this.split("").reverse().join("");
  669.     }
  670.     else
  671.     {
  672.                 if (stop < 0)
  673.         {
  674.             stop = (this.length + stop);
  675.         }
  676.         return this.substring(start, stop);
  677.     }
  678. }/*end->    `__string_slice`    */
  679.  
  680. var __lambda__ =  function __lambda__()
  681. {
  682.    
  683.     return this.split("\n");
  684. }/*end->    `__lambda__`    */
  685.  
  686. String.prototype.splitlines = __lambda__;
  687. var __lambda__ =  function __lambda__()
  688. {
  689.    
  690.     return this.trim();
  691. }/*end->    `__lambda__`    */
  692.  
  693. String.prototype.strip = __lambda__;
  694. var __lambda__ =  function __lambda__()
  695. {
  696.    
  697.     return this.length;
  698. }/*end->    `__lambda__`    */
  699.  
  700. String.prototype.__len__ = __lambda__;
  701. String.prototype.startswith =  function __string_startswith(a)
  702. {
  703.    
  704.         if (this.substring(0, a.length) === a)
  705.     {
  706.         return true;
  707.     }
  708.     else
  709.     {
  710.         return false;
  711.     }
  712. }/*end->    `__string_startswith`   */
  713.  
  714. String.prototype.endswith =  function __string_endswith(a)
  715. {
  716.    
  717.         if (this.substring((this.length - a.length), this.length) === a)
  718.     {
  719.         return true;
  720.     }
  721.     else
  722.     {
  723.         return false;
  724.     }
  725. }/*end->    `__string_endswith` */
  726.  
  727. String.prototype.join =  function __string_join(arr)
  728. {
  729.     var i,out;
  730.     out = "";
  731.     i = 0;
  732.         for (var __n0 = 0; __n0 < arr.length; __n0++)
  733.     {
  734.         var value = arr[ __n0 ];
  735.         out += value;
  736.         i ++;
  737.                 if (i < arr.length)
  738.         {
  739.             out += this;
  740.         }
  741.     }
  742.     return out;
  743. }/*end->    `__string_join` */
  744.  
  745. var __lambda__ =  function __lambda__()
  746. {
  747.    
  748.     return this.toUpperCase();
  749. }/*end->    `__lambda__`    */
  750.  
  751. String.prototype.upper = __lambda__;
  752. var __lambda__ =  function __lambda__()
  753. {
  754.    
  755.     return this.toLowerCase();
  756. }/*end->    `__lambda__`    */
  757.  
  758. String.prototype.lower = __lambda__;
  759. Number.prototype.__sub__ =  function __number_sub(other)
  760. {
  761.    
  762.     return (this - other);
  763. }/*end->    `__number_sub`  */
  764.  
  765. Number.prototype.__add__ =  function __number_add(other)
  766. {
  767.    
  768.     return (this + other);
  769. }/*end->    `__number_add`  */
  770.  
  771. Number.prototype.__mul__ =  function __number_mul(other)
  772. {
  773.    
  774.     return (this * other);
  775. }/*end->    `__number_mul`  */
  776.  
  777. Number.prototype.__div__ =  function __number_div(other)
  778. {
  779.    
  780.     return (this / other);
  781. }/*end->    `__number_div`  */
  782.  
  783. Number.prototype.__mod__ =  function __number_mod(other)
  784. {
  785.    
  786.     return (this % other);
  787. }/*end->    `__number_mod`  */
  788.  
  789. String.prototype.index =  function __string_index(a)
  790. {
  791.     var i;
  792.     i = this.indexOf(a);
  793.         if (i === -1)
  794.     {
  795.         throw new ValueError((a + " - not in string"));
  796.     }
  797.     return i;
  798. }/*end->    `__string_index`    */
  799.  
  800. Array.prototype.equals =  function __array_equals(a)
  801. {
  802.    
  803.     return JSON.stringify(this) === JSON.stringify(a);
  804. }/*end->    `__array_equals`    */
  805.  
  806. Array.prototype.copy =  function func()
  807. {
  808.     var i,arr;
  809.     arr = [];
  810.     i = 0;
  811.     while (i < this.length)
  812.     {
  813.         arr.push(this[i]);
  814.         i ++;
  815.     }
  816.     return arr;
  817. }/*end->    `func`  */
  818.  
  819. Array.prototype.__contains__ =  function __array_contains(a)
  820. {
  821.    
  822.         if (this.indexOf(a) === -1)
  823.     {
  824.         return false;
  825.     }
  826.     else
  827.     {
  828.         return true;
  829.     }
  830. }/*end->    `__array_contains`  */
  831.  
  832. Array.prototype.__getslice__ =  function __array_getslice(start, stop, step)
  833. {
  834.     var i,arr,n;
  835.     arr = [];
  836.     start = (start | 0);
  837.         if (typeof(stop) === "undefined")
  838.     {
  839.         stop = this.length;
  840.     }
  841.         if (start < 0)
  842.     {
  843.         start = (this.length + start);
  844.     }
  845.         if (stop < 0)
  846.     {
  847.         stop = (this.length + stop);
  848.     }
  849.         if (typeof(step) === "number")
  850.     {
  851.                 if (step < 0)
  852.         {
  853.             i = start;
  854.             while (i >= 0)
  855.             {
  856.                 arr.push(this[i]);
  857.                 i += step;
  858.             }
  859.             return arr;
  860.         }
  861.         else
  862.         {
  863.             i = start;
  864.             n = stop;
  865.             while (i < n)
  866.             {
  867.                 arr.push(this[i]);
  868.                 i += step;
  869.             }
  870.             return arr;
  871.         }
  872.     }
  873.     else
  874.     {
  875.         i = start;
  876.         n = stop;
  877.         while (i < n)
  878.         {
  879.             arr.push(this[i]);
  880.             i ++;
  881.         }
  882.         return arr;
  883.     }
  884. }/*end->    `__array_getslice`  */
  885.  
  886. Array.prototype.__setslice__ =  function __array_setslice(start, stop, step, items)
  887. {
  888.     var arr;
  889.         if (typeof(start) === "undefined")
  890.     {
  891.         start = 0;
  892.     }
  893.         if (typeof(stop) === "undefined")
  894.     {
  895.         stop = this.length;
  896.     }
  897.     arr = [start, (stop - start)];
  898.         for (var __n0 = 0; __n0 < items.length; __n0++)
  899.     {
  900.         var item = items[ __n0 ];
  901.         arr.push(item);
  902.     }
  903.     this.splice.apply(this, arr);
  904. }/*end->    `__array_setslice`  */
  905.  
  906. Array.prototype.append =  function __array_append(item)
  907. {
  908.    
  909.     this.push(item);
  910.     return this;
  911. }/*end->    `__array_append`    */
  912.  
  913. Array.prototype.__mul__ =  function __array_mul(n)
  914. {
  915.     var a;
  916.     a = [];
  917.     var i;
  918.     i = -1;
  919.     while (i++ < n)
  920.     {
  921.         a.extend(this);
  922.     }
  923.     return a;
  924. }/*end->    `__array_mul`   */
  925.  
  926. Array.prototype.__add__ =  function __array_add(other)
  927. {
  928.     var a;
  929.     a = [];
  930.     a.extend(this);
  931.     a.extend(other);
  932.     return a;
  933. }/*end->    `__array_add`   */
  934.  
  935. Array.prototype.add = Array.prototype.__add__;
  936. Array.prototype.extend =  function __array_extend(other)
  937. {
  938.    
  939.         for (var __n0 = 0; __n0 < other.length; __n0++)
  940.     {
  941.         var obj = other[ __n0 ];
  942.         this.push(obj);
  943.     }
  944.     return this;
  945. }/*end->    `__array_extend`    */
  946.  
  947. Array.prototype.remove =  function __array_remove(item)
  948. {
  949.     var index;
  950.     index = this.indexOf(item);
  951.     this.splice(index, 1);
  952. }/*end->    `__array_remove`    */
  953.  
  954. Array.prototype.insert =  function __array_insert(index, obj)
  955. {
  956.    
  957.         if (index < 0)
  958.     {
  959.         index = (this.length + index);
  960.     }
  961.     this.splice(index, 0, obj);
  962. }/*end->    `__array_insert`    */
  963.  
  964. var __lambda__ =  function __lambda__(obj)
  965. {
  966.    
  967.     return this.indexOf(obj);
  968. }/*end->    `__lambda__`    */
  969.  
  970. Array.prototype.index = __lambda__;
  971. Array.prototype.count =  function __array_count(obj)
  972. {
  973.     var a;
  974.     a = 0;
  975.         for (var __n0 = 0; __n0 < this.length; __n0++)
  976.     {
  977.         var item = this[ __n0 ];
  978.                 if (item === obj)
  979.         {
  980.             a ++;
  981.         }
  982.     }
  983.     return a;
  984. }/*end->    `__array_count` */
  985.  
  986. var __sort_method =  function __sort_method(ob)
  987. {
  988.    
  989.         if (ob instanceof Array)
  990.     {
  991.                 if ((ob.length && typeof(ob[0]) === "number"))
  992.         {
  993.                                     var f =  function f(a, b)
  994.             {
  995.                
  996.                                 if (a < b)
  997.                 {
  998.                     return -1;
  999.                 }
  1000.                 else
  1001.                 {
  1002.                                         if (a > b)
  1003.                     {
  1004.                         return 1;
  1005.                     }
  1006.                     else
  1007.                     {
  1008.                         return 0;
  1009.                     }
  1010.                 }
  1011.             }/*end->    `f` */
  1012.  
  1013.             ob.sort( f );
  1014.         }
  1015.         else
  1016.         {
  1017.             ob.sort();
  1018.         }
  1019.     }
  1020.     else
  1021.     {
  1022.         return ob.sort();
  1023.     }
  1024. }/*end->    `__sort_method` */
  1025.  
  1026. var __contains__ =  function __contains__(ob, a)
  1027. {
  1028.     var t;
  1029.     t = typeof(ob);
  1030.         if (t === "string")
  1031.     {
  1032.                 if (ob.indexOf(a) === -1)
  1033.         {
  1034.             return false;
  1035.         }
  1036.         else
  1037.         {
  1038.             return true;
  1039.         }
  1040.     }
  1041.     else
  1042.     {
  1043.                 if (t === "number")
  1044.         {
  1045.             throw new TypeError;
  1046.         }
  1047.         else
  1048.         {
  1049.                         if (__is_typed_array(ob))
  1050.             {
  1051.                                 for (var __n0 = 0; __n0 < ob.length; __n0++)
  1052.                 {
  1053.                     var x = ob[ __n0 ];
  1054.                                         if (x === a)
  1055.                     {
  1056.                         return true;
  1057.                     }
  1058.                 }
  1059.                 return false;
  1060.             }
  1061.             else
  1062.             {
  1063.                                 if ((ob && ob.__contains__))
  1064.                 {
  1065.                     return ob.__contains__(a);
  1066.                 }
  1067.                 else
  1068.                 {
  1069.                                         if ((ob instanceof Object && Object.hasOwnProperty.call(ob, a)))
  1070.                     {
  1071.                         return true;
  1072.                     }
  1073.                     else
  1074.                     {
  1075.                         return false;
  1076.                     }
  1077.                 }
  1078.             }
  1079.         }
  1080.     }
  1081. }/*end->    `__contains__`  */
  1082.  
  1083. __dom_array_types__ = [];
  1084. if (typeof(NodeList) === "function")
  1085. {
  1086.     __dom_array_types__ = [NodeList, FileList, DOMStringList, HTMLCollection, SVGNumberList, SVGTransformList];
  1087.         if (typeof(DataTransferItemList) === "function")
  1088.     {
  1089.         __dom_array_types__.push(DataTransferItemList);
  1090.     }
  1091.         if (typeof(HTMLAllCollection) === "function")
  1092.     {
  1093.         __dom_array_types__.push(HTMLAllCollection);
  1094.     }
  1095.         if (typeof(SVGElementInstanceList) === "function")
  1096.     {
  1097.         __dom_array_types__.push(SVGElementInstanceList);
  1098.     }
  1099.         if (typeof(ClientRectList) === "function")
  1100.     {
  1101.         __dom_array_types__.push(ClientRectList);
  1102.     }
  1103. }
  1104. var __is_some_array =  function __is_some_array(ob)
  1105. {
  1106.    
  1107.         if (__dom_array_types__.length > 0)
  1108.     {
  1109.                 for (var __n0 = 0; __n0 < __dom_array_types__.length; __n0++)
  1110.         {
  1111.             var t = __dom_array_types__[ __n0 ];
  1112.                         if (ob instanceof t)
  1113.             {
  1114.                 return true;
  1115.             }
  1116.         }
  1117.     }
  1118.     return false;
  1119. }/*end->    `__is_some_array`   */
  1120.  
  1121. var __is_typed_array =  function __is_typed_array(ob)
  1122. {
  1123.    
  1124.         if ((ob instanceof Int16Array || ob instanceof Uint16Array))
  1125.     {
  1126.         return true;
  1127.     }
  1128.     else
  1129.     {
  1130.                 if ((ob instanceof Int32Array || ob instanceof Uint32Array))
  1131.         {
  1132.             return true;
  1133.         }
  1134.         else
  1135.         {
  1136.                         if ((ob instanceof Float32Array || ob instanceof Float64Array))
  1137.             {
  1138.                 return true;
  1139.             }
  1140.             else
  1141.             {
  1142.                 return false;
  1143.             }
  1144.         }
  1145.     }
  1146. }/*end->    `__is_typed_array`  */
  1147.  
  1148. var __js_typed_array =  function __js_typed_array(t, a)
  1149. {
  1150.     var arr;
  1151.         if (t === "i")
  1152.     {
  1153.         arr =  new Int32Array(a.length);
  1154.     }
  1155.     arr.set(a);
  1156.     return arr;
  1157. }/*end->    `__js_typed_array`  */
  1158.  
  1159. var __sprintf =  function __sprintf(fmt, args)
  1160. {
  1161.     var chunks,i,arr,item;
  1162.         if (args instanceof Array)
  1163.     {
  1164.         chunks = fmt.split("%s");
  1165.         arr = [];
  1166.         i = 0;
  1167.                 for (var __n0 = 0; __n0 < chunks.length; __n0++)
  1168.         {
  1169.             var txt = chunks[ __n0 ];
  1170.             arr.append(txt);
  1171.                         if (i >= args.length)
  1172.             {
  1173.                 break;
  1174.             }
  1175.             item = args[i];
  1176.                         if (typeof(item) === "string")
  1177.             {
  1178.                 arr.append(item);
  1179.             }
  1180.             else
  1181.             {
  1182.                                 if (typeof(item) === "number")
  1183.                 {
  1184.                     arr.append(("" + item));
  1185.                 }
  1186.                 else
  1187.                 {
  1188.                     arr.append(Object.prototype.toString.call(item));
  1189.                 }
  1190.             }
  1191.             i ++;
  1192.         }
  1193.         return "".join(arr);
  1194.     }
  1195.     else
  1196.     {
  1197.         return fmt.replace('%s', args);
  1198.     }
  1199. }/*end->    `__sprintf` */
  1200.  
  1201. var __jsdict =  function __jsdict(items)
  1202. {
  1203.     var d,key;
  1204.     d = {};
  1205.         for (var __n0 = 0; __n0 < items.length; __n0++)
  1206.     {
  1207.         var item = items[ __n0 ];
  1208.         key = item[0];
  1209.                 if (key instanceof Array)
  1210.         {
  1211.             key = JSON.stringify(key);
  1212.         }
  1213.         else
  1214.         {
  1215.                         if (key.__uid__)
  1216.             {
  1217.                 key = key.__uid__;
  1218.             }
  1219.         }
  1220.         d[key] = item[1];
  1221.     }
  1222.     return d;
  1223. }/*end->    `__jsdict`  */
  1224.  
  1225. var __jsdict_get =  function __jsdict_get(ob, key, default_value)
  1226. {
  1227.     var v;
  1228.         if (ob.__class__ === dict)
  1229.     {
  1230.         v = ob[key];
  1231.                 if ((typeof(default_value) === "undefined" && typeof(v) === "undefined"))
  1232.         {
  1233.             console.log("KeyError: key not found in object:");
  1234.             console.log(ob);
  1235.             throw new KeyError(("invalid key:" + key));
  1236.         }
  1237.         else
  1238.         {
  1239.                         if (typeof(v) !== "undefined")
  1240.             {
  1241.                 return v;
  1242.             }
  1243.             else
  1244.             {
  1245.                 return default_value;
  1246.             }
  1247.         }
  1248.     }
  1249.     else
  1250.     {
  1251.                 if (typeof(ob.get) === "function")
  1252.         {
  1253.             return ob.get(key,default_value);
  1254.         }
  1255.         else
  1256.         {
  1257.             v = ob.get(key,default_value);
  1258.                         if ((typeof(default_value) === "undefined" && typeof(v) === "undefined"))
  1259.             {
  1260.                 console.log("KeyError: key not found in object:");
  1261.                 console.log(ob);
  1262.                 throw new KeyError(("invalid key:" + key));
  1263.             }
  1264.             else
  1265.             {
  1266.                                 if (typeof(v) !== "undefined")
  1267.                 {
  1268.                     return v;
  1269.                 }
  1270.                 else
  1271.                 {
  1272.                     return default_value;
  1273.                 }
  1274.             }
  1275.         }
  1276.     }
  1277. }/*end->    `__jsdict_get`  */
  1278.  
  1279. var __jsdict_set =  function __jsdict_set(ob, key, value)
  1280. {
  1281.    
  1282.         if (ob.__class__ === dict)
  1283.     {
  1284.         ob[key]=value;
  1285.     }
  1286.     else
  1287.     {
  1288.                 if (typeof(ob.set) === "function")
  1289.         {
  1290.             return ob.set(key,value);
  1291.         }
  1292.         else
  1293.         {
  1294.             console.log("[method error] missing `set`");
  1295.             console.log(ob);
  1296.             throw new RuntimeError("object has no method named `set`");
  1297.         }
  1298.     }
  1299. }/*end->    `__jsdict_set`  */
  1300.  
  1301. var __jsdict_items =  function __jsdict_items(ob)
  1302. {
  1303.     var items;
  1304.         if (ob.__class__ === dict)
  1305.     {
  1306.         items = [];
  1307.                 for (var __n0 = 0; __n0 < __jsdict_keys(ob).length; __n0++)
  1308.         {
  1309.             var key = __jsdict_keys(ob)[ __n0 ];
  1310.             items.push([key, ob[key]]);
  1311.         }
  1312.         return items;
  1313.     }
  1314.     else
  1315.     {
  1316.                 if (typeof(ob.items) === "function")
  1317.         {
  1318.             return ob.items();
  1319.         }
  1320.         else
  1321.         {
  1322.             console.log("[method error] missing `items`");
  1323.             console.log(ob);
  1324.             throw new RuntimeError("object has no method named `items`");
  1325.         }
  1326.     }
  1327. }/*end->    `__jsdict_items`    */
  1328.  
  1329. var __jsdict_values =  function __jsdict_values(ob)
  1330. {
  1331.     var items;
  1332.         if (ob.__class__ === dict)
  1333.     {
  1334.         items = [];
  1335.                 for (var __n0 = 0; __n0 < __jsdict_keys(ob).length; __n0++)
  1336.         {
  1337.             var key = __jsdict_keys(ob)[ __n0 ];
  1338.             items.push(ob[key]);
  1339.         }
  1340.         return items;
  1341.     }
  1342.     else
  1343.     {
  1344.                 if (typeof(ob.values) === "function")
  1345.         {
  1346.             return ob.values();
  1347.         }
  1348.         else
  1349.         {
  1350.             console.log("[method error] missing `values`");
  1351.             console.log(ob);
  1352.             throw new RuntimeError("object has no method named `values`");
  1353.         }
  1354.     }
  1355. }/*end->    `__jsdict_values`   */
  1356.  
  1357. var __jsdict_pop =  function __jsdict_pop(ob, key, __default__)
  1358. {
  1359.     var p,popped;
  1360.         if (ob instanceof Array)
  1361.     {
  1362.                 if (ob.length)
  1363.         {
  1364.                         if (typeof(key) === "undefined")
  1365.             {
  1366.                 throw new RuntimeError("Array.pop(undefined)");
  1367.             }
  1368.             else
  1369.             {
  1370.                 popped = ob.splice(key, 1);
  1371.                                 if (popped.length === 0)
  1372.                 {
  1373.                                         if (typeof(__default__) !== "undefined")
  1374.                     {
  1375.                         return __default__;
  1376.                     }
  1377.                     else
  1378.                     {
  1379.                         throw new IndexError(key);
  1380.                     }
  1381.                 }
  1382.                 else
  1383.                 {
  1384.                     return popped[0];
  1385.                 }
  1386.             }
  1387.         }
  1388.         else
  1389.         {
  1390.             throw new IndexError(key);
  1391.         }
  1392.     }
  1393.     else
  1394.     {
  1395.                 if (ob.__class__ === dict)
  1396.         {
  1397.             p = ob[key];
  1398.                         if (typeof(p) === "undefined")
  1399.             {
  1400.                                 if (typeof(__default__) !== "undefined")
  1401.                 {
  1402.                     return __default__;
  1403.                 }
  1404.                 else
  1405.                 {
  1406.                     throw new KeyError(key);
  1407.                 }
  1408.             }
  1409.             else
  1410.             {
  1411.                 delete ob[key];
  1412.                 return p;
  1413.             }
  1414.         }
  1415.         else
  1416.         {
  1417.                         if (typeof(ob.pop) === "function")
  1418.             {
  1419.                 return ob.pop(key,__default__);
  1420.             }
  1421.             else
  1422.             {
  1423.                 console.log("[method error] missing `pop`");
  1424.                 console.log(ob);
  1425.                 throw new RuntimeError("object has no method named `items`");
  1426.             }
  1427.         }
  1428.     }
  1429. }/*end->    `__jsdict_pop`  */
  1430.  
  1431. var __jsdict_update =  function __jsdict_update(ob, other)
  1432. {
  1433.     var keys;
  1434.         if (ob.__class__ === dict)
  1435.     {
  1436.         keys = [];
  1437.                 for (var __n0 = 0; __n0 < __jsdict_keys(other).length; __n0++)
  1438.         {
  1439.             var key = __jsdict_keys(other)[ __n0 ];
  1440.             ob[key] = other[key];
  1441.             keys.push(key);
  1442.         }
  1443.         return keys;
  1444.     }
  1445.     else
  1446.     {
  1447.                 if (typeof(ob.update) === "function")
  1448.         {
  1449.             return ob.update(other);
  1450.         }
  1451.         else
  1452.         {
  1453.             console.log("[method error] missing `update`");
  1454.             console.log(ob);
  1455.             throw new RuntimeError("object has no method named `update`");
  1456.         }
  1457.     }
  1458. }/*end->    `__jsdict_update`   */
  1459.  
  1460. /* This returns an array that is a minimal implementation of set.
  1461.     Often sets are used simply to remove duplicate entries from a list,
  1462.     and then it get converted back to a list, it is safe to use set for this.
  1463.  
  1464.     The array prototype is overloaded with basic set functions:
  1465.         difference
  1466.         intersection
  1467.         issubset */
  1468. var set =  function set(a)
  1469. {
  1470.     var s;
  1471.     s = [];
  1472.         for (var __n0 = 0; __n0 < a.length; __n0++)
  1473.     {
  1474.         var item = a[ __n0 ];
  1475.                 if (s.indexOf(item) === -1)
  1476.         {
  1477.             s.push(item);
  1478.         }
  1479.     }
  1480.     return s;
  1481. }/*end->    `set`   */
  1482.  
  1483. var frozenset =  function frozenset(a)
  1484. {
  1485.    
  1486.     return set(a);
  1487. }/*end->    `frozenset` */
  1488.  
  1489. Array.prototype.bisect =  function __array_bisect(x, low, high)
  1490. {
  1491.     var a,mid;
  1492.         if (typeof(low) === "undefined")
  1493.     {
  1494.         low = 0;
  1495.     }
  1496.         if (typeof(high) === "undefined")
  1497.     {
  1498.         high = this.length;
  1499.     }
  1500.     while (low < high)
  1501.     {
  1502.         a = (low + high);
  1503.         mid = Math.floor((a / 2));
  1504.                 if (x < this[mid])
  1505.         {
  1506.             high = mid;
  1507.         }
  1508.         else
  1509.         {
  1510.             low = (mid + 1);
  1511.         }
  1512.     }
  1513.     return low;
  1514. }/*end->    `__array_bisect`    */
  1515.  
  1516. Array.prototype.difference =  function __array_difference(other)
  1517. {
  1518.     var f;
  1519.             var __lambda__ =  function __lambda__(i)
  1520.     {
  1521.        
  1522.         return other.indexOf(i) === -1;
  1523.     }/*end->    `__lambda__`    */
  1524.  
  1525.     f = __lambda__;
  1526.     return this.filter(f);
  1527. }/*end->    `__array_difference`    */
  1528.  
  1529. Array.prototype.intersection =  function __array_intersection(other)
  1530. {
  1531.     var f;
  1532.             var __lambda__ =  function __lambda__(i)
  1533.     {
  1534.        
  1535.         return other.indexOf(i) !== -1;
  1536.     }/*end->    `__lambda__`    */
  1537.  
  1538.     f = __lambda__;
  1539.     return this.filter(f);
  1540. }/*end->    `__array_intersection`  */
  1541.  
  1542. Array.prototype.issubset =  function __array_issubset(other)
  1543. {
  1544.    
  1545.         for (var __n0 = 0; __n0 < this.length; __n0++)
  1546.     {
  1547.         var item = this[ __n0 ];
  1548.                 if (other.indexOf(item) === -1)
  1549.         {
  1550.             return false;
  1551.         }
  1552.     }
  1553.     return true;
  1554. }/*end->    `__array_issubset`  */
  1555.  
  1556. var int =  function int(a)
  1557. {
  1558.    
  1559.     a = Math.round(a);
  1560.         if (isNaN(a))
  1561.     {
  1562.         throw new ValueError("not a number");
  1563.     }
  1564.     return a;
  1565. }/*end->    `int`   */
  1566.  
  1567. var float =  function float(a)
  1568. {
  1569.     var b;
  1570.         if (typeof(a) === "string")
  1571.     {
  1572.                 if (a.lower() === "nan")
  1573.         {
  1574.             return NaN;
  1575.         }
  1576.         else
  1577.         {
  1578.                         if (a.lower() === "inf")
  1579.             {
  1580.                 return Infinity;
  1581.             }
  1582.         }
  1583.     }
  1584.     b = Number(a);
  1585.         if (isNaN(b))
  1586.     {
  1587.         throw new ValueError(("can not convert to float: " + a));
  1588.     }
  1589.     return b;
  1590. }/*end->    `float` */
  1591.  
  1592. var round =  function round(a, places)
  1593. {
  1594.     var p,b;
  1595.         if (typeof(places) === "undefined")
  1596.     {
  1597.         places = 0;
  1598.     }
  1599.     b = ("" + a);
  1600.         if (b.indexOf(".") === -1)
  1601.     {
  1602.         return a;
  1603.     }
  1604.     else
  1605.     {
  1606.         p = Math.pow(10, places);
  1607.         return (Math.round((a * p)) / p);
  1608.     }
  1609. }/*end->    `round` */
  1610.  
  1611. var str =  function str(s)
  1612. {
  1613.    
  1614.     return ("" + s);
  1615. }/*end->    `str`   */
  1616.  
  1617. var string =  function string(s)
  1618. {
  1619.    
  1620.     return ("" + s);
  1621. }/*end->    `string`    */
  1622.  
  1623. String.prototype.format =  function __string_format(fmt)
  1624. {
  1625.     var keys,r;
  1626.     r = this;
  1627.     keys = Object.keys(fmt);
  1628.         for (var __n0 = 0; __n0 < keys.length; __n0++)
  1629.     {
  1630.         var key = keys[ __n0 ];
  1631.         r = r.split(key).join(fmt[key]);
  1632.     }
  1633.     r = r.split("{").join("").split("}").join("");
  1634.     return r;
  1635. }/*end->    `__string_format`   */
  1636.  
  1637. var __lambda__ =  function __lambda__(a)
  1638. {
  1639.    
  1640.     return this.indexOf(a);
  1641. }/*end->    `__lambda__`    */
  1642.  
  1643. String.prototype.find = __lambda__;
  1644. String.prototype.isdigit =  function __string_isdigit()
  1645. {
  1646.     var digits;
  1647.     digits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
  1648.         for (var __n0 = 0; __n0 < this.length; __n0++)
  1649.     {
  1650.         var char = this[ __n0 ];
  1651.                 if (__contains__(digits, char))
  1652.         {
  1653.             /*pass*/
  1654.         }
  1655.         else
  1656.         {
  1657.             return false;
  1658.         }
  1659.     }
  1660.     return true;
  1661. }/*end->    `__string_isdigit`  */
  1662.  
  1663. String.prototype.isnumber =  function __string_isnumber()
  1664. {
  1665.     var digits;
  1666.     digits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "."];
  1667.         for (var __n0 = 0; __n0 < this.length; __n0++)
  1668.     {
  1669.         var char = this[ __n0 ];
  1670.                 if (__contains__(digits, char))
  1671.         {
  1672.             /*pass*/
  1673.         }
  1674.         else
  1675.         {
  1676.             return false;
  1677.         }
  1678.     }
  1679.     return true;
  1680. }/*end->    `__string_isnumber` */
  1681.  
  1682. var __replace_method =  function __replace_method(ob, a, b)
  1683. {
  1684.    
  1685.         if (typeof(ob) === "string")
  1686.     {
  1687.         return ob.split(a).join(b);
  1688.     }
  1689.     else
  1690.     {
  1691.         return __replace_method(ob, a, b);
  1692.     }
  1693. }/*end->    `__replace_method`  */
  1694.  
  1695. var __split_method =  function __split_method(ob, delim)
  1696. {
  1697.    
  1698.         if (typeof(ob) === "string")
  1699.     {
  1700.                 if (typeof(delim) === "undefined")
  1701.         {
  1702.             return ob.split(" ");
  1703.         }
  1704.         else
  1705.         {
  1706.             return ob.split(delim);
  1707.         }
  1708.     }
  1709.     else
  1710.     {
  1711.                 if (typeof(delim) === "undefined")
  1712.         {
  1713.             return __split_method(ob);
  1714.         }
  1715.         else
  1716.         {
  1717.             return ob.split(delim);
  1718.         }
  1719.     }
  1720. }/*end->    `__split_method`    */
  1721.  
  1722. var dir =  function dir(ob)
  1723. {
  1724.    
  1725.         if (ob instanceof Object)
  1726.     {
  1727.         return Object.keys( ob );
  1728.     }
  1729.     else
  1730.     {
  1731.         return __object_keys__(ob);
  1732.     }
  1733. }/*end->    `dir`   */
  1734.  
  1735. var __getfast__ =  function __getfast__(ob, attr)
  1736. {
  1737.     var v;
  1738.     v = ob[attr];
  1739.         if (typeof(v) === "undefined")
  1740.     {
  1741.                 if (ob.__class__)
  1742.         {
  1743.             v = ob.__class__[attr];
  1744.                         if (typeof(v) !== "undefined")
  1745.             {
  1746.                 return v;
  1747.             }
  1748.         }
  1749.         throw new AttributeError(attr);
  1750.     }
  1751.     else
  1752.     {
  1753.         return v;
  1754.     }
  1755. }/*end->    `__getfast__`   */
  1756.  
  1757. var getattr =  function getattr(ob, attr)
  1758. {
  1759.    
  1760.     return __getfast__(ob, attr);
  1761. }/*end->    `getattr`   */
  1762.  
  1763. var setattr =  function setattr(ob, attr, value)
  1764. {
  1765.    
  1766.     ob[attr] = value;
  1767. }/*end->    `setattr`   */
  1768.  
  1769. /* Emulates Python's range function */
  1770. var range =  function range(num, stop, step)
  1771. {
  1772.     var i,arr;
  1773.         if (typeof(stop) !== "undefined")
  1774.     {
  1775.         i = num;
  1776.         num = stop;
  1777.     }
  1778.     else
  1779.     {
  1780.         i = 0;
  1781.     }
  1782.         if (typeof(step) === "undefined")
  1783.     {
  1784.         step = 1;
  1785.     }
  1786.     arr = [];
  1787.     while (i < num)
  1788.     {
  1789.         arr.push(i);
  1790.         i += step;
  1791.     }
  1792.     return arr;
  1793. }/*end->    `range` */
  1794.  
  1795. var xrange =  function xrange(num, stop, step)
  1796. {
  1797.    
  1798.     return range(num, stop, step);
  1799. }/*end->    `xrange`    */
  1800.  
  1801. var sum =  function sum(arr)
  1802. {
  1803.     var a;
  1804.     a = 0;
  1805.         for (var __n0 = 0; __n0 < arr.length; __n0++)
  1806.     {
  1807.         var b = arr[ __n0 ];
  1808.         a += b;
  1809.     }
  1810.     return a;
  1811. }/*end->    `sum`   */
  1812.  
  1813. var map =  function map(func, objs)
  1814. {
  1815.     var arr,v;
  1816.     arr = [];
  1817.         for (var __n0 = 0; __n0 < objs.length; __n0++)
  1818.     {
  1819.         var ob = objs[ __n0 ];
  1820.         v = func(ob);
  1821.         arr.push(v);
  1822.     }
  1823.     return arr;
  1824. }/*end->    `map`   */
  1825.  
  1826. var filter =  function filter(func, objs)
  1827. {
  1828.     var arr;
  1829.     arr = [];
  1830.         for (var __n0 = 0; __n0 < objs.length; __n0++)
  1831.     {
  1832.         var ob = objs[ __n0 ];
  1833.                 if (func(ob))
  1834.         {
  1835.             arr.push(ob);
  1836.         }
  1837.     }
  1838.     return arr;
  1839. }/*end->    `filter`    */
  1840.  
  1841. var min =  function min(lst)
  1842. {
  1843.     var a;
  1844.     a = null;
  1845.         for (var __n0 = 0; __n0 < lst.length; __n0++)
  1846.     {
  1847.         var value = lst[ __n0 ];
  1848.                 if (a === null)
  1849.         {
  1850.             a = value;
  1851.         }
  1852.         else
  1853.         {
  1854.                         if (value < a)
  1855.             {
  1856.                 a = value;
  1857.             }
  1858.         }
  1859.     }
  1860.     return a;
  1861. }/*end->    `min`   */
  1862.  
  1863. var max =  function max(lst)
  1864. {
  1865.     var a;
  1866.     a = null;
  1867.         for (var __n0 = 0; __n0 < lst.length; __n0++)
  1868.     {
  1869.         var value = lst[ __n0 ];
  1870.                 if (a === null)
  1871.         {
  1872.             a = value;
  1873.         }
  1874.         else
  1875.         {
  1876.                         if (value > a)
  1877.             {
  1878.                 a = value;
  1879.             }
  1880.         }
  1881.     }
  1882.     return a;
  1883. }/*end->    `max`   */
  1884.  
  1885. var abs =  function abs(num)
  1886. {
  1887.    
  1888.     return Math.abs(num);
  1889. }/*end->    `abs`   */
  1890.  
  1891. var ord =  function ord(char)
  1892. {
  1893.    
  1894.     return char.charCodeAt(0);
  1895. }/*end->    `ord`   */
  1896.  
  1897. var chr =  function chr(num)
  1898. {
  1899.    
  1900.     return String.fromCharCode(num);
  1901. }/*end->    `chr`   */
  1902.  
  1903.  
  1904. /*end-builtins*/
  1905.  
  1906. function clock() { return new Date().getTime() / 1000.0; };
  1907. DEFAULT_ARG = 8;
  1908. var main =  function main()
  1909. {
  1910.     var res,avg,tk,t0,times;
  1911.     times = [];
  1912.     var i;
  1913.     i = -1;
  1914.     while (i++ < 4)
  1915.     {
  1916.         t0 = clock();
  1917.         res = fannkuch(DEFAULT_ARG);
  1918.         tk = clock();
  1919.         times.append((tk - t0));
  1920.     }
  1921.     avg = (sum(times) / len(times));
  1922.     console.log(avg);
  1923. }/*end->    `main`  */
  1924.  
  1925. var fannkuch =  function fannkuch(n)
  1926. {
  1927.     var count,max_flips,perm1,m,do_return,perm,r,flips_count,k,check;
  1928.     count = list(range(1, (n + 1)));
  1929.     perm1 = list(range(n));
  1930.     perm = list(range(n));
  1931.     max_flips = 0;
  1932.     m = (n - 1);
  1933.     r = n;
  1934.     check = 0;
  1935.     while (true)
  1936.     {
  1937.                 if (check < 30)
  1938.         {
  1939.             check ++;
  1940.         }
  1941.         while (r !== 1)
  1942.         {
  1943.             count[(r - 1)] = r;
  1944.             r --;
  1945.         }
  1946.                 if ((perm1[0] !== 0 && perm1[m] !== m))
  1947.         {
  1948.             perm = perm1.copy();
  1949.             flips_count = 0;
  1950.             k = perm[0];
  1951.             while (k !== 0)
  1952.             {
  1953.                 perm.__setslice__(undefined, (k + 1), undefined, perm.__getslice__(k, undefined, -1));
  1954.                 flips_count ++;
  1955.                 k = perm[0];
  1956.             }
  1957.                         if (flips_count > max_flips)
  1958.             {
  1959.                 max_flips = flips_count;
  1960.             }
  1961.         }
  1962.         do_return = true;
  1963.         while (r !== n)
  1964.         {
  1965.             perm1.insert(r, __jsdict_pop(perm1, 0));
  1966.             count[r] --;
  1967.                         if (count[r] > 0)
  1968.             {
  1969.                 do_return = false;
  1970.                 break;
  1971.             }
  1972.             r ++;
  1973.         }
  1974.                 if (do_return)
  1975.         {
  1976.             return max_flips;
  1977.         }
  1978.     }
  1979. }/*end->    `fannkuch`  */
  1980.  
  1981. main();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement