Table des matières
之前偶然看到了w3c上的编程挑战题,就像拿来试试手,先做的是初级脚本算法,总体不难,如果有更好的方法,希望能一起交流!
Maison interface Web js tutoriel Partager un exemple d'algorithme de script de base

Partager un exemple d'algorithme de script de base

Jun 23, 2017 am 09:51 AM
primaire 挑战 算法 编程 脚本

之前偶然看到了w3c上的编程挑战题,就像拿来试试手,先做的是初级脚本算法,总体不难,如果有更好的方法,希望能一起交流!

1、翻转字符串

先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。

        function reverseString(str) {var str2 = '';for(var i=str.length-1;i>=0;i--){
                str2 += str[i];
            }return str2;
        }function reverseString(str){var strArray = str.split('');
            strArray.reverse();
            str = strArray.join('');return str
        }
Copier après la connexion

 

2、计算一个整数的阶乘

如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。

        function factorialize(num) {var sum = 1;for(var i=num;i>0;i--){
                sum *= i;
            }

            console.log(sum);return sum;
        }function factorialize(num) {if(num ==1){return 1;
            }else{return arguments.callee(num-1)*num;
            }

        }
Copier après la connexion

 

3、回文算法

如果给定的字符串是回文,返回true,反之,返回false

如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是(回文)。

注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。

            function palindrome(str) {var arr = [];
                str = str.toLowerCase();                for(var i=0;i<str.length;i++){// 在小写字母的Unicode的范围内或者在数字的Unicode范围内if((str.charCodeAt(i)<=122 && str.charCodeAt(i)>=97) || 
                    (str.charCodeAt(i)<=57 && str.charCodeAt(i)>=48)){
                        arr.push(str[i]);
                    }
                }//只需要判断数组一半的次数就全部比较完了,不必再浪费时间了for(var i=0;i<Math.ceil(arr.length/2);i++) {if(arr[i] !== arr[arr.length-i-1]){return false;
                    }
                }return true;
                
            }// 需要手动添加特殊字符function palindrome(str){var str1,str2;
                str = str.toLowerCase();
                str = str.replace(/[\ |\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\&#39;|\,|\<|\.|\>|\/|\?]/g,"");

                str1 = str.split('');
                str1.reverse();
                str2 = str1.join('');if(str === str2){return true}else{return false;
                }


            }
Copier après la connexion

 

4、寻找最长的单词算法

找到提供的句子中最长的单词,并计算它的长度。

函数的返回值应该是一个数字。

        // 利用charCodeAt()方法判断是不是一个单词,并记录单词长度,最后获得最长的单词长度function findLongestWord(str) {var num = 0,
                max = 0;for (var i = 0; i < str.length; i++) {if (str.charCodeAt(i) !== 32) {
                    num++;
                } else {// 注意:如果最后一个字母不是空格,不会比较最后一个单词的长度max = num > max ? num : max;
                    num = 0;
                }
            }// 比较最后一个单词的长度max = num > max ? num : max;return max;
        }// 利用split()方法将字符串分成每个单词组成的数组,取得其中最长的长度function findLongestWord(str){           var max = 0;           var arr = str.split(' ');           for(var i=0;i<arr.length;i++){
               max = arr[i].length>max?arr[i].length:max;
           }           return max;

        }
Copier après la connexion

 

5、设置首字母大写算法

确保字符串的每个单词首字母都大写,其余部分小写。

像'the'和'of'这样的连接符同理。

        //将字符串用split()方法转为数组,并用数组中的每个项的首字母的大写和这个项剩余的字符拼接,最后转为字符串function titleCase(str) {var arr,upChar;
            str = str.toLowerCase();
            arr = str.split(' ');            for(var i=0;i<arr.length;i++){
               upChar =  arr[i][0].toUpperCase() ;
               arr[i] = upChar + arr[i].slice(1);
            }

            arr = arr.join(&#39; &#39;);return arr;
        }function titleCase(str){var upChar,
                toUper = false;for(var i=0;i<str.length;i++){if((str.charCodeAt(i) == 32)){
                    toUper = true;
                }else if(toUper){
                    upChar= str[i].toUpperCase();
                    console.log(upChar)
                    console.log(str[i]);
                    str[i] = upChar;
                    toUper = false;
                }
            }return str;
        }
Copier après la connexion

6、寻找数组中的最大值算法

右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。

        function largestOfFour(arr) {var max = 0,
                result = [];for(var i=0;i<arr.length;i++){for(var j=0;j<arr[i].length;j++){var n = arr[i][j];
                    max = n>max?n:max;
                }
                result.push(max);
                max = 0;
            }return result;
        }
Copier après la connexion

 

7、确认末尾字符算法

检查一个字符串(str)是否以指定的字符串(target)结尾。

如果是,返回true;如果不是,返回false。

        // 从后开始比较function confirmEnding(str, target) {for (var i = 0; i < target.length; i++) {if (str[str.length - 1 - i] != target[target.length - 1 - i]) {return false;
                }
            }return true;
        }
Copier après la connexion

8、重复操作算法

重要的事情说3遍!

重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串。

        function repeat(str, num) {var result = &#39;&#39;;if(num<0){return &#39;&#39;;
            }else{for(var i=0;i<num;i++){
                    result += str;
                }
            }return result;
        }
Copier après la connexion

9、字符串截取算法

用瑞兹来截断对面的退路!

截断一个字符串!

如果字符串的长度比指定的参数num长,则把多余的部分用...来表示。

切记,插入到字符串尾部的三个点号也会计入字符串的长度。

但是,如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度。

        function truncate(str, num) {var result = &#39;&#39;;var strArr = str.split(&#39;&#39;);if(num<=3){
                result = str.slice(0,num) +&#39;...&#39;;
            }else if(str.length>num){
                result = str.slice(0,num-3) + '...';
            }else{
                result = str;
            }return result;
        }
Copier après la connexion

 

10、数组分割算法

猴子吃香蕉可是掰成好几段来吃哦!

把一个数组arr按照指定的数组大小size分割成若干个数组块。

        function chunk(arr, size) {var result = [];var a = [];for(var i=0;i<arr.length;i++){
                a.push(arr[i]);if( ((i+1)%size == 0) || (i == arr.length-1)){
                    result.push(a);
                    
                    a = [];
                }
            }return result;
        }
Copier après la connexion

11、数组截断算法

打不死的小强!

返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始。

        function slasher(arr, howMany) {           var result = [];           for(var i=howMany;i<arr.length;i++){
                result.push(arr[i]);
           }           return result;
        }
Copier après la connexion

12、数组查询算法

蛤蟆可以吃队友,也可以吃对手。

如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。

举例,["hello", "Hello"]应该返回true,因为在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。

["hello", "hey"]应该返回false,因为字符串"hello"并不包含字符"y"。

["Alien", "line"]应该返回true,因为"line"中所有字符都可以在"Alien"找到。

    function mutation(arr) {var arr1 = arr[0].toLowerCase();
        console.log(arr1)var arr2 = arr[1].toLowerCase();for(var i=0;i<arr[1].length;i++){                            if(arr1.indexOf(arr2[i]) == -1){return false;
            }
        }return true;
    }
Copier après la connexion

13、删除数组中特定值

真假美猴王!

删除数组中的所有假值。

在JavaScript中,假值有falsenull0""undefinedNaN

       function bouncer(arr) {// Don&#39;t show a false ID to this bouncer.for(var i=0;i<arr.length;i++){if(!arr[i] == true){
                    arr.splice(i,1);
                    i--;
                }
            }return arr;
        }
Copier après la connexion

14、去除数组中任意多个值

金克斯的迫击炮!

实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。

        function destroyer(arr) {// Remove all the valuesvar arr = arguments[0];
            console.log(arr[1]);var data = Array.prototype.slice.call(arguments,1);for(var j=0;j<data.length;j++){for(var i=0;i<arr.length;i++){if(arr[i] == data[j]){
                        arr.splice(i,1);
                        i--;
                    }
                }
            }return arr;
        }
Copier après la connexion

15、数组排序并插入值

我身在何处?

先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。

举例:where([1,2,3,4], 1.5) 应该返回 1。因为1.5插入到数组[1,2,3,4]后变成[1,1.5,2,3,4],而1.5对应的索引值就是1

