Home > Web Front-end > JS Tutorial > Counting with an Arbitrary Character Set

Counting with an Arbitrary Character Set

Christopher Nolan
Release: 2025-03-04 01:11:08
Original
519 people have browsed it

Counting with an Arbitrary Character Set

Core points

  • Using arbitrary character set counting in JavaScript requires creating a vocabulary, i.e. a character dictionary defined as a Unicode escape sequence string. Each character in the character set is assigned a unique value, and the counting process traverses the entire character set and winds back to the beginning when it reaches the end.
  • In JavaScript, built-in functions that parse and convert numbers between different numerical cardinalities can be extended to deal with arbitrary character sets. This allows counting in non-decimal cardinality and converting decimal numbers back to non-decimal numeric strings, even with unusual characters such as Greek or Cyrillic letters, hieroglyphs, or runes.
  • The concept of using arbitrary character set counting has a wide range of applications, especially in the fields of computer science and cryptography. It allows for a large number of possible combinations, making it ideal for creating unique identifiers, encryption keys, and secure passwords. The larger the character set, the longer the string, the more potential combinations there are, and the more security it is.

This article will introduce a simple and flexible arbitrary character set counting technique. While this technique is not often required, when needed, you will find that JavaScript's built-in functions cannot handle it completely. JavaScript does have built-in functions for parsing and converting numbers between different numerical cardinalities. For example, the parseInt method can handle any cardinality (numerical cardinality) from 2 to 36, and is usually used for numeric conversion and counting of non-decimal cardinality. Number.toString Method can reverse conversion, convert decimal numbers back to non-decimal numeric string:

var character = "2F";
alert(parseInt(character, 16));    // 弹出 47

var number = 47;
alert(number.toString(16));        // 弹出 "2F"
Copy after login
Copy after login

But what if you want to count using Klingon numbers? Or more likely, use Greek or Cyrillic letters, hieroglyphs, or some kind of rune? The technique I will demonstrate can do this with precision, in any numerical cardinality; to illustrate this fully, I will show you some examples of capital Greek letters using hexadecimal (hexadecimal).

Glossary is crucial

First, we need to define a vocabulary, the dictionary of the characters we will use, defined as a single string of Unicode escape sequences. In this case, we have 16 capital Greek letters, from Alpha to Pi – each number is represented by a letter, and the length of the entire string determines the numerical base:

var lexicon = "u0391u0392u0393u0394u0395u0396u0397u0398u0399u039au039bu039cu039du039eu039fu03a0";
Copy after login
Copy after login

Escape sequence is a character

It is worth noting that even if it takes six typing characters to define a Unicode escape sequence, it still appears as only one character in the string, so the vocabulary length is 16 characters. Once we have a vocabulary, we can use String.charAt to quote characters by number index, and vice versa, we can use String.indexOf to get the numeric index of characters:

var character = "2F";
alert(parseInt(character, 16));    // 弹出 47

var number = 47;
alert(number.toString(16));        // 弹出 "2F"
Copy after login
Copy after login

Therefore, any calculations we perform will be based on both methods. For example, let's define a loop, run "Κ" iterations, and list each character in between:

var lexicon = "u0391u0392u0393u0394u0395u0396u0397u0398u0399u039au039bu039cu039du039eu039fu03a0";
Copy after login
Copy after login

But what about larger numbers, such as character equivalents that show 23? We just need to extract the individual numbers and then get the character equivalent, in this case 2 and 3:

var number = lexicon.indexOf("u0398");    // "Θ" 的十进制等价物

var character = lexicon.charAt(7);         // 7 的字符等价物
Copy after login

To make things more interesting, what if the number we are converting contains letters and numbers, such as the hexadecimal number "2F"? In this case we have to convert each number separately because we cannot refer to the characters by hexadecimal index (i.e. lexicon.charAt("F") must become lexicon.charAt(15)):

var str = "";
for(var i=0; i<lexicon.indexOf("u039a"); i++) {
    str += lexicon.charAt(i);
}
alert(str);
Copy after login

Of course, the last two examples are quite simple, because the number of digits of the number is known; however, it is not difficult to adjust the process to iterate over any number of digits contained in the number. All the components you need are provided here, just adjust them to your specific requirements.

Data is crucial!

It happens that you can count using normal Latin numbers and letters in the exact same way if you want. The scalability of the glossary means you can use it to extend the native capabilities of JavaScript to a cardinality greater than 36 and use any symbol that looks appropriate at the time.

Or just develop some stylish clocks!

Want to know more?

If you want to read more from James, subscribe to our weekly Tech Times newsletter Tech Times.

FAQs about any character set (FAQ)

(The FAQ part provided in the original text should be included here, and due to length reasons, it is omitted here)

The above is the detailed content of Counting with an Arbitrary Character Set. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template