Challenge
HTML
<!DOCTYPE html>
<title>SAPUI5</title>
<script src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js" id="sap-ui-bootstrap" data-sap-ui-theme="sap_bluecrystal" data-sap-ui-libs="sap.m" data-sap-ui-bindingSyntax="complex" data-sap-ui-compatVersion="edge" data-sap-ui-preload="async"></script>
<script id="myView" type="ui5/xmlview">
<mvc:View controllerName="MyController" xmlns="sap.m" xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc"
xmlns:layout="sap.ui.commons.layout">
<VBox>
<Button text="Calculate" press="onCalculatePress" class="sapUiLargeMarginBegin"/>
<Text id="solutiontext" class="sapUiSmallMarginBegin"/>
</VBox>
</mvc:View>
</script>
<body class="sapUiBody">
<div id="content"></div>
</body>
JavaScript
sap.ui.getCore().attachInit(function() {
"use strict";
sap.ui.controller("MyController", {
_Chain: [],
_MaxChain: [],
onInit: function() {
},
onCalculatePress: function() {
sap.ui.core.BusyIndicator.show();
this._Chain = [];
this._MaxChain = [];
for (let i = 1; i < 1000000; i++) {
this.calculateChain(i);
if (this._Chain.length > this._MaxChain.length) {
this._MaxChain = this._Chain;
}
this._Chain = [];
}
sap.ui.core.BusyIndicator.hide();
var sResult = "The sequence start with: " + this._MaxChain[0] +
"\n Size: " + this._MaxChain.length;
this.getView().byId("solutiontext").setText(sResult)
//}
},
calculateChain: function(iStartNumber) {
this.generateChain(iStartNumber);
},
generateChain: function(iNextNumber) {
this._Chain.push(iNextNumber);
if (iNextNumber === 1) {
return;
}
this.generateChain(this.getNumber(iNextNumber));
},
getNumber: function(iNumber) {
if (this.isEven(iNumber)) {
return iNumber / 2;
}
return (iNumber * 3) + 1;
},
isEven: function(n) {
return n % 2 === 0;
},
});
sap.ui.xmlview({
viewContent: jQuery("#myView").html()
}).placeAt("content");
});