[LINUX] Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen

Einführung

Ich habe es als kleine Geschichte der Bash-Programmierung erstellt. Dies ist die 6. Kugel. Diesmal war es ziemlich hart.

Was ist Bullen und Kühe?

Bullen und Kühe finden Sie unter Wikipedia und hier.

Ursprünglich ein Ratespiel für Zeichenketten, Dieses Mal werde ich es als Zahlen-Ratespiel erstellen.

Quelle

#!/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 war in Ordnung, aber ich habe es nicht benutzt, weil ich ihm nicht vertraue. Stattdessen habe ich den Befehl shuf verwendet.

Ausführungsergebnis (richtige Antwort)

$ ./bulls_and_cows.sh
Welcome 'Bulls and Cows' Game
Please input digits of numbers => 3
./bulls_and_cows.sh:Zeile 39:Warnung: 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 !

Die Meldung "Warnung: Befehlsersetzung: Nullbyte bei Eingabe ignoriert" wird angezeigt, wenn ein Nullbyte enthalten ist. Ich ignoriere es jedoch, weil es schwierig war, N Ziffern ohne Null zu generieren. Bitte kommentieren Sie, ob es eine gute Lösung gibt.

Ausführungsergebnis (schlägt fehl)

~~ Ich versuche ernsthaft richtig zu antworten. ~~

$ ./bulls_and_cows.sh
Welcome 'Bulls and Cows' Game
Please input digits of numbers => 3
./bulls_and_cows.sh:Zeile 39:Warnung: 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'

abschließend

Durch das Erstellen dieses Programms

--Variable

Ich verstehe.

Recommended Posts

Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Entwicklung] (2/3) zu erstellen.
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Ausführung] (3/3) zu erstellen.
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Setup] (1/3) zu erstellen.
Ich habe ein Beispiel für den Zugriff auf Salesforce mit Python und Bottle erstellt
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Verwenden Sie den Befehl [shell], um eine beliebige Datei zu komprimieren, um eine Datei zu erstellen und die Originaldatei zu löschen.
Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern
Ich habe versucht, mit Selenium + Python einfach ein vollautomatisches Anwesenheitssystem zu erstellen
Ich möchte manuell eine Legende mit matplotlib erstellen
Ich habe versucht, mit Raspeye + Tact Switch eine Schaltfläche für Slack zu erstellen
Ich habe versucht, Grad-CAM mit Keras und Tensorflow zu implementieren
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
Ich habe ein Programm erstellt, um Bilder mit Python und OpenCV in ASCII-Grafik umzuwandeln
Ich habe versucht, mit Open AI Gym eine verbesserte Lernumgebung für Othello zu schaffen
[Python] Ich habe versucht, automatisch einen täglichen Bericht über YWT mit Outlook-Mail zu erstellen
Ich habe versucht, eine Klasse für die Suche nach Dateien mit der Glob-Methode von Python in VBA zu erstellen
Ich habe versucht, einen Pandas-Datenrahmen zu erstellen, indem ich mit Python Informationen zum Lebensmittelrückruf abgekratzt habe
Ich habe versucht, Überlebende der Titanic mit Kaggle vorherzusagen und einzureichen
Ich habe schnell ein Programm geschrieben, um DI mit Python zu lernen
Ich habe versucht, mit Hy ・ Define a class zu beginnen
Ich habe versucht, eine zufällige FizzBuzz-Spalte mit Blasensortierung zu sortieren.
Ich habe versucht, einen Bot für die Ankündigung eines Wiire-Ereignisses zu erstellen
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Ich habe versucht, einen Artikel mit SQL Alchemy auf Wiki.js zu erstellen
Ich habe versucht, eine Quip-API zu erstellen
[Shell-Start] Ich habe versucht, die Shell mit einem billigen Linux-Board-G-Cluster auf dem Fernseher anzuzeigen
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
[Grafikzeichnung] Ich habe versucht, ein mehrreihiges Balkendiagramm mit Matplotlib und Seaborn zu schreiben
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, eine Serverumgebung zu erstellen, die unter Windows 10 ausgeführt wird
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Ich habe versucht, einen einfachen Kredit-Score mit logistischer Regression zu erstellen.
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, die Lesezeichen zu visualisieren, die mit Doc2Vec und PCA nach Slack fliegen
Ich wollte eine intelligente Präsentation mit Jupyter Notebook + nb present erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich möchte eine Pipfile erstellen und im Docker wiedergeben
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, Gesichtsmarkierungen mit Python und Dlib leicht zu erkennen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen