Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Sudoku mit Ruby (und Shoes)
BeitragVerfasst: 15 Jan 2014, 22:27 
Offline
Schüler

Registriert: 15 Jan 2014, 22:22
Beiträge: 24
Hallo,
wir möchten Sudoku mit Ruby und Shoes programmieren bzw. haben das als Aufgabe in einer Vorlesung. Wir haben grundlegende Rubykenntnisse (lernen seit 2 Monaten; 3 Stunden wöchentlich), sind aber Anfänger. Also im Wesentlichen geht es um einen Sudoku-Löser. Dass wir ein Spielfeld haben, wo bereits Zahlen drinnen stehen und dann der Benutzer welche eingeben kann und des Programm quasi prüft ob des richtig ist oder nicht. Wir wissen aber überhaupt nicht/wie wo wir anfangen sollen. Ist das überhaupt machbar für uns? Wir hätten gerne so ein paar Tipps für den Einstieg, wie wir vorgehen sollen. Was vielleicht wichtig für das Spiel ist, was für Schleifen wir brauchen. Einfach ein paar Tipps die ihr so habt.

Wäre echt super lieb wenn sich wer meldet :)!


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sudoku mit Ruby (und Shoes)
BeitragVerfasst: 15 Jan 2014, 23:50 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Ich kann nicht viel zu Shoes sagen, aber ansonsten solltest du dir bewusst sein, dass es hier keine fertigen Lösungen geben wird, schon gar nicht wenn du schon vorher sagst, es handele sich um eine Hausaufgabe :)

Zuerst stellt sich die Frage in welcher Form der Nutzer das Soduko eingibt und wie es dann gespeichert wird. Diese gespeicherte Variante wird dann direkt wieder ohne Änderung ausgegeben. Das wäre der erste Schritt.

Der zweite Schritt ist es dann den Solver zu implementieren. Dazu gibt es verschiedene Strategien:
  • Bruteforce, einfach alle Möglichkeiten durchprobieren, bis fertig. Eher nicht zu empfehlen…
  • Strategisch:
    • Versuche eine Strategie aus der Wikipedia in Quellcode zu gießen und sie an deine Datenstrukturen anzupassen (http://de.wikipedia.org/wiki/Sudoku#L.C3.B6sungsmethoden)
    • Ausserdem gibt es eine Arbeit von der Uni Trier die sich mit dem Lösen und Generieren von Sodukos beschäftigt: https://www.hochschule-trier.de/uploads/tx_rfttheses/Eckart_Sussenburger_-_Loesungs-_und_Generierungsalgorithmen_fuer_Sudoku.pdf

Vielleicht hilft ja das erst einmal weiter. Ansonsten musst du versuchen etwas konkreter zu fragen…

Und zur Machbarkeit: Es ist definitiv machbar… Ob für euch kann ich nicht sagen… Aber ich gehe davon aus, dass wenn ihr es als Aufgabe bekommt, ihr auch alles dafür notwendige bereits in der Vorlesung durchgesprochen habt. So läuft es zumindest bei mir in der FH… Keine Aufgabe ohne zugehöriges Grundwissen…

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sudoku mit Ruby (und Shoes)
BeitragVerfasst: 16 Jan 2014, 10:52 
Offline
Schüler

Registriert: 15 Jan 2014, 22:22
Beiträge: 24
Danke dir erstmal :). Wir haben bisher gelernt: Halt so Sachen wie Variablen, dann Kontrollstrukturen und Arrays. Dann hatten wir noch eine kurze Einführung in Shoes. Mehr haben wir nicht gemacht. Für das Spiel haben wir nun noch 3 Wochen? Denkst du wirklich, dass das machbar ist? Könntest du uns vielleicht helfen was für Schleifen oder sonstiges wir brauchen um zu schauen welche Zahl in dem Kästchen sein muss?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sudoku mit Ruby (und Shoes)
BeitragVerfasst: 16 Jan 2014, 13:42 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Wie gesagt, stell konkrete Fragen, dann kann man dir helfen…

Arrays klingen doch schon mal gut, sieht so aus, als ob du das Feld schon mal abspeichern kannst…

Und mögliche Algorithmen zum Lösen habe ich bereits verlinkt. Dort stehen auch (in menschlicher Sprache) die nötigen Schritte zum Lösen drin, das musst du nur formalisieren und auf dein Array von Array von Integern loslassen…

Der Integer ist dann Quasi die Zahl im Kästchen, mach einfach erst einmal 0 oder nil für ein leeres Feld.
Das innere Array mit den Integern darin ist dann die Zeile. Davon packst du 9 Stück in das äussere Array und hast damit ein komplettes „Spielbrett“.