同理,where([20,3,5], 19) 应该返回 2。因为数组会先排序为 [3,5,20]19插入到数组[3,5,20]后变成[3,5,19,20],而19对应的索引值就是2

        function where(arr, num) {
            arr.sort(function(a,b){return a - b;
            });for(var i=0;i<arr.length;i++){if(num > arr[i] && num < arr[i+1]){return i+1;
                }else if(num == arr[i]){return i;
                }else if(num >arr[arr.length-1]){return arr.length;
                }

            }

        }
Copier après la connexion

 

16、位移密码算法

让上帝的归上帝,凯撒的归凯撒。

下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码。

移位密码也就是密码中的字母会按照指定的数量来做移位。

一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔'O',以此类推。

写一个ROT13函数,实现输入加密字符串,输出解密字符串。

所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。

            function rot13(str) { // LBH QVQ VG!var result = [];for(var i=0;i<str.length;i++){if(str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90){var code = str.charCodeAt(i) + 13;if(code>90){
                            code = str.charCodeAt(i) + 13 - 26;
                        }
                        
                        result.push(String.fromCharCode(code));
                    }else{
                        result.push(str[i]);
                    }
                }return result.join("");
            }
Copier après la connexion

 

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Implémentation d'algorithmes d'apprentissage automatique en C++ : défis et solutions courants Implémentation d'algorithmes d'apprentissage automatique en C++ : défis et solutions courants Jun 03, 2024 pm 01:25 PM

Les défis courants rencontrés par les algorithmes d'apprentissage automatique en C++ incluent la gestion de la mémoire, le multithread, l'optimisation des performances et la maintenabilité. Les solutions incluent l'utilisation de pointeurs intelligents, de bibliothèques de threads modernes, d'instructions SIMD et de bibliothèques tierces, ainsi que le respect des directives de style de codage et l'utilisation d'outils d'automatisation. Des cas pratiques montrent comment utiliser la bibliothèque Eigen pour implémenter des algorithmes de régression linéaire, gérer efficacement la mémoire et utiliser des opérations matricielles hautes performances.

Algorithme de détection amélioré : pour la détection de cibles dans des images de télédétection optique haute résolution Algorithme de détection amélioré : pour la détection de cibles dans des images de télédétection optique haute résolution Jun 06, 2024 pm 12:33 PM

01Aperçu des perspectives Actuellement, il est difficile d'atteindre un équilibre approprié entre efficacité de détection et résultats de détection. Nous avons développé un algorithme YOLOv5 amélioré pour la détection de cibles dans des images de télédétection optique haute résolution, en utilisant des pyramides de caractéristiques multicouches, des stratégies de têtes de détection multiples et des modules d'attention hybrides pour améliorer l'effet du réseau de détection de cibles dans les images de télédétection optique. Selon l'ensemble de données SIMD, le mAP du nouvel algorithme est 2,2 % meilleur que YOLOv5 et 8,48 % meilleur que YOLOX, permettant ainsi d'obtenir un meilleur équilibre entre les résultats de détection et la vitesse. 02 Contexte et motivation Avec le développement rapide de la technologie de télédétection, les images de télédétection optique à haute résolution ont été utilisées pour décrire de nombreux objets à la surface de la Terre, notamment des avions, des voitures, des bâtiments, etc. Détection d'objets dans l'interprétation d'images de télédétection

Application d'algorithmes dans la construction de 58 plateformes de portraits Application d'algorithmes dans la construction de 58 plateformes de portraits May 09, 2024 am 09:01 AM

1. Contexte de la construction de la plateforme 58 Portraits Tout d'abord, je voudrais partager avec vous le contexte de la construction de la plateforme 58 Portraits. 1. La pensée traditionnelle de la plate-forme de profilage traditionnelle ne suffit plus. La création d'une plate-forme de profilage des utilisateurs s'appuie sur des capacités de modélisation d'entrepôt de données pour intégrer les données de plusieurs secteurs d'activité afin de créer des portraits d'utilisateurs précis. Elle nécessite également l'exploration de données pour comprendre le comportement et les intérêts des utilisateurs. et besoins, et fournir des capacités côté algorithmes ; enfin, il doit également disposer de capacités de plate-forme de données pour stocker, interroger et partager efficacement les données de profil utilisateur et fournir des services de profil. La principale différence entre une plate-forme de profilage d'entreprise auto-construite et une plate-forme de profilage de middle-office est que la plate-forme de profilage auto-construite dessert un seul secteur d'activité et peut être personnalisée à la demande. La plate-forme de mid-office dessert plusieurs secteurs d'activité et est complexe ; modélisation et offre des fonctionnalités plus générales. 2.58 Portraits d'utilisateurs de l'arrière-plan de la construction du portrait sur la plate-forme médiane 58

L'algorithme CVM révolutionnaire résout plus de 40 ans de problèmes de comptage ! Un informaticien lance une pièce de monnaie pour trouver le mot unique pour « Hamlet » L'algorithme CVM révolutionnaire résout plus de 40 ans de problèmes de comptage ! Un informaticien lance une pièce de monnaie pour trouver le mot unique pour « Hamlet » Jun 07, 2024 pm 03:44 PM

Compter semble simple, mais en pratique, c'est très difficile. Imaginez que vous êtes transporté dans une forêt tropicale vierge pour effectuer un recensement de la faune. Chaque fois que vous voyez un animal, prenez une photo. Les appareils photo numériques enregistrent uniquement le nombre total d'animaux suivis, mais vous êtes intéressé par le nombre d'animaux uniques, mais il n'y a pas de statistiques. Alors, quelle est la meilleure façon d’accéder à cette population animale unique ? À ce stade, vous devez dire : commencez à compter maintenant et comparez enfin chaque nouvelle espèce de la photo à la liste. Cependant, cette méthode de comptage courante n'est parfois pas adaptée aux informations pouvant atteindre des milliards d'entrées. Des informaticiens de l'Institut indien de statistique, UNL, et de l'Université nationale de Singapour ont proposé un nouvel algorithme : le CVM. Il peut approximer le calcul de différents éléments dans une longue liste.

La clé du codage : libérer la puissance de Python pour les débutants La clé du codage : libérer la puissance de Python pour les débutants Oct 11, 2024 pm 12:17 PM

Python est un langage d'introduction à la programmation idéal pour les débutants grâce à sa facilité d'apprentissage et ses fonctionnalités puissantes. Ses bases incluent : Variables : utilisées pour stocker des données (nombres, chaînes, listes, etc.). Type de données : Définit le type de données dans la variable (entier, virgule flottante, etc.). Opérateurs : utilisés pour les opérations mathématiques et les comparaisons. Flux de contrôle : contrôlez le flux d'exécution du code (instructions conditionnelles, boucles).

Concentrez-vous dessus ! ! Analyse de deux cadres algorithmiques majeurs pour l'inférence causale Concentrez-vous dessus ! ! Analyse de deux cadres algorithmiques majeurs pour l'inférence causale Jun 04, 2024 pm 04:45 PM

1. Les principales tâches du cadre global peuvent être divisées en trois catégories. La première est la découverte de structures causales, c'est-à-dire l'identification des relations causales entre les variables des données. La seconde est l’estimation des effets causals, c’est-à-dire la déduction des données sur le degré d’influence d’une variable sur une autre variable. Il convient de noter que cet impact ne fait pas référence à la nature relative, mais à la manière dont la valeur ou la distribution d'une autre variable change lorsqu'une variable intervient. La dernière étape consiste à corriger les biais, car dans de nombreuses tâches, divers facteurs peuvent entraîner une distribution différente des échantillons de développement et des échantillons d'application. Dans ce cas, l’inférence causale peut nous aider à corriger les biais. Ces fonctions conviennent à une variété de scénarios, le plus typique étant celui de la prise de décision. Grâce à l'inférence causale, nous pouvons comprendre comment les différents utilisateurs réagissent à notre comportement décisionnel. Deuxièmement, dans l'industrie

Java Made Simple : un guide du débutant sur la puissance de programmation Java Made Simple : un guide du débutant sur la puissance de programmation Oct 11, 2024 pm 06:30 PM

Java Made Simple : Guide du débutant sur la puissance de programmation Introduction Java est un langage de programmation puissant utilisé dans tout, des applications mobiles aux systèmes d'entreprise. Pour les débutants, la syntaxe de Java est simple et facile à comprendre, ce qui en fait un choix idéal pour apprendre la programmation. Syntaxe de base Java utilise un paradigme de programmation orienté objet basé sur les classes. Les classes sont des modèles qui organisent ensemble les données et les comportements associés. Voici un exemple simple de classe Java : publicclassPerson{privateStringname;privateintage;

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

See all articles