An html/js implementation to the LCD Display problem on UVA.
Should be self explanatory but the number field takes digits and the hyphen(-) character. And then there's the scale.
An html/js implementation to the LCD Display problem on UVA.
Should be self explanatory but the number field takes digits and the hyphen(-) character. And then there's the scale.
<!doctype html> | |
<html> | |
<head> | |
<script src='lcd.js'></script> | |
<style> | |
body { | |
background-color: black; | |
color: green; | |
font-family: menlo, monaco, monospace; | |
font-size: 150%; | |
} | |
#lcd { | |
font-weight: bold; | |
text-align: center; | |
color: #6F6; | |
text-shadow: 0.3ex 0.3ex 0.2ex #6F6, -0.3ex 0.3ex 0.2ex #9F9, 0.3ex -0.3ex 0.2ex #9F9, -0.3ex -0.3ex 0.2ex #9F9, 0.7ex 0.7ex 1.9ex #9F9, 0.7ex 0.7ex 1.9ex #9F9, 0.7ex 0.7ex 1.9ex #9F9; | |
margin: 50px; | |
} | |
input { | |
font-family: inherit; | |
background-color: green; | |
color: black; | |
font-weight: inherit; | |
font-size: inherit; | |
border: 2px solid #000; | |
} | |
input:focus { | |
border: 2px dotted #0F0; | |
} | |
#myform { | |
} | |
</style> | |
</head> | |
<body> | |
<form onsubmit="return false;" id="myform"> | |
number: <input type="text" value="29-08-1765" id="txt" name="txt" tabindex=1/> | |
/ | |
scale: <input type="text" value="2" id="scale" name="scale" size="2" tabindex=2/> | |
</form> | |
<pre id="lcd"> | |
<pre> | |
</body> | |
</html> |
var digits={ | |
0: ['-', '|', '|', ' ', '|', '|', '-'], | |
1: [' ', ' ', '|', ' ', ' ', '|', ' '], | |
2: ['-', ' ', '|', '-', '|', ' ', '-'], | |
3: ['-', ' ', '|', '-', ' ', '|', '-'], | |
4: [' ', '|', '|', '-', ' ', '|', ' '], | |
5: ['-', '|', ' ', '-', ' ', '|', '-'], | |
6: ['-', '|', ' ', '-', '|', '|', '-'], | |
7: ['-', ' ', '|', ' ', ' ', '|', ' '], | |
8: ['-', '|', '|', '-', '|', '|', '-'], | |
9: ['-', '|', '|', '-', ' ', '|', '-'], | |
'-': [' ', ' ', ' ', '-', ' ', ' ', ' '], | |
}; | |
function space(scale) { | |
var s = ''; | |
scale = 1; | |
for(var i=0; i < scale; i++) { | |
s += ' '; | |
} | |
return s; | |
} | |
function r(rid, number, scale) { | |
var s=""; | |
for(var ni=0; ni < number.length; ni++) { | |
var digit = number[ni]; | |
s += ' '; | |
for(var i=0; i < scale; i++) { | |
s+=digits[digit][rid]; | |
} | |
s += ' '; | |
s += space(scale); | |
} | |
s += '\n'; | |
return s; | |
} | |
function c(cid, number, scale) { | |
var s=""; | |
for(var i=0; i < scale; i++) { | |
for(var ni=0; ni < number.length; ni++) { | |
var digit = number[ni]; | |
s+=digits[digit][cid]; | |
for(var j=0; j < scale; j++) { | |
s+=' '; | |
} | |
s+=digits[digit][cid+1]; | |
s += space(scale); | |
} | |
s+='\n'; | |
} | |
return s; | |
} | |
function lcd(number, scale) { | |
return r(0, number, scale) + | |
c(1, number, scale) + | |
r(3, number, scale) + | |
c(4, number, scale) + | |
r(6, number, scale) ; | |
} | |
function refresh(event) { | |
var pre = document.getElementById('lcd'); | |
var text = document.getElementById('txt').value; | |
var scale = document.getElementById('scale').value; | |
pre.textContent = lcd(text, scale); | |
return false; | |
} | |
function refresh2(event) { | |
refresh(); | |
return true; | |
} | |
onload = function() { | |
document.getElementById('txt').focus(); | |
document.getElementById('txt').onchange = refresh; | |
document.getElementById('txt').onkeyup = refresh2; | |
document.getElementById('scale').onchange = refresh; | |
refresh(); | |
} |