Und ihr hattet wirklich noch nicht wie man Klassen definiert? Es klingt mir fast so, als ob ihr Ruby eher als imperative Sprache gelehrt bekommen habt und euch nun innerhalb dieser mit den Objekten von Shoes herumschlagen dürft. Über die Sinnhaftigkeit dieser Herangehensweise lasse ich mich mal nicht aus. Zum einen könnte ich dich falsch verstanden haben oder du hast die Klassen vergessen zu erwähnen, und wenn ich tatsächlich richtig liege, könntest du eh nichts mehr ändern.

Aber lass mich erneut darauf hinweisen, dass du schon konkrete Fragen stellen musst damit wir dir auch konkrete Hilfestellung geben können.

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sudoku mit Ruby (und Shoes)
BeitragVerfasst: 16 Jan 2014, 14:52 
Offline
Schüler

Registriert: 15 Jan 2014, 22:22
Beiträge: 24
Nein, wir hatten wirklich noch keine Klassen ins Ruby. Wir hätten halt gerne einen Einstieg. Wie würdest du anfangen das Spiel zu programmieren. Oder hast du uns mal einen "Schein-Code" oder wie man sowas nennt. Wir sind einfach ratlos. Was auch gut wäre wenn du uns vielleicht andere Spielideen nennen könntest, die einfacher sind als Sudoku...!Das wäre auch super lieb!


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sudoku mit Ruby (und Shoes)
BeitragVerfasst: 16 Jan 2014, 15:30 
Offline
Interpreter
Benutzeravatar

Registriert: 18 Sep 2008, 22:32
Beiträge: 1821
Wohnort: NRW → UN
NobbZ hat dir bereits Lösungsvorschäge in Form von Links unterbreitet. Es obliegt euch jetzt nur noch, diese in Code umzusetzen. Legt eine Datei an und fangt an — wenn ihr schon keine Klassen behandelt habt — die einzelnen Arbeitsschritte als Methoden zu definieren.



1
2
3
def mach_was
# Code hier
end


Oder worauf willst du hinaus?

Vale,
Quintus

_________________
Habe den Mut, dich deines eigenen Verstandes zu bedienen! — Immanuel Kant

Ich bin freischaffender Softwareentwickler und freue mich über jedes neue Projekt. Kontaktinformation auf meiner Website.

Mein Blog | GitHub-Profil | Auf Twitter: @qquintilianus | PGP/GPG-Schlüssel: B1FE 958E D5E8 468E AA20 8F4B F1D8 799F BCC8 BC4F


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sudoku mit Ruby (und Shoes)
BeitragVerfasst: 19 Jan 2014, 16:18 
Offline
Schüler

Registriert: 15 Jan 2014, 22:22
Beiträge: 24
Das Problem ist halt, dass wir gar nicht wissen wo wir anfangen sollen. Wir haben jetzt z.B. schon das Spielfeld. Aber das Hauptproblem ist ja, dass wir irgendeine Funktion oder ähnliches brauchen die prüft, dass in einer Reihe nur 9 Zahlen sind, in eine Spalte nur 9 Zahlen und in einem Kästchen nur 9 zahlen. Außerdem dürfen sich ja diese Zahlen nie überschneiden. Wie würdet ihr dann hier vorgehen/anfange?Wir sind total ratlos...


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sudoku mit Ruby (und Shoes)
BeitragVerfasst: 19 Jan 2014, 19:30 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Da ihr ja keine Klasse nutzt, die in entsprechenden Gettern und Settern selbstständig prüfen könnte ob der Eintrag valide ist, sieht die Überprüfung ob ein Zug valide ist in etwa so aus (ruby angelehnter Pseudocode):



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Testet ob ein Zug im aktuellen Soduko Gitter g��ltig ist.
#
# @param grid Das aktuelle Gitter
# @param moveX Reihe im Gitter
# @param moveY Spalte im Gitter
# @param value An die entsprechende Koordinate eingetragene Ziffer
# @return Das neue Gitter wenn der Zug valide war, ansonsten das alte
def validMove? (grid, moveX, moveY, value)
tempGrid = grid
tempGrid[moveX][moveY] = value

# Reihen valide?
valid? = isUnique? value, tempGrid[moveX]

#spalten valide?
valid? = valid? && isUnique? value, row2col moveY

# Block valide?
valid? = valid? && isUnique? value, (block2col moveX, moveY)

# Gebe letztes bekanntes Grid zur��ck
valid? ? tempGrid : grid
end


Ich habe hier ein paar Funktionen genutzt die du noch selber umsetzen müsstest, aber einen groben Plan hast du damit schon mal. Gleich Vorweg, diese Funktion überprüft lediglich die Validität eines einzelnen Zuges, nicht des gesamten Spielbrettes! Aber das ganze in größer umzusetzen sollte wohl mit etwas nachdenken nicht mehr schwer sein.

HTH,
NobbZ

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: