[PYTHON] J'ai essayé de générer une chaîne de caractères aléatoire

introduction

Nous avons implémenté des programmes en plusieurs langues qui génèrent des chaînes aléatoires (cette fois 6 lettres minuscules). La compétence de l'auteur de l'article est telle qu'un amateur apprend la programmation presque tout seul. Il y a une description de code dans l'article, mais j'apprécierais que vous puissiez commenter s'il y a des parties étranges ou des anti-modèles.

table des matières

  1. [Je voulais créer mon propre nom d'application dans Heroku](je voulais créer mon propre nom d'application dans #heroku)
  2. [Mise en œuvre](# Mise en œuvre)
  3. [C](langage # 1-c)
  4. C++
  5. Python
  6. Ruby
  7. PHP
  8. Node.js
  9. Swift
  10. [Shell Script](# 8-Shell Script)
  11. [JavaScript (HTML intégré)](# 9-javascript html intégré)
  12. [Résumé de la mise en œuvre](# 10-Résumé de la mise en œuvre)
  13. Conclusion
  14. [À la fin](# À la fin)

Je voulais créer mon propre nom d'application dans Heroku

L'autre jour, j'ai utilisé Heroku pour la première fois. C'est très facile à utiliser, mais je ne sais pas ce qu'est l'application à partir du nom de l'application généré automatiquement. Il semble que vous deviez éviter la duplication avec le nom de l'application sur Heroku pour lui donner un nom d'application arbitraire. En guise de méthode simple, utilisez une convention de dénomination

** Nom-app-chaîne aléatoire (ex. Fjofez-hello-app) **

Si tel est le cas, vous pouvez lui donner un nom descriptif tout en réduisant les risques de duplication. Par conséquent, j'ai décidé d'écrire un programme qui génère une chaîne de caractères aléatoires dans plusieurs langues. À propos, il existe les restrictions suivantes sur le nom de l'application.

$ heroku rename MyApp
Renaming Old-App to NewyApp... !
▸ Name must start with a letter, end with a letter or digit and can 
  only contain lowercase letters, digits, and dashes.

`Les noms doivent commencer par une lettre et se terminer par une lettre ou un chiffre et ne peuvent contenir que des lettres minuscules, des chiffres et des tirets. ''

De plus, le nombre maximum de caractères semble être de 30 caractères. La génération de chaînes de caractères aléatoires a été implémentée avec le modèle suivant.

** C, C ++, Python, Ruby, PHP, Node.js, Swift, Shell, JavaScript (HTML intégré) **

Si vous n'avez pas le temps, passez à Conclusion.

la mise en oeuvre

** Les règles de mise en œuvre ** sont à peu près les suivantes.

** Environnement d'exécution ** (Windows)

OSWindows 10 Home (64bit)
WSLUbuntu 18.04.4 LTS
Shell bash

** Environnement d'exécution ** (Mac)

OSCatalina 10.15.6
Shell zsh

1. Langage C

Quand j'étais étudiant, j'ai suivi un cours de langue C et j'ai appris environ un mois à l'examen d'entrée d'une école d'ingénieurs appelée 42Tokyo. Pour moi, la programmation est l'image du langage C.

random_strings.c


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    int num_of_char = 6;
    srand((unsigned int)time(NULL));

    for (int i = 0; i < num_of_char; i++)
        printf("%c", (rand() % 26 + 'a'));
    printf("\n");
}
$ gcc random_strings.c
$ ./a.out
ucxjvx
$ ./a.out
asuprq
$ ./a.out
rveroj

référence [Introduction au langage C] Comment utiliser des nombres aléatoires (rand)

  1. C++

J'ai étudié le C ++ pour participer au concours chez AtCoder, un service qui organise des concours de programmation compétitifs. Lorsque vous commencez à programmer, je pense que la programmation compétitive est une excellente introduction pour ceux qui aiment les puzzles.

random_strings.cpp


#include <iostream>
#include <random>
using namespace std;

int main()
{
    int num_of_char = 6;

    mt19937 mt{random_device{}()};
    uniform_int_distribution<int> dist(0, 25); // 26 letters of a~z

    for (int i = 0; i < num_of_char; i++)
        cout << char(dist(mt) + 'a');
    cout << endl;
}
$ g++ random_strings.cpp
$ ./a.out
zotuxm
$ ./a.out
faoxwv
$ ./a.out
czoxwt

référence La bibliothèque de nombres aléatoires C ++ est difficile à utiliser 3. Python

Tout le monde aime Python. Je l'ai à peine touché. La quantité de description est inférieure à celle du langage C. Il y avait de nombreuses références.

random_strings.py


import random
import sys

for i in range(6):
    sys.stdout.write(chr(random.randrange(26) + ord("a")))
print("")
$ python random_strings.py
prnsro
$ python random_strings.py
nnaydv
$ python random_strings.py
uzejcc

référence Fractions / entiers aléatoires générés par Python, random, randrange, randint, etc. [Python] Types de données et casts Astuces Python: Je souhaite générer une chaîne de caractères sans saut de ligne Python Snippets

  1. Ruby

Je travaille sur un tutoriel Rails. J'ai écrit cet article parce que j'ai utilisé Heroku dans le didacticiel Rails. La quantité de code est juste une ligne. Cela ressemble à une peau, mais je sens que la vitesse d'exécution est lente.

random_strings.rb


puts (0..5).map{ ("a".ord + rand(26)).chr }.join
$ ruby random_strings.rb
xgrqye
$ ruby random_strings.rb
cvijok
$ ruby random_strings.rb
ifmiau

** Ajouté le 2020.9.5 ** Dans les commentaires, j'ai appris à écrire le code un peu plus court. Il est court et extensible (y compris les chiffres et les majuscules).

python


puts (1..6).map{ [*"a".."z"].sample }.join

référence Comment générer une chaîne aléatoire dans Ruby Convertir un entier et des caractères avec Ruby Exemple Array # (Manuel de référence Ruby 2.7.0)

  1. PHP

C'était presque la première fois que j'exécutais PHP à partir de la ligne de commande. C'est rafraîchissant d'ajouter $ à la variable.

random_strings.php


<?php
    for ($i = 0; $i < 6; $i++)
        echo substr(str_shuffle('abcdefghijklmnopqrstuvwxyz'), 0, 1);
    echo "\n"
?>
$ php random_strings.php
fclvjt
$ php random_strings.php
mcttjp
$ php random_strings.php
rdvole

** Révisé 2020.9.5 ** La partie signalée dans le commentaire a été corrigée. Correction du nombre de caractères dans la chaîne de caractères générée à 8 caractères => 6 caractères Pas de duplication => Corrigé pour avoir une duplication
<détails>

Avant modification </ summary>


C'était presque la première fois que j'exécutais PHP à partir de la ligne de commande. La quantité de code est en fait une ligne.

random_strings.php


<?php
    echo substr(str_shuffle('abcdefghijklmnopqrstuvwxyz'), 0, 8) . "\n";
?>
$ php random_strings.php
fwuxjhel
$ php random_strings.php
fcxmuypb
$ php random_strings.php
qkswgyjp

référence [Comment exécuter PHP sur la ligne de commande [Pour les débutants] Générer un mot de passe aléatoire sur une seule ligne

  1. Node.js
  • Version ** v12.16.2 **

Je l'ai touché pour la première fois. J'ai l'impression d'utiliser Node.js pour exécuter JavaScript à partir de la ligne de commande plutôt que Node.js. J'ai un peu touché JavaScript lui-même lorsque j'étudiais la production Web.

random_strings.js


'use strict';
function make_random_string() {
    const num_of_char = 6;
    let random;
    let str1 = "";
    for (let i = 0; i < num_of_char; i++)
    {
        random = Math.floor( Math.random () * 26 + "a".charCodeAt(0));
        str1 += String.fromCharCode(random);
    }
    console.log(str1);
}
make_random_string();
$ node random_strings.js
fpysdy
$ node random_strings.js
hshgzk
$ node random_strings.js
bedysa

référence Utilisé depuis l'introduction de Node.js dans l'environnement WSL Référence inverse JavaScript qui peut être utilisée en copier-coller Obtenez des nombres aléatoires avec javascript Convertir les caractères en code ASCII avec JavaScript

  1. Swift
  • Version ** Apple Swift version 5.2.4 **

Je l'ai touché pour la première fois. J'ai eu le plus de mal avec cette implémentation, probablement parce que c'est essentiellement un langage pour créer des applications iOS. Je pense que Swift n'est pas adapté aux contenus d'implémentation comme cette fois.

random_strings.swift


let str = "abcdefghijklmnopqrstuvwxyz"

var i = 0
while i < 6 {
    let randomAlpha = Int.random(in: 0..<26)
    let fromIdx = str.index(str.startIndex, offsetBy: randomAlpha)
    let toIdx = str.index(str.endIndex, offsetBy: randomAlpha - 26)
    print(str[fromIdx...toIdx], terminator: "")
    i += 1
}
print("")
$ swift random_strings.swift
xwjrxd
$ swift random_strings.swift
pwqziz
$ swift random_strings.swift
psbhww

référence [Swift] Comment générer des nombres aléatoires Comment obtenir la chaîne d'index spécifiée dans Swift Répétez le traitement! Comment utiliser les instructions while / for écrites en Swift [pour les débutants]

8. Script shell

  • Version ** GNU bash, version 4.4.20 **

Le script shell est créé par google à chaque fois que c'est nécessaire pour l'efficacité, et après 3 jours c'est un niveau de compétence que j'oublie.

random_strings.sh


#!/bin/bash
cat /dev/urandom | tr -dc 'a-z' | fold -w 6 | head -n 1
$ bash random_strings.sh
udhmsd
$ bash random_strings.sh
loxtxt
$ bash random_strings.sh
zxrbbe

référence Générer une chaîne de caractères aléatoire

9. JavaScript (HTML intégré)

  • Contrôle de fonctionnement comme indiqué dans le tableau ci-dessous
Navigateur Version
Google Chrome Version: 84.0.4147.135
Microsoft Edge Version 85.0.564.44
Firefox Version: 80.0.1
Safari Version: 13.1.2

Je viens d'intégrer le code implémenté dans Node.js dans HTML. J'ignore la méthode car elle est combinée en un seul fichier html. Si vous déménagez pour le moment, c'est OK. Du point de vue d'un amateur, JavaScript qui peut être exécuté avec un navigateur est pratique.

random_strings.html


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        html {background: #f7f7f7;}
        body {margin: 48px auto 0; padding-top: 12px; padding-left: 24px;}
        body {background: #fff; border: solid 1px #333; width: 640px;}
        .result {color: #F06060; font-size: 30px; font-weight: bold; margin-left: 2rem;}
        div {border-bottom: solid 2px #333; width: 300px;}
    </style>
</head>
<body>
    <h1>Générer une chaîne aléatoire avec JavaScript</h1>
    <div>
        <script>
            'use strict';
            function make_random_string() {
                const num_of_char = 6;
                let random;
                let str1 = "";
                for (let i = 0; i < num_of_char; i++)
                {
                    random = Math.floor( Math.random () * 26 + "a".charCodeAt(0));
                    str1 += String.fromCharCode(random);
                }
                console.log(str1);
                document.write("<span>Chaîne générée=> </span>");
                document.write("<span class = result>" + str1 + "</span>");
            }
            make_random_string();
        </script>
    </div>
    <p>(a ~6 caractères avec des doublons de z)</p>
    <p>console.Il est également affiché dans le journal.</p>
</body>
</html>

Vérifier JavaScript (HTML intégré) avec un navigateur (Microsoft Edge) js_edge.PNG

10. Résumé de la mise en œuvre

Je l'ai exécuté sur une machine Windows à l'exception de Swift, mais il était très facile de configurer l'environnement grâce à WSL. Quand j'étais étudiant, je me souviens avoir eu du mal à mettre en place un environnement de développement de langage C sur une machine Windows. De plus, des IDE cloud tels que AWS Cloud 9 sont désormais disponibles, et je pense que l'environnement est très béni, car il est relativement facile de préparer un environnement de développement même pour un développement conjoint à l'aide de docker.

Conclusion

Facile et rapide à la main. (Dans l'exemple ci-dessous, j'ai frappé correctement le clavier)

$ heroku rename wojwpd-hello-app

Si vous le portez, vous pouvez lui donner un autre nom.

De plus, je pense que le simple fait d'ajouter un mot fixe au préfixe ne le dupliquera pas.

$ heroku rename apple-hello-app

À la fin

Ce fut une bonne expérience d'être exposé à différentes langues. Si vous n'êtes pas satisfait de Hello World, pourquoi ne pas essayer de générer une chaîne aléatoire comme point de départ pour une nouvelle langue?

c'est tout.

Recommended Posts

J'ai essayé de générer une chaîne de caractères aléatoire
Je veux diviser une chaîne de caractères avec hiragana
J'ai essayé de trier une colonne FizzBuzz aléatoire avec un tri à bulles.
J'ai essayé de créer un linebot (implémentation)
J'ai essayé de créer un linebot (préparation)
J'ai créé une API Web
J'ai essayé de créer une méthode de super résolution / ESPCN
J'ai essayé de créer une méthode de super résolution / SRCNN ①
J'ai implémenté DCGAN et essayé de générer des pommes
J'ai essayé de déboguer.
J'ai essayé de créer une méthode de super résolution / SRCNN ③
J'ai essayé de créer une méthode de super résolution / SRCNN ②
[Question] Je veux gratter une chaîne de caractères entourée de balises uniques!
J'ai créé un jeu ○ ✕ avec TensorFlow
J'ai essayé de générer automatiquement une table de gestion des ports à partir de L2SW Config
[Python] J'ai essayé d'obtenir le nom du type sous forme de chaîne de caractères à partir de la fonction type
J'ai essayé de faire un "putain de gros convertisseur de littérature"
Je souhaite intégrer une variable dans une chaîne Python
Je veux générer rapidement UUID (memo memo) ~ Edition Python ~
[Python] Comment développer des variables dans une chaîne de caractères
J'ai essayé d'implémenter un pseudo pachislot en Python
[Go + Gin] J'ai essayé de créer un environnement Docker
J'ai essayé de dessiner un diagramme de configuration à l'aide de diagrammes
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé d'apprendre PredNet
J'ai essayé d'organiser SVM.
J'ai essayé d'utiliser RandomForest
J'ai essayé d'implémenter PCANet
J'ai essayé de réintroduire Linux
J'ai essayé de présenter Pylint
J'ai essayé de résumer SparseMatrix
jupyter je l'ai touché
J'ai essayé d'implémenter StarGAN (1)
J'ai essayé de mettre en œuvre le modèle de base du réseau neuronal récurrent
J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
J'ai essayé de créer automatiquement un rapport avec la chaîne de Markov
Je veux générer automatiquement un nom de groupe de metal moderne
[Chaîne de Markov] J'ai essayé de lire les citations en Python.
J'ai fait une commande pour générer un commentaire pour une table dans Django
J'ai essayé "Comment obtenir une méthode décorée en Python"
J'ai essayé de commencer avec Hy ・ Définir une classe
Je souhaite convertir une chaîne de caractères ISO-8601 en heure japonaise
J'ai essayé d'automatiser [une certaine tâche] à l'aide d'une tarte à la râpe
J'ai trébuché lorsque j'ai essayé d'installer Basemap, donc un mémorandum
Les bases de l'apprentissage Python ~ Comment générer (afficher) une chaîne de caractères ~
J'ai essayé de créer un bot pour annoncer un événement Wiire
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai essayé d'écrire dans un modèle de langage profondément appris
J'ai créé un éditeur de texte simple en utilisant PyQt
J'ai essayé d'utiliser PI Fu pour générer un modèle 3D d'une personne à partir d'une image
J'ai essayé d'implémenter Deep VQE
J'ai essayé de créer l'API Quip
J'ai essayé de toucher Python (installation)
J'ai essayé de mettre en place une validation contradictoire