mirror of
https://github.com/fooflington/wordsearch.git
synced 2025-01-22 09:19:55 +00:00
working webapp
This commit is contained in:
parent
865b8df406
commit
f35ea4c246
3
uk/org/mafoo/wordsearch/Direction.java
Normal file
3
uk/org/mafoo/wordsearch/Direction.java
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
package uk.org.mafoo.wordsearch;
|
||||||
|
|
||||||
|
enum Direction { N, NE, E, SE, S, SW, W, NW; };
|
@ -1,8 +1,9 @@
|
|||||||
package uk.org.mafoo.wordsearch;
|
package uk.org.mafoo.wordsearch;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
class GridFactory {
|
public class GridFactory {
|
||||||
|
|
||||||
static Random rnd = new Random();
|
static Random rnd = new Random();
|
||||||
static final int MAX_TRIES = 500;
|
static final int MAX_TRIES = 500;
|
||||||
@ -46,105 +47,19 @@ class GridFactory {
|
|||||||
return chars[drng.getDistributedRandomNumber()];
|
return chars[drng.getDistributedRandomNumber()];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) throws IOException {
|
||||||
// Test invocation
|
// Test invocation
|
||||||
char[][] g = makeGrid(new String[] {
|
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
|
||||||
"Aberdeenshire",
|
String s;
|
||||||
"Anglesey",
|
List<String> words = new ArrayList<String>();
|
||||||
"Angus",
|
|
||||||
"Antrim",
|
while ((s = in.readLine()) != null && s.length() != 0) {
|
||||||
"Argyll",
|
words.add(s);
|
||||||
"Armagh",
|
}
|
||||||
"Ayrshire",
|
char[][] g = makeGrid(words, Integer.parseInt(args[0]), Integer.parseInt(args[1]));
|
||||||
"Banffshire",
|
|
||||||
"Bedfordshire",
|
|
||||||
"Berkshire",
|
|
||||||
"Berwickshire",
|
|
||||||
"Brecknockshire",
|
|
||||||
"Buckinghamshire",
|
|
||||||
"Buteshire",
|
|
||||||
"Caernarfonshire",
|
|
||||||
"Caithness",
|
|
||||||
"Cambridgeshire",
|
|
||||||
"Cardiganshire",
|
|
||||||
"Carmarthenshire",
|
|
||||||
"Cheshire",
|
|
||||||
"Clackmannanshire",
|
|
||||||
"Cornwall",
|
|
||||||
"Cromartyshire",
|
|
||||||
"Cumberland",
|
|
||||||
"Denbighshire",
|
|
||||||
"Derbyshire",
|
|
||||||
"Devon",
|
|
||||||
"Dorset",
|
|
||||||
"Down",
|
|
||||||
"Dumbartonshire",
|
|
||||||
"Dumfriesshire",
|
|
||||||
"Durham",
|
|
||||||
"East Lothian",
|
|
||||||
"Essex",
|
|
||||||
"Fermanagh",
|
|
||||||
"Fife",
|
|
||||||
"Flintshire",
|
|
||||||
"Glamorgan",
|
|
||||||
"Gloucestershire",
|
|
||||||
"Hampshire",
|
|
||||||
"Herefordshire",
|
|
||||||
"Hertfordshire",
|
|
||||||
"Huntingdonshire",
|
|
||||||
"Invernessshire",
|
|
||||||
"Kent",
|
|
||||||
"Kincardineshire",
|
|
||||||
"Kirkcudbrightshire",
|
|
||||||
"Lanarkshire",
|
|
||||||
"Lancashire",
|
|
||||||
"Leicestershire",
|
|
||||||
"Lincolnshire",
|
|
||||||
"Londonderry",
|
|
||||||
"Merionethshire",
|
|
||||||
"Middlesex",
|
|
||||||
"Midlothian",
|
|
||||||
"Monmouthshire",
|
|
||||||
"Montgomeryshire",
|
|
||||||
"Morayshire",
|
|
||||||
"Nairnshire",
|
|
||||||
"Norfolk",
|
|
||||||
"Northamptonshire",
|
|
||||||
"Northumberland",
|
|
||||||
"Nottinghamshire",
|
|
||||||
"Orkney",
|
|
||||||
"Oxfordshire",
|
|
||||||
"Peeblesshire",
|
|
||||||
"Pembrokeshire",
|
|
||||||
"Perthshire",
|
|
||||||
"Radnorshire",
|
|
||||||
"Renfrewshire",
|
|
||||||
"Rossshire",
|
|
||||||
"Roxburghshire",
|
|
||||||
"Rutland",
|
|
||||||
"Selkirkshire",
|
|
||||||
"Shetland",
|
|
||||||
"Shropshire",
|
|
||||||
"Somerset",
|
|
||||||
"Staffordshire",
|
|
||||||
"Stirlingshire",
|
|
||||||
"Suffolk",
|
|
||||||
"Surrey",
|
|
||||||
"Sussex",
|
|
||||||
"Sutherland",
|
|
||||||
"Tyrone",
|
|
||||||
"Warwickshire",
|
|
||||||
"West Lothian",
|
|
||||||
"Westmorland",
|
|
||||||
"Wigtownshire",
|
|
||||||
"Wiltshire",
|
|
||||||
"Worcestershire",
|
|
||||||
"Yorkshire",
|
|
||||||
}, Integer.parseInt(args[0]), Integer.parseInt(args[1]));
|
|
||||||
dump2d(g);
|
dump2d(g);
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum Direction { N, NE, E, SE, S, SW, W, NW; };
|
|
||||||
private static Direction[] directions = new Direction[] { Direction.N, Direction.NE, Direction.E, Direction.SE, Direction.S, Direction.SW, Direction.W, Direction.NW };
|
private static Direction[] directions = new Direction[] { Direction.N, Direction.NE, Direction.E, Direction.SE, Direction.S, Direction.SW, Direction.W, Direction.NW };
|
||||||
private static Direction getDirection() {
|
private static Direction getDirection() {
|
||||||
return directions[rnd.nextInt(directions.length-1)];
|
return directions[rnd.nextInt(directions.length-1)];
|
||||||
@ -236,7 +151,7 @@ class GridFactory {
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static char[][] makeGrid(String[] words, int height, int width) {
|
public static char[][] makeGrid(List<String> words, int height, int width) {
|
||||||
char[][] grid = new char[height][width];
|
char[][] grid = new char[height][width];
|
||||||
|
|
||||||
// Place words at random?
|
// Place words at random?
|
||||||
@ -252,6 +167,8 @@ class GridFactory {
|
|||||||
}
|
}
|
||||||
tries++;
|
tries++;
|
||||||
// System.out.println("[" + word + "] Crossed over... retrying");
|
// System.out.println("[" + word + "] Crossed over... retrying");
|
||||||
|
} finally {
|
||||||
|
// Nothing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
13
war/WEB-INF/web.xml
Executable file
13
war/WEB-INF/web.xml
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
||||||
|
|
||||||
|
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
|
||||||
|
version="2.4">
|
||||||
|
|
||||||
|
<display-name>Wordsearch creator</display-name>
|
||||||
|
<description>
|
||||||
|
Wordsearch building app
|
||||||
|
</description>
|
||||||
|
|
||||||
|
</web-app>
|
52
war/build.jsp
Executable file
52
war/build.jsp
Executable file
@ -0,0 +1,52 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Wordsearch builder</title>
|
||||||
|
<style>
|
||||||
|
table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
padding: 2px 4px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<%@ page import="uk.org.mafoo.wordsearch.*" %>
|
||||||
|
<%@ page import="java.util.*" %>
|
||||||
|
<%@ page errorPage="error.jsp" %>
|
||||||
|
<%
|
||||||
|
|
||||||
|
int height = Integer.parseInt(request.getParameter("height"));
|
||||||
|
int width = Integer.parseInt(request.getParameter("width"));
|
||||||
|
|
||||||
|
if (request.getParameter("words").length() > 2048) { throw new Exception("Input too large"); }
|
||||||
|
|
||||||
|
List<String> words = new ArrayList<String>();
|
||||||
|
for ( String line : request.getParameter("words").split("\r\n")) {
|
||||||
|
words.add(line.trim());
|
||||||
|
}
|
||||||
|
|
||||||
|
char[][] grid = GridFactory.makeGrid(words, height, width);
|
||||||
|
%>
|
||||||
|
<body>
|
||||||
|
<h1>Wordsearch builder</h1>
|
||||||
|
<h2>Words</h2>
|
||||||
|
<ul>
|
||||||
|
<% for (String word : words) { %>
|
||||||
|
<li><%= word.trim() %></li>
|
||||||
|
<% } %>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Grid</h2>
|
||||||
|
<table style="font-family: monospace;">
|
||||||
|
<% for(char[] row : grid) { %>
|
||||||
|
<tr>
|
||||||
|
<% for(char c : row) { %>
|
||||||
|
<td><%= c %></td>
|
||||||
|
<% } %>
|
||||||
|
</tr>
|
||||||
|
<% } %>
|
||||||
|
</table>
|
||||||
|
<footer>
|
||||||
|
Generated
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
6
war/error.jsp
Executable file
6
war/error.jsp
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
<HTML>
|
||||||
|
<BODY>
|
||||||
|
<%@ page isErrorPage="true" %>
|
||||||
|
Error: <%= exception %>
|
||||||
|
</BODY>
|
||||||
|
</HTML>
|
26
war/index.jsp
Executable file
26
war/index.jsp
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
<html>
|
||||||
|
<head><title>Wordsearch builder</title></head>
|
||||||
|
<body>
|
||||||
|
<h1>Wordsearch builder</h1>
|
||||||
|
<h2>Words</h2>
|
||||||
|
<form action="build.jsp">
|
||||||
|
<textarea name="words" rows="10">
|
||||||
|
Kitchen
|
||||||
|
Lounge
|
||||||
|
Study
|
||||||
|
Ballroom
|
||||||
|
Conservatory
|
||||||
|
Billiard Room
|
||||||
|
Library
|
||||||
|
Hall
|
||||||
|
Dining Room
|
||||||
|
</textarea>
|
||||||
|
<br />
|
||||||
|
<input type="number" name="height" min="3" max="50" value="5" />
|
||||||
|
<input type="number" name="width" min="3" max="50" value="5" />
|
||||||
|
<input type="submit" value="Build!" />
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
x
Reference in New Issue
Block a user