Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Суммирование букв алфавита (https://javascript.ru/forum/misc/69551-summirovanie-bukv-alfavita.html)

jamesson 02.07.2017 20:54

Суммирование букв алфавита
 
Разъясните плиз, каким образом каждую букву алфавита прикрепить к условной порядковой цифре, чтобы при вводе в input (html) букв эти условные суммировались и выводились в отдельный div после нажатия кнопки.
Сложно ли это реализовать?

Например Буква А=1 , Б=2, В=3 и тд, но последняя будет 9, дальше нумерация следующих уква начинается по кругу с еденицы. т.е. буква М например будет не 22, а 3
А 1
Б 2
В 3
Г 4
Д 5
Е 6
Ж 7
З 8
И 9
К 1
Л 2
М 3
Н 4

рони 02.07.2017 21:41

jamesson,
а где Ё?

laimas 02.07.2017 21:44

Код символов алфавита идет по порядку. По маске последние три бита и будут давать нужный результат.

рони 02.07.2017 21:44

jamesson,
без Ё :)
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>

  <script>
  window.addEventListener("DOMContentLoaded", function() {
    var form = document.querySelector("form"),
        input = form.querySelector("#w"),
        result = document.querySelector("#result");

    function sum(out, el) {
        var num = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ".indexOf(el.toUpperCase());
        num != -1 && (num %= 9)
        return out + ++num
    }
    form.addEventListener("input", function(event) {
        var res = input.value.split("").reduce(sum, 0);
        result.innerHTML = res
    })
});
  </script>
</head>

<body>
<form>
<input id="w" value="И" type="text">
<br>
</form>
<div id="result"></div>

</body>
</html>

Teamur 02.07.2017 21:49

var b="АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЬЭЮЯ";
var i=1, k=9, r={};
function num(s){
 for(;i<k;i++){
  r[s[i]]=i;
  if(i==k){
   i=1;
   num(s.slice(k))
  }
 }
};

num(b);
alert(r) // результат

jamesson 02.07.2017 22:10

Все ок, но если одно но
 
Цитата:

Сообщение от рони (Сообщение 457269)
jamesson,
без Ё :)
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>

  <script>
  window.addEventListener("DOMContentLoaded", function() {
    var form = document.querySelector("form"),
        input = form.querySelector("#w"),
        result = document.querySelector("#result");

    function sum(out, el) {
        var num = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ".indexOf(el.toUpperCase());
        num != -1 && (num %= 9)
        return out + ++num
    }
    form.addEventListener("input", function(event) {
        var res = input.value.split("").reduce(sum, 0);
        result.innerHTML = res
    })
});
  </script>
</head>

<body>
<form>
<input id="w" value="И" type="text">
<br>
</form>
<div id="result"></div>

</body>
</html>

А можно ли сумму например 37 разложить на единичные числа и сложить между собой (3+7)=1 , чтобы число 10 получаемое сумировалось тоже, т.е. если итог дует 13, то в сумме выйдет 4

рони 02.07.2017 22:37

Цитата:

Сообщение от jamesson
А можно ли сумму например 37 разложить на единичные числа и сложить между собой (3+7)=1 , чтобы число 10 получаемое сумировалось тоже, т.е. если итог дует 13, то в сумме выйдет 4

не осилил
и смотрите прошлый пример
перед строкой 23
добавить
for (; (res += "").length > 1;) res = res.split("").reduce(sum, 0);

это если из 37 сделать 1 , откуда вы остальное взяли одному вам известно

Malleys 02.07.2017 22:45

Цитата:

Сообщение от jamesson (Сообщение 457274)
А можно ли сумму например 37 разложить на единичные числа и сложить между собой (3+7)=1 , чтобы число 10 получаемое сумировалось тоже, т.е. если итог дует 13, то в сумме выйдет 4

Так функция getDigitSum именно это и делает...

https://javascript.ru/forum/misc/695...tml#post457247

jamesson 02.07.2017 22:49

Ошибка, не хочет
 
Добавил, выдает результат всегда 0 :agree:

рони 02.07.2017 23:02

jamesson,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>

  <script>
  window.addEventListener("DOMContentLoaded", function() {
    var form = document.querySelector("form"),
        input = form.querySelector("#w"),
        result = document.querySelector("#result");
    function s(out, el) {
        return out + +el
    }
    function sum(out, el) {
        var num = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ".indexOf(el.toUpperCase());
        num != -1 && (num %= 9)
        return out + ++num
    }
    form.addEventListener("input", function(event) {
        var res = input.value.split("").reduce(sum, 0);
        for (; (res += "").length > 1;) {
           res = res.split("").reduce(s, 0);
        }
        result.innerHTML = res
    })
});
  </script>
</head>

<body>
<form>
<input id="w" value="И" type="text">
<br>
</form>
<div id="result"></div>

</body>
</html>

jamesson 02.07.2017 23:06

Супер, помогло!
 
Вы настоящий Гуру! Спасибо огромное!


Часовой пояс GMT +3, время: 15:03.