From 5eec5144019e9b99b03de7ecf4d9b084929cfd8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20Cot=C3=B3n=20Guti=C3=A9rrez?= <133801080+AxelCotonGutierrez@users.noreply.github.com> Date: Wed, 18 Oct 2023 18:41:20 +0200 Subject: [PATCH] Soroban --- .DS_Store | Bin 0 -> 6148 bytes LICENSE | 22 ++ README.md | 3 + icon.png | Bin 0 -> 30670 bytes index.html | 160 ++++++++++++++ soroban/soroban.mp3 | Bin 0 -> 1252 bytes soroban/soroban0.gif | Bin 0 -> 173 bytes soroban/soroban1.gif | Bin 0 -> 1336 bytes soroban/sorobanClear.mp3 | Bin 0 -> 2297 bytes soroban/sorobanL.gif | Bin 0 -> 1170 bytes soroban/sorobanU.gif | Bin 0 -> 1171 bytes soroban/soroband0.gif | Bin 0 -> 64 bytes soroban/soroband1.gif | Bin 0 -> 126 bytes soroban/soropanel.js | 442 +++++++++++++++++++++++++++++++++++++++ style.css | 164 +++++++++++++++ 15 files changed, 791 insertions(+) create mode 100644 .DS_Store create mode 100644 LICENSE create mode 100644 README.md create mode 100644 icon.png create mode 100644 index.html create mode 100644 soroban/soroban.mp3 create mode 100644 soroban/soroban0.gif create mode 100644 soroban/soroban1.gif create mode 100644 soroban/sorobanClear.mp3 create mode 100644 soroban/sorobanL.gif create mode 100644 soroban/sorobanU.gif create mode 100644 soroban/soroband0.gif create mode 100644 soroban/soroband1.gif create mode 100644 soroban/soropanel.js create mode 100644 style.css diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..74f54348a8bea851591256e9b5948e1cc6d2615c GIT binary patch literal 6148 zcmeHK%}T>S5T0$TZ74zx3VI88E!Y&%ikA@U3pAn!mD<>%!I+gMv4>K~U0=u-@p+ut z-HN3ZJc-yDnEhtwC(C{t_6GojpATFB8vtskge41`B|>r11t}R1p-|t*VFb4@gftv4 zWV7QhGC*r*L6_DHBz#%F^eK#Gh|#z3DUQ;t*?bqJa%FA3TD7Y6>UD50$3fQ5^3?B- zE~$4WWgO1zes~@Y$31)VL?&53N`@m<5DkWya&-|U13C6(o(xh|8|Z*#)vTVqGnu$< zyVYm$W0gd}LwTY}Ir z=ou_DVgyC#Qbb)U%o9WCa`ZbU&ofwP)a4-5$oL&IvM?_cp+-l)qtZcm8o6Z#n1Oi) z%DQXQ`G5NT`+vTOd&~ec@UIvUl}^y{aZ2WFU6>r5wGQeHDhcHk8b3?WP)9N5(owvP bss#NG8Hk?2LL+)m_#&Wa;D#CaRR%r){U%MJ literal 0 HcmV?d00001 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..863e3bb --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2019 Masaaki Murakami and Masao Nakagawa (Shiga University) +Copyright (c) 2023 Axel Cotón Gutiérrez + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..209e759 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# SorobanTrainer + + diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fd26595d70e1fa2e4d9610bd99b9fed75dac74a6 GIT binary patch literal 30670 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 FV1jq~Wz+xw literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..7a8d5de --- /dev/null +++ b/index.html @@ -0,0 +1,160 @@ + + + + + + + + + + Soroban + + + + +
+ + Blog Mathematica + +
+

SOROBAN ONLINE

+ + + + +
+
+
+ Sonido +
+
+ + + + + +
+
+ +
+
+
+
+ + + + +
+
+
+
+
+
+
+
+
+
+

Sistema de Numeración Decimal

+ +
    +
  • A: Unidades
  • +
  • B: Decenas
  • +
  • C: Centenas
  • +
  • D: Unidades de millar
  • +
  • E: Decenas de millar
  • +
  • F: Centenas de millar
  • +
  • G: Unidades de millón
  • +
  • H: Decenas de millón
  • +
  • I: Centenas de millón
  • +
  • J: Unidades de millardo
  • +
  • K: Decenas de millardo
  • +
  • L: Centenas de millardo
  • +
  • M: Unidades de billón
  • +
  • N: Decenas de billón
  • +
  • O: Centenas de billón
  • +
  • P: Unidades de billardo
  • +
  • Q: Decenas de billardo
  • +
  • R: Centenas de billardo
  • +
  • S: Unidades de Trillón
  • +
+ + +
+
+
+ +
+
+
+
+
+
+ + + + + + diff --git a/soroban/soroban.mp3 b/soroban/soroban.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..cae98cad65884db23d08ce6781346466726f2652 GIT binary patch literal 1252 zcmezWJ0OLD0PxI9%Lgjq2VzzR29_rb#+V=t3z&%ooWTPAV*x8?@5Mp9j;2^-GBhP;L>5tm$1vU0piq)GK8Wi6DEcnmD$m!rC&wlW)LxaMLW{}hV z$gs#>tBaBEU>39s5O~GH$l$n0OmX2Y$%RqesR4Tbk zf}`8YyDcYv-o12XqfqgxIehapO{4BzN;#*h%s<9Jm6qpUyz=SUb&9L1f3KE8ZL5R{eh_yU^9!@4&8lu#wvjeLdOL z()ckd!sg}{hur8xSrHwnX(?(GUF6hEIaNR&Vr%&LM&#xX9f=fi2Z;g(CI)s7>)huX zj$H6#NIU@YkdMg2+s{+BzuK6*!He}S>&9*Vp+$cLd>mXKXf|ox^WX|)YEJ5YEyyzW z|LqsyH7or=7JvN`p}JtvNf(EMta>~_zopnMtdvw|-o2`vsq&$1Q{d{!b6myleEH1n zy|iEct?cc?FwIWc&I^vL9H~zM7`pJ#Ga{cTqkT#TZ;!DKBW~P7VO~vLvnXr&k8kuVO5Zg zzwB4;TzO31VdnESLGAoIlif_VEHYl$w}2xs(Bt6~->%(GTQb+QGCMOVbWE_~wGiT( zth8y-vc)IEBm$1M7+nkQ-eDe4B5wODZh61mbnVq3BmZ^mdHa=3M(^5Q#?Pipa|ARm za!%1Ih?17)W=(PvU^*aSr*vO-LB)#6kAqC>w3`-wi~)IwuYqZz>!mbZ2PQ!WjtK`i z7+5kG&crY>DEKl6I5#jbNIPc4*@it?&aLQBB;)$TwO8V~)ucZMf3~m%rt|jnT8St0Orpe AO#lD@ literal 0 HcmV?d00001 diff --git a/soroban/soroban0.gif b/soroban/soroban0.gif new file mode 100644 index 0000000000000000000000000000000000000000..fdef5bc1dc73608c43e5d6b3896ce6572096db87 GIT binary patch literal 173 zcmZ?wbh9u|G-428*vtR|OWG?p_SGzz)Ub0#!-++mH`h;pvS;CkQ)|9n-SXq!!9Pzg z{QuAJABe#~@h1x>0|Os}4u}UbgMlUL!b#8USgnQ0T!M|NeJP!pbJ(ZlXwQrO-kNv! z(94|nDthbpC>&kBh_lt@uHej0(dj-{&U0*4Z4AveZa=$gU5Gxn&bo=Gx4#vcJI(H< V+E-~itIP34Pwyr@cV%F(1^|IFOf>)i literal 0 HcmV?d00001 diff --git a/soroban/soroban1.gif b/soroban/soroban1.gif new file mode 100644 index 0000000000000000000000000000000000000000..393b9ec33008854f60487163a99950f03a0613dc GIT binary patch literal 1336 zcmdth|1;Zn0LSsSiZ#jFL(aGPR!TL(q13mw2o;g|QmMq3TzrWpnbK%|Ez8(P65o;% ziSJD`LKL5dBciG(ji#>jM{`~skMI=Q91u}hs z1^5H}2M+)V0^k-B0Q+Fz1QmG#t`{itGlKjP#Q_Lj5L$fYl;A45BE-Hf#G)z`(-;bb zcw1hCYkdSpc-`sYbs#1<$Osrg6iyQ5R6-1FA=AIO9rXZk@|34>YwwX9?f>&h@IK+2|e za5()O(ikV`(dU$*+>p`SYxP{FoSXif8`hAQK9(0gmLJhyK%XombQH1F#cXXcNm7zM zd7s==%IzwVXQUA;P=~=#NA~SX444VlRr4dc{ImEF2T(uGBMTC0w0^Io?=4FJ-SvGc+>MgsgbJDR;H` z)?`cha!bK{YtecuYpAVxv`z3$TjhM)7enph#rFJ__Tu$+_G(AR{KGGY$EjN>-$U{uie{QOFdldS`gcymW`-O&UOLJ8HV%& zg4F2Xqr)#R`5r3cTCF1fMn<`|T#OZcj2_m-uPBY*nxP4Gve=-@+yni)o&}`02pX|K z;Pj8XiB0LxJ2n;@Y`wjXN?kU)6+|_jJCSpFEjGaaYp>tYFA1knDY#b4TBIc|A?G!x zN;CG$D{CydIUDa1mm1tctv@xT?Wfd4?-xjOZSEXkoX=ySn?LpS(KOV74<2MHHa_Jq zR>R8pQiGkhS=$!GoD&$kPOw}LqBeRWg-9d%_e6=KI!6y3clR#GT_iS~*`MvH{?yu& z+HUZ1jzCnIBpli9_zD2u7=^*s0#!t{DVCvMo9$ULzeuCLH?dhK=uV$oIXj1RX^Jg) z;m)(+Q|#@1euGSGGP}0W-ukBkQ-aTXon`cpFXXOfaZYNj-C>q&~3@g;n zQc?kC`Fx3Oj+s^5%vztE5rkfp))!&Oj;);L1@mB^KiwQkEikpN(3m9!7sF1eG_DN~ R4JTOA8I_CnoKFzo>Ob5N@UQ>? literal 0 HcmV?d00001 diff --git a/soroban/sorobanClear.mp3 b/soroban/sorobanClear.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..311db1dd586a89231284bc8e5f50bad2346ce36f GIT binary patch literal 2297 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 literal 0 HcmV?d00001 diff --git a/soroban/soroband0.gif b/soroban/soroband0.gif new file mode 100644 index 0000000000000000000000000000000000000000..01c36d9d2a11ec83105d85642679d770bc374f60 GIT binary patch literal 64 zcmZ?wbh9u|G-BXjn8*ME|Ns97(+r9~SvVOOm>6_GT#!5ilVD5#%F}Q87th&pt9$dk LJ-^qBGFSru&CC)r literal 0 HcmV?d00001 diff --git a/soroban/soroband1.gif b/soroban/soroband1.gif new file mode 100644 index 0000000000000000000000000000000000000000..26c7c46d824c213e017d446decb76fc0fd17df26 GIT binary patch literal 126 zcmZ?wbh9u|G-BXj*vtR|92^`%LP9b!G7~0D*tKid%add$$8OEHxm{DbZ0~}Ch?6;12RRt5 E0so>Pd;kCd literal 0 HcmV?d00001 diff --git a/soroban/soropanel.js b/soroban/soropanel.js new file mode 100644 index 0000000..77f275d --- /dev/null +++ b/soroban/soropanel.js @@ -0,0 +1,442 @@ +// Original: Masao Nakagawa@Shiga University +// Modificado por: Masaaki Murakami (masaaki.murakai@gmail.com) +// Modificado de nuevo para España: Axel Cotón Gutiérrez +// mv(name) : Movimiento de las cuentas. name::/(hb|eb)(\d\d)(\d\d\d)/ +// putimg(obj, filename) : Función Interna +// resetsoroban() : Reseteo +// setsoroban(heavens, earths) : heavens::/[uVWX]+/ earths::/[0-5]+/ +// undosoroban() : Deshacer +// redosoroban() : Rehacer +// encodeAbacus() : Codificar a las expresión /[uVWX]+:[0-5]+/ +// drawAbacus(numOf5s, numOf1s, numOfDigits, numOfClusters): Dibuja el soroban en su marco (sorofield) +// playsound() : Efecto de sonido +// playsoundClear() : Efeto de sonido (Clear) +// soundToggle() : Alternar sonido +let resourcedir = "./soroban/"; +let imgfilename0 = "soroban0.gif"; +let imgfilename1 = "soroban1.gif"; +let imgfilenameU = "sorobanU.gif"; +let imgfilenameL = "sorobanL.gif"; +let imgfilenameB0 = "soroband0.gif"; +let imgfilenameB1 = "soroband1.gif"; + +let digitsoroban; +let heavenBeads; +let earthBeads; + +let digitclusters; +let shiftkey = false; + +let undoBuffer = []; +let redoBuffer = []; + +let initialPatternBuffer = []; +let exitPatternBuffer = []; +let tutorialBuffer = []; +let pagePointer = 0; + +let bucket = []; +let soundFlag = true; + + +// +// Movimiento de las cuentas +// +function mv(name) { + let hore = name.substring(0, 2); + let indexY = name.substring(2, 4); + let indexX = name.substring(4); + let img = document.images[name].src; + if (img.indexOf(imgfilename0) < 0) { + undoBuffer.push(encodeAbacus()); + document.getElementById("UNDO").disabled=false; + redoBuffer = []; + document.getElementById("REDO").disabled=true; + playsound(); + if (hore == 'hb') { // Cuentas cielo + for (i = 0; i <= heavenBeads; i++) { + putimg(hore + indexY + i, imgfilename1); + } + if ((heavenBeads > 1) && shiftkey && indexX <= 1) { + putimg(hore + indexY + 0, imgfilenameU); + putimg(hore + indexY + 1, imgfilenameL); + } else { + putimg(name, imgfilename0); + } + } else { // Cuentas tierra + for (i = 0; i <= earthBeads; i++) { + putimg(hore + indexY + i, imgfilename1); + } + putimg(name, imgfilename0); + } + updateDisplay(); // Agregar llamada a updateDisplay después de cada movimiento de cuentas + } +} + +function putimg(objname, filename) { + if (document.images[objname].src.indexOf(filename) < 0) { + document.images[objname].src = resourcedir + filename; + } +} + +// +// Reiniciar el campo y los buffers de deshacer/rehacer +// +function resetsoroban() { + setsoroban('', ''); + undoBuffer = []; + redoBuffer= []; + document.getElementById("UNDO").disabled=true; + document.getElementById("REDO").disabled=true; + playsoundClear(); + updateDisplay(); +} + + +// Calcula el valor numérico del ábaco (Función Nueva) +function updateDisplay() { + let heavenValue = ''; + let earthValue = ''; + + for (let i = 0; i < digitsoroban; i++) { + const common = 'hb' + ("00" + i).slice(-2); + + if (heavenBeads == 2) { + if (document.images[common + '0'].src.indexOf(imgfilenameU) >= 0) { + heavenValue += '0'; + } else if (document.images[common + '0'].src.indexOf(imgfilename0) >= 0) { + heavenValue += '0'; + } else if (document.images[common + '1'].src.indexOf(imgfilename0) >= 0) { + heavenValue += '5'; + } else { + heavenValue += '0'; + } + } else { + if (document.images[common + '0'].src.indexOf(imgfilename0) >= 0) { + heavenValue += '5'; + } else { + heavenValue += '0'; + } + } + + const earthCommon = 'eb' + ("00" + i).slice(-2); + let j = 0; + while (document.images[earthCommon + j].src.indexOf(imgfilename1) >= 0) { + j++; + } + + earthValue = earthValue + j.toString(); + } + + const heavenNumber = parseInt(heavenValue, 10); + const earthNumber = parseInt(earthValue, 10); + + // Calcula la suma de heavenNumber y earthNumber + const totalValue = heavenNumber + earthNumber; + + // Aplica el formato con espacios de mil al número + const formattedTotalValue = formatNumberWithSpaces(totalValue); + + // Muestra el valor total en el elemento con id "display" + document.getElementById("display").textContent = formattedTotalValue; +} + +// Función para dar formato al número con espacios de mil (formarto números de España) +function formatNumberWithSpaces(number) { + // Convierte el número a una cadena + const numberStr = number.toString(); + + // Si el número tiene cuatro cifras, no separamos con espacios + if (numberStr.length === 4) { + return numberStr; + } + + // Divide la cadena en grupos de tres cifras desde el final + const groups = []; + let i = numberStr.length; + while (i > 0) { + groups.push(numberStr.slice(Math.max(0, i - 3), i)); + i -= 3; + } + + // Une los grupos con espacios y devuelve el resultado + return groups.reverse().join(' '); +} + +// Establecer patrones desde la representación interna. (/[uVWX]+:[0-5]+/) +// +function setsoroban(heavens, earths) { + playsound(); + let hvn = heavens.replace(/ +/g, ''); + hvn = hvn + 'u'.repeat(digitsoroban); // benevolent process + hvn = hvn.split(''); + let erth = earths.replace(/ +/g, ''); + erth = erth + '0'.repeat(digitsoroban); // benevolent process + erth = erth.split(''); + for (i = 0; i < digitsoroban; i++) { + common = 'hb' + ("00" + i).slice(-2); + switch (hvn.shift().toUpperCase()) { + case 'X' : + putimg(common + '0', imgfilenameU); + putimg(common + '1', imgfilenameL); + putimg(common + '2', imgfilename1); + break; + case 'W' : + putimg(common + '0', imgfilename0); + putimg(common + '1', imgfilename1); + putimg(common + '2', imgfilename1); + break; + case 'V' : + if (heavenBeads == 2) { + putimg(common + '0', imgfilename1); + putimg(common + '1', imgfilename0); + putimg(common + '2', imgfilename1); + } else { + putimg(common + '0', imgfilename0); + putimg(common + '1', imgfilename1); + } + break; + default : + if (heavenBeads == 2) { + putimg(common + '0', imgfilename1); + putimg(common + '1', imgfilename1); + putimg(common + '2', imgfilename0); + } else { + putimg(common + '0', imgfilename1); + putimg(common + '1', imgfilename0); + } + break; + } + common = 'eb' + ("00" + i).slice(-2); + for (j = 0; j <= earthBeads; j++) { + putimg(common + j, imgfilename1); + } + putimg(common + Math.min(erth.shift(), earthBeads), imgfilename0); + } + updateDisplay(); +} + +// Deshacer +// +function undosoroban() { + playsound(); + redoBuffer.push(encodeAbacus()); + document.getElementById("REDO").disabled=false; + data = undoBuffer.pop(); + if (undoBuffer.length == 0) { + document.getElementById("UNDO").disabled=true; + } + ary = data.split(':'); + setsoroban(ary[0], ary[1]); + updateDisplay(); +} + +// +// Rehacer +// +function redosoroban() { + playsound(); + undoBuffer.push(encodeAbacus()); + document.getElementById("UNDO").disabled=false; + data = redoBuffer.pop(); + if (redoBuffer.length == 0) { + document.getElementById("REDO").disabled=true; + } + ary = data.split(':'); + setsoroban(ary[0], ary[1]); + updateDisplay(); +} + +// +// Generar representación interna desde el campo (/[uVWX]+:[0-5]+/) +// +function encodeAbacus() { + let heavenWork = ''; + let earthWork = ''; + for (i = 0; i < digitsoroban; i++) { + common = 'hb' + ("00" + i).slice(-2); + if (heavenBeads == 2) { + if (document.images[common+'0'].src.indexOf(imgfilenameU) >= 0) { + heavenWork = heavenWork + 'X'; + } else if (document.images[common+'0'].src.indexOf(imgfilename0) >= 0) { + heavenWork = heavenWork + 'W'; + } else if (document.images[common+'1'].src.indexOf(imgfilename0) >= 0) { + heavenWork = heavenWork + 'V'; + } else { + heavenWork = heavenWork + 'u'; + } + } else { + if (document.images[common+'0'].src.indexOf(imgfilename0) >= 0) { + heavenWork = heavenWork + 'V'; + } else { + heavenWork = heavenWork + 'u'; + } + } + common = 'eb' + ("00" + i).slice(-2); + j = 0; + while (document.images[common+j].src.indexOf(imgfilename1) >= 0) { + j++; + } + earthWork = earthWork + j; + } + return heavenWork+':'+earthWork; +} + +function updateAbacus() { + const numOfDigitsSelect = document.getElementById("numOfDigits"); + const selectedValue = parseInt(numOfDigitsSelect.value, 10); + drawAbacus(1, 4, selectedValue, 3); +} + +// +// Dibujar campo (número de cuentas Cielo, número de cuentas Tierra, dígitos, dígitos separadores) +// Función modificada respecto a la original, aunque hemos mantenido la estructura +// +function drawAbacus(numOf5s, numOf1s, numOfDigits, numOfClusters) { + let pointOffset = Math.trunc(numOfDigits / 2) % numOfClusters; + heavenBeads = numOf5s; + earthBeads = numOf1s; + digitsoroban = numOfDigits; + digitclusters = numOfClusters; + let html = "\n"; + html += "\n\n\n"; + if (numOf5s == 2) { + beam = makeBeamImage(numOfDigits); + html += "\n\n\n"; + } else { + html += "\n\n\n"; + } + html += "\n\n
\n"; + for (let j = 0; j <= numOf5s; j++) { + for (let i = 0; i < numOfDigits; i++) { + html += ""; + } + html += "
\n"; + } + html += "
"; + html += ""; + html += "
"; + for (let i = 0; i < numOfDigits; i++) { + html += ""; + } + html += "
"; + for (let j = 0; j <= numOf1s; j++) { + for (let i = 0; i < numOfDigits; i++) { + html += ""; + } + html += "
\n"; + } + html += "
\n"; + + // Caracteres de índice (las letras que aparecen debajo de las cuentas) + html += "\n"; + html += "\n\n\n
\n"; + for (let i = numOfDigits - 1; i >= 0; i--) { + html += ""; + } + html += "
\n"; + + // Insertar el HTML generado en el elemento sorofield + document.getElementById("sorofield").innerHTML = html; +} +// Reproducir sonido +// +function playsound(sourcename) { + if (soundFlag) { + document.getElementById("se_soroban").currentTime = 0; + document.getElementById("se_soroban").play(); + } +} + +// +// Reproducir sonido (Clear) +// +function playsoundClear(sourcename) { + if (soundFlag) { + document.getElementById("se_sorobanClear").currentTime = 0; + document.getElementById("se_sorobanClear").play(); + } +} + +// Generar representación interna desde el formato /[0-9]+/ +// +function interpret(num) { + num = num.replace(/ +/g, ''); + num = num + '0'.repeat(digitsoroban); // benevolent process + num = num.split(''); + let hvn = ''; + let erth = ''; + for (i = 0; i < digitsoroban; i++) { + switch (num[i]) { + case '0' : + hvn = hvn + 'u'; + erth = erth + '0'; + break; + case '1' : + hvn = hvn + 'u'; + erth = erth + '1'; + break; + case '2' : + hvn = hvn + 'u'; + erth = erth + '2'; + break; + case '3' : + hvn = hvn + 'u'; + erth = erth + '3'; + break; + case '4' : + hvn = hvn + 'u'; + erth = erth + '4'; + break; + case '5' : + hvn = hvn + 'V'; + erth = erth + '0'; + break; + case '6' : + hvn = hvn + 'V'; + erth = erth + '1'; + break; + case '7' : + hvn = hvn + 'V'; + erth = erth + '2'; + break; + case '8' : + hvn = hvn + 'V'; + erth = erth + '3'; + break; + case '9' : + hvn = hvn + 'V'; + erth = erth + '4'; + break; + default : + } + } + return hvn + ':' + erth; +} + + + diff --git a/style.css b/style.css new file mode 100644 index 0000000..55db7b0 --- /dev/null +++ b/style.css @@ -0,0 +1,164 @@ +@import url('https://fonts.googleapis.com/css2?family=Nunito:wght@700&display=swap'); + +* { + margin: 0; + padding: 0; + font-family: 'Nunito'; +} + +body { + max-height: 80%; + text-align: center; + color: #0c4fe1; +} + + +h1 { + color: rgb(10, 10, 10); + padding: 50px; + font-size: 40px; +} + +.container { + background-color: #ddff62; + max-width: 80%; + margin: 0 auto; + padding: 20px; + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2); + border: 3px solid #000; + border-radius: 20px; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + padding: 50px 0; + justify-content: center; + align-items: center; + overflow: hidden; /* Evitar desbordamiento horizontal en dispositivos móviles */ +} + +.container2 { + background-color: #f0f3e9; + max-width: 80%; + margin: auto; + border: 3px solid #000; + border-radius: 20px; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + padding: 50px 0; + justify-content: center; + align-items: center; + overflow: hidden; /* Evitar desbordamiento horizontal en dispositivos móviles */ +} + +#numOfDigits { + padding: 10px; + font-size: 20px; + border: 2px solid #3498db; + border-radius: 5px; + background-color: #f2f2f2; + color: #333; +} + +#numOfDigits option { + font-size: 14px; + background-color: #fff; + color: #333; +} + +.marcador { + background-color: #333; /* Color de fondo */ + color: #fff; /* Color de fuente */ + font-size: 24px; /* Tamaño de fuente */ + padding: 5px 10px; /* Espacio dentro del cuadro */ + border: 2px solid #fff; /* Borde */ + border-radius: 5px; /* Esquinas redondeadas */ +} + + +#display { + background-color: white; + border: 2px solid black; + padding: 10px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); + font-weight: bold; + color: blue; + margin-bottom: 10px; +} + +.textosuperior { + font-size: 30px; + justify-content: center; + align-items: center; +} + + +label { + font-weight: bold; +} + + +#buttons-container { + margin-top: 10px; +} + +.guess-button { + background-color: #4285f4; + color: #fff; + padding: 10px 20px; + font-size: 16px; + border: none; + border-radius: 5px; + cursor: pointer; + margin-top: 20px; + white-space: nowrap; /* Evita que el texto se divida en múltiples líneas */ +} + +.large-text { + font-size: 25px; /* Elige el tamaño de fuente que desees */ +} + +ul { + list-style-type: none; +} + +#sorofield { + display: flex; + flex-direction: column; /* Alinea los elementos en columnas */ + justify-content: center; + align-items: center; +} + +#sorofield .rod { + margin: 0; + padding: 0; + border: 0; /* Elimina bordes (si los hubiera) que puedan agregar espaciado */ + vertical-align: middle; /* Alinea verticalmente las imágenes en caso de que haya espacio adicional */ +} + +#sorofield img { + margin-top: -3px; + margin-bottom: -4px; + padding: 0; +} + +@media (max-width: 768px) { + .container, + .container2 { + max-width: 90%; /* Ancho completo en dispositivos móviles */ + } + + #sorofield { + max-width: 80%; /* Establece el ancho máximo al 80% del ancho de la pantalla */ + margin: 0 auto; + display: flex; + justify-content: center; + align-items: center; + /* Agrega los estilos específicos para sorofield en dispositivos móviles aquí */ + } + + .textosuperior { + font-size: 20px; /* Tamaño de texto superior en dispositivos móviles */ + } + +} \ No newline at end of file