Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
awa-w6d5-javascript-vanillajsdemo
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Eric Arndt
awa-w6d5-javascript-vanillajsdemo
Commits
013849cd
Commit
013849cd
authored
Apr 09, 2021
by
earndt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[W6D5] (ArndtED) Adds js practice script
parent
19806621
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
126 additions
and
0 deletions
+126
-0
demo.html
demo.html
+126
-0
No files found.
demo.html
0 → 100644
View file @
013849cd
<!-- What is the index of the first Fibonacci number with 1000 digits? -->
<html>
<head>
<title>
Eric's awesome Demo
</title>
<script
type=
"text/javascript"
>
const
getNumMaxDigitPosition
=
(
num
)
=>
Math
.
floor
(
Math
.
log10
(
num
))
const
getNumAtDigitPosition
=
(
num
,
digitPosition
)
=>
Math
.
floor
(
(
num
%
Math
.
pow
(
10
,
digitPosition
+
1
))
/
Math
.
pow
(
10
,
digitPosition
)
)
const
generateNaturalNumberObject
=
(
num
)
=>
{
const
finalObj
=
{}
const
numMaxDigitPosition
=
getNumMaxDigitPosition
(
num
)
for
(
let
digitPosition
=
0
;
digitPosition
<=
numMaxDigitPosition
;
digitPosition
++
)
{
finalObj
[
digitPosition
]
=
getNumAtDigitPosition
(
num
,
digitPosition
)
}
return
finalObj
}
const
multiplyNumberObjectByValue
=
(
numObj
,
natValue
)
=>
{
for
(
let
digitPosition
in
numObj
)
{
multiplyNumObjValueAtDigitPositionAndNatValue
(
numObj
,
digitPosition
,
natValue
)
}
}
const
eliminateValueAtNumMaxDigit
=
(
num
,
numMaxDigitPosition
)
=>
num
%
Math
.
pow
(
10
,
numMaxDigitPosition
)
const
redistributeValuesOfNumObjectToCorrectPlaceIndices
=
(
numObj
,
digitPosition
)
=>
{
while
(
numObj
[
digitPosition
]
>
9
)
{
const
presentValue
=
numObj
[
digitPosition
]
const
presentValueMaxDigitPosition
=
getNumMaxDigitPosition
(
presentValue
)
const
numObjIdxToBeModified
=
parseInt
(
digitPosition
)
+
presentValueMaxDigitPosition
const
valueToAddToNumObjAtTargetIdx
=
getNumAtDigitPosition
(
presentValue
,
presentValueMaxDigitPosition
)
const
currentValueAtTargetIdx
=
numObj
[
numObjIdxToBeModified
]
numObj
[
numObjIdxToBeModified
]
=
currentValueAtTargetIdx
?
currentValueAtTargetIdx
+
valueToAddToNumObjAtTargetIdx
:
valueToAddToNumObjAtTargetIdx
numObj
[
digitPosition
]
=
eliminateValueAtNumMaxDigit
(
presentValue
,
presentValueMaxDigitPosition
)
}
}
const
numberObjectCorrectlyFormatted
=
(
numObj
)
=>
{
for
(
let
value
of
Object
.
values
(
numObj
))
{
if
(
value
<
0
||
9
<
value
)
return
false
}
return
true
}
const
ensureNumberObjectCorrectlyFormatted
=
(
numObj
)
=>
{
while
(
!
numberObjectCorrectlyFormatted
(
numObj
))
{
for
(
let
digitPosition
in
numObj
)
{
redistributeValuesOfNumObjectToCorrectPlaceIndices
(
numObj
,
digitPosition
)
}
}
}
const
calculateSumOfTwoNumberObjects
=
(
smllrNumObj
,
lrgrNumObj
)
=>
{
const
sumNumObj
=
generateNaturalNumberObject
(
0
)
for
(
let
digitPosition
in
lrgrNumObj
)
{
sumNumObj
[
digitPosition
]
=
smllrNumObj
[
digitPosition
]
?
smllrNumObj
[
digitPosition
]
+
lrgrNumObj
[
digitPosition
]
:
lrgrNumObj
[
digitPosition
]
}
ensureNumberObjectCorrectlyFormatted
(
sumNumObj
)
return
sumNumObj
}
function
calculateIndexOfFirstFibonacciTermWithNumDigits
(
num
)
{
if
(
num
<
0
)
return
undefined
if
(
num
<
2
)
return
1
let
previousNumObj
=
generateNaturalNumberObject
(
1
)
let
currentNumObj
=
generateNaturalNumberObject
(
1
)
let
nextNumObj
=
generateNaturalNumberObject
(
2
)
let
idx
=
3
let
digitCount
=
1
while
(
digitCount
<
num
-
1
)
{
const
newNextNumObj
=
calculateSumOfTwoNumberObjects
(
currentNumObj
,
nextNumObj
)
previousNumObj
=
currentNumObj
currentNumObj
=
nextNumObj
nextNumObj
=
newNextNumObj
digitCount
=
Math
.
max
(
...
Object
.
keys
(
nextNumObj
).
map
((
numStr
)
=>
parseInt
(
numStr
))
)
idx
++
}
return
idx
}
</script>
</head>
<body>
<script>
document
.
write
(
"What is the index of the first Fibonacci number with 1000 digits? "
)
document
.
write
(
calculateIndexOfFirstFibonacciTermWithNumDigits
(
1000
))
</script>
</body>
</html>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment