|
|
|
|
Grad gestern kam was in den Nachrichten über die Neuregelung bei Unterhaltszahlungen. Die sind halt auf der Welle der Zeit!
|
|
|
|
|
|
|
BUZZWORD-ALARM!
|
|
|
|
|
|
|
Und mein Sudoku-Solver spielt Codegolf:
type Cell =
| Assigned of char
| Undecided of char list
let assign row col value board =
List.mapi (fun i cell ->
match (i / 9, i % 9, cell) with
| (r, c, _) when r = row && c = col -> Assigned value
| (r, c, Undecided xs) when
r = row ||
c = col ||
(r / 3 = row / 3 && c / 3 = col / 3) ->
Undecided (List.filter ((<>) value) xs)
| (_, _, cell) -> cell) board
let rec solve board =
let rec solve' index board' =
match board' with
| [] -> Some board // Solved
| (Undecided []) :: _ -> None // Impossible to solve
| (Assigned _) :: tail ->
solve' (index + 1) tail
| (Undecided xs) :: _ ->
List.tryPick (fun c ->
solve (assign (index / 9) (index % 9) c board)) xs
solve' 0 board
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von igor]2 am 03.12.2012 12:05]
|
|
|
|
|
|
|
|
|
|
Nachdem der Kandidat von der SPD, den Grünen und der KAL hier den CDU-Kandidaten mit einer absoluten Mehrheit im ersten Wahlgang in den Boden gestampft hat, gehört meines Wissens nach keine Großstadt in Bawü mehr der CDU. Von wegen schwarzes Ländle \/
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Danzelot am 03.12.2012 12:32]
|
|
|
|
|
|
| Zitat von Gore
Das ist so fugly
| |
Das ist wohl vor allem der Schock, wenn man noch nie funktional programmiert hat.
|
|
|
|
|
|
|
|
|
|
|
Sieht SML recht ähnlich...könnte Haskell sein.
|
|
|
|
|
|
|
Hey, vielleicht nähere ich mich doch dem Luziden Träumen. Gerade beim Mittagsschlaf habe ich geträumt dass ich für Mittagsschlaf in meinem Bett liege und mir vorgenommen habe beim nächsten Einschlafen luzide zu werden
|
|
|
|
|
|
|
ES IST SO KALT!
Musste mal gesagt werden.
|
|
|
|
|
|
|
Ist das Meer schon zugefroren?
|
|
|
|
|
|
|
| Zitat von Danzelot
Ist das Meer schon zugefroren?
| |
Nein. Das dauert immer n bisschen. Ist ja kein Tümpel wie der Bodensee.
|
|
|
|
|
|
|
| Zitat von flying sheep
was war das? F#?
| |
Ja, F#.
|
|
|
|
|
|
|
| Zitat von igor]2
Das ist wohl vor allem der Schock, wenn man noch nie funktional programmiert hat.
| |
Ich versteh nicht das geringste von dem was da steht... Kannst du das mal ein wenig kommentieren, was die Abläufe dahinter sind?
|
|
|
|
|
|
|
Die Kurzfassung zumindest:
Jedes Feld kann entweder eine feste Zahl von 1 bis 9 eingetragen haben, oder ist noch frei (hat dann aber auch eine Liste von noch moeglichen Optionen, z.B. wenn Nachbarfelder schon belegt wurden).
Das ist im Code der erste Block "type Cell = ...", wobei "Assigned" der belegte Zustand ist (mit einem zugeordneten Wert vom Typ char, d.h. bei uns irgendwas zwischen '1' und '9'). "Undecided" ist der unbelegte Zustand und hat eine Liste von chars zugeordnet, die die verbleibenden Optionen repraesentiert.
Ein ganzes Spielfeld, d.h. ein Zustand im Spiel, wird hier dargestellt durch eine 81 Eintraege lange, eindimensionale Liste vom Typ "Cell" -- koennte man auch als zweidimensionales Array darstellen.
Das Programm hat zwei Funktionen, "assign" und "solve".
"assign" weist dem Feld an Position (row, col) einen neuen Wert value zu, und notiert gleichzeitig in allen anderen noch nicht fixierten, davon beeinflussten Feldern (d.h. Felder in der gleichen Zeile, gleichen Spalte, oder im gleichen 3x3-Block), dass dieser Wert fuer sie nicht mehr in Frage kommt. Hier wird das ueber die List.mapi-Funktion gemacht, die die entsprechende Austausch-Funktion ("fun i cell -> ...") nacheinander fuer jedes Listenelement aufruft (i = Index, cell = Assigned ... oder Undecided ...) und die Ergebnisse wieder in eine Liste packt. Der Rueckgabewert von "assign" ist damit eine neue Liste, die uebergebene Liste wird nicht veraendert. Das "match ... with | ..."-Statement in der aufgerufenen Funktion ist ein Pattern-Matching-Ausdruck, im Prinzip ein aufgebohrtes switch-Statement. In diesem Fall wird erst geguckt, ob das momentane Feld das Zielfeld ist (wenn ja, wird es durch "Assigned value" ersetzt), dann ob es ein von dieser Operation beeinflusstes Feld ist (wenn ja, wird "value" aus der Liste der verbleibenden Moeglichkeiten herausgefiltert), oder ein beliebiges anderes Feld (wenn ja, wird der bestehende Listenwert einfach kopiert).
Die "solve"-Funktion sucht dann nach einer Loesung fuer eine gegebene Spielsituation, d.h. fuer eine 81-elementige Liste von Feldern vom Typ Cell. Die groesste Arbeit wird dabei von einer inneren Hilfsfunktion "solve'" uebernommen, die einen Index von 0 bis 80 mitfuehrt. Dabei sucht sie nacheinander die Spielfeldliste durch, bis sie das erste Feld findet, fuer das noch kein fester Wert eingetragen ist. Wenn sie so ein Feld findet, probiert sie nacheinander alle verbleibenden Moeglichkeiten dort einzusetzen (durch "assign ..."), und guckt dann, ob dieses Raetsel loesbar ist (durch rekursiven Aufruf von "solve"). Daneben sind noch ein paar Rahmenbedingungen zu testen -- falls es keine Felder mehr gibt, die nicht eingetragen sind, ist das Raetsel vollstaendig geloest, und der momentane Spielzustand kann als Loesung zurueckgegeben warden. Falls ein Feld gefunden wird, fuer das keine Optionen mehr zur Verfuegung stehen, ist irgendwo vorher ein Feld falsch zugewiesen worden, und der Algorithmus muss backtracken und andere Loesungsansaetze probieren.
Das Ergebnis von "solve" ist dann immer entweder "None", wenn die uebergebene Spielfeldsituation nicht loesbar ist, oder "Some board", wobei "board" dann eine 81-elementige Liste von Elementen des Typs Cell ist, wobei alle Elemente "Assigned x" sind (x aus '1'..'9').
|
[Dieser Beitrag wurde 3 mal editiert; zum letzten Mal von igor]2 am 03.12.2012 16:01]
|
|
|
|
|
|
Online-Kennenlernen / Online-Datung ist fast so ein mieses Geschäft wie Drogenschmugel und Menschenhandel :/
|
|
|
|
|
|
|
| Zitat von TriggerTG
Online-Kennenlernen / Online-Datung ist fast so ein mieses Geschäft wie Drogenschmugel und Menschenhandel :/
| |
Ich schlage den Weihnachtsmarkt vor!
|
|
|
|
|
|
|
Kennt jemand eine gute, kostenlose Bibliothek für C# zum Plotten von Graphen? Durch die Lizenz der Bibliothek sollte das Programm dann natürlich nicht komplett unter diese Lizenz fallen.
Das Ganze soll dann ca. so aussehen:
|
|
|
|
|
|
|
| Zitat von Achsel-des-Bösen
| Zitat von Ashtray
| Zitat von Achsel-des-Bösen
Keine Ahnung, ich war vermutlich noch nie in etwas was man als "Club" bezeichnen würde. Wüsste auch nicht wofür das gut sein sollte. Ich habe einen Haufen super Freunde, eine Freundin die mich liebt und eigentlich auch gar keine Zeit für sowas
| | Hochzeit \o/
| |
Erst wenn das Geld dafür da ist ;-)
| |
Sobald der erste arbeitet und der andere nicht
|
|
|
|
|
|
|
oja, beim Weohnachtsgeld hat sich die 3er richtig gelohnt. Vorher war es netto das 1 1/2 fache vom Netto und jetzt ist es knapp das doppelte.
|
|
|
|
|
|
|
| Zitat von TriggerTG
Online-Kennenlernen / Online-Datung ist fast so ein mieses Geschäft wie Drogenschmugel und Menschenhandel :/
| |
Drogenschmuggel hat weniger Fotos von schräg oben.
|
|
|
|
|
|
|
doch für die Tunneleinstiege der Schmugglertunnel
|
|
|
|
|
|
|
In Java habe ich gerade dieses Stück Code vor mir:
server = new Socket(serverIP, Integer.valueOf(serverPort));
input = new BufferedReader(new InputStreamReader(server.getInputStream()));
response = input.readLine();
Kurze Frage dazu: Das ist ja ein einkommender Netzwerkstream, hält die dritte Zeile dann einfach die Ausführung an bis der Server eine ganze Zeile geschickt hat?
|
|
|
|
|
|
|
Skyfall-Review eines Linguisten.
Wobei er mit dem Zug unrecht hat, das gabs schon in Stirb Langsam 3 und ich musste als ich im Film war direkt daran denken, wie das doch von Stirb Langsam 3 kopiert war...
|
|
|
|
|
|
|
Der Zug war meiner Meinung nach aber auch eher ein Fall von Gambit Roulette
|
|
|
|
|
|
|
| Zitat von Danzelot
In Java habe ich gerade dieses Stück Code vor mir:
server = new Socket(serverIP, Integer.valueOf(serverPort));
input = new BufferedReader(new InputStreamReader(server.getInputStream()));
response = input.readLine();
Kurze Frage dazu: Das ist ja ein einkommender Netzwerkstream, hält die dritte Zeile dann einfach die Ausführung an bis der Server eine ganze Zeile geschickt hat?
| | Ja, deswegen packt man Netzwerk-Reader und -Writer normalerweise auch in einen eigenen Thread.
|
|
|
|
|
|
|
|
|
|
|
Steht auch garantiert im Javadoc zur Bibliothek!!!11elf
|
|
|
|
|
|
|
Im Javadoc vom BufferedReader nicht, der Rest war mir zu weit weg zum Gucken Ich will damit erst morgen programmieren, aber heute mal wissen was damit los ist.
|
|
|
|
|
|
|
Naja, im Allgemeinen werden die Befehle immer sequenziell abgearbeitet. Von daher ist das nicht weiter verwunderlich.
|
|
|
|
|
|
Thema: Gehirnsalat ( wir unter uns ) |