[LINUX] J'ai essayé de créer des taureaux et des vaches avec un programme shell

introduction

Je l'ai créé comme une petite histoire de programmation Bash. Ceci est la 6ème puce. Cette fois, c'était assez difficile.

Qu'est-ce que les taureaux et les vaches?

Pour les taureaux et les vaches, voir Wikipedia et ici.

À l'origine un jeu de devinettes de chaînes de caractères, Cette fois, je vais le créer comme un jeu de devinettes.

La source

#!/bin/bash

function chkAns {
  bull=0
  cow=0
  num=$1
  dig=$2
  ans=$3

  for i in $(seq 1 $dig)
  do
    for j in $(seq 1 $dig)
    do
      if [[ ${num:i:1} == ${ans:j:1} && $i == $j ]]
      then
#       echo bull: $bull        #for debug
        (( bull = bull + 1 ))
      elif [[ ${num:i:1} == ${ans:j:1} && $i != $j ]]
      then
#       echo cow: $cow          #for debug
        (( cow = cow + 1 ))
      fi
    done
  done

  if (( bull == dig ))
  then
    echo -e "$dig bulls ! You did it !"
    exit
  else
    echo -e "$bull bull and $cow cow."
  fi
}

echo "Welcome 'Bulls and Cows' Game"
echo -e "Please input digits of numbers => \c"
read digits

tmp=$(shuf -i 0-9 -n $digits -z)
answer=${tmp:0:3}

#echo $answer  #for debug

for k in $(seq 1 10)
do
  echo -e "Input $digits numbers of your answer. (${k} time) => \c"
  read num

  chkAns $num $digits $answer
  if (( $k == 10 ))
  then
    echo "You failed 10 times..."
  fi
done

echo -e "The answer is '$answer'"

$ RANDOM était bien, mais je ne l'ai pas utilisé parce que je ne lui fais pas confiance. Au lieu de cela, j'ai utilisé la commande shuf.

Résultat de l'exécution (bonne réponse)

$ ./bulls_and_cows.sh
Welcome 'Bulls and Cows' Game
Please input digits of numbers => 3
./bulls_and_cows.sh:Ligne 39:avertissement: command substitution: ignored null byte in input
Input 3 numbers of your answer. (1 time) => 321
2 bull and 0 cow.
Input 3 numbers of your answer. (2 time) => 324
2 bull and 0 cow.
Input 3 numbers of your answer. (3 time) => 325
3 bulls ! You did it !

Le message "Avertissement: substitution de commande: octet nul ignoré en entrée" semble apparaître lorsqu'un octet nul est inclus. Cependant, je l'ignore car il était difficile de générer N chiffres sans utiliser Null. Veuillez commenter s'il existe une bonne solution.

Résultat de l'exécution (échoue)

~~ J'essaye sérieusement de répondre correctement. ~~

$ ./bulls_and_cows.sh
Welcome 'Bulls and Cows' Game
Please input digits of numbers => 3
./bulls_and_cows.sh:Ligne 39:avertissement: command substitution: ignored null byte in input
Input 3 numbers of your answer. (1 time) => 345
1 bull and 0 cow.
Input 3 numbers of your answer. (2 time) => 219
1 bull and 0 cow.
Input 3 numbers of your answer. (3 time) => 398
1 bull and 0 cow.
Input 3 numbers of your answer. (4 time) => 470
1 bull and 1 cow.
Input 3 numbers of your answer. (5 time) => 709
1 bull and 0 cow.
Input 3 numbers of your answer. (6 time) => 507
2 bull and 0 cow.
Input 3 numbers of your answer. (7 time) => 504
1 bull and 0 cow.
Input 3 numbers of your answer. (8 time) => 570
1 bull and 1 cow.
Input 3 numbers of your answer. (9 time) => 407
2 bull and 0 cow.
Input 3 numbers of your answer. (10 time) => 307
2 bull and 0 cow.
You failed 10 times...
The answer is '567'

en conclusion

En créant ce programme

--Variable

Je comprends.

Recommended Posts

J'ai essayé de créer des taureaux et des vaches avec un programme shell
J'ai essayé de créer un programme qui convertit les nombres hexadécimaux en nombres décimaux avec python
J'ai essayé de créer automatiquement un rapport avec la chaîne de Markov
J'ai essayé de créer un linebot (implémentation)
J'ai essayé de créer un linebot (préparation)
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de créer un plug-in avec HULFT IoT Edge Streaming [Development] (2/3)
J'ai essayé de créer un plug-in avec HULFT IoT Edge Streaming [Execution] (3/3)
[Outlook] J'ai essayé de créer automatiquement un e-mail de rapport quotidien avec Python
J'ai essayé de créer un plug-in avec HULFT IoT Edge Streaming [Setup] (1/3)
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2 2
J'ai essayé d'implémenter et d'apprendre DCGAN avec PyTorch
Quand j'ai essayé de créer un environnement virtuel avec Python, cela n'a pas fonctionné
Utilisez la commande [shell] pour compresser par zip n'importe quel fichier pour créer un fichier et supprimer le fichier d'origine.
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2
J'ai essayé de créer facilement un système de présence entièrement automatique avec Selenium + Python
Je souhaite créer manuellement une légende avec matplotlib
J'ai essayé de créer un bouton pour Slack avec Raspeye + Tact Switch
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
J'ai essayé de créer une API de reconnaissance d'image simple avec Fast API et Tensorflow
J'ai essayé de créer un modèle avec l'exemple d'Amazon SageMaker Autopilot
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
J'ai essayé de créer un environnement d'apprentissage amélioré pour Othello avec Open AI gym
[Python] J'ai essayé de créer automatiquement un rapport quotidien de YWT avec la messagerie Outlook
J'ai essayé de créer une classe pour rechercher des fichiers avec la méthode Glob de Python dans VBA
J'ai essayé de créer un cadre de données pandas en grattant les informations de rappel d'aliments avec Python
J'ai essayé de prédire et de soumettre les survivants du Titanic avec Kaggle
J'ai écrit rapidement un programme pour étudier la DI avec Python ①
J'ai essayé de commencer avec Hy ・ Définir une classe
J'ai essayé de trier une colonne FizzBuzz aléatoire avec un tri à bulles.
J'ai essayé de créer un bot pour annoncer un événement Wiire
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
J'ai essayé d'écrire dans un modèle de langage profondément appris
J'ai essayé de créer un article dans Wiki.js avec SQL Alchemy
J'ai essayé de créer l'API Quip
[Démarrage du shell] J'ai essayé d'afficher le shell sur le téléviseur avec un G-cluster à carte Linux bon marché
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
[Dessin graphique] J'ai essayé d'écrire un graphique à barres multi-séries avec matplotlib et seaborn
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de créer un environnement serveur qui fonctionne sous Windows 10
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
J'ai essayé de créer un pointage de crédit simple avec régression logistique.
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de visualiser les signets volant vers Slack avec Doc2Vec et PCA
Je voulais créer une présentation intelligente avec Jupyter Notebook + nb present
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
Je veux créer un fichier pip et le refléter dans le menu fixe
J'ai essayé de créer une application todo en utilisant une bouteille avec python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de détecter facilement les points de repère du visage avec python et dlib
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de faire une étrange citation pour Jojo avec LSTM