diff --git a/adapter/typescript/README.md b/adapter/typescript/README.md new file mode 100644 index 000000000..2e9c01bed --- /dev/null +++ b/adapter/typescript/README.md @@ -0,0 +1,62 @@ +# ECCO TypeScript Adapter + +## Overview +This ECCO adapter is able to parse a select subset of TypeScript language features. + +It uses the JavaScript engine Javet to run the Microsoft TypeScript compiler in a Node +environment. This generates an AST in a JSON format which is exported to Java as a collection of Maps and ArrayLists. +An Ecco tree is then built from that AST information. + +## Usage + +Since parsing relies on the TypeScript compiler this needs to be installed. +For this a Node.js and npm installation is needed. + +`` +typescript/src/main/resources/script +`` +includes a package.json that only defines a dependency for the npm typescript package +which is the Microsoft TypeScript compiler. Either run +`` +npm install +`` in that directory or run the gradle +`` +npmInstall +`` +task. + +## Features + +The TypeScript reader can resolve the following language features: + +- While loops +- Do While loops +- For loops +- For of loops +- For in loops +- Class Declarations +- Method Declarations +- Enums +- Switch Statements +- If Statements +- Functions +- Arrow functions assigned to variables +- Arrow functions as properties of objects + +Any other statement is treated atomically and ends up as a leaf in the tree. + +## Details + +The TypeScriptParser uses a short JavaScript to invoke the TypeScript compiler. This script also maps the kinds of the +visited node from an integer to a string. That "kind" information string is then used in the Java part to distinguish +between the various language constructs. We need to do this because the AST data is structured differently for each kind. +The text containing relevant semantic information is used as a basis for the hash code of the nodes. White space and comments +are not included in the hash code but stored as separate information. The writer simply pastes the leading trivia, semantic +information and trailing trivia together to form the original source code for each node in the ECCO tree. + +## Limitations +- The Reader is depended on the TypeScript compiler producing an AST. If the compiler fails to parse the input file the reader will fail as well. +- White space and comments follow the logic of the TypeScript compiler and are associated with the node directly after it. +If features are added or removed this may interfere with the formatting of the document for that reason. +- Features that are hidden in some lambda that that is passed to a function won't be resolved. +- Newer versions of the typescript compiler might need adjustments in the parsing of the kinds. \ No newline at end of file diff --git a/adapter/typescript/build.gradle b/adapter/typescript/build.gradle new file mode 100644 index 000000000..f8398cdda --- /dev/null +++ b/adapter/typescript/build.gradle @@ -0,0 +1,36 @@ +plugins { + id 'java' + id("com.github.node-gradle.node") version "7.0.1" +} +ecco.adapter = true +group = 'at.jku.isse.ecco' +version = '0.1.9' +npmInstall + +repositories { + mavenCentral() +} + +dependencies { + implementation project(':ecco-service') + // https://mvnrepository.com/artifact/com.caoccao.javet/javet + implementation group: 'com.caoccao.javet', name: 'javet', version: '2.1.2' + // https://mvnrepository.com/artifact/com.caoccao.javet/javet-macos + implementation group: 'com.caoccao.javet', name: 'javet-macos', version: '2.1.2' + testImplementation platform('org.junit:junit-bom:5.9.1') + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'junit:junit:4.13.1' +} + +ospackage { + requires('ecco-base', version, EQUAL) + requires('ecco-service', version, EQUAL) +} +node { + download = false + nodeProjectDir = file("${project.projectDir}/src/main/resources/script") +} +test { + useJUnitPlatform() +} +build.dependsOn npmInstall \ No newline at end of file diff --git a/adapter/typescript/src/integrationTest/java/at/jku/isse/ecco/adapter/typescript/test/AdapterTest.java b/adapter/typescript/src/integrationTest/java/at/jku/isse/ecco/adapter/typescript/test/AdapterTest.java new file mode 100644 index 000000000..e25c764af --- /dev/null +++ b/adapter/typescript/src/integrationTest/java/at/jku/isse/ecco/adapter/typescript/test/AdapterTest.java @@ -0,0 +1,39 @@ +package at.jku.isse.ecco.adapter.typescript.test; + +import at.jku.isse.ecco.adapter.typescript.TypeScriptReader; +import at.jku.isse.ecco.storage.mem.dao.MemEntityFactory; +import at.jku.isse.ecco.tree.Node; +import org.testng.annotations.Test; +import java.net.URISyntaxException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Set; + +public class AdapterTest { + + private static final Path DATA_DIR; + + static { + Path dataPath = null; + try { + dataPath = Paths.get(AdapterTest.class.getClassLoader().getResource("data").toURI()); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + DATA_DIR = dataPath; + } + + private static final Path BASE_DIR = DATA_DIR.resolve("input"); + private static final Path[] FILES = new Path[]{Paths.get("parse.js")}; + + @Test(groups = {"integration"}) + public void Java_Adapter_Test() { + TypeScriptReader reader = new TypeScriptReader(new MemEntityFactory()); + + System.out.println("READ"); + Set nodes = reader.read(BASE_DIR, FILES); + + System.out.println(nodes); + } + +} diff --git a/adapter/typescript/src/integrationTest/resources/data/input/parse.js b/adapter/typescript/src/integrationTest/resources/data/input/parse.js new file mode 100644 index 000000000..dd61d09ba --- /dev/null +++ b/adapter/typescript/src/integrationTest/resources/data/input/parse.js @@ -0,0 +1,12 @@ +const ts = require(nodePath); +const sf = ts.createSourceFile('sf',fileContent,ts.ScriptTarget.Latest); +const generateAst = (node, sourceFile) => { + const syntaxKind = ts.SyntaxKind[node.kind]; + node.nodeText = node.getText(sourceFile); + node.start = node.getStart(sourceFile); + node.fullText = node.getFullText(sourceFile); + node.triviaWidth = node.getLeadingTriviaWidth(sourceFile); + node.forEachChild((child) => generateAst(child, sourceFile)); + node.kind = syntaxKind; +}; +(() => generateAst(sf, sf))(); \ No newline at end of file diff --git a/adapter/typescript/src/integrationTest/resources/testng.xml b/adapter/typescript/src/integrationTest/resources/testng.xml new file mode 100644 index 000000000..60ae6ab26 --- /dev/null +++ b/adapter/typescript/src/integrationTest/resources/testng.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptModule.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptModule.java new file mode 100644 index 000000000..44a3d6ae6 --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptModule.java @@ -0,0 +1,33 @@ +package at.jku.isse.ecco.adapter.typescript; + +import at.jku.isse.ecco.adapter.ArtifactExporter; +import at.jku.isse.ecco.adapter.ArtifactReader; +import at.jku.isse.ecco.adapter.ArtifactViewer; +import at.jku.isse.ecco.adapter.ArtifactWriter; +import at.jku.isse.ecco.tree.Node; +import com.google.inject.AbstractModule; +import com.google.inject.TypeLiteral; +import com.google.inject.multibindings.Multibinder; + +import java.nio.file.Path; +import java.util.Set; + +public class TypeScriptModule extends AbstractModule { + + @Override + protected void configure() { + + + final Multibinder>> readerMultibinder = Multibinder.newSetBinder(binder(), + new TypeLiteral<>() { + }); + readerMultibinder.addBinding().to(TypeScriptReader.class); + + final Multibinder, Path>> writerMultibinder = Multibinder.newSetBinder(binder(), + new TypeLiteral<>() { + }); + writerMultibinder.addBinding().to(TypeScriptWriter.class); + + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptParser.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptParser.java new file mode 100644 index 000000000..30e14538e --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptParser.java @@ -0,0 +1,63 @@ +package at.jku.isse.ecco.adapter.typescript; + +import com.caoccao.javet.exceptions.JavetException; +import com.caoccao.javet.interop.NodeRuntime; +import com.caoccao.javet.interop.V8Host; +import com.caoccao.javet.interop.V8Runtime; +import com.caoccao.javet.utils.JavetOSUtils; +import com.caoccao.javet.values.V8Value; + +import java.io.*; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +public class TypeScriptParser { + static File codeFile; + + static { + InputStream inputStream = TypeScriptParser.class.getClassLoader().getResourceAsStream("script/parse.js"); + if (inputStream == null) { + System.out.println("Could not find resource"); + } + //Resource stream to codeFile + Path outputPath = Path.of("parse.js"); + try (OutputStream outputStream = new FileOutputStream(outputPath.toFile())) { + byte[] buffer = new byte[1024]; + int length; + while ((length = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, length); + } + codeFile = outputPath.toFile(); + } catch (IOException e) { + System.out.println("Error writing to file"); + e.printStackTrace(); + } + } + + private static final String SCRIPT_PATH = "../adapter/typescript/src/main/resources/script/parse.js"; + private static final String NODE_MODULE_PATH = "../adapter/typescript/src/main/resources/script/node_modules/typescript"; + + public HashMap parse(Path path) throws FileNotFoundException { + HashMap res; + var read = new BufferedReader(new FileReader(path.toFile())); + Path cwd = Path.of(JavetOSUtils.WORKING_DIRECTORY); + File codeFile = cwd.resolve(SCRIPT_PATH).toFile(); + var nodePath = cwd.resolve(NODE_MODULE_PATH).toString(); + var fileContent = read.lines().collect(Collectors.joining("\n")); + try (NodeRuntime v8Runtime = V8Host.getNodeInstance().createV8Runtime()) { + v8Runtime.getConverter().getConfig().setMaxDepth(1000); + v8Runtime.getGlobalObject().set("fileContent", fileContent); + v8Runtime.getGlobalObject().set("nodePath", nodePath); + try (V8Value x = v8Runtime.getExecutor(codeFile).execute()) { + res = v8Runtime.getExecutor("sf").executeObject(); + } + } catch (JavetException e) { + throw new RuntimeException(e); + } + return res; + } +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptPlugin.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptPlugin.java new file mode 100644 index 000000000..195b21fc8 --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptPlugin.java @@ -0,0 +1,36 @@ +package at.jku.isse.ecco.adapter.typescript; + +import at.jku.isse.ecco.adapter.ArtifactPlugin; +import com.google.inject.Module; + +public class TypeScriptPlugin extends ArtifactPlugin { + + private static final String[] fileTypes = new String[]{"ts"};//, "c", "h", "cpp", "hpp"}; + + private TypeScriptModule module = new TypeScriptModule(); + + public String[] getFileTypes() { + return fileTypes; + } + + @Override + public String getPluginId() { + return TypeScriptPlugin.class.getName(); + } + + @Override + public Module getModule() { + return this.module; + } + + @Override + public String getName() { + return "TypeScriptArtifactPlugin"; + } + + @Override + public String getDescription() { + return "TypeScript Artifact Plugin"; + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptReader.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptReader.java new file mode 100644 index 000000000..259fad6a3 --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptReader.java @@ -0,0 +1,277 @@ +package at.jku.isse.ecco.adapter.typescript; + +import at.jku.isse.ecco.adapter.ArtifactReader; +import at.jku.isse.ecco.adapter.dispatch.PluginArtifactData; +import at.jku.isse.ecco.adapter.typescript.data.*; +import at.jku.isse.ecco.artifact.Artifact; +import at.jku.isse.ecco.dao.EntityFactory; +import at.jku.isse.ecco.service.listener.ReadListener; +import at.jku.isse.ecco.tree.Node; +import com.google.inject.Inject; + +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; +import java.util.logging.Level; +import java.util.logging.Logger; + +import static com.google.common.base.Preconditions.checkNotNull; + +public class TypeScriptReader implements ArtifactReader> { + + private final EntityFactory entityFactory; + private static final Logger LOGGER = Logger.getLogger(TypeScriptReader.class.getName()); + + @Inject + public TypeScriptReader(EntityFactory entityFactory) { + checkNotNull(entityFactory); + + this.entityFactory = entityFactory; + } + + @Override + public String getPluginId() { + return TypeScriptPlugin.class.getName(); + } + + private static final Map prioritizedPatterns; + + static { + prioritizedPatterns = new HashMap<>(); + prioritizedPatterns.put(1, new String[]{"**.ts"}); + } + + @Override + public Map getPrioritizedPatterns() { + return Collections.unmodifiableMap(prioritizedPatterns); + } + + @Override + public Set read(Path[] input) { + return this.read(Paths.get("."), input); + } + + @SuppressWarnings("unchecked") + @Override + public Set read(Path base, Path[] input) { + Set nodes = new HashSet<>(); + for (Path path : input) { + Path resolvedPath = base.resolve(path); + Artifact.Op pluginArtifact = this.entityFactory.createArtifact(new PluginArtifactData(this.getPluginId(), path)); + Node.Op pluginNode = this.entityFactory.createOrderedNode(pluginArtifact); + nodes.add(pluginNode); + try { + HashMap br = new TypeScriptParser().parse(resolvedPath); + ArrayList> stat = (ArrayList>) br.get("statements"); + for (HashMap stringObjectHashMap : stat) { + pluginNode.addChild(makeNode(stringObjectHashMap)); + } + Map eofToken = (Map) br.get("endOfFileToken"); + String trailingComment = (String) eofToken.get("fullText"); + Artifact.Op endComment = this.entityFactory.createArtifact(new LeafArtifactData(trailingComment)); + pluginNode.addChild(this.entityFactory.createNode(endComment)); + } catch (IOException e) { + LOGGER.log(Level.SEVERE,"Problem reading parsed TypeScript : " + e.getMessage()); + throw new RuntimeException(e); + } + + } + return nodes; + } + + @SuppressWarnings("unchecked") + private Node.Op makeNode(HashMap currNode) { + Node.Op node; + String kind = (String) currNode.get("kind"); + String text, endText; + switch (kind) { + case "FirstStatement": + HashMap declarationList = (HashMap) currNode.get("declarationList"); + ArrayList> decls = (ArrayList>) declarationList.get("declarations"); + text = getLeadingText(currNode,decls.get(0)); + StringBuilder sb = new StringBuilder(text); + for (HashMap decl : decls){ + HashMap name = (HashMap) decl.get("name"); + sb.append((String) name.get("escapedText")); + } + var variable = new VariableAssignmentData(text); + variable.setId(sb.toString()); + Artifact.Op vData = this.entityFactory.createArtifact(variable); + Node.Op vNode = this.entityFactory.createNode(vData); + for (HashMap decl : decls) { + var init = (HashMap) decl.get("initializer"); + if (!init.get("kind").equals("ArrowFunction")){ + Artifact.Op line = this.entityFactory.createArtifact(new LeafArtifactData((String) decl.get("nodeText"))); + node = this.entityFactory.createOrderedNode(line); + } else { + var name = this.getLeadingText(decl,init); + var body = (HashMap) init.get("body"); + int parStart = (Integer) init.get("pos"); + int kidStart = (Integer) body.get("pos"); + var arrowParameters = ((String) init.get("fullText")).substring(0,kidStart-parStart); + Artifact.Op arrow = this.entityFactory.createArtifact(new ArrowFunctionArtifactData(name + arrowParameters)); + node = this.entityFactory.createOrderedNode(arrow); + node.addChild(makeNode(body)); + } + vNode.addChild(node); + } + node = vNode; + break; + case "PropertyDeclaration": + var init = (HashMap) currNode.get("initializer"); + if (init == null || !init.get("kind").equals("ArrowFunction")){ + Artifact.Op line = this.entityFactory.createArtifact(new LeafArtifactData((String) currNode.get("nodeText"))); + node = this.entityFactory.createOrderedNode(line); + } else { + var name = this.getLeadingText(currNode,init); + var body = (HashMap) init.get("body"); + int parStart = (Integer) init.get("pos"); + int kidStart = (Integer) body.get("pos"); + var arrowParameters = ((String) init.get("fullText")).substring(0,kidStart-parStart); + Artifact.Op arrow = this.entityFactory.createArtifact(new ArrowFunctionArtifactData(name + arrowParameters)); + node = this.entityFactory.createOrderedNode(arrow); + node.addChild(makeNode(body)); + } + break; + case "EnumDeclaration": + var eMembers = (ArrayList>) currNode.get("members"); + text = !eMembers.isEmpty() ? this.getLeadingText(currNode,eMembers.get(0)) : this.getLeadingText(currNode,null); + var enu = new EnumArtifactData(text); + Artifact.Op eData = this.entityFactory.createArtifact(enu); + Node.Op eNode = this.entityFactory.createNode(eData); + eMembers.forEach(x-> eNode.addChild(this.makeNode(x))); + var lastEnumEntry = eMembers.get(eMembers.size()-1); + endText = this.getTrailingText(currNode,lastEnumEntry); + enu.setTrailingComment(endText); + node = eNode; + break; + case "SwitchStatement": + var caseBlock = (HashMap)currNode.get("caseBlock"); + var caseClauses = (ArrayList>) caseBlock.get("clauses"); + text = !caseClauses.isEmpty() ? this.getLeadingText(currNode,caseClauses.get(0)) : this.getLeadingText(currNode,null); + var switchData = new SwitchBlockArtifactData(text); + Artifact.Op switchOp = this.entityFactory.createArtifact(switchData); + Node.Op swNode = this.entityFactory.createNode(switchOp); + caseClauses.forEach(x-> swNode.addChild(this.makeNode(x))); + var lastSwitchEntry = caseClauses.get(caseClauses.size()-1); + endText = this.getTrailingText(currNode,lastSwitchEntry); + switchData.setTrailingComment(endText); + node = swNode; + break; + case "IfStatement": + HashMap then = (HashMap) currNode.get("thenStatement"); + text = getLeadingText(currNode, then); + Artifact.Op ifArtifact = this.entityFactory.createArtifact(new IfBlockArtifactData(text)); + node = this.entityFactory.createOrderedNode(ifArtifact); + node.addChild(makeNode(then)); + HashMap elseBlock = (HashMap) currNode.get("elseStatement"); + if (elseBlock != null) node.addChild(makeNode(elseBlock)); + break; + case "CaseClause" : + case "Block": + ArrayList> stats = (ArrayList>) currNode.get("statements"); + text = !stats.isEmpty() ? getLeadingText(currNode,stats.get(0)) : getLeadingText(currNode,null); + var blockData = new BlockArtifactData(text); + Artifact.Op block = this.entityFactory.createArtifact(blockData); + Node.Op finalNode = this.entityFactory.createOrderedNode(block); + stats.forEach(x -> finalNode.addChild(this.makeNode(x))); + var lastChild = stats.get(stats.size()-1); + endText = this.getTrailingText(currNode,lastChild); + blockData.setTrailingComment(endText); + node = finalNode; + break; + case "ClassDeclaration": + ArrayList> members = (ArrayList>) currNode.get("members"); + text = !members.isEmpty() ? getLeadingText(currNode,members.get(0)) : getLeadingText(currNode,null); + Artifact.Op clazz = this.entityFactory.createArtifact(new ClassArtifactData(text)); + Node.Op finalNode1 = this.entityFactory.createOrderedNode(clazz); + members.forEach(x -> finalNode1.addChild(this.makeNode(x))); + node = finalNode1; + break; + case "MethodDeclaration","FunctionDeclaration": + HashMap body = (HashMap) currNode.get("body"); + text = getLeadingText(currNode,body); + Artifact.Op fun = this.entityFactory.createArtifact(new FunctionArtifactData(text)); + node = this.entityFactory.createOrderedNode(fun); + ArrayList> modifiers = (ArrayList>) currNode.get("modifiers"); + if (modifiers != null) { + if (modifiers.stream().anyMatch(x -> x.get("nodeText").equals("abstract"))) { + break; + } + } + node.addChild(this.makeNode(body)); + break; + case "ForStatement", "ForInStatement", "ForOfStatement", "WhileStatement" : + HashMap statement = (HashMap) currNode.get("statement"); + text = getLeadingText(currNode,statement); + Artifact.Op fLoop = this.entityFactory.createArtifact(new LoopArtifactData(text)); + node = this.entityFactory.createOrderedNode(fLoop); + node.addChild(this.makeNode(statement)); + break; + case "DoStatement" : + HashMap doStatement = (HashMap) currNode.get("statement"); + text = getLeadingText(currNode,doStatement); + endText = getTrailingText(currNode,doStatement); + Artifact.Op doLoop = this.entityFactory.createArtifact(new DoBlockArtifactData(endText)); + doLoop.getData().setTrailingComment(endText); + doLoop.getData().setLeadingText(text); + node = this.entityFactory.createOrderedNode(doLoop); + node.addChild(this.makeNode(doStatement)); + break; + default: + Artifact.Op line = this.entityFactory.createArtifact(new LeafArtifactData((String) currNode.get("nodeText"))); + node = this.entityFactory.createOrderedNode(line); + break; + } + insertTrivia(currNode, node); + return node; + } + + private String getLeadingText(Map par, Map kid) { + int parStart = (Integer) par.get("pos"); + int trivia = (Integer) par.get("triviaWidth"); + String text = (String) par.get("fullText"); + if (kid != null) { + int kidStart = (Integer) kid.get("pos"); + return text.substring(trivia, kidStart - parStart); + } else { + return text.substring(trivia); + } + } + + private String getTrailingText(Map par, Map kid){ + int parStart = (Integer) par.get("pos"); + String text = (String) par.get("fullText"); + if (kid != null) { + int kidEnd = (Integer) kid.get("end"); + return text.substring(kidEnd - parStart); + } else { + return ""; + } + } + + private void insertTrivia(Map curr, Node node) { + var triviaWidth = (Integer) curr.get("triviaWidth"); + if (triviaWidth != null && triviaWidth > 0) { + String ft = (String) curr.get("fullText"); + String trivia = ft.substring(0, triviaWidth); + AbstractArtifactData data = (AbstractArtifactData) node.getArtifact().getData(); + data.setLeadingComment(trivia); + } + } + + + private final Collection listeners = new ArrayList<>(); + + @Override + public void addListener(ReadListener listener) { + this.listeners.add(listener); + } + + @Override + public void removeListener(ReadListener listener) { + this.listeners.remove(listener); + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptWriter.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptWriter.java new file mode 100644 index 000000000..942965eb5 --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/TypeScriptWriter.java @@ -0,0 +1,126 @@ +package at.jku.isse.ecco.adapter.typescript; + +import at.jku.isse.ecco.adapter.ArtifactWriter; +import at.jku.isse.ecco.adapter.dispatch.PluginArtifactData; +import at.jku.isse.ecco.adapter.typescript.data.*; +import at.jku.isse.ecco.service.listener.WriteListener; +import at.jku.isse.ecco.tree.Node; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.*; +import java.util.logging.Logger; + + +public class TypeScriptWriter implements ArtifactWriter, Path> { + + private static final Logger LOGGER = Logger.getLogger(TypeScriptWriter.class.getName()); + + @Override + public String getPluginId() { + return TypeScriptPlugin.class.getName(); + } + + @Override + public Path[] write(Set input) { + return new Path[0]; + } + + + @Override + public Path[] write(Path base, Set input) { + + List output = new ArrayList<>(); + + for (Node fileNode : input) { + StringBuilder sb = new StringBuilder(); + PluginArtifactData rootData = (PluginArtifactData) fileNode.getArtifact().getData(); + for (Node lineNode : fileNode.getChildren()) { + writeNodes(sb, lineNode); + } + try (BufferedWriter writer = Files.newBufferedWriter(base.resolve(((PluginArtifactData) fileNode.getArtifact().getData()).getFileName()), StandardCharsets.UTF_8)) { + writer.write(sb.toString()); + } catch (IOException x) { + LOGGER.severe("IOException: " + x); + } + output.add(base.resolve(rootData.getPath())); + } + return output.toArray(new Path[0]); + } + + private void writeNodes(StringBuilder sb, Node node) { + AbstractArtifactData data = (AbstractArtifactData) node.getArtifact().getData(); + sb.append(data.getLeadingComment()); + if (Objects.requireNonNull(data) instanceof BlockArtifactData b) { + sb.append(b); + node.getChildren().forEach(x -> writeNodes(sb, x)); + sb.append(b.getTrailingComment()); + } else if (data instanceof ArrowFunctionArtifactData a) { + sb.append(a); + node.getChildren().forEach(x -> writeNodes(sb, x)); + } else if (data instanceof VariableAssignmentData v) { + sb.append(v); + sb.append(" "); + node.getChildren().forEach(x -> { + writeNodes(sb, x); + sb.append(","); + }); + sb.setLength(sb.length() - 1); + sb.append(v.getTrailingComment()); + } else if (data instanceof EnumArtifactData e) { + sb.append(e); + node.getChildren().forEach(x -> { + writeNodes(sb, x); + sb.append(","); + }); + sb.setLength(sb.length() - 1); + sb.append(e.getTrailingComment()); + } else if (data instanceof SwitchBlockArtifactData sw) { + sb.append(sw); + node.getChildren().forEach(x -> writeNodes(sb, x)); + sb.append(sw.getTrailingComment()); + } else if (data instanceof IfBlockArtifactData i) { + sb.append(i.getBlock()); + writeNodes(sb, node.getChildren().get(0)); + if (node.getChildren().size() > 1) { + sb.append(" else"); + writeNodes(sb, node.getChildren().get(1)); + } + } else if (data instanceof LoopArtifactData l) { + sb.append(l); + node.getChildren().forEach(x -> writeNodes(sb, x)); + } else if (data instanceof LeafArtifactData l) { + sb.append(l.getLine()); + } else if (data instanceof ClassArtifactData c) { + sb.append(c.getClassDecl()); + node.getChildren().forEach(x -> writeNodes(sb, x)); + sb.append("\n}"); + } else if (data instanceof DoBlockArtifactData d) { + sb.append(d.getLeadingText()); + node.getChildren().forEach(x -> writeNodes(sb, x)); + sb.append(d.getTrailingComment()); + } else if (data instanceof FunctionArtifactData f) { + sb.append(f.getSignature()); + node.getChildren().forEach(x -> writeNodes(sb, x)); + } else { + throw new IllegalStateException("Unexpected value: " + node.getArtifact().getData().getClass()); + } + } + + + private Collection listeners = new ArrayList<>(); + + @Override + public void addListener(WriteListener listener) { + this.listeners.add(listener); + } + + @Override + public void removeListener(WriteListener listener) { + this.listeners.remove(listener); + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/AbstractArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/AbstractArtifactData.java new file mode 100644 index 000000000..c5aeae27b --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/AbstractArtifactData.java @@ -0,0 +1,36 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import at.jku.isse.ecco.artifact.ArtifactData; + +import java.util.Objects; + +public class AbstractArtifactData implements ArtifactData { + + private String leadingComment = ""; + private String leadingText = ""; + private String trailingComment = ""; + + public String getLeadingComment() { + return leadingComment; + } + + public void setLeadingComment(String leadingComment) { + this.leadingComment = leadingComment; + } + + public String getTrailingComment() { + return trailingComment; + } + + public void setTrailingComment(String trailingComment) { + this.trailingComment = trailingComment; + } + + public String getLeadingText() { + return leadingText; + } + + public void setLeadingText(String leadingText) { + this.leadingText = leadingText; + } +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/ArrowFunctionArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/ArrowFunctionArtifactData.java new file mode 100644 index 000000000..a3fa6f9a3 --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/ArrowFunctionArtifactData.java @@ -0,0 +1,37 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import java.util.Objects; + +public class ArrowFunctionArtifactData extends AbstractArtifactData { + + private final String nameAndParams; + + public ArrowFunctionArtifactData(String block) { + this.nameAndParams = block; + } + + @Override + public String toString() { + return this.nameAndParams; + } + + @Override + public int hashCode() { + return Objects.hash(this.nameAndParams); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ArrowFunctionArtifactData other = (ArrowFunctionArtifactData) obj; + if (nameAndParams == null) { + return other.nameAndParams == null; + } else return nameAndParams.equals(other.nameAndParams); + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/BlockArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/BlockArtifactData.java new file mode 100644 index 000000000..e44f5641e --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/BlockArtifactData.java @@ -0,0 +1,39 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import java.util.Objects; + +public class BlockArtifactData extends AbstractArtifactData { + + private final String block; + + + public BlockArtifactData(String block) { + this.block = block; + } + + + @Override + public String toString() { + return this.block; + } + + @Override + public int hashCode() { + return Objects.hash(this.block); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + BlockArtifactData other = (BlockArtifactData) obj; + if (block == null) { + return other.block == null; + } else return block.equals(other.block); + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/CaseClauseArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/CaseClauseArtifactData.java new file mode 100644 index 000000000..8d4dfe496 --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/CaseClauseArtifactData.java @@ -0,0 +1,44 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import java.util.Objects; + +public class CaseClauseArtifactData extends AbstractArtifactData { + + private final String caseClause; + + + public CaseClauseArtifactData(String caseClause) { + this.caseClause = caseClause; + } + + + public String getCaseClause() { + return this.caseClause; + } + + + @Override + public String toString() { + return this.caseClause; + } + + @Override + public int hashCode() { + return Objects.hash(this.caseClause); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + CaseClauseArtifactData other = (CaseClauseArtifactData) obj; + if (caseClause == null) { + return other.caseClause == null; + } else return caseClause.equals(other.caseClause); + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/ClassArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/ClassArtifactData.java new file mode 100644 index 000000000..e88d16faf --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/ClassArtifactData.java @@ -0,0 +1,42 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import java.util.Objects; + +public class ClassArtifactData extends AbstractArtifactData { + + private final String classDecl; + + + public ClassArtifactData(String block) { + this.classDecl = block; + } + + public String getClassDecl() { + return this.classDecl; + } + + @Override + public String toString() { + return this.classDecl; + } + + @Override + public int hashCode() { + return Objects.hash(this.classDecl); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ClassArtifactData other = (ClassArtifactData) obj; + if (classDecl == null) { + return other.classDecl == null; + } else return classDecl.equals(other.classDecl); + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/DoBlockArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/DoBlockArtifactData.java new file mode 100644 index 000000000..b1e3dd52c --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/DoBlockArtifactData.java @@ -0,0 +1,50 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import at.jku.isse.ecco.artifact.ArtifactData; + +import java.util.Objects; + +public class DoBlockArtifactData extends AbstractArtifactData { + + private String doblock; + + public DoBlockArtifactData(String doblock) { + this.doblock = doblock; + } + + public void setDoBlock(String doblock) { + this.doblock = doblock; + } + + public String getDoBlock() { + return this.doblock; + } + + @Override + public String toString() { + return this.doblock; + } + + @Override + public int hashCode() { + return Objects.hash(this.doblock); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + DoBlockArtifactData other = (DoBlockArtifactData) obj; + if (doblock == null) { + if (other.doblock != null) + return false; + } else if (!doblock.equals(other.doblock)) + return false; + return true; + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/EnumArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/EnumArtifactData.java new file mode 100644 index 000000000..636acb19e --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/EnumArtifactData.java @@ -0,0 +1,39 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import java.util.Objects; + +public class EnumArtifactData extends AbstractArtifactData { + + private final String enumName; + + + public EnumArtifactData(String block) { + this.enumName = block; + } + + + @Override + public String toString() { + return this.enumName; + } + + @Override + public int hashCode() { + return Objects.hash(this.enumName); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + EnumArtifactData other = (EnumArtifactData) obj; + if (enumName == null) { + return other.enumName == null; + } else return enumName.equals(other.enumName); + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/FieldArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/FieldArtifactData.java new file mode 100644 index 000000000..db7284108 --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/FieldArtifactData.java @@ -0,0 +1,50 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import at.jku.isse.ecco.artifact.ArtifactData; + +import java.util.Objects; + +public class FieldArtifactData implements ArtifactData { + + private String field; + + public FieldArtifactData(String field) { + this.field = field; + } + + public void setField(String field) { + this.field = field; + } + + public String getField() { + return this.field; + } + + @Override + public String toString() { + return this.field; + } + + @Override + public int hashCode() { + return Objects.hash(this.field); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + FieldArtifactData other = (FieldArtifactData) obj; + if (field == null) { + if (other.field != null) + return false; + } else if (!field.equals(other.field)) + return false; + return true; + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/FunctionArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/FunctionArtifactData.java new file mode 100644 index 000000000..4ae7638f4 --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/FunctionArtifactData.java @@ -0,0 +1,50 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import at.jku.isse.ecco.artifact.ArtifactData; + +import java.util.Objects; + +public class FunctionArtifactData extends AbstractArtifactData { + + private String signature; + + public FunctionArtifactData(String signature) { + this.signature = signature; + } + + public String getSignature() { + return signature; + } + + public void setSignature(String signature) { + this.signature = signature; + } + + @Override + public String toString() { + return this.signature; + } + + @Override + public int hashCode() { + return Objects.hash(this.signature); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + FunctionArtifactData other = (FunctionArtifactData) obj; + if (signature == null) { + if (other.signature != null) + return false; + } else if (!signature.equals(other.signature)) + return false; + return true; + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/IfBlockArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/IfBlockArtifactData.java new file mode 100644 index 000000000..7d41c8aed --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/IfBlockArtifactData.java @@ -0,0 +1,46 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import at.jku.isse.ecco.artifact.ArtifactData; + +import java.util.Objects; + +public class IfBlockArtifactData extends AbstractArtifactData { + + private final String block; + + public IfBlockArtifactData(String block) { + this.block = block; + } + + public String getBlock() { + return this.block; + } + + @Override + public String toString() { + return this.block; + } + + @Override + public int hashCode() { + return Objects.hash(this.block); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + IfBlockArtifactData other = (IfBlockArtifactData) obj; + if (block == null) { + if (other.block != null) + return false; + } else if (!block.equals(other.block)) + return false; + return true; + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/IncludeArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/IncludeArtifactData.java new file mode 100644 index 000000000..01a8d7ca0 --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/IncludeArtifactData.java @@ -0,0 +1,50 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import at.jku.isse.ecco.artifact.ArtifactData; + +import java.util.Objects; + +public class IncludeArtifactData implements ArtifactData { + + private String includeName; + + public IncludeArtifactData(String importName) { + this.includeName = importName; + } + + public void setImportName(String importName) { + this.includeName = importName; + } + + public String getImportName() { + return this.includeName; + } + + @Override + public String toString() { + return this.includeName; + } + + @Override + public int hashCode() { + return Objects.hash(this.includeName); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + IncludeArtifactData other = (IncludeArtifactData) obj; + if (includeName == null) { + if (other.includeName != null) + return false; + } else if (!includeName.equals(other.includeName)) + return false; + return true; + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/LeafArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/LeafArtifactData.java new file mode 100644 index 000000000..c4544c6ce --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/LeafArtifactData.java @@ -0,0 +1,46 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import at.jku.isse.ecco.artifact.ArtifactData; + +import java.util.Objects; + +public class LeafArtifactData extends AbstractArtifactData { + + private String line; + + public LeafArtifactData(String line) { + this.line = line; + } + + public String getLine() { + return this.line; + } + + @Override + public String toString() { + return this.line; + } + + @Override + public int hashCode() { + return Objects.hash(this.line); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + LeafArtifactData other = (LeafArtifactData) obj; + if (line == null) { + if (other.line != null) + return false; + } else if (!line.equals(other.line)) + return false; + return true; + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/LoopArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/LoopArtifactData.java new file mode 100644 index 000000000..9e3c97ead --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/LoopArtifactData.java @@ -0,0 +1,40 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import java.util.Objects; + +public class LoopArtifactData extends AbstractArtifactData { + + private final String loopBlock; + + public LoopArtifactData(String loopHead) { + this.loopBlock = loopHead; + } + + @Override + public String toString() { + return this.loopBlock; + } + + @Override + public int hashCode() { + return Objects.hash(this.loopBlock); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + LoopArtifactData other = (LoopArtifactData) obj; + if (loopBlock == null) { + if (other.loopBlock != null) + return false; + } else if (!loopBlock.equals(other.loopBlock)) + return false; + return true; + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/SwitchBlockArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/SwitchBlockArtifactData.java new file mode 100644 index 000000000..8a7882fb3 --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/SwitchBlockArtifactData.java @@ -0,0 +1,50 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import at.jku.isse.ecco.artifact.ArtifactData; + +import java.util.Objects; + +public class SwitchBlockArtifactData extends AbstractArtifactData { + + private String switchblock; + + public SwitchBlockArtifactData(String switchblock) { + this.switchblock = switchblock; + } + + public void setSwitchBlock(String switchblock) { + this.switchblock = switchblock; + } + + public String getSwitchBlock() { + return this.switchblock; + } + + @Override + public String toString() { + return this.switchblock; + } + + @Override + public int hashCode() { + return Objects.hash(this.switchblock); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + SwitchBlockArtifactData other = (SwitchBlockArtifactData) obj; + if (switchblock == null) { + if (other.switchblock != null) + return false; + } else if (!switchblock.equals(other.switchblock)) + return false; + return true; + } + +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/VariableAssignmentData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/VariableAssignmentData.java new file mode 100644 index 000000000..5d5267df6 --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/VariableAssignmentData.java @@ -0,0 +1,49 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import at.jku.isse.ecco.artifact.ArtifactData; + +import java.util.Objects; + +public class VariableAssignmentData extends AbstractArtifactData { + private String id, leadingText; + + public VariableAssignmentData(String name) { + this.leadingText = name; + } + + public String getId() { + return id; + } + + public void setId(String name) { + this.id = name; + } + + public String getLeadingText() { + return leadingText; + } + + @Override + public String toString() { + return this.getLeadingText(); + } + + @Override + public int hashCode() { + return Objects.hash(this.id); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + VariableAssignmentData other = (VariableAssignmentData) obj; + if (id == null) { + return other.id == null; + } else return id.equals(other.id); + } +} diff --git a/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/WhileBlockArtifactData.java b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/WhileBlockArtifactData.java new file mode 100644 index 000000000..80eff029f --- /dev/null +++ b/adapter/typescript/src/main/java/at/jku/isse/ecco/adapter/typescript/data/WhileBlockArtifactData.java @@ -0,0 +1,50 @@ +package at.jku.isse.ecco.adapter.typescript.data; + +import at.jku.isse.ecco.artifact.ArtifactData; + +import java.util.Objects; + +public class WhileBlockArtifactData implements ArtifactData { + + private String whileblock; + + public WhileBlockArtifactData(String whileblock) { + this.whileblock = whileblock; + } + + public void setWhileBlock(String whileblock) { + this.whileblock = whileblock; + } + + public String getWhileBlock() { + return this.whileblock; + } + + @Override + public String toString() { + return this.whileblock; + } + + @Override + public int hashCode() { + return Objects.hash(this.whileblock); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + WhileBlockArtifactData other = (WhileBlockArtifactData) obj; + if (whileblock == null) { + if (other.whileblock != null) + return false; + } else if (!whileblock.equals(other.whileblock)) + return false; + return true; + } + +} diff --git a/adapter/typescript/src/main/resources/META-INF/services/at.jku.isse.ecco.adapter.ArtifactPlugin b/adapter/typescript/src/main/resources/META-INF/services/at.jku.isse.ecco.adapter.ArtifactPlugin new file mode 100644 index 000000000..e960200ba --- /dev/null +++ b/adapter/typescript/src/main/resources/META-INF/services/at.jku.isse.ecco.adapter.ArtifactPlugin @@ -0,0 +1 @@ +at.jku.isse.ecco.adapter.typescript.TypeScriptPlugin \ No newline at end of file diff --git a/adapter/typescript/src/main/resources/script/package.json b/adapter/typescript/src/main/resources/script/package.json new file mode 100644 index 000000000..e54307db5 --- /dev/null +++ b/adapter/typescript/src/main/resources/script/package.json @@ -0,0 +1,14 @@ +{ + "name": "ts-adapter", + "version": "1.0.0", + "description": "", + "main": "parse.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "bcf", + "license": "ISC", + "dependencies": { + "typescript": "^5.2.2" + } +} diff --git a/adapter/typescript/src/main/resources/script/parse.js b/adapter/typescript/src/main/resources/script/parse.js new file mode 100644 index 000000000..f6010517c --- /dev/null +++ b/adapter/typescript/src/main/resources/script/parse.js @@ -0,0 +1,14 @@ +const ts = require(nodePath); +const sf = ts.createSourceFile('sf',fileContent,ts.ScriptTarget.Latest); +const generateAst = (node, sourceFile) => { + // map the kind of node from integer to a string. + const syntaxKind = ts.SyntaxKind[node.kind]; + node.nodeText = node.getText(sourceFile); + node.start = node.getStart(sourceFile); + node.fullText = node.getFullText(sourceFile); + // leading trivia refers to white space and comments. Trivia is associated with the node that's following + node.triviaWidth = node.getLeadingTriviaWidth(sourceFile); + node.forEachChild((child) => generateAst(child, sourceFile)); + node.kind = syntaxKind; +}; +(() => generateAst(sf, sf))(); \ No newline at end of file diff --git a/examples/image_variants/V1_purpleshirt/.config b/examples/image_variants/V1_purpleshirt/.config index e9d2249fd..2b6e57a88 100644 --- a/examples/image_variants/V1_purpleshirt/.config +++ b/examples/image_variants/V1_purpleshirt/.config @@ -1 +1 @@ -person.1, purpleshirt.1 +person.1, purpleshirt.1 \ No newline at end of file diff --git a/examples/typescript_variants/AoC1/step1/.config b/examples/typescript_variants/AoC1/step1/.config new file mode 100644 index 000000000..e5092b429 --- /dev/null +++ b/examples/typescript_variants/AoC1/step1/.config @@ -0,0 +1 @@ +input.1 \ No newline at end of file diff --git a/examples/typescript_variants/AoC1/step1/input.txt b/examples/typescript_variants/AoC1/step1/input.txt new file mode 100644 index 000000000..9569e81f4 --- /dev/null +++ b/examples/typescript_variants/AoC1/step1/input.txt @@ -0,0 +1,1000 @@ +2xjzgsjzfhzhm1 +qhklfjd39rpjxhqtftwopfvrrj2eight +95btwo +lfsqldnf3onenplgfxdjzjjnpzfxnineseven +five7fouronesevenpfsrmszpc +xcsfkjqvln2tpm +ncjtcdb625two9 +6srtj3gfghkdtmfzseven +three4fournineone +pcpsxmkhdgsix25six6ngzsqzdcrb +1sixdzhbjvnvgcxmsrlkb9xbjk7t2 +dsxnfkjn2vtwofivethree2 +qfbp2tpgvsxm +kvbhsseven2rkbllhrhvsevenfour2vf +bqbtzbtt3 +ninek6 +3fivebvqhvhlvz +two68jxfnqlzfkninenine8 +vhckhhhb2sixtftjtdjf2nine +4jc +3sevenxlxfnpk +5sjfive +c8bvlkdq283rqfftj +8eight1threehhvmnlft +4sixmfcronelzcpnfourlgdbkgt +hntcjmppp9fmntwokx2 +24mkgr6mx9n4 +cksfkrdmdcmnbmkgk3two4 +twosixthreefivelq3nine +njmrtr6fmldninevcbtxr42 +eightfrdrczdxrcrfxh6 +8sevenonefmfqhtx8lk +lnoneight8twodg +tszrcb7tvvhfive4 +nknphprtv67fivehqlfournine2jk +9eightszgdhftggrktkzbsmnhtwonekh +1onefzkgf2two417 +77fivepsmmpp +bnine7vmttgmdskc +6tnsixclbvkhmsp +ggreightwo1mnsbzmxsdcdrhhg5one +ninetwo6qtbklgb2 +four8fmfxmr +threetxfrsevenvfdgrtsixtwofsq7 +hqxlseven53 +vxqq24eight6 +7psxpgxmkpzkzeight3 +9four7 +stwoone4eightwoj +one38 +9cjlrgrgpfjeighteightdcpjhzbjqcdthree +rqfone2 +dvkxhvkgxcfivescjcnqqnnine2tthreecptkgxmzjsbzdrhk +5lhprmg8two7two3 +5lvtg5sevennine2zrrmghf4seven +fourfive97sevensevensixcsffnlcbtjk +onesixoneninesixnbkf5xpsgsmpvdsdsqdvpjjzp +nineb321mgkpqjqjqh +seven2cstttkvkmpssflkxjmbnvthreefour +six1bmcjbhdgqm6kgzsxbgdqnjqf3four6 +zchkfjxsllkncz175 +vsveightwo8 +fourbtrnfdp2four5 +13dtf8769 +6qfvvdqdrtstwothree4seven8vszpseven +7rgzpxfbczk1fivetwo4two9nine +3sksmfxn +16ninetwonqqmptq +9five4fckzssxsvpzbvlktjzcninethree +3threel889bvbcgvl +threetzzjntxlsd2klrjfnbg87 +3two3qrrdbkbk +29oneightt +7mkpfchstjt7mshqht4fivesix +tvmqndvsix875nine8 +vg7477ninecpnrvnine7 +seveneightmknlqjlstx4zjjrpbhjhnnc8 +8qklthreetwo7tlmrfzvtwo7zvccc +6one1dpstqpmfbhst +sixfourfourseven6rzdkfour +6eighttbltmntb8 +seven72cqslvzpgj +jpvrsgfhtwo5nfc1cgxdrdrbfnseven +four1ninezlhqxtsgfzsevenhspvmxrtztzgtmseven5 +foursixzjvgjgsevensvkd5 +seven121fivefgxhdfive +twoh8 +ghhtttxqgr95 +zkpklcjbjlr2 +nine2mtrdcbrbntrdqninevbkbfg35lnpx +nineninesix68pcvsdnns +rf16one7 +seven276 +sixseven1 +qjxseven9six +7c9xvhgmpf41 +dlzpvdpxseven9nine +mlmlqrpn4twofivesbmhdbcsixtwo +ld74txfzksr5qconenine +six7djcdrtk7chktrh88 +2seven7jtrbhznt +1eighthnhchsevenfive +qdhscpeight8 +12gnxzzm +k7fourmhcfkggt8919np +8zljspvnmlx6four +36twofivethreeptbdrfqzbz7qbjm +bxkbjbzgone3ldhlnhxfcf7btkktspxrtqkxqfdmlqgqvgclb +sevenfourmdrxseven2z2fiveone +8bbprzqrqn +twofivethree95mpqclhfkzlsix +gpfjflrkc96tmsix6dxjnfive +qzeight6 +five5zlthgqjntwotqmnnsd +eight6nbpvfour4kzkvbzrxcmkh +fdkrxdckqbpsklz64fourones8 +5qpldkhltl +27xldkbqbnmrrbqkhmksvk +pjoneightknpcgkkv7cbknrhfdmtdm8 +432xsixvvktflzxone +35fouronemzzszfqppllgchsjjnine +qgcnzcbvsxbtn6lthreenineone +two2fourkdgbfb +fzkmbtvnvj5bzfgvxv3nineknpqzznzmf +9mkqtmlnpzt282dgkmvlsonefourthree +mcqhpkhonethreeninesevenfdsggqnlfcnrft3frqzkscft +847 +gsxvvr6tghfbxxghgv6lplf +fqzgkxkbmkpbhpvpdprmlhsngc5 +qeightwo2threecrjjtv9fourbthree +2eightdcbgfdqzk +fourtwothree5tdzpzfxkpjmlkzzrf +seven633 +8mldn +eightmg7dvjzbngkxmnxdctjtdffive97zpjrjqvp +sixfournineone38eighteight +8mngs412 +3fivefourtwo7five +7sevenjfkcf7rvone8xjdvsc +tljcrzngfdsqctfour6hsnljsxrqdzd +csix7hnkhds4four67 +3cxrlqcnseven4twox3 +rtwonerxcnpqdnzksvzmmndcjlzq2nine6ntfzjdqnrjeight +zbqgrvvvblggbghtfx98 +three2zcpspgtq77vqtgpcxkvq8 +94zksixnvbxrllxln +1eightrctknxkmv9jtwoeight +2onenine5eight58 +four2five +6fourfiveeight +pbfourlzdl4 +4onejrltvhxprhlzctrqzbz5fourseven6 +hlsdjlleightdcmdj8jdg +eightbfkgvbxxm6 +sixseven9hmhchsmqhhtrdftcfivetz +mq4five2fsdhzn +ceight3mncgnineeight8dkqrjjtmc +onefour7eightsix +seven4fqsjk38fhbmn9fgzzcc +9cmb5ninenjsppthpnine5 +qghtvpsqpxptoneljvstwo8lpqcbgtqvjmpq +onelq85dlqpx8 +1threetzsxqtndvhqn +lqdvkonebqjqj9 +3six6 +9two9sixeight776 +scrrprfkblkplgqzzqb2 +18vcrhxb4b +three8nine +1khkncj8fivefourthree2 +ninetwo8tbbsfmkqtt51five +66one88 +ninempgbhpm6seven34 +eightthreetwo4threetwo +vvpqkdonesevendvfrgmhhlsix91threethree +vbskcncpjxtdhqlcone6kgqpz +54lmnnqsrm73 +5mqnmvcbqnz82ninethree +47teightthreehrhtdndrk +fft2foursrdhxkzfourv +tbeight48759eight9twonenl +3sfkvkmvbbm9four9cbjzgllfl +sixqhxeightone7tlsd +22zmllbhcptwo +dqxdjrkmnvkbsxc3ztbseven +oneeight6dcphmnrfltfour +mgxzcfsevenfour4six +sixb8six34gqjtlcq +fiveseventhreexfblvxgkplvbrgpfive1onesix +one3mgqphj5 +7fpzxmmxgnb5 +jbshclzone3oneseven117dkzzdxdd +56five1 +jeightwo1ninemxtvgl717pbv1mqs +3six36 +35mlzjsgxxtg +hmmjgonehjqdcqkh1gskjrmfour7 +eightfiverqbb3 +sixtdkfbglhbjbvthreejsd8tglkrsfktcjt +1eight2mgxrgbbb3 +zzqxvtthreepf3eighttwoonefive +vjnxhl4threetwokj +oneqddgbbqtzsonenxkeightvx7 +nine24 +ftwone2 +53twonehx +two7three4fourhbgninenkvxjjsz +7five62ninefour +53nine7lqthree4 +1six1jn +five5drcjvbgdxzonefourfjdkfive +6onecfninesqfdtxmdhmfvlhbsjv9eight +5dqmfmqbdfdjvpl +qxkqfjshdone2zrmdsts +1qrvnf8zvfour +dht2 +4twoqdrshn87vxldzvnkn1five +4nineh +zctqdcfbseven6three58lzscrpsbb2 +fzmndhssmm3jdzlfourshjkmjkv53gvssnvzsz +five2qkxtfkj3sixshpnzdcjhlcmksnv +bskcmljnq69 +psxkxqztb3xsctsk6qvldjdzzqmgqcxncx2btqxh +onetwosixttghndtzx8 +8twocmnfmslsheighthtxsgjddm +fnvkqndfqmhgscnvq31kvvftxbzhtgzxqtngvqseven +7sevenkhhvtvsbrvcvm8zksvgcfrkgfourtzjvpqstckmmlzz +7hkfiveeightpjhone +8zptwoonemrninefive3spxrlhr +3qvjknqcnngpkninecgsbp3sevenfnpvrcltj +qztwo8678 +bxkj959dntcpzv +4one4 +lstwone347nine +ff79krfbjttqp4seven1 +gjtlbgxdqt7eightsix +8fivefour82threetwo +1zjxthree4 +szgx6fivefour12 +557dspnfzhmlh +5hnfour +847zzkrtjlb +82six +xlnhrcksv3fourzl +2ninetwo8ninelhnsbseven9 +ccseightwo8fiveonetwo5onegkhlg +eightp2onegrmfsnine5one +4five9xnmlldfive +five636 +fivesix29 +34dsbtmlhgggzkqxs7 +twothreesmgjch93mcdndsn +cmnmtzjnmtggseven1tjsshnktffive72 +7xcbpsix6m +7fourthree +7cxnzthree +5eightthree3lpvlfk +4rdnp +one6gmpjfouronettbbjdqsxn +6xtcv +dpspd1cb2onegxsgdtcsix +1eightpseven +ntczqmrclm2 +six7nineeight1 +qrndlfour9bhbmlgj6 +52vhnxvngjjkzt +nine8six +3seventhreesixfpmpbjninesix +seightwoseven4sevenppdnk7 +lnxeightbhxfmdrxcbjzx9sixnine +8ptdmjrd21zrnt1one +one1dmbfournine2 +25five748 +266eightwom +zxfxjn32threelxmqnlcvnknzbn3 +lqmjm2onezseven +sphlhbbz14sixtwosix +sixr9llqxb4 +tnnhlmsix314mqvdlxfour4 +threenjxgtthreethreeeight14one +1fivetwo +hhhtkpvhvg8 +31cslxxzgbktjtwotrzs1one +twoseven9 +4fivenine9332 +six35nineeightwok +nine9fpxgqjrftwovhldfflqthree +434four5threetpcs +ql52kzzgnsgll +onex5145 +gsppnkx1 +22six +zjbbqnbhsdfourmk19sixone +six3onesevensixvnsixone7 +seventhreefive8 +four62four7eightseventwo +2three5jtzmtxhqxhsixxlkmptshb +five3lklnccst1dstgvnprktgcnseven +sevenfour52 +hfxkkbcfpcgzfqsv1three68three +lnqrcdpglf2ksqddhp +13onenbmqvpqsbbf +1bfive +1dmnlscgvfdqrf +bvtwonettkzzxpb4 +5two2t7 +t7djkh +63t86nlhfgqgnrghqone1 +one89eightlmztkcjjnonefive +7twosjmcrlcfqr29lfkrjz +1nine5four +xxjbmsvfxb8 +nxvrvcqkbseven99rbzbdp641 +56fdpx +skszhkqdtonesixth5eight +ninetwo8jqbtwokbhzvv4fiveoneightxb +1threemfcblxjljdtone +fsfgncxvcmszn2pzspkkgqvfxlnbzgjr1 +rrxhnslrkeightgcsbcgdbkplzxbmmlxsn5sfp66 +foureight3 +5rplrmrjtjcfnct9sixfourzptmffrpthree +mld6ztzninesixfour4 +twohbbxmthljpkqthtcgtt8 +ltvgmqgsix89 +6khclqhcvdz24eightseven +6prb +nhsjqtnk6bqzhzvldlcgsmkq1twobfqzm +tfivehmdtxqlsevenzxt1ckjbnttgqctwo4 +ghnjjmtlvfive9znltjfskfnl3vdcjkvqcdplvdmckmfgxq +ztvvbbjx3 +6jhsrszlpsh +4fhtrctvrgmfhdjqvqp8sixnnftggrzlgs2 +bvlqxnjbbjgtfpslpspvpl7jsjlrdfiveeight88 +fsvcxvlc74sevenltx37sevenlbq +fourfivetgkqz5cgj4 +cnrjtfvht74nptvh +oneldnoneone745dhvqnvmlfj +2trhmdcpnreight +dshghlkjzh1kv +threexzkssrxlzzpxsjzbbtthree7 +eightdsqrdllssxv7sevendttwo3three +stz6five9four +jfbfgvfgmvlhjv94 +rcncncfcqsevenjdrtctbbsznpct48cbbxseven +ninevjxzk2two +1qgdcpslvqhjzbgtsbnzcd +kmlzbndds8fivegfdgpfivetwo63 +66mkeightnine1rvfnine4 +nine82 +58ntpkdssixnntjlgfkxq +2jxqttctsxthreepnxsfive +fivekvfkqpc28foursixptgbpfm6 +6twofourslqbzlcsmf +five4vmdl +thx5six +5hfnsqhvcfgckcseven3jgdtkkv +seven6eight65five99 +hplrgdqrjtonesevenseven4z65eight +khkts8hcsfvhvqjv9eightnine48 +pqxztthreeninelxhcxkjclk2 +sixrmfpj6nine4zx +9xtvxkxpjv9 +cmtggbrckmmzffncttxsevenhphmhfgjsr85 +83s4 +26fivefivethreemstzpncmhfm +87eightfourgvmmfbknineone +bdxg2zszhcgtvtseventhmbvfive +zeight8 +eight78dcnq4jtz +67csrthree +3vqxtwonerts +1five3 +sevensixfournineksxkz9bkbgcrjjjhnineeight +8seven29 +9394 +pkqxvl9vbjmqblrksjqcshpzpfrfouroneeightnine +heightwolgpplrbnhrgdkrk25crttkkzkbt +6659eighttwoone +55lzqzng2dmtpq45 +512gpmqpsqfive9eight +eightsnxz58zrbh8fiveeight +six893ninerrxzj +twoflrzzcgninefqqlmmzzqgnjrcxcfour5ninetlcmc +tmfkbgcssdcmkthmx1seven +6three9fourmdpzj +mgprpn68 +xssxrtpntlkppxp958rzd2nine8 +fx15twoeighttfjlcglnbptwo66 +threeseven522 +xrjpstjr2 +6eight1742oneighthhj +1ddfkgjrxfzrhnxtnvfqxdv4 +8hlcxdpkrnrgfzmsschlhcbndkcvdszgqntl +five154sixfourqgffh +5rsvtzgrvq1slrlgqksone6lns +92sevenk3xfrvgddsthree4 +rctlcz67 +2nmrbhnzpf7 +bjmssix1sevenfour4 +744ninefivefivejjcnpgrqxtrctwo +r4five4 +16two2 +threefn8 +3gmsrqtjm +one8tmlnlqvgfone5fivefive +1spllmone9three1xsssk5 +6rlqqblbrxh8 +41qqccnsevengbbrpgcqggtlhtzqcfqzhtx +hzfivethreenine2 +sixeightvcm4lngvkdlpz6dstz +twoeight34tv1 +tgqc6fqsftwoninexncjnrtcgcbrxdmnine +8one27ninerjt3seven +1sjvxlzszhhsix +2xxmpjsfbr +7eight5eight5bzgdpkkpgrn +twozcrxdsix1lrxltrhvznine7twoone +8qlfive8nlmthree39 +4five5five7671 +4fiveqtrngqtbpd74 +vbccfjhjndeight1h +8kfzchkdvfgvlhqzfgseven +6ninexrxsvlmmzrsevenjhzzggfcxqrvfjtnjctveight9 +6fourfourfourxgrgqklnpcsjbsqvhnkjfcjdhdf +65fpnfszb3 +srnhthmpseven1four3rrpznf +vgmqr9zttpdrzjfiveninesevendfive +fournthreesevenseven72seven +9594 +twolhvpfzbfsfourrrcpzzshd66grxddrmkvthree +seven5twotwolpsqlbcqpthree +29eightzjgsfmll +gtkrjrsevenfbjcpjlsmqsfceightseven9 +qkbntcjvfl6three9qhpcptvpkfour7b +gvkhmrljmhrpj956bzxhkljpvpxltctjvvpfjtsnb +rcqlnpcmng6l5vfkpddeightsevenfhmxzztndq +sptdrlsfxpsxff4five +lrzhhxdrkdtbdjbsfourthreemmjjnn1 +9sxthreethree +six9fourseven4 +dpone9fshbbpcm8 +twoczqzvqkcnine6eight +qbtkgxp1fourdz +dxrrsdbmtpnl6hfdtj +sixsvtwo8 +5fxdkhbgqm8fouronefive5 +jqj6lhtbjt +6pdgrsdxghfkhptbjcrrjcsevenbksvmzvnninercz +8rzqvh6ntlg2bfktcphztdkckjg7two +fivesixnine1 +4beightsevenonetwothree8jx +sixfourmvpk6fourtgknrjmxfftnmngjnine9 +68seventwosnqsj +g853seven7 +7ninejqslxmkxpbkxksjcjlnttslpcmsprvgnrxg +jmvqrhdcctwofivev6eightone +ninefiveseven9eighthbb7two +threethreethreerlgqzvsevenx3eight +xbkvgdsrhknine3blt +xzbcgjkkbk1two1zprpn3bcxxhlxjtx7eight +3tflfncljtwo9 +four3seven8one6 +six7vqfive +ddhhgvrkzfhone8 +fqtbnbvdvbklnkmpr89twotwo4 +9two166eight4cfnsstwo +twofive88 +nxpmbfiveeightqmtblmtzpjcnxnxjtwosixtwo9 +fourthreefivedone9jzhrbrzmdqkzmqzfklxq +qbgpfsvlx1eightjsevensixfour +2sevenfqkeight2five +sqnsvsevenrbkhgkbhmmqjztzvn3sevennkcghqqcckp +eighthcrzxpjt1eightone +sixone2 +four56zqxr1lcmblzgdgqjnqb +q6hdldzmjh6ninevjm9 +j82onek67 +5njnffiveshlbqpqhzt +97nineoneightcq +ffivetwo41vnzhfqmrd4 +two2fiveone1nftfhvzkpltvn4three +twofivethree7jlsjxgjfbvnlxhb +rmb4fourlmzgvfcsgn2five +6dthkxkcdbssixdlrb38 +qgbnpdpchmnnftqpeight9xlmlskqhc156drhpf +sevensixsevenjqckcmg6sixxtgvrvm2sgtvrjrq +4nnhmghrqrkcmfmqxtqxncljskfvmhfmgqfour +dlpqjk2fivesix7 +onegtddk5vzgpndqp2five +qsslgone4onelbnbckznrfnjmsgz +pvqdbhjgqrgbqkzgpdbmvninekhvfrmpchhxm2 +tpxvskgzgnnvmnfncvqxxtkmm75vfgmxr4zbpdmdseven +ssnqndqxsevenxztmfq64 +mcxmhtnbczdfnstjn31six +twosixfz5jvbxxlhdklbp1 +five4six952 +vmnhjm3rzgglnmzj318 +dcnprh12qnmmqnvhkrhtrnxs5 +5b +mkfgxmvsixeight5 +crzdkbjthreeone287fourpgzqldn +2cgdd +seven8oneeightllqtfbdtmdnvlcsfh5 +4seven1zqponeeightlplm +c7sevendvmxlfpnr6 +eightlkhjgqj6 +njvmgjdmx2 +9six7 +3cfbjptcp5one8four +eight6kxc8one +6sevenlpbdcgbhxsixfourseven7 +4sixeightsix9hq +6eightb +8eight86jkrdgmxdfourthree +4dxczptzbvjfive56eight +seven3threerpqhsqspsdpvxj2sevensndcxn +zqcbcseventwo4gh16jksxkphgf +44tfour7br +five266five93seven1 +prsbtlbninendbpzv5xx5 +6three2nqgtrlkfxn +ninefourxkrsgshmdd78six7nine +gnkphdvhqk74fptcqgp +cfdmp2 +fzhhdclzncxmg26nineeight4 +seventworlcqhfq2qrfiveqqgmmzdpntfm +onedvsbvstdshtlzs6sixfive +qjfbtdtcknthreeeightsix71 +2ninesixscdxtwo +threerlpjxlzsr9qqzmfbzdtnknn2four +8kxxljngrqsgkxcnlhrlxxfgl57fql7 +vhrjlgqjnnthree4four8fivebfourffcnbghnz +5jb5oneoneonebseven +kbkv3three4rgdkdzkrkk +eightxhxzkbhjxsvfsjfbzghktvlqhseven2xkslcrfsgdc +sevenone6rmkcvfour6jhvhz +threenhfprcngzhcqckchphcninecmqvczqt5 +foureight6 +7fkrgmdrxgdkfpvxkns9 +5onetwoqnp +nine73dbfljgnninecdgxrgkdlsqzflbtwo +five3jcsevenfour8sevenjgfxkfgnlzbkb +lqtvkrfour67gdnrhkfvzgfoureightone +kct1pljt8seven +six269two +64k +41ggbblvhs726 +mbvfq5gghsxtwomngfczfdpb1seven +4ggzmdpbkrczhmmrk5 +317 +pxtgbfnfhqgncrsgtf7sixfour +dvqnfourcsnmcxnxq7ghmjbgmct +vnskfrdcjdoneddjpkcj7fourjjlllonepxlpjkzbzfour +hbdjzfbvrthreekxmlkm49 +trptone5bpsxgl +5one1 +sixsixfzgbninecxssl9 +six7xdnsdgsix4 +fivefive84fxrzgk4eight81 +zszvqhms8sstxvfz +3one3sixbmxbfsdbdtmh +qnfgnjgcv6two57 +5676xzlbzk485seven +five8dbbtpxctf +two1gntvjr +77one +vlnkqvczts5tkghpvthree6krgszgx4 +nine2threefoureight +foursevenhc3twofour +9zzgqfzmfpsfn +ghb57sixeightwofqc +6twovninejckdhmcsxkfoursix5 +oneqxljxjhnineppln419 +one2zlfsxrkfourthreexl7 +nqbtczpblq856one6 +3cxmmzlh1 +frjsdskzk79lcxvjqqdnlqsmbpbdxrxthreeseven +twoone457fivetbq4 +fourtvbdksxsjxzgdk77 +fourgbvdlpbgztwoftmkjkkmthreesix1 +nhrqfbzggrskfgmnbg7sevenfzrnlxfbtc +foursevenmdrnfqsn4jvnrntwo29 +fivevzvszgqvqp6627zqnk +15fcvczdlqprxjzhgbxpxs5 +9fourfivejsgvnf9five +kzlndjrn8rgq +spfqqx3sevenoneldqnqbmspvsixfiveninezmvks +oneseven5 +2eightfour5bqbmsnhmtfivebss +ninejnckkvseven4 +jzhfcmvb8fiveqgq18fivevlpgdnkbq +67four +grzpdtl9 +lzf8fivedr2fivevbpldcone +nine4bdfptdffgkssltwopl +eightlvgfhfbsqrdjrskqkprdlltnzzpfhnczsonetwo5eight +7xqfgzglblftvsqqbgpfmthreesix9jfl2 +eightgngsvqvrhgmvhtqhbpdeightfour6 +1bqvpnggbdrfoureightxmclfpfqgjssrpflnzl +eightfive1qvhhthk9ninetwo +six36fourfivefivezsvndsl5four +jnpzplgbqf6tlzpsgvzhtnkdvhzhbvhps5 +cldz3bfpvdxjmc +dpponeseven48sevennineeightrkn +five3fournine +2xcckljnjz98mjjscfjsxsevenqhxrqvqmbvhzgkc +sixtwo66469 +79four5eight +jxqktt47 +eight36 +rsjlmlj5oneightc +xczzpjknphtspmh7eightvfzjjk2five +kmznfcxhsn8fivethreexnineone2 +four6six +2hhnine627 +eightnine1vkdpgvxgm +8three6pvtqmfdxdkxps +7frnthree +78tworhldxeighttphp +dcmv6vvfbzjdtphbpssjnnqdmrgzgkfdveightwov +zsbmctdseven1snxmqxzgsix9 +lxtwo4sevenxsix +tkdkqfpj5eightq8two447 +seven1onesixfivest +45six5sevenseven +jpxxdjphzskpbrllninexmmmdxrznzthreecvsmjssmfxczhm5 +4flhfqlphfcnn9sevenx3 +16ttrmgqninefsgvkt5four +3snfkm +6threetwoglgkbqjlsn4fivehcgfour +ninesixfive1ninelgdmhkqrvn +two3pxvlsheight +two51 +sixninezkbfbxgzznlgtpxgcpzvgkczdbfive8three +fourjljzqgbsthreeqjdgsqpspnsixxnglmkss5m +32sevenctqtqrqlsfourfoursixrcjztxx +8qlccjngpt +2eight58five +1ninesevenxtlbrq6 +9fivevkmm8tgxfkzvgq +53txg +3xqmjvxkcbjf2 +2fhndgqnqd5 +2vnrpjdb6four79 +7four5 +foursix5hdcg489ninerncnk +6s2jd +fournine8ninejn6rkknh5 +fcfxflzv7seven7 +1fournineqzknrvfhdxfoureight4seveneightwobr +1two3 +twombl5 +fourzjh9six +1ljrvbrqpcchb +11rvqfmcxgg +fiveoneggjpmdt2t +nnjdzhdrkvhpxnprlfrhxpbtpbdxm1xfshdr +five39threehhrhsrhhqkjt9 +hm8nine +3ldckgksm48xc2seven8gbzfq +sixqpcqjzqxsjhr7 +kthreethreelmjfour485 +mnggrsbbnh1 +xfn5 +qzlxtczqlvninekjnbnonefcbqqgfmqf66xpvjgfzjgxvjrcqmzx +krsfvctzfhonejxtqbbnd7eight +tjhgbtqtwoljone9 +mdfntzfpg1fiveninecvxrfnine2 +7hcrxzc +6two6plgrmbnine9sdbvgtnj +threenine4fthstfjzzp +6eighteight9npghczggthreectqssdtp +flc4gtqsjmrddx8eightseven +threeone1oneone7 +gfbfjzltcjfkkrsprgtpfive4 +sixrdzp2onesevenrqrtldnq4c +sevenktwo3threeeightthreenhnmpdmlqjnvl +4eight82717 +nrhqqkmkeightthreenzqbgcphoneseven7 +twoprrgggznzffour5bbrdsvtgkkrbl5nlrkpjmnbzgsbtl +28pvjrszmrdntp4nqdnhkdrtwoxr +sixsix9five4 +lxchg91threethree74 +6bmxblxdkghqdjqgqbrqtxknvdsevenztgspsfh83 +39bsspvhslzkmrnzxtlxsbhk4 +74seveneight9ninedgzgjdvxgvrnfz +fourxvvqsfktptjbsb69 +rxsevenfive5vx9 +72six7 +five5lcxv2jvsssxqjtmzclfdfourfive +87three9 +6rckksfour413331 +33gtz +xkmxtvzhgxqqmknn9pzhgjxqseight +8threefivedrtlgrnqfouroneq +6snzkxjcfive62dqtqmtwoxnine +zxtjclonefour1eight5eight1 +qlffthreeseven2three +xfppngbg5six3two8nine +ninesevensevencfhppvhdnfour8 +xhvnm1 +9threecbdccktrkfourfour9twoneqd +1five4fivenine +jcscpdtzk757nine8 +sevenninesixxkzzzbfour2three +sixthreetwovfqxtbvcrrjtwo3four9 +nzdjhtlqfnxmrzvgrzkfmm7mhmvbbxfd +3seven2eight99 +two6nineljvxs5eightseven3 +55fivezgbmcdpv +hkgvvrtrtwopjbqhtts8seven +c138 +mnrnhqtzthreesnnj2 +81 +qscxbblvsxsgtcpr4cphmxgmbrb +4six2mrvdpxqvhngrrzhjdjfp +4tmrlmdfivefivethree7 +363 +8488one +827pcxnhpk +ckbdqdvhdd4hrb9nnghltwo +5onecjjfdfrxppqkhrpthree5lr4 +62lvlsp2sixfive5 +czxfkhcbvcdhdzx2 +jzdgngb68 +fourtwo18pxkttcr8four +bkttjvvmxvzkhmxtpqrxxhslstwo6five22 +four26mcvb2fivepone +dzptwo5ninejgjrfour +nrhqqnjfour9four +ffoneightpxp41six +threeninehzmrh8dzvmpgrhsv +5onefour5 +jdl5fourtwo8 +threefour8seventwo1seven +lvkjd6five6fxkfthxkgmfour6 +three3seventhreepbsgc +7threethree6fgmfgcv6glrk +nine3five +54one9 +jhvqhrvqfrfgpdrh3three5 +3psztbfour4 +nlffive1nxcqpfour232 +3threetwosgsbdjnt +dtfstb1qhggj +qnnp9twojdg4kfzvtbsevenfour +qfnmdkfkpndd36sixsixfourseven +8seven7oneseven9x4five +4847onetgmsbjjqhtfiveksmmlftk +fivesixlklrnhtdfg3 +cpcqone1pnxkhrkdhhzheightlpb5three +eighttwo6 +seven2fourfourvfzxqbh7 +frf1fivesix3snnlpgpc7 +svtvfcsevenhszznbzpfiveeight2 +lqpqzthree5mcmzpqlxkgpssix +9sltfzqsczpjbndmqbccgmq +5six9fourxppzkgbj6 +8dqhklnxseven1 +3two4 +ktvlhmq3xzmcztbplxlqzpqmoneightffd +76dklx7two8nine5vgvh +xmgjgfz4 +two7tcnceight9 +ninecvfgpbrqcgvplt32six +g3rcbzqxnjllqoneklpbjzbqbseven +svkf8ggdnmeighthhjlz3four +hfdb44zqjmxbrft3qrpgvjngc1 +dzsbnsrg35tm +qchpdcg2 +9775fcg91 +gdrhdgmfdk77eight +14bsixthreeseven +two1twoninepkkvhlzlt3 +kvslhphhj9fourvljqbfive +8nc6 +qg7six +7vkgv8 +td5fivefive +xvfour8jttrsvvjkkdxxzjsl +7qbgdfkj4fourfivenmqtfmgeight +eightfourdzxpfggzxcqrmtxnggchlqtwokcnrdhqf1 +lbhcptlfhflgthreefive9cpprdlbv +nine7941cfxnxszfivebm +ninenhgpj7fourfour9 +456xg +ninethreesqdp11four32lgdl +38trrgt7 +tnhhxlm3rvzvxmmcgpxm +oneqtmg25snbgzfhtkq8hdlvszrclcsrhqsdn +3cjndzmkfx +clxvdv7seven +five6three1 +8sixfour36seven9mlxmrx7 +vdrk27jnrbrvdrnine2nvnlkcszoneightchk +67drgjqrqdktplq +36pprvngxrrjtnpffmrxxdl +hkkrgxtpvzzmcrfcbcjzbpnvls88hrxl +b4jkeightsevenmxkdpvdpt857 +6eighteight2four +eights73five +fiveslpjvzjlpvzone41nine +smnmlrxx7 +onesixfive4 +8s75eightone +1fivecpqsxm +99743ninesix +twopzflcvxsgzn1v8 +9three49 +two2sevenf8sixvdpxzgxbmkrz2 +sevenfive6shhbqhgqqhstdrnfxsjtjvnine +kzqsvn29s +threenlrrhz4ttqljvr +qx9sfdx +nhsbgsvvp7 +876eightfivetprjjbxhzbfpqgltt1 +six3xdjtphrm1pbjvjfn +nflcpmjpt6six9two6xvbmbm +fmlglbgmhvseven4nnkkgcmbv9chmthxvztgsevenbtzs +7bkmchf4five +xgglktnbeight183twonine +onecbpdv9 +fhhmddrnlnkvlb5drtcbrjprzcqlj7mgspc +7threexkfjklvzcfourtnrgmpveightfour8 +6rhmcblhfourtwo3two +one4fiveonenine +slksfchvlgblninefszfbksddgvd4 +four742sbseven3lk +8qbchrfldtvppv6fourzfivez +ninephsmnnvsfour1 +one5kvcrtnc5sixonehjfxnsixfqhzjj +8drgrzngh +16eight8rczbjmblhn +threejpgjbpfdbvgdpftwo96 +sfkhvjgd2smgfkr9two27 +threeqpdeight3 +threesevenxblrmqkvzvrbhsix4 +9seven2vlhsninenvptdvmrpzbrlpfhfnl +xkjpdpgsrtvlfg1eight +seven254 +three8fnmcfhrdtjdlpfqlqhgx +21bkjv54s8 +82ddfour6vcggxhlmpfivesix +cdsbgtpqthreefivel8nine +5five5cksct7bvjbtdjkcz +64fhm +tqk5 +3mhzkhtfzscpgfctfskdn2five +cvmvthreez8fivegvcbsxj35nfxdshqz +sevenqlqmkhdjpmsjrtggqzfive35scmnfpmhmp +sixfive2 +6sevensvqhhfivetwo +eightthree84 +82six8 +8bbhrkzgtg59cpgdvb +11three3hfjkvmsl +qdljkm792 +eightgq5xgskvtpgmhxsnhzlqhnksxflvx +ghdhv1seventhree55fourthreemrlhq +oneonethree3zm +3twobsxqfsfnine +eightsbznkpzsqqtpxfhlfr5 +sevenchs2twoeight +ninezjtxp7bpzdgtoneeightoneighth +fmkbvzzgvl46fiveoneightqn +kvsonevxtmmxnfour4lpxjrbcfoursixp +391onelktkfd1three2twonels +pn2 +3cmsmfvjchflngkrbtsfrblltwo +eightfour8ninesix29 +dpdvnonefour2eightbzzrvthmkgfcdv5 +59sfiverboneone3 +6xrqq1 +9bczfbfbhkntmdmseven68 +npqm35qszmptx +fivepkdlmonefivesixz252 +dzrtwonetbbv9twovrsp +fpkfourfivendkhz6five +86dknvgcnmcslmztwo3 +fivetxrrzjpb6tqseightjthnhn +362zhtxdgvcdgnzv55 +eightsevenbllbgvdonethreeprglpjhxhqfdn6csnghrtl +5fourc +8fournine3svdlh5sevenoneighttsq +eightjkqmgljpprcpblvrthreeseven8fourone7 +vqrqlhmb9seven231vbfzrrstwohjvdjgg +kk1foursixeight849 +seven13ttbnlr21 +jfgsksrrkjsixsixthreesixfourrbxqzdhc9 +3fiveeightqbndjdg6pmftqshone +nineoneseventkdpztbkk83two4 +cjdbxhpzr87eight +twosevenkkdhf86sevendzhvkrttjljr +67cdltmnbkktzseightsix7two +three44zqtglqcffrkmhsgjfive +twoonenbf74three9tthsvmngcx +lvrnpvmvgvnnonesix5 +nchcfxxphmnqbhfourxnine52sixj +fourqpvngjszftg88seven +xgzmv133zvjmlfqhcmjbqzfntkjtpdjlkmv +fivejxc4threebzqbhrldsf +glvtpvnsevenqvrtcgjkhkcsix1seven +sjeightwo4fivesevensixnqxsjckfive +z5 +jxxhsmdvkglljhxzxljqz9zplmslcfdxxljtwosixkjxlsrfcx +fiversdslrkcqclzb7zdzlbllfkvphfqhnfour +five1hpdncfpzhdxrhnv4lblgthree7snj +8scqf +threepcfkrhstmsbfvqxsxrctwo185six +7lqvpqxbjrv9nine985 +eight16jvfqcgbmhdgdltxz9 +three8vncqf9 +zrzp9sevenxthpsxtdninebmnhgrkdjqqjfffourblbkch +fiveseven25snpsnjgnfl +ninefourxrtdlb1threefivefive1rbqzfbxtst +three8three7five41 +tcnvsevenz45fngtjljh +txvpst1 +eighthrlbmtk4nssknqmxjvjnqsqlfivekzrphrtwo +two492ninekcjvllckdtkp +48vlvmkcvbsfoursix8 +eight28sixsix3nine45 +jkm8hhqfclneightjlpsnck8dcvlvgkrfprflsvlh +4zxjqlfn +fivebpqfjtcmlsixfour48onejqhzgtftrvkknngf +dkfour7fivezzsjdbnvgninefivenine5 +twoxjqldtk91eightneight +seven57177 +gpbqvlpxvnzgninefoureightthree5 +bzprbrninesnjpgqthreeeightsixtgmvrthfour4 +83brtxx4zzxsxrcfivebzbxlsl +threesevenninetwo8twoone +veightwochrmfrkrcppxkj4tvvzmhqjhnjvtq1threegtmfnnjpxb +3zgqpvq9krslgjgkjmtbsbhbjg +4nine8mhfs67vhdjvsjrlz2 +nine659xrvhhnnbqq7 +bninetwoeight8fxntpdkrfp9eightnb +qtwonecvbgxqfiveoneeight4five +seven926 +shkkksn4onefivethree +eightsevenqvfqmzqsfn1 +sixdgjmtk5fivevqbxxdzrjqdtgnnffzmfqxzjdzhp +stsjcmzbxt1 +rvnone3three9twozchp26 +ninefmpkdlvzfivetwo1 +four4one4vdpgp9lprtqjzmhk +15rpdhczznrzclfcsxdx41 +seven36twopnvjdxrss5 +46ninenine +6jg8xtqfmjffdlfhzrn +2jsixfive573 +two8eight39fbqkdzseven9 +3gnrg5 +hlkk1 +1sevenfive7 +72jvdqmlrddk +ninetwo8hzdninesixnjhgrcsttwo +23cxdccvvjrjfsixlcrmxjkeight +6brqjfjsix56nine3 +ninezveighttwogc5two +ninexskpsth5sevennine +c7jmmjcv +89sixthreeeight71q +fivekccfngmxseven7onernfskqnqfive5 +sevensixone4hfhgs +xq2jxddpdm3nine8ptqlm4 +smsevendj19fbqdjpznfourgqq6 +7147 +znqbfmcpd4twoseven +fhcsmxtdx6 +sxj2tcb92 +6nine6 +qdfknmdzt88 +66threebsndqlkrshfive5 +eight7pckdhlqzrx24 +3ninevk +sevennine3 +8one1rjtnhjx +eightthree3ninekzhtlqsevenssprmrqhhgncrs +6one8nlzxfxvr +4cgm9fivethree +four77gxvdqztzzgbsxhntwortndzqzj +t8three335 +c2rjggzl +jjgjbqgbnz4gdsqk66991 +ninezckbpsr9 +jb5sevenseven +one5nfdcvx +1kbcmclhrh1onejzft +fiveninefivedglztnjxblonehfive3 +6onesixh6onethree9 +spdzhnt5tpzrkh1fxlnine4skgzdln +1onenineqgzcq2eightwonh +vfzvds826vtlrcg6rvseven +vqmoneight9tknqtcsmb +kqrcrqrqjbdeight7ckhr23 +oneeight2 +8eightnhtqcggtxc6dfsfcjfpznmsthree +sxfvfdkff8dvlmbdktsixmzpnxzmml2 +9lgmxktj1frxl diff --git a/examples/typescript_variants/AoC1/step2/.config b/examples/typescript_variants/AoC1/step2/.config new file mode 100644 index 000000000..d7944cb01 --- /dev/null +++ b/examples/typescript_variants/AoC1/step2/.config @@ -0,0 +1 @@ +input.1, readFile1.1 \ No newline at end of file diff --git a/examples/typescript_variants/AoC1/step2/Day01.ts b/examples/typescript_variants/AoC1/step2/Day01.ts new file mode 100644 index 000000000..5a245520f --- /dev/null +++ b/examples/typescript_variants/AoC1/step2/Day01.ts @@ -0,0 +1,2 @@ +import {readFileSync} from 'node:fs'; +const input = readFileSync('input.txt').toString().split('\n'); \ No newline at end of file diff --git a/examples/typescript_variants/AoC1/step2/input.txt b/examples/typescript_variants/AoC1/step2/input.txt new file mode 100644 index 000000000..9569e81f4 --- /dev/null +++ b/examples/typescript_variants/AoC1/step2/input.txt @@ -0,0 +1,1000 @@ +2xjzgsjzfhzhm1 +qhklfjd39rpjxhqtftwopfvrrj2eight +95btwo +lfsqldnf3onenplgfxdjzjjnpzfxnineseven +five7fouronesevenpfsrmszpc +xcsfkjqvln2tpm +ncjtcdb625two9 +6srtj3gfghkdtmfzseven +three4fournineone +pcpsxmkhdgsix25six6ngzsqzdcrb +1sixdzhbjvnvgcxmsrlkb9xbjk7t2 +dsxnfkjn2vtwofivethree2 +qfbp2tpgvsxm +kvbhsseven2rkbllhrhvsevenfour2vf +bqbtzbtt3 +ninek6 +3fivebvqhvhlvz +two68jxfnqlzfkninenine8 +vhckhhhb2sixtftjtdjf2nine +4jc +3sevenxlxfnpk +5sjfive +c8bvlkdq283rqfftj +8eight1threehhvmnlft +4sixmfcronelzcpnfourlgdbkgt +hntcjmppp9fmntwokx2 +24mkgr6mx9n4 +cksfkrdmdcmnbmkgk3two4 +twosixthreefivelq3nine +njmrtr6fmldninevcbtxr42 +eightfrdrczdxrcrfxh6 +8sevenonefmfqhtx8lk +lnoneight8twodg +tszrcb7tvvhfive4 +nknphprtv67fivehqlfournine2jk +9eightszgdhftggrktkzbsmnhtwonekh +1onefzkgf2two417 +77fivepsmmpp +bnine7vmttgmdskc +6tnsixclbvkhmsp +ggreightwo1mnsbzmxsdcdrhhg5one +ninetwo6qtbklgb2 +four8fmfxmr +threetxfrsevenvfdgrtsixtwofsq7 +hqxlseven53 +vxqq24eight6 +7psxpgxmkpzkzeight3 +9four7 +stwoone4eightwoj +one38 +9cjlrgrgpfjeighteightdcpjhzbjqcdthree +rqfone2 +dvkxhvkgxcfivescjcnqqnnine2tthreecptkgxmzjsbzdrhk +5lhprmg8two7two3 +5lvtg5sevennine2zrrmghf4seven +fourfive97sevensevensixcsffnlcbtjk +onesixoneninesixnbkf5xpsgsmpvdsdsqdvpjjzp +nineb321mgkpqjqjqh +seven2cstttkvkmpssflkxjmbnvthreefour +six1bmcjbhdgqm6kgzsxbgdqnjqf3four6 +zchkfjxsllkncz175 +vsveightwo8 +fourbtrnfdp2four5 +13dtf8769 +6qfvvdqdrtstwothree4seven8vszpseven +7rgzpxfbczk1fivetwo4two9nine +3sksmfxn +16ninetwonqqmptq +9five4fckzssxsvpzbvlktjzcninethree +3threel889bvbcgvl +threetzzjntxlsd2klrjfnbg87 +3two3qrrdbkbk +29oneightt +7mkpfchstjt7mshqht4fivesix +tvmqndvsix875nine8 +vg7477ninecpnrvnine7 +seveneightmknlqjlstx4zjjrpbhjhnnc8 +8qklthreetwo7tlmrfzvtwo7zvccc +6one1dpstqpmfbhst +sixfourfourseven6rzdkfour +6eighttbltmntb8 +seven72cqslvzpgj +jpvrsgfhtwo5nfc1cgxdrdrbfnseven +four1ninezlhqxtsgfzsevenhspvmxrtztzgtmseven5 +foursixzjvgjgsevensvkd5 +seven121fivefgxhdfive +twoh8 +ghhtttxqgr95 +zkpklcjbjlr2 +nine2mtrdcbrbntrdqninevbkbfg35lnpx +nineninesix68pcvsdnns +rf16one7 +seven276 +sixseven1 +qjxseven9six +7c9xvhgmpf41 +dlzpvdpxseven9nine +mlmlqrpn4twofivesbmhdbcsixtwo +ld74txfzksr5qconenine +six7djcdrtk7chktrh88 +2seven7jtrbhznt +1eighthnhchsevenfive +qdhscpeight8 +12gnxzzm +k7fourmhcfkggt8919np +8zljspvnmlx6four +36twofivethreeptbdrfqzbz7qbjm +bxkbjbzgone3ldhlnhxfcf7btkktspxrtqkxqfdmlqgqvgclb +sevenfourmdrxseven2z2fiveone +8bbprzqrqn +twofivethree95mpqclhfkzlsix +gpfjflrkc96tmsix6dxjnfive +qzeight6 +five5zlthgqjntwotqmnnsd +eight6nbpvfour4kzkvbzrxcmkh +fdkrxdckqbpsklz64fourones8 +5qpldkhltl +27xldkbqbnmrrbqkhmksvk +pjoneightknpcgkkv7cbknrhfdmtdm8 +432xsixvvktflzxone +35fouronemzzszfqppllgchsjjnine +qgcnzcbvsxbtn6lthreenineone +two2fourkdgbfb +fzkmbtvnvj5bzfgvxv3nineknpqzznzmf +9mkqtmlnpzt282dgkmvlsonefourthree +mcqhpkhonethreeninesevenfdsggqnlfcnrft3frqzkscft +847 +gsxvvr6tghfbxxghgv6lplf +fqzgkxkbmkpbhpvpdprmlhsngc5 +qeightwo2threecrjjtv9fourbthree +2eightdcbgfdqzk +fourtwothree5tdzpzfxkpjmlkzzrf +seven633 +8mldn +eightmg7dvjzbngkxmnxdctjtdffive97zpjrjqvp +sixfournineone38eighteight +8mngs412 +3fivefourtwo7five +7sevenjfkcf7rvone8xjdvsc +tljcrzngfdsqctfour6hsnljsxrqdzd +csix7hnkhds4four67 +3cxrlqcnseven4twox3 +rtwonerxcnpqdnzksvzmmndcjlzq2nine6ntfzjdqnrjeight +zbqgrvvvblggbghtfx98 +three2zcpspgtq77vqtgpcxkvq8 +94zksixnvbxrllxln +1eightrctknxkmv9jtwoeight +2onenine5eight58 +four2five +6fourfiveeight +pbfourlzdl4 +4onejrltvhxprhlzctrqzbz5fourseven6 +hlsdjlleightdcmdj8jdg +eightbfkgvbxxm6 +sixseven9hmhchsmqhhtrdftcfivetz +mq4five2fsdhzn +ceight3mncgnineeight8dkqrjjtmc +onefour7eightsix +seven4fqsjk38fhbmn9fgzzcc +9cmb5ninenjsppthpnine5 +qghtvpsqpxptoneljvstwo8lpqcbgtqvjmpq +onelq85dlqpx8 +1threetzsxqtndvhqn +lqdvkonebqjqj9 +3six6 +9two9sixeight776 +scrrprfkblkplgqzzqb2 +18vcrhxb4b +three8nine +1khkncj8fivefourthree2 +ninetwo8tbbsfmkqtt51five +66one88 +ninempgbhpm6seven34 +eightthreetwo4threetwo +vvpqkdonesevendvfrgmhhlsix91threethree +vbskcncpjxtdhqlcone6kgqpz +54lmnnqsrm73 +5mqnmvcbqnz82ninethree +47teightthreehrhtdndrk +fft2foursrdhxkzfourv +tbeight48759eight9twonenl +3sfkvkmvbbm9four9cbjzgllfl +sixqhxeightone7tlsd +22zmllbhcptwo +dqxdjrkmnvkbsxc3ztbseven +oneeight6dcphmnrfltfour +mgxzcfsevenfour4six +sixb8six34gqjtlcq +fiveseventhreexfblvxgkplvbrgpfive1onesix +one3mgqphj5 +7fpzxmmxgnb5 +jbshclzone3oneseven117dkzzdxdd +56five1 +jeightwo1ninemxtvgl717pbv1mqs +3six36 +35mlzjsgxxtg +hmmjgonehjqdcqkh1gskjrmfour7 +eightfiverqbb3 +sixtdkfbglhbjbvthreejsd8tglkrsfktcjt +1eight2mgxrgbbb3 +zzqxvtthreepf3eighttwoonefive +vjnxhl4threetwokj +oneqddgbbqtzsonenxkeightvx7 +nine24 +ftwone2 +53twonehx +two7three4fourhbgninenkvxjjsz +7five62ninefour +53nine7lqthree4 +1six1jn +five5drcjvbgdxzonefourfjdkfive +6onecfninesqfdtxmdhmfvlhbsjv9eight +5dqmfmqbdfdjvpl +qxkqfjshdone2zrmdsts +1qrvnf8zvfour +dht2 +4twoqdrshn87vxldzvnkn1five +4nineh +zctqdcfbseven6three58lzscrpsbb2 +fzmndhssmm3jdzlfourshjkmjkv53gvssnvzsz +five2qkxtfkj3sixshpnzdcjhlcmksnv +bskcmljnq69 +psxkxqztb3xsctsk6qvldjdzzqmgqcxncx2btqxh +onetwosixttghndtzx8 +8twocmnfmslsheighthtxsgjddm +fnvkqndfqmhgscnvq31kvvftxbzhtgzxqtngvqseven +7sevenkhhvtvsbrvcvm8zksvgcfrkgfourtzjvpqstckmmlzz +7hkfiveeightpjhone +8zptwoonemrninefive3spxrlhr +3qvjknqcnngpkninecgsbp3sevenfnpvrcltj +qztwo8678 +bxkj959dntcpzv +4one4 +lstwone347nine +ff79krfbjttqp4seven1 +gjtlbgxdqt7eightsix +8fivefour82threetwo +1zjxthree4 +szgx6fivefour12 +557dspnfzhmlh +5hnfour +847zzkrtjlb +82six +xlnhrcksv3fourzl +2ninetwo8ninelhnsbseven9 +ccseightwo8fiveonetwo5onegkhlg +eightp2onegrmfsnine5one +4five9xnmlldfive +five636 +fivesix29 +34dsbtmlhgggzkqxs7 +twothreesmgjch93mcdndsn +cmnmtzjnmtggseven1tjsshnktffive72 +7xcbpsix6m +7fourthree +7cxnzthree +5eightthree3lpvlfk +4rdnp +one6gmpjfouronettbbjdqsxn +6xtcv +dpspd1cb2onegxsgdtcsix +1eightpseven +ntczqmrclm2 +six7nineeight1 +qrndlfour9bhbmlgj6 +52vhnxvngjjkzt +nine8six +3seventhreesixfpmpbjninesix +seightwoseven4sevenppdnk7 +lnxeightbhxfmdrxcbjzx9sixnine +8ptdmjrd21zrnt1one +one1dmbfournine2 +25five748 +266eightwom +zxfxjn32threelxmqnlcvnknzbn3 +lqmjm2onezseven +sphlhbbz14sixtwosix +sixr9llqxb4 +tnnhlmsix314mqvdlxfour4 +threenjxgtthreethreeeight14one +1fivetwo +hhhtkpvhvg8 +31cslxxzgbktjtwotrzs1one +twoseven9 +4fivenine9332 +six35nineeightwok +nine9fpxgqjrftwovhldfflqthree +434four5threetpcs +ql52kzzgnsgll +onex5145 +gsppnkx1 +22six +zjbbqnbhsdfourmk19sixone +six3onesevensixvnsixone7 +seventhreefive8 +four62four7eightseventwo +2three5jtzmtxhqxhsixxlkmptshb +five3lklnccst1dstgvnprktgcnseven +sevenfour52 +hfxkkbcfpcgzfqsv1three68three +lnqrcdpglf2ksqddhp +13onenbmqvpqsbbf +1bfive +1dmnlscgvfdqrf +bvtwonettkzzxpb4 +5two2t7 +t7djkh +63t86nlhfgqgnrghqone1 +one89eightlmztkcjjnonefive +7twosjmcrlcfqr29lfkrjz +1nine5four +xxjbmsvfxb8 +nxvrvcqkbseven99rbzbdp641 +56fdpx +skszhkqdtonesixth5eight +ninetwo8jqbtwokbhzvv4fiveoneightxb +1threemfcblxjljdtone +fsfgncxvcmszn2pzspkkgqvfxlnbzgjr1 +rrxhnslrkeightgcsbcgdbkplzxbmmlxsn5sfp66 +foureight3 +5rplrmrjtjcfnct9sixfourzptmffrpthree +mld6ztzninesixfour4 +twohbbxmthljpkqthtcgtt8 +ltvgmqgsix89 +6khclqhcvdz24eightseven +6prb +nhsjqtnk6bqzhzvldlcgsmkq1twobfqzm +tfivehmdtxqlsevenzxt1ckjbnttgqctwo4 +ghnjjmtlvfive9znltjfskfnl3vdcjkvqcdplvdmckmfgxq +ztvvbbjx3 +6jhsrszlpsh +4fhtrctvrgmfhdjqvqp8sixnnftggrzlgs2 +bvlqxnjbbjgtfpslpspvpl7jsjlrdfiveeight88 +fsvcxvlc74sevenltx37sevenlbq +fourfivetgkqz5cgj4 +cnrjtfvht74nptvh +oneldnoneone745dhvqnvmlfj +2trhmdcpnreight +dshghlkjzh1kv +threexzkssrxlzzpxsjzbbtthree7 +eightdsqrdllssxv7sevendttwo3three +stz6five9four +jfbfgvfgmvlhjv94 +rcncncfcqsevenjdrtctbbsznpct48cbbxseven +ninevjxzk2two +1qgdcpslvqhjzbgtsbnzcd +kmlzbndds8fivegfdgpfivetwo63 +66mkeightnine1rvfnine4 +nine82 +58ntpkdssixnntjlgfkxq +2jxqttctsxthreepnxsfive +fivekvfkqpc28foursixptgbpfm6 +6twofourslqbzlcsmf +five4vmdl +thx5six +5hfnsqhvcfgckcseven3jgdtkkv +seven6eight65five99 +hplrgdqrjtonesevenseven4z65eight +khkts8hcsfvhvqjv9eightnine48 +pqxztthreeninelxhcxkjclk2 +sixrmfpj6nine4zx +9xtvxkxpjv9 +cmtggbrckmmzffncttxsevenhphmhfgjsr85 +83s4 +26fivefivethreemstzpncmhfm +87eightfourgvmmfbknineone +bdxg2zszhcgtvtseventhmbvfive +zeight8 +eight78dcnq4jtz +67csrthree +3vqxtwonerts +1five3 +sevensixfournineksxkz9bkbgcrjjjhnineeight +8seven29 +9394 +pkqxvl9vbjmqblrksjqcshpzpfrfouroneeightnine +heightwolgpplrbnhrgdkrk25crttkkzkbt +6659eighttwoone +55lzqzng2dmtpq45 +512gpmqpsqfive9eight +eightsnxz58zrbh8fiveeight +six893ninerrxzj +twoflrzzcgninefqqlmmzzqgnjrcxcfour5ninetlcmc +tmfkbgcssdcmkthmx1seven +6three9fourmdpzj +mgprpn68 +xssxrtpntlkppxp958rzd2nine8 +fx15twoeighttfjlcglnbptwo66 +threeseven522 +xrjpstjr2 +6eight1742oneighthhj +1ddfkgjrxfzrhnxtnvfqxdv4 +8hlcxdpkrnrgfzmsschlhcbndkcvdszgqntl +five154sixfourqgffh +5rsvtzgrvq1slrlgqksone6lns +92sevenk3xfrvgddsthree4 +rctlcz67 +2nmrbhnzpf7 +bjmssix1sevenfour4 +744ninefivefivejjcnpgrqxtrctwo +r4five4 +16two2 +threefn8 +3gmsrqtjm +one8tmlnlqvgfone5fivefive +1spllmone9three1xsssk5 +6rlqqblbrxh8 +41qqccnsevengbbrpgcqggtlhtzqcfqzhtx +hzfivethreenine2 +sixeightvcm4lngvkdlpz6dstz +twoeight34tv1 +tgqc6fqsftwoninexncjnrtcgcbrxdmnine +8one27ninerjt3seven +1sjvxlzszhhsix +2xxmpjsfbr +7eight5eight5bzgdpkkpgrn +twozcrxdsix1lrxltrhvznine7twoone +8qlfive8nlmthree39 +4five5five7671 +4fiveqtrngqtbpd74 +vbccfjhjndeight1h +8kfzchkdvfgvlhqzfgseven +6ninexrxsvlmmzrsevenjhzzggfcxqrvfjtnjctveight9 +6fourfourfourxgrgqklnpcsjbsqvhnkjfcjdhdf +65fpnfszb3 +srnhthmpseven1four3rrpznf +vgmqr9zttpdrzjfiveninesevendfive +fournthreesevenseven72seven +9594 +twolhvpfzbfsfourrrcpzzshd66grxddrmkvthree +seven5twotwolpsqlbcqpthree +29eightzjgsfmll +gtkrjrsevenfbjcpjlsmqsfceightseven9 +qkbntcjvfl6three9qhpcptvpkfour7b +gvkhmrljmhrpj956bzxhkljpvpxltctjvvpfjtsnb +rcqlnpcmng6l5vfkpddeightsevenfhmxzztndq +sptdrlsfxpsxff4five +lrzhhxdrkdtbdjbsfourthreemmjjnn1 +9sxthreethree +six9fourseven4 +dpone9fshbbpcm8 +twoczqzvqkcnine6eight +qbtkgxp1fourdz +dxrrsdbmtpnl6hfdtj +sixsvtwo8 +5fxdkhbgqm8fouronefive5 +jqj6lhtbjt +6pdgrsdxghfkhptbjcrrjcsevenbksvmzvnninercz +8rzqvh6ntlg2bfktcphztdkckjg7two +fivesixnine1 +4beightsevenonetwothree8jx +sixfourmvpk6fourtgknrjmxfftnmngjnine9 +68seventwosnqsj +g853seven7 +7ninejqslxmkxpbkxksjcjlnttslpcmsprvgnrxg +jmvqrhdcctwofivev6eightone +ninefiveseven9eighthbb7two +threethreethreerlgqzvsevenx3eight +xbkvgdsrhknine3blt +xzbcgjkkbk1two1zprpn3bcxxhlxjtx7eight +3tflfncljtwo9 +four3seven8one6 +six7vqfive +ddhhgvrkzfhone8 +fqtbnbvdvbklnkmpr89twotwo4 +9two166eight4cfnsstwo +twofive88 +nxpmbfiveeightqmtblmtzpjcnxnxjtwosixtwo9 +fourthreefivedone9jzhrbrzmdqkzmqzfklxq +qbgpfsvlx1eightjsevensixfour +2sevenfqkeight2five +sqnsvsevenrbkhgkbhmmqjztzvn3sevennkcghqqcckp +eighthcrzxpjt1eightone +sixone2 +four56zqxr1lcmblzgdgqjnqb +q6hdldzmjh6ninevjm9 +j82onek67 +5njnffiveshlbqpqhzt +97nineoneightcq +ffivetwo41vnzhfqmrd4 +two2fiveone1nftfhvzkpltvn4three +twofivethree7jlsjxgjfbvnlxhb +rmb4fourlmzgvfcsgn2five +6dthkxkcdbssixdlrb38 +qgbnpdpchmnnftqpeight9xlmlskqhc156drhpf +sevensixsevenjqckcmg6sixxtgvrvm2sgtvrjrq +4nnhmghrqrkcmfmqxtqxncljskfvmhfmgqfour +dlpqjk2fivesix7 +onegtddk5vzgpndqp2five +qsslgone4onelbnbckznrfnjmsgz +pvqdbhjgqrgbqkzgpdbmvninekhvfrmpchhxm2 +tpxvskgzgnnvmnfncvqxxtkmm75vfgmxr4zbpdmdseven +ssnqndqxsevenxztmfq64 +mcxmhtnbczdfnstjn31six +twosixfz5jvbxxlhdklbp1 +five4six952 +vmnhjm3rzgglnmzj318 +dcnprh12qnmmqnvhkrhtrnxs5 +5b +mkfgxmvsixeight5 +crzdkbjthreeone287fourpgzqldn +2cgdd +seven8oneeightllqtfbdtmdnvlcsfh5 +4seven1zqponeeightlplm +c7sevendvmxlfpnr6 +eightlkhjgqj6 +njvmgjdmx2 +9six7 +3cfbjptcp5one8four +eight6kxc8one +6sevenlpbdcgbhxsixfourseven7 +4sixeightsix9hq +6eightb +8eight86jkrdgmxdfourthree +4dxczptzbvjfive56eight +seven3threerpqhsqspsdpvxj2sevensndcxn +zqcbcseventwo4gh16jksxkphgf +44tfour7br +five266five93seven1 +prsbtlbninendbpzv5xx5 +6three2nqgtrlkfxn +ninefourxkrsgshmdd78six7nine +gnkphdvhqk74fptcqgp +cfdmp2 +fzhhdclzncxmg26nineeight4 +seventworlcqhfq2qrfiveqqgmmzdpntfm +onedvsbvstdshtlzs6sixfive +qjfbtdtcknthreeeightsix71 +2ninesixscdxtwo +threerlpjxlzsr9qqzmfbzdtnknn2four +8kxxljngrqsgkxcnlhrlxxfgl57fql7 +vhrjlgqjnnthree4four8fivebfourffcnbghnz +5jb5oneoneonebseven +kbkv3three4rgdkdzkrkk +eightxhxzkbhjxsvfsjfbzghktvlqhseven2xkslcrfsgdc +sevenone6rmkcvfour6jhvhz +threenhfprcngzhcqckchphcninecmqvczqt5 +foureight6 +7fkrgmdrxgdkfpvxkns9 +5onetwoqnp +nine73dbfljgnninecdgxrgkdlsqzflbtwo +five3jcsevenfour8sevenjgfxkfgnlzbkb +lqtvkrfour67gdnrhkfvzgfoureightone +kct1pljt8seven +six269two +64k +41ggbblvhs726 +mbvfq5gghsxtwomngfczfdpb1seven +4ggzmdpbkrczhmmrk5 +317 +pxtgbfnfhqgncrsgtf7sixfour +dvqnfourcsnmcxnxq7ghmjbgmct +vnskfrdcjdoneddjpkcj7fourjjlllonepxlpjkzbzfour +hbdjzfbvrthreekxmlkm49 +trptone5bpsxgl +5one1 +sixsixfzgbninecxssl9 +six7xdnsdgsix4 +fivefive84fxrzgk4eight81 +zszvqhms8sstxvfz +3one3sixbmxbfsdbdtmh +qnfgnjgcv6two57 +5676xzlbzk485seven +five8dbbtpxctf +two1gntvjr +77one +vlnkqvczts5tkghpvthree6krgszgx4 +nine2threefoureight +foursevenhc3twofour +9zzgqfzmfpsfn +ghb57sixeightwofqc +6twovninejckdhmcsxkfoursix5 +oneqxljxjhnineppln419 +one2zlfsxrkfourthreexl7 +nqbtczpblq856one6 +3cxmmzlh1 +frjsdskzk79lcxvjqqdnlqsmbpbdxrxthreeseven +twoone457fivetbq4 +fourtvbdksxsjxzgdk77 +fourgbvdlpbgztwoftmkjkkmthreesix1 +nhrqfbzggrskfgmnbg7sevenfzrnlxfbtc +foursevenmdrnfqsn4jvnrntwo29 +fivevzvszgqvqp6627zqnk +15fcvczdlqprxjzhgbxpxs5 +9fourfivejsgvnf9five +kzlndjrn8rgq +spfqqx3sevenoneldqnqbmspvsixfiveninezmvks +oneseven5 +2eightfour5bqbmsnhmtfivebss +ninejnckkvseven4 +jzhfcmvb8fiveqgq18fivevlpgdnkbq +67four +grzpdtl9 +lzf8fivedr2fivevbpldcone +nine4bdfptdffgkssltwopl +eightlvgfhfbsqrdjrskqkprdlltnzzpfhnczsonetwo5eight +7xqfgzglblftvsqqbgpfmthreesix9jfl2 +eightgngsvqvrhgmvhtqhbpdeightfour6 +1bqvpnggbdrfoureightxmclfpfqgjssrpflnzl +eightfive1qvhhthk9ninetwo +six36fourfivefivezsvndsl5four +jnpzplgbqf6tlzpsgvzhtnkdvhzhbvhps5 +cldz3bfpvdxjmc +dpponeseven48sevennineeightrkn +five3fournine +2xcckljnjz98mjjscfjsxsevenqhxrqvqmbvhzgkc +sixtwo66469 +79four5eight +jxqktt47 +eight36 +rsjlmlj5oneightc +xczzpjknphtspmh7eightvfzjjk2five +kmznfcxhsn8fivethreexnineone2 +four6six +2hhnine627 +eightnine1vkdpgvxgm +8three6pvtqmfdxdkxps +7frnthree +78tworhldxeighttphp +dcmv6vvfbzjdtphbpssjnnqdmrgzgkfdveightwov +zsbmctdseven1snxmqxzgsix9 +lxtwo4sevenxsix +tkdkqfpj5eightq8two447 +seven1onesixfivest +45six5sevenseven +jpxxdjphzskpbrllninexmmmdxrznzthreecvsmjssmfxczhm5 +4flhfqlphfcnn9sevenx3 +16ttrmgqninefsgvkt5four +3snfkm +6threetwoglgkbqjlsn4fivehcgfour +ninesixfive1ninelgdmhkqrvn +two3pxvlsheight +two51 +sixninezkbfbxgzznlgtpxgcpzvgkczdbfive8three +fourjljzqgbsthreeqjdgsqpspnsixxnglmkss5m +32sevenctqtqrqlsfourfoursixrcjztxx +8qlccjngpt +2eight58five +1ninesevenxtlbrq6 +9fivevkmm8tgxfkzvgq +53txg +3xqmjvxkcbjf2 +2fhndgqnqd5 +2vnrpjdb6four79 +7four5 +foursix5hdcg489ninerncnk +6s2jd +fournine8ninejn6rkknh5 +fcfxflzv7seven7 +1fournineqzknrvfhdxfoureight4seveneightwobr +1two3 +twombl5 +fourzjh9six +1ljrvbrqpcchb +11rvqfmcxgg +fiveoneggjpmdt2t +nnjdzhdrkvhpxnprlfrhxpbtpbdxm1xfshdr +five39threehhrhsrhhqkjt9 +hm8nine +3ldckgksm48xc2seven8gbzfq +sixqpcqjzqxsjhr7 +kthreethreelmjfour485 +mnggrsbbnh1 +xfn5 +qzlxtczqlvninekjnbnonefcbqqgfmqf66xpvjgfzjgxvjrcqmzx +krsfvctzfhonejxtqbbnd7eight +tjhgbtqtwoljone9 +mdfntzfpg1fiveninecvxrfnine2 +7hcrxzc +6two6plgrmbnine9sdbvgtnj +threenine4fthstfjzzp +6eighteight9npghczggthreectqssdtp +flc4gtqsjmrddx8eightseven +threeone1oneone7 +gfbfjzltcjfkkrsprgtpfive4 +sixrdzp2onesevenrqrtldnq4c +sevenktwo3threeeightthreenhnmpdmlqjnvl +4eight82717 +nrhqqkmkeightthreenzqbgcphoneseven7 +twoprrgggznzffour5bbrdsvtgkkrbl5nlrkpjmnbzgsbtl +28pvjrszmrdntp4nqdnhkdrtwoxr +sixsix9five4 +lxchg91threethree74 +6bmxblxdkghqdjqgqbrqtxknvdsevenztgspsfh83 +39bsspvhslzkmrnzxtlxsbhk4 +74seveneight9ninedgzgjdvxgvrnfz +fourxvvqsfktptjbsb69 +rxsevenfive5vx9 +72six7 +five5lcxv2jvsssxqjtmzclfdfourfive +87three9 +6rckksfour413331 +33gtz +xkmxtvzhgxqqmknn9pzhgjxqseight +8threefivedrtlgrnqfouroneq +6snzkxjcfive62dqtqmtwoxnine +zxtjclonefour1eight5eight1 +qlffthreeseven2three +xfppngbg5six3two8nine +ninesevensevencfhppvhdnfour8 +xhvnm1 +9threecbdccktrkfourfour9twoneqd +1five4fivenine +jcscpdtzk757nine8 +sevenninesixxkzzzbfour2three +sixthreetwovfqxtbvcrrjtwo3four9 +nzdjhtlqfnxmrzvgrzkfmm7mhmvbbxfd +3seven2eight99 +two6nineljvxs5eightseven3 +55fivezgbmcdpv +hkgvvrtrtwopjbqhtts8seven +c138 +mnrnhqtzthreesnnj2 +81 +qscxbblvsxsgtcpr4cphmxgmbrb +4six2mrvdpxqvhngrrzhjdjfp +4tmrlmdfivefivethree7 +363 +8488one +827pcxnhpk +ckbdqdvhdd4hrb9nnghltwo +5onecjjfdfrxppqkhrpthree5lr4 +62lvlsp2sixfive5 +czxfkhcbvcdhdzx2 +jzdgngb68 +fourtwo18pxkttcr8four +bkttjvvmxvzkhmxtpqrxxhslstwo6five22 +four26mcvb2fivepone +dzptwo5ninejgjrfour +nrhqqnjfour9four +ffoneightpxp41six +threeninehzmrh8dzvmpgrhsv +5onefour5 +jdl5fourtwo8 +threefour8seventwo1seven +lvkjd6five6fxkfthxkgmfour6 +three3seventhreepbsgc +7threethree6fgmfgcv6glrk +nine3five +54one9 +jhvqhrvqfrfgpdrh3three5 +3psztbfour4 +nlffive1nxcqpfour232 +3threetwosgsbdjnt +dtfstb1qhggj +qnnp9twojdg4kfzvtbsevenfour +qfnmdkfkpndd36sixsixfourseven +8seven7oneseven9x4five +4847onetgmsbjjqhtfiveksmmlftk +fivesixlklrnhtdfg3 +cpcqone1pnxkhrkdhhzheightlpb5three +eighttwo6 +seven2fourfourvfzxqbh7 +frf1fivesix3snnlpgpc7 +svtvfcsevenhszznbzpfiveeight2 +lqpqzthree5mcmzpqlxkgpssix +9sltfzqsczpjbndmqbccgmq +5six9fourxppzkgbj6 +8dqhklnxseven1 +3two4 +ktvlhmq3xzmcztbplxlqzpqmoneightffd +76dklx7two8nine5vgvh +xmgjgfz4 +two7tcnceight9 +ninecvfgpbrqcgvplt32six +g3rcbzqxnjllqoneklpbjzbqbseven +svkf8ggdnmeighthhjlz3four +hfdb44zqjmxbrft3qrpgvjngc1 +dzsbnsrg35tm +qchpdcg2 +9775fcg91 +gdrhdgmfdk77eight +14bsixthreeseven +two1twoninepkkvhlzlt3 +kvslhphhj9fourvljqbfive +8nc6 +qg7six +7vkgv8 +td5fivefive +xvfour8jttrsvvjkkdxxzjsl +7qbgdfkj4fourfivenmqtfmgeight +eightfourdzxpfggzxcqrmtxnggchlqtwokcnrdhqf1 +lbhcptlfhflgthreefive9cpprdlbv +nine7941cfxnxszfivebm +ninenhgpj7fourfour9 +456xg +ninethreesqdp11four32lgdl +38trrgt7 +tnhhxlm3rvzvxmmcgpxm +oneqtmg25snbgzfhtkq8hdlvszrclcsrhqsdn +3cjndzmkfx +clxvdv7seven +five6three1 +8sixfour36seven9mlxmrx7 +vdrk27jnrbrvdrnine2nvnlkcszoneightchk +67drgjqrqdktplq +36pprvngxrrjtnpffmrxxdl +hkkrgxtpvzzmcrfcbcjzbpnvls88hrxl +b4jkeightsevenmxkdpvdpt857 +6eighteight2four +eights73five +fiveslpjvzjlpvzone41nine +smnmlrxx7 +onesixfive4 +8s75eightone +1fivecpqsxm +99743ninesix +twopzflcvxsgzn1v8 +9three49 +two2sevenf8sixvdpxzgxbmkrz2 +sevenfive6shhbqhgqqhstdrnfxsjtjvnine +kzqsvn29s +threenlrrhz4ttqljvr +qx9sfdx +nhsbgsvvp7 +876eightfivetprjjbxhzbfpqgltt1 +six3xdjtphrm1pbjvjfn +nflcpmjpt6six9two6xvbmbm +fmlglbgmhvseven4nnkkgcmbv9chmthxvztgsevenbtzs +7bkmchf4five +xgglktnbeight183twonine +onecbpdv9 +fhhmddrnlnkvlb5drtcbrjprzcqlj7mgspc +7threexkfjklvzcfourtnrgmpveightfour8 +6rhmcblhfourtwo3two +one4fiveonenine +slksfchvlgblninefszfbksddgvd4 +four742sbseven3lk +8qbchrfldtvppv6fourzfivez +ninephsmnnvsfour1 +one5kvcrtnc5sixonehjfxnsixfqhzjj +8drgrzngh +16eight8rczbjmblhn +threejpgjbpfdbvgdpftwo96 +sfkhvjgd2smgfkr9two27 +threeqpdeight3 +threesevenxblrmqkvzvrbhsix4 +9seven2vlhsninenvptdvmrpzbrlpfhfnl +xkjpdpgsrtvlfg1eight +seven254 +three8fnmcfhrdtjdlpfqlqhgx +21bkjv54s8 +82ddfour6vcggxhlmpfivesix +cdsbgtpqthreefivel8nine +5five5cksct7bvjbtdjkcz +64fhm +tqk5 +3mhzkhtfzscpgfctfskdn2five +cvmvthreez8fivegvcbsxj35nfxdshqz +sevenqlqmkhdjpmsjrtggqzfive35scmnfpmhmp +sixfive2 +6sevensvqhhfivetwo +eightthree84 +82six8 +8bbhrkzgtg59cpgdvb +11three3hfjkvmsl +qdljkm792 +eightgq5xgskvtpgmhxsnhzlqhnksxflvx +ghdhv1seventhree55fourthreemrlhq +oneonethree3zm +3twobsxqfsfnine +eightsbznkpzsqqtpxfhlfr5 +sevenchs2twoeight +ninezjtxp7bpzdgtoneeightoneighth +fmkbvzzgvl46fiveoneightqn +kvsonevxtmmxnfour4lpxjrbcfoursixp +391onelktkfd1three2twonels +pn2 +3cmsmfvjchflngkrbtsfrblltwo +eightfour8ninesix29 +dpdvnonefour2eightbzzrvthmkgfcdv5 +59sfiverboneone3 +6xrqq1 +9bczfbfbhkntmdmseven68 +npqm35qszmptx +fivepkdlmonefivesixz252 +dzrtwonetbbv9twovrsp +fpkfourfivendkhz6five +86dknvgcnmcslmztwo3 +fivetxrrzjpb6tqseightjthnhn +362zhtxdgvcdgnzv55 +eightsevenbllbgvdonethreeprglpjhxhqfdn6csnghrtl +5fourc +8fournine3svdlh5sevenoneighttsq +eightjkqmgljpprcpblvrthreeseven8fourone7 +vqrqlhmb9seven231vbfzrrstwohjvdjgg +kk1foursixeight849 +seven13ttbnlr21 +jfgsksrrkjsixsixthreesixfourrbxqzdhc9 +3fiveeightqbndjdg6pmftqshone +nineoneseventkdpztbkk83two4 +cjdbxhpzr87eight +twosevenkkdhf86sevendzhvkrttjljr +67cdltmnbkktzseightsix7two +three44zqtglqcffrkmhsgjfive +twoonenbf74three9tthsvmngcx +lvrnpvmvgvnnonesix5 +nchcfxxphmnqbhfourxnine52sixj +fourqpvngjszftg88seven +xgzmv133zvjmlfqhcmjbqzfntkjtpdjlkmv +fivejxc4threebzqbhrldsf +glvtpvnsevenqvrtcgjkhkcsix1seven +sjeightwo4fivesevensixnqxsjckfive +z5 +jxxhsmdvkglljhxzxljqz9zplmslcfdxxljtwosixkjxlsrfcx +fiversdslrkcqclzb7zdzlbllfkvphfqhnfour +five1hpdncfpzhdxrhnv4lblgthree7snj +8scqf +threepcfkrhstmsbfvqxsxrctwo185six +7lqvpqxbjrv9nine985 +eight16jvfqcgbmhdgdltxz9 +three8vncqf9 +zrzp9sevenxthpsxtdninebmnhgrkdjqqjfffourblbkch +fiveseven25snpsnjgnfl +ninefourxrtdlb1threefivefive1rbqzfbxtst +three8three7five41 +tcnvsevenz45fngtjljh +txvpst1 +eighthrlbmtk4nssknqmxjvjnqsqlfivekzrphrtwo +two492ninekcjvllckdtkp +48vlvmkcvbsfoursix8 +eight28sixsix3nine45 +jkm8hhqfclneightjlpsnck8dcvlvgkrfprflsvlh +4zxjqlfn +fivebpqfjtcmlsixfour48onejqhzgtftrvkknngf +dkfour7fivezzsjdbnvgninefivenine5 +twoxjqldtk91eightneight +seven57177 +gpbqvlpxvnzgninefoureightthree5 +bzprbrninesnjpgqthreeeightsixtgmvrthfour4 +83brtxx4zzxsxrcfivebzbxlsl +threesevenninetwo8twoone +veightwochrmfrkrcppxkj4tvvzmhqjhnjvtq1threegtmfnnjpxb +3zgqpvq9krslgjgkjmtbsbhbjg +4nine8mhfs67vhdjvsjrlz2 +nine659xrvhhnnbqq7 +bninetwoeight8fxntpdkrfp9eightnb +qtwonecvbgxqfiveoneeight4five +seven926 +shkkksn4onefivethree +eightsevenqvfqmzqsfn1 +sixdgjmtk5fivevqbxxdzrjqdtgnnffzmfqxzjdzhp +stsjcmzbxt1 +rvnone3three9twozchp26 +ninefmpkdlvzfivetwo1 +four4one4vdpgp9lprtqjzmhk +15rpdhczznrzclfcsxdx41 +seven36twopnvjdxrss5 +46ninenine +6jg8xtqfmjffdlfhzrn +2jsixfive573 +two8eight39fbqkdzseven9 +3gnrg5 +hlkk1 +1sevenfive7 +72jvdqmlrddk +ninetwo8hzdninesixnjhgrcsttwo +23cxdccvvjrjfsixlcrmxjkeight +6brqjfjsix56nine3 +ninezveighttwogc5two +ninexskpsth5sevennine +c7jmmjcv +89sixthreeeight71q +fivekccfngmxseven7onernfskqnqfive5 +sevensixone4hfhgs +xq2jxddpdm3nine8ptqlm4 +smsevendj19fbqdjpznfourgqq6 +7147 +znqbfmcpd4twoseven +fhcsmxtdx6 +sxj2tcb92 +6nine6 +qdfknmdzt88 +66threebsndqlkrshfive5 +eight7pckdhlqzrx24 +3ninevk +sevennine3 +8one1rjtnhjx +eightthree3ninekzhtlqsevenssprmrqhhgncrs +6one8nlzxfxvr +4cgm9fivethree +four77gxvdqztzzgbsxhntwortndzqzj +t8three335 +c2rjggzl +jjgjbqgbnz4gdsqk66991 +ninezckbpsr9 +jb5sevenseven +one5nfdcvx +1kbcmclhrh1onejzft +fiveninefivedglztnjxblonehfive3 +6onesixh6onethree9 +spdzhnt5tpzrkh1fxlnine4skgzdln +1onenineqgzcq2eightwonh +vfzvds826vtlrcg6rvseven +vqmoneight9tknqtcsmb +kqrcrqrqjbdeight7ckhr23 +oneeight2 +8eightnhtqcggtxc6dfsfcjfpznmsthree +sxfvfdkff8dvlmbdktsixmzpnxzmml2 +9lgmxktj1frxl diff --git a/examples/typescript_variants/AoC1/step3/.config b/examples/typescript_variants/AoC1/step3/.config new file mode 100644 index 000000000..7d30acab4 --- /dev/null +++ b/examples/typescript_variants/AoC1/step3/.config @@ -0,0 +1 @@ +input.1, readFile1.1, part1.1 \ No newline at end of file diff --git a/examples/typescript_variants/AoC1/step3/Day01.ts b/examples/typescript_variants/AoC1/step3/Day01.ts new file mode 100644 index 000000000..eaee4d2a8 --- /dev/null +++ b/examples/typescript_variants/AoC1/step3/Day01.ts @@ -0,0 +1,11 @@ +import {readFileSync} from 'node:fs'; +const input = readFileSync('input.txt').toString().split('\n'); + +const part1 = (lines:[string]) : number => { + const nums = lines.map(x=>x.replace(/\D/g, "")) + .map(x=>x.charAt(0)+x.charAt(x.length-1)) + .map(x=>parseInt(x)) + .filter(x=>isNaN(x)===false) + .reduce((a,b)=>a+b); + return nums +}; \ No newline at end of file diff --git a/examples/typescript_variants/AoC1/step3/input.txt b/examples/typescript_variants/AoC1/step3/input.txt new file mode 100644 index 000000000..9569e81f4 --- /dev/null +++ b/examples/typescript_variants/AoC1/step3/input.txt @@ -0,0 +1,1000 @@ +2xjzgsjzfhzhm1 +qhklfjd39rpjxhqtftwopfvrrj2eight +95btwo +lfsqldnf3onenplgfxdjzjjnpzfxnineseven +five7fouronesevenpfsrmszpc +xcsfkjqvln2tpm +ncjtcdb625two9 +6srtj3gfghkdtmfzseven +three4fournineone +pcpsxmkhdgsix25six6ngzsqzdcrb +1sixdzhbjvnvgcxmsrlkb9xbjk7t2 +dsxnfkjn2vtwofivethree2 +qfbp2tpgvsxm +kvbhsseven2rkbllhrhvsevenfour2vf +bqbtzbtt3 +ninek6 +3fivebvqhvhlvz +two68jxfnqlzfkninenine8 +vhckhhhb2sixtftjtdjf2nine +4jc +3sevenxlxfnpk +5sjfive +c8bvlkdq283rqfftj +8eight1threehhvmnlft +4sixmfcronelzcpnfourlgdbkgt +hntcjmppp9fmntwokx2 +24mkgr6mx9n4 +cksfkrdmdcmnbmkgk3two4 +twosixthreefivelq3nine +njmrtr6fmldninevcbtxr42 +eightfrdrczdxrcrfxh6 +8sevenonefmfqhtx8lk +lnoneight8twodg +tszrcb7tvvhfive4 +nknphprtv67fivehqlfournine2jk +9eightszgdhftggrktkzbsmnhtwonekh +1onefzkgf2two417 +77fivepsmmpp +bnine7vmttgmdskc +6tnsixclbvkhmsp +ggreightwo1mnsbzmxsdcdrhhg5one +ninetwo6qtbklgb2 +four8fmfxmr +threetxfrsevenvfdgrtsixtwofsq7 +hqxlseven53 +vxqq24eight6 +7psxpgxmkpzkzeight3 +9four7 +stwoone4eightwoj +one38 +9cjlrgrgpfjeighteightdcpjhzbjqcdthree +rqfone2 +dvkxhvkgxcfivescjcnqqnnine2tthreecptkgxmzjsbzdrhk +5lhprmg8two7two3 +5lvtg5sevennine2zrrmghf4seven +fourfive97sevensevensixcsffnlcbtjk +onesixoneninesixnbkf5xpsgsmpvdsdsqdvpjjzp +nineb321mgkpqjqjqh +seven2cstttkvkmpssflkxjmbnvthreefour +six1bmcjbhdgqm6kgzsxbgdqnjqf3four6 +zchkfjxsllkncz175 +vsveightwo8 +fourbtrnfdp2four5 +13dtf8769 +6qfvvdqdrtstwothree4seven8vszpseven +7rgzpxfbczk1fivetwo4two9nine +3sksmfxn +16ninetwonqqmptq +9five4fckzssxsvpzbvlktjzcninethree +3threel889bvbcgvl +threetzzjntxlsd2klrjfnbg87 +3two3qrrdbkbk +29oneightt +7mkpfchstjt7mshqht4fivesix +tvmqndvsix875nine8 +vg7477ninecpnrvnine7 +seveneightmknlqjlstx4zjjrpbhjhnnc8 +8qklthreetwo7tlmrfzvtwo7zvccc +6one1dpstqpmfbhst +sixfourfourseven6rzdkfour +6eighttbltmntb8 +seven72cqslvzpgj +jpvrsgfhtwo5nfc1cgxdrdrbfnseven +four1ninezlhqxtsgfzsevenhspvmxrtztzgtmseven5 +foursixzjvgjgsevensvkd5 +seven121fivefgxhdfive +twoh8 +ghhtttxqgr95 +zkpklcjbjlr2 +nine2mtrdcbrbntrdqninevbkbfg35lnpx +nineninesix68pcvsdnns +rf16one7 +seven276 +sixseven1 +qjxseven9six +7c9xvhgmpf41 +dlzpvdpxseven9nine +mlmlqrpn4twofivesbmhdbcsixtwo +ld74txfzksr5qconenine +six7djcdrtk7chktrh88 +2seven7jtrbhznt +1eighthnhchsevenfive +qdhscpeight8 +12gnxzzm +k7fourmhcfkggt8919np +8zljspvnmlx6four +36twofivethreeptbdrfqzbz7qbjm +bxkbjbzgone3ldhlnhxfcf7btkktspxrtqkxqfdmlqgqvgclb +sevenfourmdrxseven2z2fiveone +8bbprzqrqn +twofivethree95mpqclhfkzlsix +gpfjflrkc96tmsix6dxjnfive +qzeight6 +five5zlthgqjntwotqmnnsd +eight6nbpvfour4kzkvbzrxcmkh +fdkrxdckqbpsklz64fourones8 +5qpldkhltl +27xldkbqbnmrrbqkhmksvk +pjoneightknpcgkkv7cbknrhfdmtdm8 +432xsixvvktflzxone +35fouronemzzszfqppllgchsjjnine +qgcnzcbvsxbtn6lthreenineone +two2fourkdgbfb +fzkmbtvnvj5bzfgvxv3nineknpqzznzmf +9mkqtmlnpzt282dgkmvlsonefourthree +mcqhpkhonethreeninesevenfdsggqnlfcnrft3frqzkscft +847 +gsxvvr6tghfbxxghgv6lplf +fqzgkxkbmkpbhpvpdprmlhsngc5 +qeightwo2threecrjjtv9fourbthree +2eightdcbgfdqzk +fourtwothree5tdzpzfxkpjmlkzzrf +seven633 +8mldn +eightmg7dvjzbngkxmnxdctjtdffive97zpjrjqvp +sixfournineone38eighteight +8mngs412 +3fivefourtwo7five +7sevenjfkcf7rvone8xjdvsc +tljcrzngfdsqctfour6hsnljsxrqdzd +csix7hnkhds4four67 +3cxrlqcnseven4twox3 +rtwonerxcnpqdnzksvzmmndcjlzq2nine6ntfzjdqnrjeight +zbqgrvvvblggbghtfx98 +three2zcpspgtq77vqtgpcxkvq8 +94zksixnvbxrllxln +1eightrctknxkmv9jtwoeight +2onenine5eight58 +four2five +6fourfiveeight +pbfourlzdl4 +4onejrltvhxprhlzctrqzbz5fourseven6 +hlsdjlleightdcmdj8jdg +eightbfkgvbxxm6 +sixseven9hmhchsmqhhtrdftcfivetz +mq4five2fsdhzn +ceight3mncgnineeight8dkqrjjtmc +onefour7eightsix +seven4fqsjk38fhbmn9fgzzcc +9cmb5ninenjsppthpnine5 +qghtvpsqpxptoneljvstwo8lpqcbgtqvjmpq +onelq85dlqpx8 +1threetzsxqtndvhqn +lqdvkonebqjqj9 +3six6 +9two9sixeight776 +scrrprfkblkplgqzzqb2 +18vcrhxb4b +three8nine +1khkncj8fivefourthree2 +ninetwo8tbbsfmkqtt51five +66one88 +ninempgbhpm6seven34 +eightthreetwo4threetwo +vvpqkdonesevendvfrgmhhlsix91threethree +vbskcncpjxtdhqlcone6kgqpz +54lmnnqsrm73 +5mqnmvcbqnz82ninethree +47teightthreehrhtdndrk +fft2foursrdhxkzfourv +tbeight48759eight9twonenl +3sfkvkmvbbm9four9cbjzgllfl +sixqhxeightone7tlsd +22zmllbhcptwo +dqxdjrkmnvkbsxc3ztbseven +oneeight6dcphmnrfltfour +mgxzcfsevenfour4six +sixb8six34gqjtlcq +fiveseventhreexfblvxgkplvbrgpfive1onesix +one3mgqphj5 +7fpzxmmxgnb5 +jbshclzone3oneseven117dkzzdxdd +56five1 +jeightwo1ninemxtvgl717pbv1mqs +3six36 +35mlzjsgxxtg +hmmjgonehjqdcqkh1gskjrmfour7 +eightfiverqbb3 +sixtdkfbglhbjbvthreejsd8tglkrsfktcjt +1eight2mgxrgbbb3 +zzqxvtthreepf3eighttwoonefive +vjnxhl4threetwokj +oneqddgbbqtzsonenxkeightvx7 +nine24 +ftwone2 +53twonehx +two7three4fourhbgninenkvxjjsz +7five62ninefour +53nine7lqthree4 +1six1jn +five5drcjvbgdxzonefourfjdkfive +6onecfninesqfdtxmdhmfvlhbsjv9eight +5dqmfmqbdfdjvpl +qxkqfjshdone2zrmdsts +1qrvnf8zvfour +dht2 +4twoqdrshn87vxldzvnkn1five +4nineh +zctqdcfbseven6three58lzscrpsbb2 +fzmndhssmm3jdzlfourshjkmjkv53gvssnvzsz +five2qkxtfkj3sixshpnzdcjhlcmksnv +bskcmljnq69 +psxkxqztb3xsctsk6qvldjdzzqmgqcxncx2btqxh +onetwosixttghndtzx8 +8twocmnfmslsheighthtxsgjddm +fnvkqndfqmhgscnvq31kvvftxbzhtgzxqtngvqseven +7sevenkhhvtvsbrvcvm8zksvgcfrkgfourtzjvpqstckmmlzz +7hkfiveeightpjhone +8zptwoonemrninefive3spxrlhr +3qvjknqcnngpkninecgsbp3sevenfnpvrcltj +qztwo8678 +bxkj959dntcpzv +4one4 +lstwone347nine +ff79krfbjttqp4seven1 +gjtlbgxdqt7eightsix +8fivefour82threetwo +1zjxthree4 +szgx6fivefour12 +557dspnfzhmlh +5hnfour +847zzkrtjlb +82six +xlnhrcksv3fourzl +2ninetwo8ninelhnsbseven9 +ccseightwo8fiveonetwo5onegkhlg +eightp2onegrmfsnine5one +4five9xnmlldfive +five636 +fivesix29 +34dsbtmlhgggzkqxs7 +twothreesmgjch93mcdndsn +cmnmtzjnmtggseven1tjsshnktffive72 +7xcbpsix6m +7fourthree +7cxnzthree +5eightthree3lpvlfk +4rdnp +one6gmpjfouronettbbjdqsxn +6xtcv +dpspd1cb2onegxsgdtcsix +1eightpseven +ntczqmrclm2 +six7nineeight1 +qrndlfour9bhbmlgj6 +52vhnxvngjjkzt +nine8six +3seventhreesixfpmpbjninesix +seightwoseven4sevenppdnk7 +lnxeightbhxfmdrxcbjzx9sixnine +8ptdmjrd21zrnt1one +one1dmbfournine2 +25five748 +266eightwom +zxfxjn32threelxmqnlcvnknzbn3 +lqmjm2onezseven +sphlhbbz14sixtwosix +sixr9llqxb4 +tnnhlmsix314mqvdlxfour4 +threenjxgtthreethreeeight14one +1fivetwo +hhhtkpvhvg8 +31cslxxzgbktjtwotrzs1one +twoseven9 +4fivenine9332 +six35nineeightwok +nine9fpxgqjrftwovhldfflqthree +434four5threetpcs +ql52kzzgnsgll +onex5145 +gsppnkx1 +22six +zjbbqnbhsdfourmk19sixone +six3onesevensixvnsixone7 +seventhreefive8 +four62four7eightseventwo +2three5jtzmtxhqxhsixxlkmptshb +five3lklnccst1dstgvnprktgcnseven +sevenfour52 +hfxkkbcfpcgzfqsv1three68three +lnqrcdpglf2ksqddhp +13onenbmqvpqsbbf +1bfive +1dmnlscgvfdqrf +bvtwonettkzzxpb4 +5two2t7 +t7djkh +63t86nlhfgqgnrghqone1 +one89eightlmztkcjjnonefive +7twosjmcrlcfqr29lfkrjz +1nine5four +xxjbmsvfxb8 +nxvrvcqkbseven99rbzbdp641 +56fdpx +skszhkqdtonesixth5eight +ninetwo8jqbtwokbhzvv4fiveoneightxb +1threemfcblxjljdtone +fsfgncxvcmszn2pzspkkgqvfxlnbzgjr1 +rrxhnslrkeightgcsbcgdbkplzxbmmlxsn5sfp66 +foureight3 +5rplrmrjtjcfnct9sixfourzptmffrpthree +mld6ztzninesixfour4 +twohbbxmthljpkqthtcgtt8 +ltvgmqgsix89 +6khclqhcvdz24eightseven +6prb +nhsjqtnk6bqzhzvldlcgsmkq1twobfqzm +tfivehmdtxqlsevenzxt1ckjbnttgqctwo4 +ghnjjmtlvfive9znltjfskfnl3vdcjkvqcdplvdmckmfgxq +ztvvbbjx3 +6jhsrszlpsh +4fhtrctvrgmfhdjqvqp8sixnnftggrzlgs2 +bvlqxnjbbjgtfpslpspvpl7jsjlrdfiveeight88 +fsvcxvlc74sevenltx37sevenlbq +fourfivetgkqz5cgj4 +cnrjtfvht74nptvh +oneldnoneone745dhvqnvmlfj +2trhmdcpnreight +dshghlkjzh1kv +threexzkssrxlzzpxsjzbbtthree7 +eightdsqrdllssxv7sevendttwo3three +stz6five9four +jfbfgvfgmvlhjv94 +rcncncfcqsevenjdrtctbbsznpct48cbbxseven +ninevjxzk2two +1qgdcpslvqhjzbgtsbnzcd +kmlzbndds8fivegfdgpfivetwo63 +66mkeightnine1rvfnine4 +nine82 +58ntpkdssixnntjlgfkxq +2jxqttctsxthreepnxsfive +fivekvfkqpc28foursixptgbpfm6 +6twofourslqbzlcsmf +five4vmdl +thx5six +5hfnsqhvcfgckcseven3jgdtkkv +seven6eight65five99 +hplrgdqrjtonesevenseven4z65eight +khkts8hcsfvhvqjv9eightnine48 +pqxztthreeninelxhcxkjclk2 +sixrmfpj6nine4zx +9xtvxkxpjv9 +cmtggbrckmmzffncttxsevenhphmhfgjsr85 +83s4 +26fivefivethreemstzpncmhfm +87eightfourgvmmfbknineone +bdxg2zszhcgtvtseventhmbvfive +zeight8 +eight78dcnq4jtz +67csrthree +3vqxtwonerts +1five3 +sevensixfournineksxkz9bkbgcrjjjhnineeight +8seven29 +9394 +pkqxvl9vbjmqblrksjqcshpzpfrfouroneeightnine +heightwolgpplrbnhrgdkrk25crttkkzkbt +6659eighttwoone +55lzqzng2dmtpq45 +512gpmqpsqfive9eight +eightsnxz58zrbh8fiveeight +six893ninerrxzj +twoflrzzcgninefqqlmmzzqgnjrcxcfour5ninetlcmc +tmfkbgcssdcmkthmx1seven +6three9fourmdpzj +mgprpn68 +xssxrtpntlkppxp958rzd2nine8 +fx15twoeighttfjlcglnbptwo66 +threeseven522 +xrjpstjr2 +6eight1742oneighthhj +1ddfkgjrxfzrhnxtnvfqxdv4 +8hlcxdpkrnrgfzmsschlhcbndkcvdszgqntl +five154sixfourqgffh +5rsvtzgrvq1slrlgqksone6lns +92sevenk3xfrvgddsthree4 +rctlcz67 +2nmrbhnzpf7 +bjmssix1sevenfour4 +744ninefivefivejjcnpgrqxtrctwo +r4five4 +16two2 +threefn8 +3gmsrqtjm +one8tmlnlqvgfone5fivefive +1spllmone9three1xsssk5 +6rlqqblbrxh8 +41qqccnsevengbbrpgcqggtlhtzqcfqzhtx +hzfivethreenine2 +sixeightvcm4lngvkdlpz6dstz +twoeight34tv1 +tgqc6fqsftwoninexncjnrtcgcbrxdmnine +8one27ninerjt3seven +1sjvxlzszhhsix +2xxmpjsfbr +7eight5eight5bzgdpkkpgrn +twozcrxdsix1lrxltrhvznine7twoone +8qlfive8nlmthree39 +4five5five7671 +4fiveqtrngqtbpd74 +vbccfjhjndeight1h +8kfzchkdvfgvlhqzfgseven +6ninexrxsvlmmzrsevenjhzzggfcxqrvfjtnjctveight9 +6fourfourfourxgrgqklnpcsjbsqvhnkjfcjdhdf +65fpnfszb3 +srnhthmpseven1four3rrpznf +vgmqr9zttpdrzjfiveninesevendfive +fournthreesevenseven72seven +9594 +twolhvpfzbfsfourrrcpzzshd66grxddrmkvthree +seven5twotwolpsqlbcqpthree +29eightzjgsfmll +gtkrjrsevenfbjcpjlsmqsfceightseven9 +qkbntcjvfl6three9qhpcptvpkfour7b +gvkhmrljmhrpj956bzxhkljpvpxltctjvvpfjtsnb +rcqlnpcmng6l5vfkpddeightsevenfhmxzztndq +sptdrlsfxpsxff4five +lrzhhxdrkdtbdjbsfourthreemmjjnn1 +9sxthreethree +six9fourseven4 +dpone9fshbbpcm8 +twoczqzvqkcnine6eight +qbtkgxp1fourdz +dxrrsdbmtpnl6hfdtj +sixsvtwo8 +5fxdkhbgqm8fouronefive5 +jqj6lhtbjt +6pdgrsdxghfkhptbjcrrjcsevenbksvmzvnninercz +8rzqvh6ntlg2bfktcphztdkckjg7two +fivesixnine1 +4beightsevenonetwothree8jx +sixfourmvpk6fourtgknrjmxfftnmngjnine9 +68seventwosnqsj +g853seven7 +7ninejqslxmkxpbkxksjcjlnttslpcmsprvgnrxg +jmvqrhdcctwofivev6eightone +ninefiveseven9eighthbb7two +threethreethreerlgqzvsevenx3eight +xbkvgdsrhknine3blt +xzbcgjkkbk1two1zprpn3bcxxhlxjtx7eight +3tflfncljtwo9 +four3seven8one6 +six7vqfive +ddhhgvrkzfhone8 +fqtbnbvdvbklnkmpr89twotwo4 +9two166eight4cfnsstwo +twofive88 +nxpmbfiveeightqmtblmtzpjcnxnxjtwosixtwo9 +fourthreefivedone9jzhrbrzmdqkzmqzfklxq +qbgpfsvlx1eightjsevensixfour +2sevenfqkeight2five +sqnsvsevenrbkhgkbhmmqjztzvn3sevennkcghqqcckp +eighthcrzxpjt1eightone +sixone2 +four56zqxr1lcmblzgdgqjnqb +q6hdldzmjh6ninevjm9 +j82onek67 +5njnffiveshlbqpqhzt +97nineoneightcq +ffivetwo41vnzhfqmrd4 +two2fiveone1nftfhvzkpltvn4three +twofivethree7jlsjxgjfbvnlxhb +rmb4fourlmzgvfcsgn2five +6dthkxkcdbssixdlrb38 +qgbnpdpchmnnftqpeight9xlmlskqhc156drhpf +sevensixsevenjqckcmg6sixxtgvrvm2sgtvrjrq +4nnhmghrqrkcmfmqxtqxncljskfvmhfmgqfour +dlpqjk2fivesix7 +onegtddk5vzgpndqp2five +qsslgone4onelbnbckznrfnjmsgz +pvqdbhjgqrgbqkzgpdbmvninekhvfrmpchhxm2 +tpxvskgzgnnvmnfncvqxxtkmm75vfgmxr4zbpdmdseven +ssnqndqxsevenxztmfq64 +mcxmhtnbczdfnstjn31six +twosixfz5jvbxxlhdklbp1 +five4six952 +vmnhjm3rzgglnmzj318 +dcnprh12qnmmqnvhkrhtrnxs5 +5b +mkfgxmvsixeight5 +crzdkbjthreeone287fourpgzqldn +2cgdd +seven8oneeightllqtfbdtmdnvlcsfh5 +4seven1zqponeeightlplm +c7sevendvmxlfpnr6 +eightlkhjgqj6 +njvmgjdmx2 +9six7 +3cfbjptcp5one8four +eight6kxc8one +6sevenlpbdcgbhxsixfourseven7 +4sixeightsix9hq +6eightb +8eight86jkrdgmxdfourthree +4dxczptzbvjfive56eight +seven3threerpqhsqspsdpvxj2sevensndcxn +zqcbcseventwo4gh16jksxkphgf +44tfour7br +five266five93seven1 +prsbtlbninendbpzv5xx5 +6three2nqgtrlkfxn +ninefourxkrsgshmdd78six7nine +gnkphdvhqk74fptcqgp +cfdmp2 +fzhhdclzncxmg26nineeight4 +seventworlcqhfq2qrfiveqqgmmzdpntfm +onedvsbvstdshtlzs6sixfive +qjfbtdtcknthreeeightsix71 +2ninesixscdxtwo +threerlpjxlzsr9qqzmfbzdtnknn2four +8kxxljngrqsgkxcnlhrlxxfgl57fql7 +vhrjlgqjnnthree4four8fivebfourffcnbghnz +5jb5oneoneonebseven +kbkv3three4rgdkdzkrkk +eightxhxzkbhjxsvfsjfbzghktvlqhseven2xkslcrfsgdc +sevenone6rmkcvfour6jhvhz +threenhfprcngzhcqckchphcninecmqvczqt5 +foureight6 +7fkrgmdrxgdkfpvxkns9 +5onetwoqnp +nine73dbfljgnninecdgxrgkdlsqzflbtwo +five3jcsevenfour8sevenjgfxkfgnlzbkb +lqtvkrfour67gdnrhkfvzgfoureightone +kct1pljt8seven +six269two +64k +41ggbblvhs726 +mbvfq5gghsxtwomngfczfdpb1seven +4ggzmdpbkrczhmmrk5 +317 +pxtgbfnfhqgncrsgtf7sixfour +dvqnfourcsnmcxnxq7ghmjbgmct +vnskfrdcjdoneddjpkcj7fourjjlllonepxlpjkzbzfour +hbdjzfbvrthreekxmlkm49 +trptone5bpsxgl +5one1 +sixsixfzgbninecxssl9 +six7xdnsdgsix4 +fivefive84fxrzgk4eight81 +zszvqhms8sstxvfz +3one3sixbmxbfsdbdtmh +qnfgnjgcv6two57 +5676xzlbzk485seven +five8dbbtpxctf +two1gntvjr +77one +vlnkqvczts5tkghpvthree6krgszgx4 +nine2threefoureight +foursevenhc3twofour +9zzgqfzmfpsfn +ghb57sixeightwofqc +6twovninejckdhmcsxkfoursix5 +oneqxljxjhnineppln419 +one2zlfsxrkfourthreexl7 +nqbtczpblq856one6 +3cxmmzlh1 +frjsdskzk79lcxvjqqdnlqsmbpbdxrxthreeseven +twoone457fivetbq4 +fourtvbdksxsjxzgdk77 +fourgbvdlpbgztwoftmkjkkmthreesix1 +nhrqfbzggrskfgmnbg7sevenfzrnlxfbtc +foursevenmdrnfqsn4jvnrntwo29 +fivevzvszgqvqp6627zqnk +15fcvczdlqprxjzhgbxpxs5 +9fourfivejsgvnf9five +kzlndjrn8rgq +spfqqx3sevenoneldqnqbmspvsixfiveninezmvks +oneseven5 +2eightfour5bqbmsnhmtfivebss +ninejnckkvseven4 +jzhfcmvb8fiveqgq18fivevlpgdnkbq +67four +grzpdtl9 +lzf8fivedr2fivevbpldcone +nine4bdfptdffgkssltwopl +eightlvgfhfbsqrdjrskqkprdlltnzzpfhnczsonetwo5eight +7xqfgzglblftvsqqbgpfmthreesix9jfl2 +eightgngsvqvrhgmvhtqhbpdeightfour6 +1bqvpnggbdrfoureightxmclfpfqgjssrpflnzl +eightfive1qvhhthk9ninetwo +six36fourfivefivezsvndsl5four +jnpzplgbqf6tlzpsgvzhtnkdvhzhbvhps5 +cldz3bfpvdxjmc +dpponeseven48sevennineeightrkn +five3fournine +2xcckljnjz98mjjscfjsxsevenqhxrqvqmbvhzgkc +sixtwo66469 +79four5eight +jxqktt47 +eight36 +rsjlmlj5oneightc +xczzpjknphtspmh7eightvfzjjk2five +kmznfcxhsn8fivethreexnineone2 +four6six +2hhnine627 +eightnine1vkdpgvxgm +8three6pvtqmfdxdkxps +7frnthree +78tworhldxeighttphp +dcmv6vvfbzjdtphbpssjnnqdmrgzgkfdveightwov +zsbmctdseven1snxmqxzgsix9 +lxtwo4sevenxsix +tkdkqfpj5eightq8two447 +seven1onesixfivest +45six5sevenseven +jpxxdjphzskpbrllninexmmmdxrznzthreecvsmjssmfxczhm5 +4flhfqlphfcnn9sevenx3 +16ttrmgqninefsgvkt5four +3snfkm +6threetwoglgkbqjlsn4fivehcgfour +ninesixfive1ninelgdmhkqrvn +two3pxvlsheight +two51 +sixninezkbfbxgzznlgtpxgcpzvgkczdbfive8three +fourjljzqgbsthreeqjdgsqpspnsixxnglmkss5m +32sevenctqtqrqlsfourfoursixrcjztxx +8qlccjngpt +2eight58five +1ninesevenxtlbrq6 +9fivevkmm8tgxfkzvgq +53txg +3xqmjvxkcbjf2 +2fhndgqnqd5 +2vnrpjdb6four79 +7four5 +foursix5hdcg489ninerncnk +6s2jd +fournine8ninejn6rkknh5 +fcfxflzv7seven7 +1fournineqzknrvfhdxfoureight4seveneightwobr +1two3 +twombl5 +fourzjh9six +1ljrvbrqpcchb +11rvqfmcxgg +fiveoneggjpmdt2t +nnjdzhdrkvhpxnprlfrhxpbtpbdxm1xfshdr +five39threehhrhsrhhqkjt9 +hm8nine +3ldckgksm48xc2seven8gbzfq +sixqpcqjzqxsjhr7 +kthreethreelmjfour485 +mnggrsbbnh1 +xfn5 +qzlxtczqlvninekjnbnonefcbqqgfmqf66xpvjgfzjgxvjrcqmzx +krsfvctzfhonejxtqbbnd7eight +tjhgbtqtwoljone9 +mdfntzfpg1fiveninecvxrfnine2 +7hcrxzc +6two6plgrmbnine9sdbvgtnj +threenine4fthstfjzzp +6eighteight9npghczggthreectqssdtp +flc4gtqsjmrddx8eightseven +threeone1oneone7 +gfbfjzltcjfkkrsprgtpfive4 +sixrdzp2onesevenrqrtldnq4c +sevenktwo3threeeightthreenhnmpdmlqjnvl +4eight82717 +nrhqqkmkeightthreenzqbgcphoneseven7 +twoprrgggznzffour5bbrdsvtgkkrbl5nlrkpjmnbzgsbtl +28pvjrszmrdntp4nqdnhkdrtwoxr +sixsix9five4 +lxchg91threethree74 +6bmxblxdkghqdjqgqbrqtxknvdsevenztgspsfh83 +39bsspvhslzkmrnzxtlxsbhk4 +74seveneight9ninedgzgjdvxgvrnfz +fourxvvqsfktptjbsb69 +rxsevenfive5vx9 +72six7 +five5lcxv2jvsssxqjtmzclfdfourfive +87three9 +6rckksfour413331 +33gtz +xkmxtvzhgxqqmknn9pzhgjxqseight +8threefivedrtlgrnqfouroneq +6snzkxjcfive62dqtqmtwoxnine +zxtjclonefour1eight5eight1 +qlffthreeseven2three +xfppngbg5six3two8nine +ninesevensevencfhppvhdnfour8 +xhvnm1 +9threecbdccktrkfourfour9twoneqd +1five4fivenine +jcscpdtzk757nine8 +sevenninesixxkzzzbfour2three +sixthreetwovfqxtbvcrrjtwo3four9 +nzdjhtlqfnxmrzvgrzkfmm7mhmvbbxfd +3seven2eight99 +two6nineljvxs5eightseven3 +55fivezgbmcdpv +hkgvvrtrtwopjbqhtts8seven +c138 +mnrnhqtzthreesnnj2 +81 +qscxbblvsxsgtcpr4cphmxgmbrb +4six2mrvdpxqvhngrrzhjdjfp +4tmrlmdfivefivethree7 +363 +8488one +827pcxnhpk +ckbdqdvhdd4hrb9nnghltwo +5onecjjfdfrxppqkhrpthree5lr4 +62lvlsp2sixfive5 +czxfkhcbvcdhdzx2 +jzdgngb68 +fourtwo18pxkttcr8four +bkttjvvmxvzkhmxtpqrxxhslstwo6five22 +four26mcvb2fivepone +dzptwo5ninejgjrfour +nrhqqnjfour9four +ffoneightpxp41six +threeninehzmrh8dzvmpgrhsv +5onefour5 +jdl5fourtwo8 +threefour8seventwo1seven +lvkjd6five6fxkfthxkgmfour6 +three3seventhreepbsgc +7threethree6fgmfgcv6glrk +nine3five +54one9 +jhvqhrvqfrfgpdrh3three5 +3psztbfour4 +nlffive1nxcqpfour232 +3threetwosgsbdjnt +dtfstb1qhggj +qnnp9twojdg4kfzvtbsevenfour +qfnmdkfkpndd36sixsixfourseven +8seven7oneseven9x4five +4847onetgmsbjjqhtfiveksmmlftk +fivesixlklrnhtdfg3 +cpcqone1pnxkhrkdhhzheightlpb5three +eighttwo6 +seven2fourfourvfzxqbh7 +frf1fivesix3snnlpgpc7 +svtvfcsevenhszznbzpfiveeight2 +lqpqzthree5mcmzpqlxkgpssix +9sltfzqsczpjbndmqbccgmq +5six9fourxppzkgbj6 +8dqhklnxseven1 +3two4 +ktvlhmq3xzmcztbplxlqzpqmoneightffd +76dklx7two8nine5vgvh +xmgjgfz4 +two7tcnceight9 +ninecvfgpbrqcgvplt32six +g3rcbzqxnjllqoneklpbjzbqbseven +svkf8ggdnmeighthhjlz3four +hfdb44zqjmxbrft3qrpgvjngc1 +dzsbnsrg35tm +qchpdcg2 +9775fcg91 +gdrhdgmfdk77eight +14bsixthreeseven +two1twoninepkkvhlzlt3 +kvslhphhj9fourvljqbfive +8nc6 +qg7six +7vkgv8 +td5fivefive +xvfour8jttrsvvjkkdxxzjsl +7qbgdfkj4fourfivenmqtfmgeight +eightfourdzxpfggzxcqrmtxnggchlqtwokcnrdhqf1 +lbhcptlfhflgthreefive9cpprdlbv +nine7941cfxnxszfivebm +ninenhgpj7fourfour9 +456xg +ninethreesqdp11four32lgdl +38trrgt7 +tnhhxlm3rvzvxmmcgpxm +oneqtmg25snbgzfhtkq8hdlvszrclcsrhqsdn +3cjndzmkfx +clxvdv7seven +five6three1 +8sixfour36seven9mlxmrx7 +vdrk27jnrbrvdrnine2nvnlkcszoneightchk +67drgjqrqdktplq +36pprvngxrrjtnpffmrxxdl +hkkrgxtpvzzmcrfcbcjzbpnvls88hrxl +b4jkeightsevenmxkdpvdpt857 +6eighteight2four +eights73five +fiveslpjvzjlpvzone41nine +smnmlrxx7 +onesixfive4 +8s75eightone +1fivecpqsxm +99743ninesix +twopzflcvxsgzn1v8 +9three49 +two2sevenf8sixvdpxzgxbmkrz2 +sevenfive6shhbqhgqqhstdrnfxsjtjvnine +kzqsvn29s +threenlrrhz4ttqljvr +qx9sfdx +nhsbgsvvp7 +876eightfivetprjjbxhzbfpqgltt1 +six3xdjtphrm1pbjvjfn +nflcpmjpt6six9two6xvbmbm +fmlglbgmhvseven4nnkkgcmbv9chmthxvztgsevenbtzs +7bkmchf4five +xgglktnbeight183twonine +onecbpdv9 +fhhmddrnlnkvlb5drtcbrjprzcqlj7mgspc +7threexkfjklvzcfourtnrgmpveightfour8 +6rhmcblhfourtwo3two +one4fiveonenine +slksfchvlgblninefszfbksddgvd4 +four742sbseven3lk +8qbchrfldtvppv6fourzfivez +ninephsmnnvsfour1 +one5kvcrtnc5sixonehjfxnsixfqhzjj +8drgrzngh +16eight8rczbjmblhn +threejpgjbpfdbvgdpftwo96 +sfkhvjgd2smgfkr9two27 +threeqpdeight3 +threesevenxblrmqkvzvrbhsix4 +9seven2vlhsninenvptdvmrpzbrlpfhfnl +xkjpdpgsrtvlfg1eight +seven254 +three8fnmcfhrdtjdlpfqlqhgx +21bkjv54s8 +82ddfour6vcggxhlmpfivesix +cdsbgtpqthreefivel8nine +5five5cksct7bvjbtdjkcz +64fhm +tqk5 +3mhzkhtfzscpgfctfskdn2five +cvmvthreez8fivegvcbsxj35nfxdshqz +sevenqlqmkhdjpmsjrtggqzfive35scmnfpmhmp +sixfive2 +6sevensvqhhfivetwo +eightthree84 +82six8 +8bbhrkzgtg59cpgdvb +11three3hfjkvmsl +qdljkm792 +eightgq5xgskvtpgmhxsnhzlqhnksxflvx +ghdhv1seventhree55fourthreemrlhq +oneonethree3zm +3twobsxqfsfnine +eightsbznkpzsqqtpxfhlfr5 +sevenchs2twoeight +ninezjtxp7bpzdgtoneeightoneighth +fmkbvzzgvl46fiveoneightqn +kvsonevxtmmxnfour4lpxjrbcfoursixp +391onelktkfd1three2twonels +pn2 +3cmsmfvjchflngkrbtsfrblltwo +eightfour8ninesix29 +dpdvnonefour2eightbzzrvthmkgfcdv5 +59sfiverboneone3 +6xrqq1 +9bczfbfbhkntmdmseven68 +npqm35qszmptx +fivepkdlmonefivesixz252 +dzrtwonetbbv9twovrsp +fpkfourfivendkhz6five +86dknvgcnmcslmztwo3 +fivetxrrzjpb6tqseightjthnhn +362zhtxdgvcdgnzv55 +eightsevenbllbgvdonethreeprglpjhxhqfdn6csnghrtl +5fourc +8fournine3svdlh5sevenoneighttsq +eightjkqmgljpprcpblvrthreeseven8fourone7 +vqrqlhmb9seven231vbfzrrstwohjvdjgg +kk1foursixeight849 +seven13ttbnlr21 +jfgsksrrkjsixsixthreesixfourrbxqzdhc9 +3fiveeightqbndjdg6pmftqshone +nineoneseventkdpztbkk83two4 +cjdbxhpzr87eight +twosevenkkdhf86sevendzhvkrttjljr +67cdltmnbkktzseightsix7two +three44zqtglqcffrkmhsgjfive +twoonenbf74three9tthsvmngcx +lvrnpvmvgvnnonesix5 +nchcfxxphmnqbhfourxnine52sixj +fourqpvngjszftg88seven +xgzmv133zvjmlfqhcmjbqzfntkjtpdjlkmv +fivejxc4threebzqbhrldsf +glvtpvnsevenqvrtcgjkhkcsix1seven +sjeightwo4fivesevensixnqxsjckfive +z5 +jxxhsmdvkglljhxzxljqz9zplmslcfdxxljtwosixkjxlsrfcx +fiversdslrkcqclzb7zdzlbllfkvphfqhnfour +five1hpdncfpzhdxrhnv4lblgthree7snj +8scqf +threepcfkrhstmsbfvqxsxrctwo185six +7lqvpqxbjrv9nine985 +eight16jvfqcgbmhdgdltxz9 +three8vncqf9 +zrzp9sevenxthpsxtdninebmnhgrkdjqqjfffourblbkch +fiveseven25snpsnjgnfl +ninefourxrtdlb1threefivefive1rbqzfbxtst +three8three7five41 +tcnvsevenz45fngtjljh +txvpst1 +eighthrlbmtk4nssknqmxjvjnqsqlfivekzrphrtwo +two492ninekcjvllckdtkp +48vlvmkcvbsfoursix8 +eight28sixsix3nine45 +jkm8hhqfclneightjlpsnck8dcvlvgkrfprflsvlh +4zxjqlfn +fivebpqfjtcmlsixfour48onejqhzgtftrvkknngf +dkfour7fivezzsjdbnvgninefivenine5 +twoxjqldtk91eightneight +seven57177 +gpbqvlpxvnzgninefoureightthree5 +bzprbrninesnjpgqthreeeightsixtgmvrthfour4 +83brtxx4zzxsxrcfivebzbxlsl +threesevenninetwo8twoone +veightwochrmfrkrcppxkj4tvvzmhqjhnjvtq1threegtmfnnjpxb +3zgqpvq9krslgjgkjmtbsbhbjg +4nine8mhfs67vhdjvsjrlz2 +nine659xrvhhnnbqq7 +bninetwoeight8fxntpdkrfp9eightnb +qtwonecvbgxqfiveoneeight4five +seven926 +shkkksn4onefivethree +eightsevenqvfqmzqsfn1 +sixdgjmtk5fivevqbxxdzrjqdtgnnffzmfqxzjdzhp +stsjcmzbxt1 +rvnone3three9twozchp26 +ninefmpkdlvzfivetwo1 +four4one4vdpgp9lprtqjzmhk +15rpdhczznrzclfcsxdx41 +seven36twopnvjdxrss5 +46ninenine +6jg8xtqfmjffdlfhzrn +2jsixfive573 +two8eight39fbqkdzseven9 +3gnrg5 +hlkk1 +1sevenfive7 +72jvdqmlrddk +ninetwo8hzdninesixnjhgrcsttwo +23cxdccvvjrjfsixlcrmxjkeight +6brqjfjsix56nine3 +ninezveighttwogc5two +ninexskpsth5sevennine +c7jmmjcv +89sixthreeeight71q +fivekccfngmxseven7onernfskqnqfive5 +sevensixone4hfhgs +xq2jxddpdm3nine8ptqlm4 +smsevendj19fbqdjpznfourgqq6 +7147 +znqbfmcpd4twoseven +fhcsmxtdx6 +sxj2tcb92 +6nine6 +qdfknmdzt88 +66threebsndqlkrshfive5 +eight7pckdhlqzrx24 +3ninevk +sevennine3 +8one1rjtnhjx +eightthree3ninekzhtlqsevenssprmrqhhgncrs +6one8nlzxfxvr +4cgm9fivethree +four77gxvdqztzzgbsxhntwortndzqzj +t8three335 +c2rjggzl +jjgjbqgbnz4gdsqk66991 +ninezckbpsr9 +jb5sevenseven +one5nfdcvx +1kbcmclhrh1onejzft +fiveninefivedglztnjxblonehfive3 +6onesixh6onethree9 +spdzhnt5tpzrkh1fxlnine4skgzdln +1onenineqgzcq2eightwonh +vfzvds826vtlrcg6rvseven +vqmoneight9tknqtcsmb +kqrcrqrqjbdeight7ckhr23 +oneeight2 +8eightnhtqcggtxc6dfsfcjfpznmsthree +sxfvfdkff8dvlmbdktsixmzpnxzmml2 +9lgmxktj1frxl diff --git a/examples/typescript_variants/AoC1/step4/.config b/examples/typescript_variants/AoC1/step4/.config new file mode 100644 index 000000000..3e0e6adcb --- /dev/null +++ b/examples/typescript_variants/AoC1/step4/.config @@ -0,0 +1 @@ +input.1, readFile1.1, part1.2 \ No newline at end of file diff --git a/examples/typescript_variants/AoC1/step4/Day01.ts b/examples/typescript_variants/AoC1/step4/Day01.ts new file mode 100644 index 000000000..b246426bf --- /dev/null +++ b/examples/typescript_variants/AoC1/step4/Day01.ts @@ -0,0 +1,14 @@ +import {readFileSync} from 'node:fs'; +const input = readFileSync('input.txt').toString().split('\n'); + +const part1 = (lines:[string]) : number => { + const nums = lines.map(x=>x.replace(/\D/g, "")) + .map(x=>x.charAt(0)+x.charAt(x.length-1)) + .map(x=>parseInt(x)) + .filter(x=>isNaN(x)===false) + .reduce((a,b)=>a+b); + return nums +}; + +const p1 = part1(input); +console.log("Part 1: " + p1); \ No newline at end of file diff --git a/examples/typescript_variants/AoC1/step4/input.txt b/examples/typescript_variants/AoC1/step4/input.txt new file mode 100644 index 000000000..9569e81f4 --- /dev/null +++ b/examples/typescript_variants/AoC1/step4/input.txt @@ -0,0 +1,1000 @@ +2xjzgsjzfhzhm1 +qhklfjd39rpjxhqtftwopfvrrj2eight +95btwo +lfsqldnf3onenplgfxdjzjjnpzfxnineseven +five7fouronesevenpfsrmszpc +xcsfkjqvln2tpm +ncjtcdb625two9 +6srtj3gfghkdtmfzseven +three4fournineone +pcpsxmkhdgsix25six6ngzsqzdcrb +1sixdzhbjvnvgcxmsrlkb9xbjk7t2 +dsxnfkjn2vtwofivethree2 +qfbp2tpgvsxm +kvbhsseven2rkbllhrhvsevenfour2vf +bqbtzbtt3 +ninek6 +3fivebvqhvhlvz +two68jxfnqlzfkninenine8 +vhckhhhb2sixtftjtdjf2nine +4jc +3sevenxlxfnpk +5sjfive +c8bvlkdq283rqfftj +8eight1threehhvmnlft +4sixmfcronelzcpnfourlgdbkgt +hntcjmppp9fmntwokx2 +24mkgr6mx9n4 +cksfkrdmdcmnbmkgk3two4 +twosixthreefivelq3nine +njmrtr6fmldninevcbtxr42 +eightfrdrczdxrcrfxh6 +8sevenonefmfqhtx8lk +lnoneight8twodg +tszrcb7tvvhfive4 +nknphprtv67fivehqlfournine2jk +9eightszgdhftggrktkzbsmnhtwonekh +1onefzkgf2two417 +77fivepsmmpp +bnine7vmttgmdskc +6tnsixclbvkhmsp +ggreightwo1mnsbzmxsdcdrhhg5one +ninetwo6qtbklgb2 +four8fmfxmr +threetxfrsevenvfdgrtsixtwofsq7 +hqxlseven53 +vxqq24eight6 +7psxpgxmkpzkzeight3 +9four7 +stwoone4eightwoj +one38 +9cjlrgrgpfjeighteightdcpjhzbjqcdthree +rqfone2 +dvkxhvkgxcfivescjcnqqnnine2tthreecptkgxmzjsbzdrhk +5lhprmg8two7two3 +5lvtg5sevennine2zrrmghf4seven +fourfive97sevensevensixcsffnlcbtjk +onesixoneninesixnbkf5xpsgsmpvdsdsqdvpjjzp +nineb321mgkpqjqjqh +seven2cstttkvkmpssflkxjmbnvthreefour +six1bmcjbhdgqm6kgzsxbgdqnjqf3four6 +zchkfjxsllkncz175 +vsveightwo8 +fourbtrnfdp2four5 +13dtf8769 +6qfvvdqdrtstwothree4seven8vszpseven +7rgzpxfbczk1fivetwo4two9nine +3sksmfxn +16ninetwonqqmptq +9five4fckzssxsvpzbvlktjzcninethree +3threel889bvbcgvl +threetzzjntxlsd2klrjfnbg87 +3two3qrrdbkbk +29oneightt +7mkpfchstjt7mshqht4fivesix +tvmqndvsix875nine8 +vg7477ninecpnrvnine7 +seveneightmknlqjlstx4zjjrpbhjhnnc8 +8qklthreetwo7tlmrfzvtwo7zvccc +6one1dpstqpmfbhst +sixfourfourseven6rzdkfour +6eighttbltmntb8 +seven72cqslvzpgj +jpvrsgfhtwo5nfc1cgxdrdrbfnseven +four1ninezlhqxtsgfzsevenhspvmxrtztzgtmseven5 +foursixzjvgjgsevensvkd5 +seven121fivefgxhdfive +twoh8 +ghhtttxqgr95 +zkpklcjbjlr2 +nine2mtrdcbrbntrdqninevbkbfg35lnpx +nineninesix68pcvsdnns +rf16one7 +seven276 +sixseven1 +qjxseven9six +7c9xvhgmpf41 +dlzpvdpxseven9nine +mlmlqrpn4twofivesbmhdbcsixtwo +ld74txfzksr5qconenine +six7djcdrtk7chktrh88 +2seven7jtrbhznt +1eighthnhchsevenfive +qdhscpeight8 +12gnxzzm +k7fourmhcfkggt8919np +8zljspvnmlx6four +36twofivethreeptbdrfqzbz7qbjm +bxkbjbzgone3ldhlnhxfcf7btkktspxrtqkxqfdmlqgqvgclb +sevenfourmdrxseven2z2fiveone +8bbprzqrqn +twofivethree95mpqclhfkzlsix +gpfjflrkc96tmsix6dxjnfive +qzeight6 +five5zlthgqjntwotqmnnsd +eight6nbpvfour4kzkvbzrxcmkh +fdkrxdckqbpsklz64fourones8 +5qpldkhltl +27xldkbqbnmrrbqkhmksvk +pjoneightknpcgkkv7cbknrhfdmtdm8 +432xsixvvktflzxone +35fouronemzzszfqppllgchsjjnine +qgcnzcbvsxbtn6lthreenineone +two2fourkdgbfb +fzkmbtvnvj5bzfgvxv3nineknpqzznzmf +9mkqtmlnpzt282dgkmvlsonefourthree +mcqhpkhonethreeninesevenfdsggqnlfcnrft3frqzkscft +847 +gsxvvr6tghfbxxghgv6lplf +fqzgkxkbmkpbhpvpdprmlhsngc5 +qeightwo2threecrjjtv9fourbthree +2eightdcbgfdqzk +fourtwothree5tdzpzfxkpjmlkzzrf +seven633 +8mldn +eightmg7dvjzbngkxmnxdctjtdffive97zpjrjqvp +sixfournineone38eighteight +8mngs412 +3fivefourtwo7five +7sevenjfkcf7rvone8xjdvsc +tljcrzngfdsqctfour6hsnljsxrqdzd +csix7hnkhds4four67 +3cxrlqcnseven4twox3 +rtwonerxcnpqdnzksvzmmndcjlzq2nine6ntfzjdqnrjeight +zbqgrvvvblggbghtfx98 +three2zcpspgtq77vqtgpcxkvq8 +94zksixnvbxrllxln +1eightrctknxkmv9jtwoeight +2onenine5eight58 +four2five +6fourfiveeight +pbfourlzdl4 +4onejrltvhxprhlzctrqzbz5fourseven6 +hlsdjlleightdcmdj8jdg +eightbfkgvbxxm6 +sixseven9hmhchsmqhhtrdftcfivetz +mq4five2fsdhzn +ceight3mncgnineeight8dkqrjjtmc +onefour7eightsix +seven4fqsjk38fhbmn9fgzzcc +9cmb5ninenjsppthpnine5 +qghtvpsqpxptoneljvstwo8lpqcbgtqvjmpq +onelq85dlqpx8 +1threetzsxqtndvhqn +lqdvkonebqjqj9 +3six6 +9two9sixeight776 +scrrprfkblkplgqzzqb2 +18vcrhxb4b +three8nine +1khkncj8fivefourthree2 +ninetwo8tbbsfmkqtt51five +66one88 +ninempgbhpm6seven34 +eightthreetwo4threetwo +vvpqkdonesevendvfrgmhhlsix91threethree +vbskcncpjxtdhqlcone6kgqpz +54lmnnqsrm73 +5mqnmvcbqnz82ninethree +47teightthreehrhtdndrk +fft2foursrdhxkzfourv +tbeight48759eight9twonenl +3sfkvkmvbbm9four9cbjzgllfl +sixqhxeightone7tlsd +22zmllbhcptwo +dqxdjrkmnvkbsxc3ztbseven +oneeight6dcphmnrfltfour +mgxzcfsevenfour4six +sixb8six34gqjtlcq +fiveseventhreexfblvxgkplvbrgpfive1onesix +one3mgqphj5 +7fpzxmmxgnb5 +jbshclzone3oneseven117dkzzdxdd +56five1 +jeightwo1ninemxtvgl717pbv1mqs +3six36 +35mlzjsgxxtg +hmmjgonehjqdcqkh1gskjrmfour7 +eightfiverqbb3 +sixtdkfbglhbjbvthreejsd8tglkrsfktcjt +1eight2mgxrgbbb3 +zzqxvtthreepf3eighttwoonefive +vjnxhl4threetwokj +oneqddgbbqtzsonenxkeightvx7 +nine24 +ftwone2 +53twonehx +two7three4fourhbgninenkvxjjsz +7five62ninefour +53nine7lqthree4 +1six1jn +five5drcjvbgdxzonefourfjdkfive +6onecfninesqfdtxmdhmfvlhbsjv9eight +5dqmfmqbdfdjvpl +qxkqfjshdone2zrmdsts +1qrvnf8zvfour +dht2 +4twoqdrshn87vxldzvnkn1five +4nineh +zctqdcfbseven6three58lzscrpsbb2 +fzmndhssmm3jdzlfourshjkmjkv53gvssnvzsz +five2qkxtfkj3sixshpnzdcjhlcmksnv +bskcmljnq69 +psxkxqztb3xsctsk6qvldjdzzqmgqcxncx2btqxh +onetwosixttghndtzx8 +8twocmnfmslsheighthtxsgjddm +fnvkqndfqmhgscnvq31kvvftxbzhtgzxqtngvqseven +7sevenkhhvtvsbrvcvm8zksvgcfrkgfourtzjvpqstckmmlzz +7hkfiveeightpjhone +8zptwoonemrninefive3spxrlhr +3qvjknqcnngpkninecgsbp3sevenfnpvrcltj +qztwo8678 +bxkj959dntcpzv +4one4 +lstwone347nine +ff79krfbjttqp4seven1 +gjtlbgxdqt7eightsix +8fivefour82threetwo +1zjxthree4 +szgx6fivefour12 +557dspnfzhmlh +5hnfour +847zzkrtjlb +82six +xlnhrcksv3fourzl +2ninetwo8ninelhnsbseven9 +ccseightwo8fiveonetwo5onegkhlg +eightp2onegrmfsnine5one +4five9xnmlldfive +five636 +fivesix29 +34dsbtmlhgggzkqxs7 +twothreesmgjch93mcdndsn +cmnmtzjnmtggseven1tjsshnktffive72 +7xcbpsix6m +7fourthree +7cxnzthree +5eightthree3lpvlfk +4rdnp +one6gmpjfouronettbbjdqsxn +6xtcv +dpspd1cb2onegxsgdtcsix +1eightpseven +ntczqmrclm2 +six7nineeight1 +qrndlfour9bhbmlgj6 +52vhnxvngjjkzt +nine8six +3seventhreesixfpmpbjninesix +seightwoseven4sevenppdnk7 +lnxeightbhxfmdrxcbjzx9sixnine +8ptdmjrd21zrnt1one +one1dmbfournine2 +25five748 +266eightwom +zxfxjn32threelxmqnlcvnknzbn3 +lqmjm2onezseven +sphlhbbz14sixtwosix +sixr9llqxb4 +tnnhlmsix314mqvdlxfour4 +threenjxgtthreethreeeight14one +1fivetwo +hhhtkpvhvg8 +31cslxxzgbktjtwotrzs1one +twoseven9 +4fivenine9332 +six35nineeightwok +nine9fpxgqjrftwovhldfflqthree +434four5threetpcs +ql52kzzgnsgll +onex5145 +gsppnkx1 +22six +zjbbqnbhsdfourmk19sixone +six3onesevensixvnsixone7 +seventhreefive8 +four62four7eightseventwo +2three5jtzmtxhqxhsixxlkmptshb +five3lklnccst1dstgvnprktgcnseven +sevenfour52 +hfxkkbcfpcgzfqsv1three68three +lnqrcdpglf2ksqddhp +13onenbmqvpqsbbf +1bfive +1dmnlscgvfdqrf +bvtwonettkzzxpb4 +5two2t7 +t7djkh +63t86nlhfgqgnrghqone1 +one89eightlmztkcjjnonefive +7twosjmcrlcfqr29lfkrjz +1nine5four +xxjbmsvfxb8 +nxvrvcqkbseven99rbzbdp641 +56fdpx +skszhkqdtonesixth5eight +ninetwo8jqbtwokbhzvv4fiveoneightxb +1threemfcblxjljdtone +fsfgncxvcmszn2pzspkkgqvfxlnbzgjr1 +rrxhnslrkeightgcsbcgdbkplzxbmmlxsn5sfp66 +foureight3 +5rplrmrjtjcfnct9sixfourzptmffrpthree +mld6ztzninesixfour4 +twohbbxmthljpkqthtcgtt8 +ltvgmqgsix89 +6khclqhcvdz24eightseven +6prb +nhsjqtnk6bqzhzvldlcgsmkq1twobfqzm +tfivehmdtxqlsevenzxt1ckjbnttgqctwo4 +ghnjjmtlvfive9znltjfskfnl3vdcjkvqcdplvdmckmfgxq +ztvvbbjx3 +6jhsrszlpsh +4fhtrctvrgmfhdjqvqp8sixnnftggrzlgs2 +bvlqxnjbbjgtfpslpspvpl7jsjlrdfiveeight88 +fsvcxvlc74sevenltx37sevenlbq +fourfivetgkqz5cgj4 +cnrjtfvht74nptvh +oneldnoneone745dhvqnvmlfj +2trhmdcpnreight +dshghlkjzh1kv +threexzkssrxlzzpxsjzbbtthree7 +eightdsqrdllssxv7sevendttwo3three +stz6five9four +jfbfgvfgmvlhjv94 +rcncncfcqsevenjdrtctbbsznpct48cbbxseven +ninevjxzk2two +1qgdcpslvqhjzbgtsbnzcd +kmlzbndds8fivegfdgpfivetwo63 +66mkeightnine1rvfnine4 +nine82 +58ntpkdssixnntjlgfkxq +2jxqttctsxthreepnxsfive +fivekvfkqpc28foursixptgbpfm6 +6twofourslqbzlcsmf +five4vmdl +thx5six +5hfnsqhvcfgckcseven3jgdtkkv +seven6eight65five99 +hplrgdqrjtonesevenseven4z65eight +khkts8hcsfvhvqjv9eightnine48 +pqxztthreeninelxhcxkjclk2 +sixrmfpj6nine4zx +9xtvxkxpjv9 +cmtggbrckmmzffncttxsevenhphmhfgjsr85 +83s4 +26fivefivethreemstzpncmhfm +87eightfourgvmmfbknineone +bdxg2zszhcgtvtseventhmbvfive +zeight8 +eight78dcnq4jtz +67csrthree +3vqxtwonerts +1five3 +sevensixfournineksxkz9bkbgcrjjjhnineeight +8seven29 +9394 +pkqxvl9vbjmqblrksjqcshpzpfrfouroneeightnine +heightwolgpplrbnhrgdkrk25crttkkzkbt +6659eighttwoone +55lzqzng2dmtpq45 +512gpmqpsqfive9eight +eightsnxz58zrbh8fiveeight +six893ninerrxzj +twoflrzzcgninefqqlmmzzqgnjrcxcfour5ninetlcmc +tmfkbgcssdcmkthmx1seven +6three9fourmdpzj +mgprpn68 +xssxrtpntlkppxp958rzd2nine8 +fx15twoeighttfjlcglnbptwo66 +threeseven522 +xrjpstjr2 +6eight1742oneighthhj +1ddfkgjrxfzrhnxtnvfqxdv4 +8hlcxdpkrnrgfzmsschlhcbndkcvdszgqntl +five154sixfourqgffh +5rsvtzgrvq1slrlgqksone6lns +92sevenk3xfrvgddsthree4 +rctlcz67 +2nmrbhnzpf7 +bjmssix1sevenfour4 +744ninefivefivejjcnpgrqxtrctwo +r4five4 +16two2 +threefn8 +3gmsrqtjm +one8tmlnlqvgfone5fivefive +1spllmone9three1xsssk5 +6rlqqblbrxh8 +41qqccnsevengbbrpgcqggtlhtzqcfqzhtx +hzfivethreenine2 +sixeightvcm4lngvkdlpz6dstz +twoeight34tv1 +tgqc6fqsftwoninexncjnrtcgcbrxdmnine +8one27ninerjt3seven +1sjvxlzszhhsix +2xxmpjsfbr +7eight5eight5bzgdpkkpgrn +twozcrxdsix1lrxltrhvznine7twoone +8qlfive8nlmthree39 +4five5five7671 +4fiveqtrngqtbpd74 +vbccfjhjndeight1h +8kfzchkdvfgvlhqzfgseven +6ninexrxsvlmmzrsevenjhzzggfcxqrvfjtnjctveight9 +6fourfourfourxgrgqklnpcsjbsqvhnkjfcjdhdf +65fpnfszb3 +srnhthmpseven1four3rrpznf +vgmqr9zttpdrzjfiveninesevendfive +fournthreesevenseven72seven +9594 +twolhvpfzbfsfourrrcpzzshd66grxddrmkvthree +seven5twotwolpsqlbcqpthree +29eightzjgsfmll +gtkrjrsevenfbjcpjlsmqsfceightseven9 +qkbntcjvfl6three9qhpcptvpkfour7b +gvkhmrljmhrpj956bzxhkljpvpxltctjvvpfjtsnb +rcqlnpcmng6l5vfkpddeightsevenfhmxzztndq +sptdrlsfxpsxff4five +lrzhhxdrkdtbdjbsfourthreemmjjnn1 +9sxthreethree +six9fourseven4 +dpone9fshbbpcm8 +twoczqzvqkcnine6eight +qbtkgxp1fourdz +dxrrsdbmtpnl6hfdtj +sixsvtwo8 +5fxdkhbgqm8fouronefive5 +jqj6lhtbjt +6pdgrsdxghfkhptbjcrrjcsevenbksvmzvnninercz +8rzqvh6ntlg2bfktcphztdkckjg7two +fivesixnine1 +4beightsevenonetwothree8jx +sixfourmvpk6fourtgknrjmxfftnmngjnine9 +68seventwosnqsj +g853seven7 +7ninejqslxmkxpbkxksjcjlnttslpcmsprvgnrxg +jmvqrhdcctwofivev6eightone +ninefiveseven9eighthbb7two +threethreethreerlgqzvsevenx3eight +xbkvgdsrhknine3blt +xzbcgjkkbk1two1zprpn3bcxxhlxjtx7eight +3tflfncljtwo9 +four3seven8one6 +six7vqfive +ddhhgvrkzfhone8 +fqtbnbvdvbklnkmpr89twotwo4 +9two166eight4cfnsstwo +twofive88 +nxpmbfiveeightqmtblmtzpjcnxnxjtwosixtwo9 +fourthreefivedone9jzhrbrzmdqkzmqzfklxq +qbgpfsvlx1eightjsevensixfour +2sevenfqkeight2five +sqnsvsevenrbkhgkbhmmqjztzvn3sevennkcghqqcckp +eighthcrzxpjt1eightone +sixone2 +four56zqxr1lcmblzgdgqjnqb +q6hdldzmjh6ninevjm9 +j82onek67 +5njnffiveshlbqpqhzt +97nineoneightcq +ffivetwo41vnzhfqmrd4 +two2fiveone1nftfhvzkpltvn4three +twofivethree7jlsjxgjfbvnlxhb +rmb4fourlmzgvfcsgn2five +6dthkxkcdbssixdlrb38 +qgbnpdpchmnnftqpeight9xlmlskqhc156drhpf +sevensixsevenjqckcmg6sixxtgvrvm2sgtvrjrq +4nnhmghrqrkcmfmqxtqxncljskfvmhfmgqfour +dlpqjk2fivesix7 +onegtddk5vzgpndqp2five +qsslgone4onelbnbckznrfnjmsgz +pvqdbhjgqrgbqkzgpdbmvninekhvfrmpchhxm2 +tpxvskgzgnnvmnfncvqxxtkmm75vfgmxr4zbpdmdseven +ssnqndqxsevenxztmfq64 +mcxmhtnbczdfnstjn31six +twosixfz5jvbxxlhdklbp1 +five4six952 +vmnhjm3rzgglnmzj318 +dcnprh12qnmmqnvhkrhtrnxs5 +5b +mkfgxmvsixeight5 +crzdkbjthreeone287fourpgzqldn +2cgdd +seven8oneeightllqtfbdtmdnvlcsfh5 +4seven1zqponeeightlplm +c7sevendvmxlfpnr6 +eightlkhjgqj6 +njvmgjdmx2 +9six7 +3cfbjptcp5one8four +eight6kxc8one +6sevenlpbdcgbhxsixfourseven7 +4sixeightsix9hq +6eightb +8eight86jkrdgmxdfourthree +4dxczptzbvjfive56eight +seven3threerpqhsqspsdpvxj2sevensndcxn +zqcbcseventwo4gh16jksxkphgf +44tfour7br +five266five93seven1 +prsbtlbninendbpzv5xx5 +6three2nqgtrlkfxn +ninefourxkrsgshmdd78six7nine +gnkphdvhqk74fptcqgp +cfdmp2 +fzhhdclzncxmg26nineeight4 +seventworlcqhfq2qrfiveqqgmmzdpntfm +onedvsbvstdshtlzs6sixfive +qjfbtdtcknthreeeightsix71 +2ninesixscdxtwo +threerlpjxlzsr9qqzmfbzdtnknn2four +8kxxljngrqsgkxcnlhrlxxfgl57fql7 +vhrjlgqjnnthree4four8fivebfourffcnbghnz +5jb5oneoneonebseven +kbkv3three4rgdkdzkrkk +eightxhxzkbhjxsvfsjfbzghktvlqhseven2xkslcrfsgdc +sevenone6rmkcvfour6jhvhz +threenhfprcngzhcqckchphcninecmqvczqt5 +foureight6 +7fkrgmdrxgdkfpvxkns9 +5onetwoqnp +nine73dbfljgnninecdgxrgkdlsqzflbtwo +five3jcsevenfour8sevenjgfxkfgnlzbkb +lqtvkrfour67gdnrhkfvzgfoureightone +kct1pljt8seven +six269two +64k +41ggbblvhs726 +mbvfq5gghsxtwomngfczfdpb1seven +4ggzmdpbkrczhmmrk5 +317 +pxtgbfnfhqgncrsgtf7sixfour +dvqnfourcsnmcxnxq7ghmjbgmct +vnskfrdcjdoneddjpkcj7fourjjlllonepxlpjkzbzfour +hbdjzfbvrthreekxmlkm49 +trptone5bpsxgl +5one1 +sixsixfzgbninecxssl9 +six7xdnsdgsix4 +fivefive84fxrzgk4eight81 +zszvqhms8sstxvfz +3one3sixbmxbfsdbdtmh +qnfgnjgcv6two57 +5676xzlbzk485seven +five8dbbtpxctf +two1gntvjr +77one +vlnkqvczts5tkghpvthree6krgszgx4 +nine2threefoureight +foursevenhc3twofour +9zzgqfzmfpsfn +ghb57sixeightwofqc +6twovninejckdhmcsxkfoursix5 +oneqxljxjhnineppln419 +one2zlfsxrkfourthreexl7 +nqbtczpblq856one6 +3cxmmzlh1 +frjsdskzk79lcxvjqqdnlqsmbpbdxrxthreeseven +twoone457fivetbq4 +fourtvbdksxsjxzgdk77 +fourgbvdlpbgztwoftmkjkkmthreesix1 +nhrqfbzggrskfgmnbg7sevenfzrnlxfbtc +foursevenmdrnfqsn4jvnrntwo29 +fivevzvszgqvqp6627zqnk +15fcvczdlqprxjzhgbxpxs5 +9fourfivejsgvnf9five +kzlndjrn8rgq +spfqqx3sevenoneldqnqbmspvsixfiveninezmvks +oneseven5 +2eightfour5bqbmsnhmtfivebss +ninejnckkvseven4 +jzhfcmvb8fiveqgq18fivevlpgdnkbq +67four +grzpdtl9 +lzf8fivedr2fivevbpldcone +nine4bdfptdffgkssltwopl +eightlvgfhfbsqrdjrskqkprdlltnzzpfhnczsonetwo5eight +7xqfgzglblftvsqqbgpfmthreesix9jfl2 +eightgngsvqvrhgmvhtqhbpdeightfour6 +1bqvpnggbdrfoureightxmclfpfqgjssrpflnzl +eightfive1qvhhthk9ninetwo +six36fourfivefivezsvndsl5four +jnpzplgbqf6tlzpsgvzhtnkdvhzhbvhps5 +cldz3bfpvdxjmc +dpponeseven48sevennineeightrkn +five3fournine +2xcckljnjz98mjjscfjsxsevenqhxrqvqmbvhzgkc +sixtwo66469 +79four5eight +jxqktt47 +eight36 +rsjlmlj5oneightc +xczzpjknphtspmh7eightvfzjjk2five +kmznfcxhsn8fivethreexnineone2 +four6six +2hhnine627 +eightnine1vkdpgvxgm +8three6pvtqmfdxdkxps +7frnthree +78tworhldxeighttphp +dcmv6vvfbzjdtphbpssjnnqdmrgzgkfdveightwov +zsbmctdseven1snxmqxzgsix9 +lxtwo4sevenxsix +tkdkqfpj5eightq8two447 +seven1onesixfivest +45six5sevenseven +jpxxdjphzskpbrllninexmmmdxrznzthreecvsmjssmfxczhm5 +4flhfqlphfcnn9sevenx3 +16ttrmgqninefsgvkt5four +3snfkm +6threetwoglgkbqjlsn4fivehcgfour +ninesixfive1ninelgdmhkqrvn +two3pxvlsheight +two51 +sixninezkbfbxgzznlgtpxgcpzvgkczdbfive8three +fourjljzqgbsthreeqjdgsqpspnsixxnglmkss5m +32sevenctqtqrqlsfourfoursixrcjztxx +8qlccjngpt +2eight58five +1ninesevenxtlbrq6 +9fivevkmm8tgxfkzvgq +53txg +3xqmjvxkcbjf2 +2fhndgqnqd5 +2vnrpjdb6four79 +7four5 +foursix5hdcg489ninerncnk +6s2jd +fournine8ninejn6rkknh5 +fcfxflzv7seven7 +1fournineqzknrvfhdxfoureight4seveneightwobr +1two3 +twombl5 +fourzjh9six +1ljrvbrqpcchb +11rvqfmcxgg +fiveoneggjpmdt2t +nnjdzhdrkvhpxnprlfrhxpbtpbdxm1xfshdr +five39threehhrhsrhhqkjt9 +hm8nine +3ldckgksm48xc2seven8gbzfq +sixqpcqjzqxsjhr7 +kthreethreelmjfour485 +mnggrsbbnh1 +xfn5 +qzlxtczqlvninekjnbnonefcbqqgfmqf66xpvjgfzjgxvjrcqmzx +krsfvctzfhonejxtqbbnd7eight +tjhgbtqtwoljone9 +mdfntzfpg1fiveninecvxrfnine2 +7hcrxzc +6two6plgrmbnine9sdbvgtnj +threenine4fthstfjzzp +6eighteight9npghczggthreectqssdtp +flc4gtqsjmrddx8eightseven +threeone1oneone7 +gfbfjzltcjfkkrsprgtpfive4 +sixrdzp2onesevenrqrtldnq4c +sevenktwo3threeeightthreenhnmpdmlqjnvl +4eight82717 +nrhqqkmkeightthreenzqbgcphoneseven7 +twoprrgggznzffour5bbrdsvtgkkrbl5nlrkpjmnbzgsbtl +28pvjrszmrdntp4nqdnhkdrtwoxr +sixsix9five4 +lxchg91threethree74 +6bmxblxdkghqdjqgqbrqtxknvdsevenztgspsfh83 +39bsspvhslzkmrnzxtlxsbhk4 +74seveneight9ninedgzgjdvxgvrnfz +fourxvvqsfktptjbsb69 +rxsevenfive5vx9 +72six7 +five5lcxv2jvsssxqjtmzclfdfourfive +87three9 +6rckksfour413331 +33gtz +xkmxtvzhgxqqmknn9pzhgjxqseight +8threefivedrtlgrnqfouroneq +6snzkxjcfive62dqtqmtwoxnine +zxtjclonefour1eight5eight1 +qlffthreeseven2three +xfppngbg5six3two8nine +ninesevensevencfhppvhdnfour8 +xhvnm1 +9threecbdccktrkfourfour9twoneqd +1five4fivenine +jcscpdtzk757nine8 +sevenninesixxkzzzbfour2three +sixthreetwovfqxtbvcrrjtwo3four9 +nzdjhtlqfnxmrzvgrzkfmm7mhmvbbxfd +3seven2eight99 +two6nineljvxs5eightseven3 +55fivezgbmcdpv +hkgvvrtrtwopjbqhtts8seven +c138 +mnrnhqtzthreesnnj2 +81 +qscxbblvsxsgtcpr4cphmxgmbrb +4six2mrvdpxqvhngrrzhjdjfp +4tmrlmdfivefivethree7 +363 +8488one +827pcxnhpk +ckbdqdvhdd4hrb9nnghltwo +5onecjjfdfrxppqkhrpthree5lr4 +62lvlsp2sixfive5 +czxfkhcbvcdhdzx2 +jzdgngb68 +fourtwo18pxkttcr8four +bkttjvvmxvzkhmxtpqrxxhslstwo6five22 +four26mcvb2fivepone +dzptwo5ninejgjrfour +nrhqqnjfour9four +ffoneightpxp41six +threeninehzmrh8dzvmpgrhsv +5onefour5 +jdl5fourtwo8 +threefour8seventwo1seven +lvkjd6five6fxkfthxkgmfour6 +three3seventhreepbsgc +7threethree6fgmfgcv6glrk +nine3five +54one9 +jhvqhrvqfrfgpdrh3three5 +3psztbfour4 +nlffive1nxcqpfour232 +3threetwosgsbdjnt +dtfstb1qhggj +qnnp9twojdg4kfzvtbsevenfour +qfnmdkfkpndd36sixsixfourseven +8seven7oneseven9x4five +4847onetgmsbjjqhtfiveksmmlftk +fivesixlklrnhtdfg3 +cpcqone1pnxkhrkdhhzheightlpb5three +eighttwo6 +seven2fourfourvfzxqbh7 +frf1fivesix3snnlpgpc7 +svtvfcsevenhszznbzpfiveeight2 +lqpqzthree5mcmzpqlxkgpssix +9sltfzqsczpjbndmqbccgmq +5six9fourxppzkgbj6 +8dqhklnxseven1 +3two4 +ktvlhmq3xzmcztbplxlqzpqmoneightffd +76dklx7two8nine5vgvh +xmgjgfz4 +two7tcnceight9 +ninecvfgpbrqcgvplt32six +g3rcbzqxnjllqoneklpbjzbqbseven +svkf8ggdnmeighthhjlz3four +hfdb44zqjmxbrft3qrpgvjngc1 +dzsbnsrg35tm +qchpdcg2 +9775fcg91 +gdrhdgmfdk77eight +14bsixthreeseven +two1twoninepkkvhlzlt3 +kvslhphhj9fourvljqbfive +8nc6 +qg7six +7vkgv8 +td5fivefive +xvfour8jttrsvvjkkdxxzjsl +7qbgdfkj4fourfivenmqtfmgeight +eightfourdzxpfggzxcqrmtxnggchlqtwokcnrdhqf1 +lbhcptlfhflgthreefive9cpprdlbv +nine7941cfxnxszfivebm +ninenhgpj7fourfour9 +456xg +ninethreesqdp11four32lgdl +38trrgt7 +tnhhxlm3rvzvxmmcgpxm +oneqtmg25snbgzfhtkq8hdlvszrclcsrhqsdn +3cjndzmkfx +clxvdv7seven +five6three1 +8sixfour36seven9mlxmrx7 +vdrk27jnrbrvdrnine2nvnlkcszoneightchk +67drgjqrqdktplq +36pprvngxrrjtnpffmrxxdl +hkkrgxtpvzzmcrfcbcjzbpnvls88hrxl +b4jkeightsevenmxkdpvdpt857 +6eighteight2four +eights73five +fiveslpjvzjlpvzone41nine +smnmlrxx7 +onesixfive4 +8s75eightone +1fivecpqsxm +99743ninesix +twopzflcvxsgzn1v8 +9three49 +two2sevenf8sixvdpxzgxbmkrz2 +sevenfive6shhbqhgqqhstdrnfxsjtjvnine +kzqsvn29s +threenlrrhz4ttqljvr +qx9sfdx +nhsbgsvvp7 +876eightfivetprjjbxhzbfpqgltt1 +six3xdjtphrm1pbjvjfn +nflcpmjpt6six9two6xvbmbm +fmlglbgmhvseven4nnkkgcmbv9chmthxvztgsevenbtzs +7bkmchf4five +xgglktnbeight183twonine +onecbpdv9 +fhhmddrnlnkvlb5drtcbrjprzcqlj7mgspc +7threexkfjklvzcfourtnrgmpveightfour8 +6rhmcblhfourtwo3two +one4fiveonenine +slksfchvlgblninefszfbksddgvd4 +four742sbseven3lk +8qbchrfldtvppv6fourzfivez +ninephsmnnvsfour1 +one5kvcrtnc5sixonehjfxnsixfqhzjj +8drgrzngh +16eight8rczbjmblhn +threejpgjbpfdbvgdpftwo96 +sfkhvjgd2smgfkr9two27 +threeqpdeight3 +threesevenxblrmqkvzvrbhsix4 +9seven2vlhsninenvptdvmrpzbrlpfhfnl +xkjpdpgsrtvlfg1eight +seven254 +three8fnmcfhrdtjdlpfqlqhgx +21bkjv54s8 +82ddfour6vcggxhlmpfivesix +cdsbgtpqthreefivel8nine +5five5cksct7bvjbtdjkcz +64fhm +tqk5 +3mhzkhtfzscpgfctfskdn2five +cvmvthreez8fivegvcbsxj35nfxdshqz +sevenqlqmkhdjpmsjrtggqzfive35scmnfpmhmp +sixfive2 +6sevensvqhhfivetwo +eightthree84 +82six8 +8bbhrkzgtg59cpgdvb +11three3hfjkvmsl +qdljkm792 +eightgq5xgskvtpgmhxsnhzlqhnksxflvx +ghdhv1seventhree55fourthreemrlhq +oneonethree3zm +3twobsxqfsfnine +eightsbznkpzsqqtpxfhlfr5 +sevenchs2twoeight +ninezjtxp7bpzdgtoneeightoneighth +fmkbvzzgvl46fiveoneightqn +kvsonevxtmmxnfour4lpxjrbcfoursixp +391onelktkfd1three2twonels +pn2 +3cmsmfvjchflngkrbtsfrblltwo +eightfour8ninesix29 +dpdvnonefour2eightbzzrvthmkgfcdv5 +59sfiverboneone3 +6xrqq1 +9bczfbfbhkntmdmseven68 +npqm35qszmptx +fivepkdlmonefivesixz252 +dzrtwonetbbv9twovrsp +fpkfourfivendkhz6five +86dknvgcnmcslmztwo3 +fivetxrrzjpb6tqseightjthnhn +362zhtxdgvcdgnzv55 +eightsevenbllbgvdonethreeprglpjhxhqfdn6csnghrtl +5fourc +8fournine3svdlh5sevenoneighttsq +eightjkqmgljpprcpblvrthreeseven8fourone7 +vqrqlhmb9seven231vbfzrrstwohjvdjgg +kk1foursixeight849 +seven13ttbnlr21 +jfgsksrrkjsixsixthreesixfourrbxqzdhc9 +3fiveeightqbndjdg6pmftqshone +nineoneseventkdpztbkk83two4 +cjdbxhpzr87eight +twosevenkkdhf86sevendzhvkrttjljr +67cdltmnbkktzseightsix7two +three44zqtglqcffrkmhsgjfive +twoonenbf74three9tthsvmngcx +lvrnpvmvgvnnonesix5 +nchcfxxphmnqbhfourxnine52sixj +fourqpvngjszftg88seven +xgzmv133zvjmlfqhcmjbqzfntkjtpdjlkmv +fivejxc4threebzqbhrldsf +glvtpvnsevenqvrtcgjkhkcsix1seven +sjeightwo4fivesevensixnqxsjckfive +z5 +jxxhsmdvkglljhxzxljqz9zplmslcfdxxljtwosixkjxlsrfcx +fiversdslrkcqclzb7zdzlbllfkvphfqhnfour +five1hpdncfpzhdxrhnv4lblgthree7snj +8scqf +threepcfkrhstmsbfvqxsxrctwo185six +7lqvpqxbjrv9nine985 +eight16jvfqcgbmhdgdltxz9 +three8vncqf9 +zrzp9sevenxthpsxtdninebmnhgrkdjqqjfffourblbkch +fiveseven25snpsnjgnfl +ninefourxrtdlb1threefivefive1rbqzfbxtst +three8three7five41 +tcnvsevenz45fngtjljh +txvpst1 +eighthrlbmtk4nssknqmxjvjnqsqlfivekzrphrtwo +two492ninekcjvllckdtkp +48vlvmkcvbsfoursix8 +eight28sixsix3nine45 +jkm8hhqfclneightjlpsnck8dcvlvgkrfprflsvlh +4zxjqlfn +fivebpqfjtcmlsixfour48onejqhzgtftrvkknngf +dkfour7fivezzsjdbnvgninefivenine5 +twoxjqldtk91eightneight +seven57177 +gpbqvlpxvnzgninefoureightthree5 +bzprbrninesnjpgqthreeeightsixtgmvrthfour4 +83brtxx4zzxsxrcfivebzbxlsl +threesevenninetwo8twoone +veightwochrmfrkrcppxkj4tvvzmhqjhnjvtq1threegtmfnnjpxb +3zgqpvq9krslgjgkjmtbsbhbjg +4nine8mhfs67vhdjvsjrlz2 +nine659xrvhhnnbqq7 +bninetwoeight8fxntpdkrfp9eightnb +qtwonecvbgxqfiveoneeight4five +seven926 +shkkksn4onefivethree +eightsevenqvfqmzqsfn1 +sixdgjmtk5fivevqbxxdzrjqdtgnnffzmfqxzjdzhp +stsjcmzbxt1 +rvnone3three9twozchp26 +ninefmpkdlvzfivetwo1 +four4one4vdpgp9lprtqjzmhk +15rpdhczznrzclfcsxdx41 +seven36twopnvjdxrss5 +46ninenine +6jg8xtqfmjffdlfhzrn +2jsixfive573 +two8eight39fbqkdzseven9 +3gnrg5 +hlkk1 +1sevenfive7 +72jvdqmlrddk +ninetwo8hzdninesixnjhgrcsttwo +23cxdccvvjrjfsixlcrmxjkeight +6brqjfjsix56nine3 +ninezveighttwogc5two +ninexskpsth5sevennine +c7jmmjcv +89sixthreeeight71q +fivekccfngmxseven7onernfskqnqfive5 +sevensixone4hfhgs +xq2jxddpdm3nine8ptqlm4 +smsevendj19fbqdjpznfourgqq6 +7147 +znqbfmcpd4twoseven +fhcsmxtdx6 +sxj2tcb92 +6nine6 +qdfknmdzt88 +66threebsndqlkrshfive5 +eight7pckdhlqzrx24 +3ninevk +sevennine3 +8one1rjtnhjx +eightthree3ninekzhtlqsevenssprmrqhhgncrs +6one8nlzxfxvr +4cgm9fivethree +four77gxvdqztzzgbsxhntwortndzqzj +t8three335 +c2rjggzl +jjgjbqgbnz4gdsqk66991 +ninezckbpsr9 +jb5sevenseven +one5nfdcvx +1kbcmclhrh1onejzft +fiveninefivedglztnjxblonehfive3 +6onesixh6onethree9 +spdzhnt5tpzrkh1fxlnine4skgzdln +1onenineqgzcq2eightwonh +vfzvds826vtlrcg6rvseven +vqmoneight9tknqtcsmb +kqrcrqrqjbdeight7ckhr23 +oneeight2 +8eightnhtqcggtxc6dfsfcjfpznmsthree +sxfvfdkff8dvlmbdktsixmzpnxzmml2 +9lgmxktj1frxl diff --git a/examples/typescript_variants/AoC1/step5/.config b/examples/typescript_variants/AoC1/step5/.config new file mode 100644 index 000000000..6478bef70 --- /dev/null +++ b/examples/typescript_variants/AoC1/step5/.config @@ -0,0 +1 @@ +input.1, readFile1.1, part2.1 \ No newline at end of file diff --git a/examples/typescript_variants/AoC1/step5/Day01.ts b/examples/typescript_variants/AoC1/step5/Day01.ts new file mode 100644 index 000000000..6f444ade9 --- /dev/null +++ b/examples/typescript_variants/AoC1/step5/Day01.ts @@ -0,0 +1,23 @@ +import {readFileSync} from 'node:fs'; +const input = readFileSync('input.txt').toString().split('\n'); + +const part2 = (lines:[string]) : number => { + return lines.map(x=>x.replace(/one/g, "o1e") + .replace(/two/g, "t2o") + .replace(/three/g, "t3e") + .replace(/four/g, "f4r") + .replace(/five/g, "f5e") + .replace(/six/g, "s6x") + .replace(/seven/g, "s7n") + .replace(/eight/g, "e8t") + .replace(/nine/g, "n9e") + .replace(/zero/g, "z0o") + .replace(/\D/g, "")) + .map(x=>x.charAt(0)+x.charAt(x.length-1)) + .map(x=>parseInt(x)) + .filter(x=>isNaN(x)===false) + .reduce((a,b)=>a+b); +} + +const p2 = part2(input); +console.log("Part 2:" + p2); \ No newline at end of file diff --git a/examples/typescript_variants/AoC1/step5/input.txt b/examples/typescript_variants/AoC1/step5/input.txt new file mode 100644 index 000000000..9569e81f4 --- /dev/null +++ b/examples/typescript_variants/AoC1/step5/input.txt @@ -0,0 +1,1000 @@ +2xjzgsjzfhzhm1 +qhklfjd39rpjxhqtftwopfvrrj2eight +95btwo +lfsqldnf3onenplgfxdjzjjnpzfxnineseven +five7fouronesevenpfsrmszpc +xcsfkjqvln2tpm +ncjtcdb625two9 +6srtj3gfghkdtmfzseven +three4fournineone +pcpsxmkhdgsix25six6ngzsqzdcrb +1sixdzhbjvnvgcxmsrlkb9xbjk7t2 +dsxnfkjn2vtwofivethree2 +qfbp2tpgvsxm +kvbhsseven2rkbllhrhvsevenfour2vf +bqbtzbtt3 +ninek6 +3fivebvqhvhlvz +two68jxfnqlzfkninenine8 +vhckhhhb2sixtftjtdjf2nine +4jc +3sevenxlxfnpk +5sjfive +c8bvlkdq283rqfftj +8eight1threehhvmnlft +4sixmfcronelzcpnfourlgdbkgt +hntcjmppp9fmntwokx2 +24mkgr6mx9n4 +cksfkrdmdcmnbmkgk3two4 +twosixthreefivelq3nine +njmrtr6fmldninevcbtxr42 +eightfrdrczdxrcrfxh6 +8sevenonefmfqhtx8lk +lnoneight8twodg +tszrcb7tvvhfive4 +nknphprtv67fivehqlfournine2jk +9eightszgdhftggrktkzbsmnhtwonekh +1onefzkgf2two417 +77fivepsmmpp +bnine7vmttgmdskc +6tnsixclbvkhmsp +ggreightwo1mnsbzmxsdcdrhhg5one +ninetwo6qtbklgb2 +four8fmfxmr +threetxfrsevenvfdgrtsixtwofsq7 +hqxlseven53 +vxqq24eight6 +7psxpgxmkpzkzeight3 +9four7 +stwoone4eightwoj +one38 +9cjlrgrgpfjeighteightdcpjhzbjqcdthree +rqfone2 +dvkxhvkgxcfivescjcnqqnnine2tthreecptkgxmzjsbzdrhk +5lhprmg8two7two3 +5lvtg5sevennine2zrrmghf4seven +fourfive97sevensevensixcsffnlcbtjk +onesixoneninesixnbkf5xpsgsmpvdsdsqdvpjjzp +nineb321mgkpqjqjqh +seven2cstttkvkmpssflkxjmbnvthreefour +six1bmcjbhdgqm6kgzsxbgdqnjqf3four6 +zchkfjxsllkncz175 +vsveightwo8 +fourbtrnfdp2four5 +13dtf8769 +6qfvvdqdrtstwothree4seven8vszpseven +7rgzpxfbczk1fivetwo4two9nine +3sksmfxn +16ninetwonqqmptq +9five4fckzssxsvpzbvlktjzcninethree +3threel889bvbcgvl +threetzzjntxlsd2klrjfnbg87 +3two3qrrdbkbk +29oneightt +7mkpfchstjt7mshqht4fivesix +tvmqndvsix875nine8 +vg7477ninecpnrvnine7 +seveneightmknlqjlstx4zjjrpbhjhnnc8 +8qklthreetwo7tlmrfzvtwo7zvccc +6one1dpstqpmfbhst +sixfourfourseven6rzdkfour +6eighttbltmntb8 +seven72cqslvzpgj +jpvrsgfhtwo5nfc1cgxdrdrbfnseven +four1ninezlhqxtsgfzsevenhspvmxrtztzgtmseven5 +foursixzjvgjgsevensvkd5 +seven121fivefgxhdfive +twoh8 +ghhtttxqgr95 +zkpklcjbjlr2 +nine2mtrdcbrbntrdqninevbkbfg35lnpx +nineninesix68pcvsdnns +rf16one7 +seven276 +sixseven1 +qjxseven9six +7c9xvhgmpf41 +dlzpvdpxseven9nine +mlmlqrpn4twofivesbmhdbcsixtwo +ld74txfzksr5qconenine +six7djcdrtk7chktrh88 +2seven7jtrbhznt +1eighthnhchsevenfive +qdhscpeight8 +12gnxzzm +k7fourmhcfkggt8919np +8zljspvnmlx6four +36twofivethreeptbdrfqzbz7qbjm +bxkbjbzgone3ldhlnhxfcf7btkktspxrtqkxqfdmlqgqvgclb +sevenfourmdrxseven2z2fiveone +8bbprzqrqn +twofivethree95mpqclhfkzlsix +gpfjflrkc96tmsix6dxjnfive +qzeight6 +five5zlthgqjntwotqmnnsd +eight6nbpvfour4kzkvbzrxcmkh +fdkrxdckqbpsklz64fourones8 +5qpldkhltl +27xldkbqbnmrrbqkhmksvk +pjoneightknpcgkkv7cbknrhfdmtdm8 +432xsixvvktflzxone +35fouronemzzszfqppllgchsjjnine +qgcnzcbvsxbtn6lthreenineone +two2fourkdgbfb +fzkmbtvnvj5bzfgvxv3nineknpqzznzmf +9mkqtmlnpzt282dgkmvlsonefourthree +mcqhpkhonethreeninesevenfdsggqnlfcnrft3frqzkscft +847 +gsxvvr6tghfbxxghgv6lplf +fqzgkxkbmkpbhpvpdprmlhsngc5 +qeightwo2threecrjjtv9fourbthree +2eightdcbgfdqzk +fourtwothree5tdzpzfxkpjmlkzzrf +seven633 +8mldn +eightmg7dvjzbngkxmnxdctjtdffive97zpjrjqvp +sixfournineone38eighteight +8mngs412 +3fivefourtwo7five +7sevenjfkcf7rvone8xjdvsc +tljcrzngfdsqctfour6hsnljsxrqdzd +csix7hnkhds4four67 +3cxrlqcnseven4twox3 +rtwonerxcnpqdnzksvzmmndcjlzq2nine6ntfzjdqnrjeight +zbqgrvvvblggbghtfx98 +three2zcpspgtq77vqtgpcxkvq8 +94zksixnvbxrllxln +1eightrctknxkmv9jtwoeight +2onenine5eight58 +four2five +6fourfiveeight +pbfourlzdl4 +4onejrltvhxprhlzctrqzbz5fourseven6 +hlsdjlleightdcmdj8jdg +eightbfkgvbxxm6 +sixseven9hmhchsmqhhtrdftcfivetz +mq4five2fsdhzn +ceight3mncgnineeight8dkqrjjtmc +onefour7eightsix +seven4fqsjk38fhbmn9fgzzcc +9cmb5ninenjsppthpnine5 +qghtvpsqpxptoneljvstwo8lpqcbgtqvjmpq +onelq85dlqpx8 +1threetzsxqtndvhqn +lqdvkonebqjqj9 +3six6 +9two9sixeight776 +scrrprfkblkplgqzzqb2 +18vcrhxb4b +three8nine +1khkncj8fivefourthree2 +ninetwo8tbbsfmkqtt51five +66one88 +ninempgbhpm6seven34 +eightthreetwo4threetwo +vvpqkdonesevendvfrgmhhlsix91threethree +vbskcncpjxtdhqlcone6kgqpz +54lmnnqsrm73 +5mqnmvcbqnz82ninethree +47teightthreehrhtdndrk +fft2foursrdhxkzfourv +tbeight48759eight9twonenl +3sfkvkmvbbm9four9cbjzgllfl +sixqhxeightone7tlsd +22zmllbhcptwo +dqxdjrkmnvkbsxc3ztbseven +oneeight6dcphmnrfltfour +mgxzcfsevenfour4six +sixb8six34gqjtlcq +fiveseventhreexfblvxgkplvbrgpfive1onesix +one3mgqphj5 +7fpzxmmxgnb5 +jbshclzone3oneseven117dkzzdxdd +56five1 +jeightwo1ninemxtvgl717pbv1mqs +3six36 +35mlzjsgxxtg +hmmjgonehjqdcqkh1gskjrmfour7 +eightfiverqbb3 +sixtdkfbglhbjbvthreejsd8tglkrsfktcjt +1eight2mgxrgbbb3 +zzqxvtthreepf3eighttwoonefive +vjnxhl4threetwokj +oneqddgbbqtzsonenxkeightvx7 +nine24 +ftwone2 +53twonehx +two7three4fourhbgninenkvxjjsz +7five62ninefour +53nine7lqthree4 +1six1jn +five5drcjvbgdxzonefourfjdkfive +6onecfninesqfdtxmdhmfvlhbsjv9eight +5dqmfmqbdfdjvpl +qxkqfjshdone2zrmdsts +1qrvnf8zvfour +dht2 +4twoqdrshn87vxldzvnkn1five +4nineh +zctqdcfbseven6three58lzscrpsbb2 +fzmndhssmm3jdzlfourshjkmjkv53gvssnvzsz +five2qkxtfkj3sixshpnzdcjhlcmksnv +bskcmljnq69 +psxkxqztb3xsctsk6qvldjdzzqmgqcxncx2btqxh +onetwosixttghndtzx8 +8twocmnfmslsheighthtxsgjddm +fnvkqndfqmhgscnvq31kvvftxbzhtgzxqtngvqseven +7sevenkhhvtvsbrvcvm8zksvgcfrkgfourtzjvpqstckmmlzz +7hkfiveeightpjhone +8zptwoonemrninefive3spxrlhr +3qvjknqcnngpkninecgsbp3sevenfnpvrcltj +qztwo8678 +bxkj959dntcpzv +4one4 +lstwone347nine +ff79krfbjttqp4seven1 +gjtlbgxdqt7eightsix +8fivefour82threetwo +1zjxthree4 +szgx6fivefour12 +557dspnfzhmlh +5hnfour +847zzkrtjlb +82six +xlnhrcksv3fourzl +2ninetwo8ninelhnsbseven9 +ccseightwo8fiveonetwo5onegkhlg +eightp2onegrmfsnine5one +4five9xnmlldfive +five636 +fivesix29 +34dsbtmlhgggzkqxs7 +twothreesmgjch93mcdndsn +cmnmtzjnmtggseven1tjsshnktffive72 +7xcbpsix6m +7fourthree +7cxnzthree +5eightthree3lpvlfk +4rdnp +one6gmpjfouronettbbjdqsxn +6xtcv +dpspd1cb2onegxsgdtcsix +1eightpseven +ntczqmrclm2 +six7nineeight1 +qrndlfour9bhbmlgj6 +52vhnxvngjjkzt +nine8six +3seventhreesixfpmpbjninesix +seightwoseven4sevenppdnk7 +lnxeightbhxfmdrxcbjzx9sixnine +8ptdmjrd21zrnt1one +one1dmbfournine2 +25five748 +266eightwom +zxfxjn32threelxmqnlcvnknzbn3 +lqmjm2onezseven +sphlhbbz14sixtwosix +sixr9llqxb4 +tnnhlmsix314mqvdlxfour4 +threenjxgtthreethreeeight14one +1fivetwo +hhhtkpvhvg8 +31cslxxzgbktjtwotrzs1one +twoseven9 +4fivenine9332 +six35nineeightwok +nine9fpxgqjrftwovhldfflqthree +434four5threetpcs +ql52kzzgnsgll +onex5145 +gsppnkx1 +22six +zjbbqnbhsdfourmk19sixone +six3onesevensixvnsixone7 +seventhreefive8 +four62four7eightseventwo +2three5jtzmtxhqxhsixxlkmptshb +five3lklnccst1dstgvnprktgcnseven +sevenfour52 +hfxkkbcfpcgzfqsv1three68three +lnqrcdpglf2ksqddhp +13onenbmqvpqsbbf +1bfive +1dmnlscgvfdqrf +bvtwonettkzzxpb4 +5two2t7 +t7djkh +63t86nlhfgqgnrghqone1 +one89eightlmztkcjjnonefive +7twosjmcrlcfqr29lfkrjz +1nine5four +xxjbmsvfxb8 +nxvrvcqkbseven99rbzbdp641 +56fdpx +skszhkqdtonesixth5eight +ninetwo8jqbtwokbhzvv4fiveoneightxb +1threemfcblxjljdtone +fsfgncxvcmszn2pzspkkgqvfxlnbzgjr1 +rrxhnslrkeightgcsbcgdbkplzxbmmlxsn5sfp66 +foureight3 +5rplrmrjtjcfnct9sixfourzptmffrpthree +mld6ztzninesixfour4 +twohbbxmthljpkqthtcgtt8 +ltvgmqgsix89 +6khclqhcvdz24eightseven +6prb +nhsjqtnk6bqzhzvldlcgsmkq1twobfqzm +tfivehmdtxqlsevenzxt1ckjbnttgqctwo4 +ghnjjmtlvfive9znltjfskfnl3vdcjkvqcdplvdmckmfgxq +ztvvbbjx3 +6jhsrszlpsh +4fhtrctvrgmfhdjqvqp8sixnnftggrzlgs2 +bvlqxnjbbjgtfpslpspvpl7jsjlrdfiveeight88 +fsvcxvlc74sevenltx37sevenlbq +fourfivetgkqz5cgj4 +cnrjtfvht74nptvh +oneldnoneone745dhvqnvmlfj +2trhmdcpnreight +dshghlkjzh1kv +threexzkssrxlzzpxsjzbbtthree7 +eightdsqrdllssxv7sevendttwo3three +stz6five9four +jfbfgvfgmvlhjv94 +rcncncfcqsevenjdrtctbbsznpct48cbbxseven +ninevjxzk2two +1qgdcpslvqhjzbgtsbnzcd +kmlzbndds8fivegfdgpfivetwo63 +66mkeightnine1rvfnine4 +nine82 +58ntpkdssixnntjlgfkxq +2jxqttctsxthreepnxsfive +fivekvfkqpc28foursixptgbpfm6 +6twofourslqbzlcsmf +five4vmdl +thx5six +5hfnsqhvcfgckcseven3jgdtkkv +seven6eight65five99 +hplrgdqrjtonesevenseven4z65eight +khkts8hcsfvhvqjv9eightnine48 +pqxztthreeninelxhcxkjclk2 +sixrmfpj6nine4zx +9xtvxkxpjv9 +cmtggbrckmmzffncttxsevenhphmhfgjsr85 +83s4 +26fivefivethreemstzpncmhfm +87eightfourgvmmfbknineone +bdxg2zszhcgtvtseventhmbvfive +zeight8 +eight78dcnq4jtz +67csrthree +3vqxtwonerts +1five3 +sevensixfournineksxkz9bkbgcrjjjhnineeight +8seven29 +9394 +pkqxvl9vbjmqblrksjqcshpzpfrfouroneeightnine +heightwolgpplrbnhrgdkrk25crttkkzkbt +6659eighttwoone +55lzqzng2dmtpq45 +512gpmqpsqfive9eight +eightsnxz58zrbh8fiveeight +six893ninerrxzj +twoflrzzcgninefqqlmmzzqgnjrcxcfour5ninetlcmc +tmfkbgcssdcmkthmx1seven +6three9fourmdpzj +mgprpn68 +xssxrtpntlkppxp958rzd2nine8 +fx15twoeighttfjlcglnbptwo66 +threeseven522 +xrjpstjr2 +6eight1742oneighthhj +1ddfkgjrxfzrhnxtnvfqxdv4 +8hlcxdpkrnrgfzmsschlhcbndkcvdszgqntl +five154sixfourqgffh +5rsvtzgrvq1slrlgqksone6lns +92sevenk3xfrvgddsthree4 +rctlcz67 +2nmrbhnzpf7 +bjmssix1sevenfour4 +744ninefivefivejjcnpgrqxtrctwo +r4five4 +16two2 +threefn8 +3gmsrqtjm +one8tmlnlqvgfone5fivefive +1spllmone9three1xsssk5 +6rlqqblbrxh8 +41qqccnsevengbbrpgcqggtlhtzqcfqzhtx +hzfivethreenine2 +sixeightvcm4lngvkdlpz6dstz +twoeight34tv1 +tgqc6fqsftwoninexncjnrtcgcbrxdmnine +8one27ninerjt3seven +1sjvxlzszhhsix +2xxmpjsfbr +7eight5eight5bzgdpkkpgrn +twozcrxdsix1lrxltrhvznine7twoone +8qlfive8nlmthree39 +4five5five7671 +4fiveqtrngqtbpd74 +vbccfjhjndeight1h +8kfzchkdvfgvlhqzfgseven +6ninexrxsvlmmzrsevenjhzzggfcxqrvfjtnjctveight9 +6fourfourfourxgrgqklnpcsjbsqvhnkjfcjdhdf +65fpnfszb3 +srnhthmpseven1four3rrpznf +vgmqr9zttpdrzjfiveninesevendfive +fournthreesevenseven72seven +9594 +twolhvpfzbfsfourrrcpzzshd66grxddrmkvthree +seven5twotwolpsqlbcqpthree +29eightzjgsfmll +gtkrjrsevenfbjcpjlsmqsfceightseven9 +qkbntcjvfl6three9qhpcptvpkfour7b +gvkhmrljmhrpj956bzxhkljpvpxltctjvvpfjtsnb +rcqlnpcmng6l5vfkpddeightsevenfhmxzztndq +sptdrlsfxpsxff4five +lrzhhxdrkdtbdjbsfourthreemmjjnn1 +9sxthreethree +six9fourseven4 +dpone9fshbbpcm8 +twoczqzvqkcnine6eight +qbtkgxp1fourdz +dxrrsdbmtpnl6hfdtj +sixsvtwo8 +5fxdkhbgqm8fouronefive5 +jqj6lhtbjt +6pdgrsdxghfkhptbjcrrjcsevenbksvmzvnninercz +8rzqvh6ntlg2bfktcphztdkckjg7two +fivesixnine1 +4beightsevenonetwothree8jx +sixfourmvpk6fourtgknrjmxfftnmngjnine9 +68seventwosnqsj +g853seven7 +7ninejqslxmkxpbkxksjcjlnttslpcmsprvgnrxg +jmvqrhdcctwofivev6eightone +ninefiveseven9eighthbb7two +threethreethreerlgqzvsevenx3eight +xbkvgdsrhknine3blt +xzbcgjkkbk1two1zprpn3bcxxhlxjtx7eight +3tflfncljtwo9 +four3seven8one6 +six7vqfive +ddhhgvrkzfhone8 +fqtbnbvdvbklnkmpr89twotwo4 +9two166eight4cfnsstwo +twofive88 +nxpmbfiveeightqmtblmtzpjcnxnxjtwosixtwo9 +fourthreefivedone9jzhrbrzmdqkzmqzfklxq +qbgpfsvlx1eightjsevensixfour +2sevenfqkeight2five +sqnsvsevenrbkhgkbhmmqjztzvn3sevennkcghqqcckp +eighthcrzxpjt1eightone +sixone2 +four56zqxr1lcmblzgdgqjnqb +q6hdldzmjh6ninevjm9 +j82onek67 +5njnffiveshlbqpqhzt +97nineoneightcq +ffivetwo41vnzhfqmrd4 +two2fiveone1nftfhvzkpltvn4three +twofivethree7jlsjxgjfbvnlxhb +rmb4fourlmzgvfcsgn2five +6dthkxkcdbssixdlrb38 +qgbnpdpchmnnftqpeight9xlmlskqhc156drhpf +sevensixsevenjqckcmg6sixxtgvrvm2sgtvrjrq +4nnhmghrqrkcmfmqxtqxncljskfvmhfmgqfour +dlpqjk2fivesix7 +onegtddk5vzgpndqp2five +qsslgone4onelbnbckznrfnjmsgz +pvqdbhjgqrgbqkzgpdbmvninekhvfrmpchhxm2 +tpxvskgzgnnvmnfncvqxxtkmm75vfgmxr4zbpdmdseven +ssnqndqxsevenxztmfq64 +mcxmhtnbczdfnstjn31six +twosixfz5jvbxxlhdklbp1 +five4six952 +vmnhjm3rzgglnmzj318 +dcnprh12qnmmqnvhkrhtrnxs5 +5b +mkfgxmvsixeight5 +crzdkbjthreeone287fourpgzqldn +2cgdd +seven8oneeightllqtfbdtmdnvlcsfh5 +4seven1zqponeeightlplm +c7sevendvmxlfpnr6 +eightlkhjgqj6 +njvmgjdmx2 +9six7 +3cfbjptcp5one8four +eight6kxc8one +6sevenlpbdcgbhxsixfourseven7 +4sixeightsix9hq +6eightb +8eight86jkrdgmxdfourthree +4dxczptzbvjfive56eight +seven3threerpqhsqspsdpvxj2sevensndcxn +zqcbcseventwo4gh16jksxkphgf +44tfour7br +five266five93seven1 +prsbtlbninendbpzv5xx5 +6three2nqgtrlkfxn +ninefourxkrsgshmdd78six7nine +gnkphdvhqk74fptcqgp +cfdmp2 +fzhhdclzncxmg26nineeight4 +seventworlcqhfq2qrfiveqqgmmzdpntfm +onedvsbvstdshtlzs6sixfive +qjfbtdtcknthreeeightsix71 +2ninesixscdxtwo +threerlpjxlzsr9qqzmfbzdtnknn2four +8kxxljngrqsgkxcnlhrlxxfgl57fql7 +vhrjlgqjnnthree4four8fivebfourffcnbghnz +5jb5oneoneonebseven +kbkv3three4rgdkdzkrkk +eightxhxzkbhjxsvfsjfbzghktvlqhseven2xkslcrfsgdc +sevenone6rmkcvfour6jhvhz +threenhfprcngzhcqckchphcninecmqvczqt5 +foureight6 +7fkrgmdrxgdkfpvxkns9 +5onetwoqnp +nine73dbfljgnninecdgxrgkdlsqzflbtwo +five3jcsevenfour8sevenjgfxkfgnlzbkb +lqtvkrfour67gdnrhkfvzgfoureightone +kct1pljt8seven +six269two +64k +41ggbblvhs726 +mbvfq5gghsxtwomngfczfdpb1seven +4ggzmdpbkrczhmmrk5 +317 +pxtgbfnfhqgncrsgtf7sixfour +dvqnfourcsnmcxnxq7ghmjbgmct +vnskfrdcjdoneddjpkcj7fourjjlllonepxlpjkzbzfour +hbdjzfbvrthreekxmlkm49 +trptone5bpsxgl +5one1 +sixsixfzgbninecxssl9 +six7xdnsdgsix4 +fivefive84fxrzgk4eight81 +zszvqhms8sstxvfz +3one3sixbmxbfsdbdtmh +qnfgnjgcv6two57 +5676xzlbzk485seven +five8dbbtpxctf +two1gntvjr +77one +vlnkqvczts5tkghpvthree6krgszgx4 +nine2threefoureight +foursevenhc3twofour +9zzgqfzmfpsfn +ghb57sixeightwofqc +6twovninejckdhmcsxkfoursix5 +oneqxljxjhnineppln419 +one2zlfsxrkfourthreexl7 +nqbtczpblq856one6 +3cxmmzlh1 +frjsdskzk79lcxvjqqdnlqsmbpbdxrxthreeseven +twoone457fivetbq4 +fourtvbdksxsjxzgdk77 +fourgbvdlpbgztwoftmkjkkmthreesix1 +nhrqfbzggrskfgmnbg7sevenfzrnlxfbtc +foursevenmdrnfqsn4jvnrntwo29 +fivevzvszgqvqp6627zqnk +15fcvczdlqprxjzhgbxpxs5 +9fourfivejsgvnf9five +kzlndjrn8rgq +spfqqx3sevenoneldqnqbmspvsixfiveninezmvks +oneseven5 +2eightfour5bqbmsnhmtfivebss +ninejnckkvseven4 +jzhfcmvb8fiveqgq18fivevlpgdnkbq +67four +grzpdtl9 +lzf8fivedr2fivevbpldcone +nine4bdfptdffgkssltwopl +eightlvgfhfbsqrdjrskqkprdlltnzzpfhnczsonetwo5eight +7xqfgzglblftvsqqbgpfmthreesix9jfl2 +eightgngsvqvrhgmvhtqhbpdeightfour6 +1bqvpnggbdrfoureightxmclfpfqgjssrpflnzl +eightfive1qvhhthk9ninetwo +six36fourfivefivezsvndsl5four +jnpzplgbqf6tlzpsgvzhtnkdvhzhbvhps5 +cldz3bfpvdxjmc +dpponeseven48sevennineeightrkn +five3fournine +2xcckljnjz98mjjscfjsxsevenqhxrqvqmbvhzgkc +sixtwo66469 +79four5eight +jxqktt47 +eight36 +rsjlmlj5oneightc +xczzpjknphtspmh7eightvfzjjk2five +kmznfcxhsn8fivethreexnineone2 +four6six +2hhnine627 +eightnine1vkdpgvxgm +8three6pvtqmfdxdkxps +7frnthree +78tworhldxeighttphp +dcmv6vvfbzjdtphbpssjnnqdmrgzgkfdveightwov +zsbmctdseven1snxmqxzgsix9 +lxtwo4sevenxsix +tkdkqfpj5eightq8two447 +seven1onesixfivest +45six5sevenseven +jpxxdjphzskpbrllninexmmmdxrznzthreecvsmjssmfxczhm5 +4flhfqlphfcnn9sevenx3 +16ttrmgqninefsgvkt5four +3snfkm +6threetwoglgkbqjlsn4fivehcgfour +ninesixfive1ninelgdmhkqrvn +two3pxvlsheight +two51 +sixninezkbfbxgzznlgtpxgcpzvgkczdbfive8three +fourjljzqgbsthreeqjdgsqpspnsixxnglmkss5m +32sevenctqtqrqlsfourfoursixrcjztxx +8qlccjngpt +2eight58five +1ninesevenxtlbrq6 +9fivevkmm8tgxfkzvgq +53txg +3xqmjvxkcbjf2 +2fhndgqnqd5 +2vnrpjdb6four79 +7four5 +foursix5hdcg489ninerncnk +6s2jd +fournine8ninejn6rkknh5 +fcfxflzv7seven7 +1fournineqzknrvfhdxfoureight4seveneightwobr +1two3 +twombl5 +fourzjh9six +1ljrvbrqpcchb +11rvqfmcxgg +fiveoneggjpmdt2t +nnjdzhdrkvhpxnprlfrhxpbtpbdxm1xfshdr +five39threehhrhsrhhqkjt9 +hm8nine +3ldckgksm48xc2seven8gbzfq +sixqpcqjzqxsjhr7 +kthreethreelmjfour485 +mnggrsbbnh1 +xfn5 +qzlxtczqlvninekjnbnonefcbqqgfmqf66xpvjgfzjgxvjrcqmzx +krsfvctzfhonejxtqbbnd7eight +tjhgbtqtwoljone9 +mdfntzfpg1fiveninecvxrfnine2 +7hcrxzc +6two6plgrmbnine9sdbvgtnj +threenine4fthstfjzzp +6eighteight9npghczggthreectqssdtp +flc4gtqsjmrddx8eightseven +threeone1oneone7 +gfbfjzltcjfkkrsprgtpfive4 +sixrdzp2onesevenrqrtldnq4c +sevenktwo3threeeightthreenhnmpdmlqjnvl +4eight82717 +nrhqqkmkeightthreenzqbgcphoneseven7 +twoprrgggznzffour5bbrdsvtgkkrbl5nlrkpjmnbzgsbtl +28pvjrszmrdntp4nqdnhkdrtwoxr +sixsix9five4 +lxchg91threethree74 +6bmxblxdkghqdjqgqbrqtxknvdsevenztgspsfh83 +39bsspvhslzkmrnzxtlxsbhk4 +74seveneight9ninedgzgjdvxgvrnfz +fourxvvqsfktptjbsb69 +rxsevenfive5vx9 +72six7 +five5lcxv2jvsssxqjtmzclfdfourfive +87three9 +6rckksfour413331 +33gtz +xkmxtvzhgxqqmknn9pzhgjxqseight +8threefivedrtlgrnqfouroneq +6snzkxjcfive62dqtqmtwoxnine +zxtjclonefour1eight5eight1 +qlffthreeseven2three +xfppngbg5six3two8nine +ninesevensevencfhppvhdnfour8 +xhvnm1 +9threecbdccktrkfourfour9twoneqd +1five4fivenine +jcscpdtzk757nine8 +sevenninesixxkzzzbfour2three +sixthreetwovfqxtbvcrrjtwo3four9 +nzdjhtlqfnxmrzvgrzkfmm7mhmvbbxfd +3seven2eight99 +two6nineljvxs5eightseven3 +55fivezgbmcdpv +hkgvvrtrtwopjbqhtts8seven +c138 +mnrnhqtzthreesnnj2 +81 +qscxbblvsxsgtcpr4cphmxgmbrb +4six2mrvdpxqvhngrrzhjdjfp +4tmrlmdfivefivethree7 +363 +8488one +827pcxnhpk +ckbdqdvhdd4hrb9nnghltwo +5onecjjfdfrxppqkhrpthree5lr4 +62lvlsp2sixfive5 +czxfkhcbvcdhdzx2 +jzdgngb68 +fourtwo18pxkttcr8four +bkttjvvmxvzkhmxtpqrxxhslstwo6five22 +four26mcvb2fivepone +dzptwo5ninejgjrfour +nrhqqnjfour9four +ffoneightpxp41six +threeninehzmrh8dzvmpgrhsv +5onefour5 +jdl5fourtwo8 +threefour8seventwo1seven +lvkjd6five6fxkfthxkgmfour6 +three3seventhreepbsgc +7threethree6fgmfgcv6glrk +nine3five +54one9 +jhvqhrvqfrfgpdrh3three5 +3psztbfour4 +nlffive1nxcqpfour232 +3threetwosgsbdjnt +dtfstb1qhggj +qnnp9twojdg4kfzvtbsevenfour +qfnmdkfkpndd36sixsixfourseven +8seven7oneseven9x4five +4847onetgmsbjjqhtfiveksmmlftk +fivesixlklrnhtdfg3 +cpcqone1pnxkhrkdhhzheightlpb5three +eighttwo6 +seven2fourfourvfzxqbh7 +frf1fivesix3snnlpgpc7 +svtvfcsevenhszznbzpfiveeight2 +lqpqzthree5mcmzpqlxkgpssix +9sltfzqsczpjbndmqbccgmq +5six9fourxppzkgbj6 +8dqhklnxseven1 +3two4 +ktvlhmq3xzmcztbplxlqzpqmoneightffd +76dklx7two8nine5vgvh +xmgjgfz4 +two7tcnceight9 +ninecvfgpbrqcgvplt32six +g3rcbzqxnjllqoneklpbjzbqbseven +svkf8ggdnmeighthhjlz3four +hfdb44zqjmxbrft3qrpgvjngc1 +dzsbnsrg35tm +qchpdcg2 +9775fcg91 +gdrhdgmfdk77eight +14bsixthreeseven +two1twoninepkkvhlzlt3 +kvslhphhj9fourvljqbfive +8nc6 +qg7six +7vkgv8 +td5fivefive +xvfour8jttrsvvjkkdxxzjsl +7qbgdfkj4fourfivenmqtfmgeight +eightfourdzxpfggzxcqrmtxnggchlqtwokcnrdhqf1 +lbhcptlfhflgthreefive9cpprdlbv +nine7941cfxnxszfivebm +ninenhgpj7fourfour9 +456xg +ninethreesqdp11four32lgdl +38trrgt7 +tnhhxlm3rvzvxmmcgpxm +oneqtmg25snbgzfhtkq8hdlvszrclcsrhqsdn +3cjndzmkfx +clxvdv7seven +five6three1 +8sixfour36seven9mlxmrx7 +vdrk27jnrbrvdrnine2nvnlkcszoneightchk +67drgjqrqdktplq +36pprvngxrrjtnpffmrxxdl +hkkrgxtpvzzmcrfcbcjzbpnvls88hrxl +b4jkeightsevenmxkdpvdpt857 +6eighteight2four +eights73five +fiveslpjvzjlpvzone41nine +smnmlrxx7 +onesixfive4 +8s75eightone +1fivecpqsxm +99743ninesix +twopzflcvxsgzn1v8 +9three49 +two2sevenf8sixvdpxzgxbmkrz2 +sevenfive6shhbqhgqqhstdrnfxsjtjvnine +kzqsvn29s +threenlrrhz4ttqljvr +qx9sfdx +nhsbgsvvp7 +876eightfivetprjjbxhzbfpqgltt1 +six3xdjtphrm1pbjvjfn +nflcpmjpt6six9two6xvbmbm +fmlglbgmhvseven4nnkkgcmbv9chmthxvztgsevenbtzs +7bkmchf4five +xgglktnbeight183twonine +onecbpdv9 +fhhmddrnlnkvlb5drtcbrjprzcqlj7mgspc +7threexkfjklvzcfourtnrgmpveightfour8 +6rhmcblhfourtwo3two +one4fiveonenine +slksfchvlgblninefszfbksddgvd4 +four742sbseven3lk +8qbchrfldtvppv6fourzfivez +ninephsmnnvsfour1 +one5kvcrtnc5sixonehjfxnsixfqhzjj +8drgrzngh +16eight8rczbjmblhn +threejpgjbpfdbvgdpftwo96 +sfkhvjgd2smgfkr9two27 +threeqpdeight3 +threesevenxblrmqkvzvrbhsix4 +9seven2vlhsninenvptdvmrpzbrlpfhfnl +xkjpdpgsrtvlfg1eight +seven254 +three8fnmcfhrdtjdlpfqlqhgx +21bkjv54s8 +82ddfour6vcggxhlmpfivesix +cdsbgtpqthreefivel8nine +5five5cksct7bvjbtdjkcz +64fhm +tqk5 +3mhzkhtfzscpgfctfskdn2five +cvmvthreez8fivegvcbsxj35nfxdshqz +sevenqlqmkhdjpmsjrtggqzfive35scmnfpmhmp +sixfive2 +6sevensvqhhfivetwo +eightthree84 +82six8 +8bbhrkzgtg59cpgdvb +11three3hfjkvmsl +qdljkm792 +eightgq5xgskvtpgmhxsnhzlqhnksxflvx +ghdhv1seventhree55fourthreemrlhq +oneonethree3zm +3twobsxqfsfnine +eightsbznkpzsqqtpxfhlfr5 +sevenchs2twoeight +ninezjtxp7bpzdgtoneeightoneighth +fmkbvzzgvl46fiveoneightqn +kvsonevxtmmxnfour4lpxjrbcfoursixp +391onelktkfd1three2twonels +pn2 +3cmsmfvjchflngkrbtsfrblltwo +eightfour8ninesix29 +dpdvnonefour2eightbzzrvthmkgfcdv5 +59sfiverboneone3 +6xrqq1 +9bczfbfbhkntmdmseven68 +npqm35qszmptx +fivepkdlmonefivesixz252 +dzrtwonetbbv9twovrsp +fpkfourfivendkhz6five +86dknvgcnmcslmztwo3 +fivetxrrzjpb6tqseightjthnhn +362zhtxdgvcdgnzv55 +eightsevenbllbgvdonethreeprglpjhxhqfdn6csnghrtl +5fourc +8fournine3svdlh5sevenoneighttsq +eightjkqmgljpprcpblvrthreeseven8fourone7 +vqrqlhmb9seven231vbfzrrstwohjvdjgg +kk1foursixeight849 +seven13ttbnlr21 +jfgsksrrkjsixsixthreesixfourrbxqzdhc9 +3fiveeightqbndjdg6pmftqshone +nineoneseventkdpztbkk83two4 +cjdbxhpzr87eight +twosevenkkdhf86sevendzhvkrttjljr +67cdltmnbkktzseightsix7two +three44zqtglqcffrkmhsgjfive +twoonenbf74three9tthsvmngcx +lvrnpvmvgvnnonesix5 +nchcfxxphmnqbhfourxnine52sixj +fourqpvngjszftg88seven +xgzmv133zvjmlfqhcmjbqzfntkjtpdjlkmv +fivejxc4threebzqbhrldsf +glvtpvnsevenqvrtcgjkhkcsix1seven +sjeightwo4fivesevensixnqxsjckfive +z5 +jxxhsmdvkglljhxzxljqz9zplmslcfdxxljtwosixkjxlsrfcx +fiversdslrkcqclzb7zdzlbllfkvphfqhnfour +five1hpdncfpzhdxrhnv4lblgthree7snj +8scqf +threepcfkrhstmsbfvqxsxrctwo185six +7lqvpqxbjrv9nine985 +eight16jvfqcgbmhdgdltxz9 +three8vncqf9 +zrzp9sevenxthpsxtdninebmnhgrkdjqqjfffourblbkch +fiveseven25snpsnjgnfl +ninefourxrtdlb1threefivefive1rbqzfbxtst +three8three7five41 +tcnvsevenz45fngtjljh +txvpst1 +eighthrlbmtk4nssknqmxjvjnqsqlfivekzrphrtwo +two492ninekcjvllckdtkp +48vlvmkcvbsfoursix8 +eight28sixsix3nine45 +jkm8hhqfclneightjlpsnck8dcvlvgkrfprflsvlh +4zxjqlfn +fivebpqfjtcmlsixfour48onejqhzgtftrvkknngf +dkfour7fivezzsjdbnvgninefivenine5 +twoxjqldtk91eightneight +seven57177 +gpbqvlpxvnzgninefoureightthree5 +bzprbrninesnjpgqthreeeightsixtgmvrthfour4 +83brtxx4zzxsxrcfivebzbxlsl +threesevenninetwo8twoone +veightwochrmfrkrcppxkj4tvvzmhqjhnjvtq1threegtmfnnjpxb +3zgqpvq9krslgjgkjmtbsbhbjg +4nine8mhfs67vhdjvsjrlz2 +nine659xrvhhnnbqq7 +bninetwoeight8fxntpdkrfp9eightnb +qtwonecvbgxqfiveoneeight4five +seven926 +shkkksn4onefivethree +eightsevenqvfqmzqsfn1 +sixdgjmtk5fivevqbxxdzrjqdtgnnffzmfqxzjdzhp +stsjcmzbxt1 +rvnone3three9twozchp26 +ninefmpkdlvzfivetwo1 +four4one4vdpgp9lprtqjzmhk +15rpdhczznrzclfcsxdx41 +seven36twopnvjdxrss5 +46ninenine +6jg8xtqfmjffdlfhzrn +2jsixfive573 +two8eight39fbqkdzseven9 +3gnrg5 +hlkk1 +1sevenfive7 +72jvdqmlrddk +ninetwo8hzdninesixnjhgrcsttwo +23cxdccvvjrjfsixlcrmxjkeight +6brqjfjsix56nine3 +ninezveighttwogc5two +ninexskpsth5sevennine +c7jmmjcv +89sixthreeeight71q +fivekccfngmxseven7onernfskqnqfive5 +sevensixone4hfhgs +xq2jxddpdm3nine8ptqlm4 +smsevendj19fbqdjpznfourgqq6 +7147 +znqbfmcpd4twoseven +fhcsmxtdx6 +sxj2tcb92 +6nine6 +qdfknmdzt88 +66threebsndqlkrshfive5 +eight7pckdhlqzrx24 +3ninevk +sevennine3 +8one1rjtnhjx +eightthree3ninekzhtlqsevenssprmrqhhgncrs +6one8nlzxfxvr +4cgm9fivethree +four77gxvdqztzzgbsxhntwortndzqzj +t8three335 +c2rjggzl +jjgjbqgbnz4gdsqk66991 +ninezckbpsr9 +jb5sevenseven +one5nfdcvx +1kbcmclhrh1onejzft +fiveninefivedglztnjxblonehfive3 +6onesixh6onethree9 +spdzhnt5tpzrkh1fxlnine4skgzdln +1onenineqgzcq2eightwonh +vfzvds826vtlrcg6rvseven +vqmoneight9tknqtcsmb +kqrcrqrqjbdeight7ckhr23 +oneeight2 +8eightnhtqcggtxc6dfsfcjfpznmsthree +sxfvfdkff8dvlmbdktsixmzpnxzmml2 +9lgmxktj1frxl diff --git a/examples/typescript_variants/README.md b/examples/typescript_variants/README.md new file mode 100644 index 000000000..3fee54e11 --- /dev/null +++ b/examples/typescript_variants/README.md @@ -0,0 +1,20 @@ +# TYPESCRIPT VARIANTS + +These are some different examples of TypeScript variants. You can check them in by +sequentially committing them to the ECCO repository. Each example is split into a series of directories that contain +a `.config` file that is used to define the features of the commit. + +## shapes +A simple example of a TypeScript variant that defines a `Shape` class and three subclasses `Square` `Circle` and `Rectangle`. +The classes are checked in individually as variants. You may then mix and match the features by creating a new variant that +can include all three shapes or just a subset of them. + +## shapes2 +Similar to the `shapes` example, but with a different implementation that splits the classes into separate files. There is +also a `App` class that uses the `Shape` classes. The `App` class also has a property that +demonstrates the ability of the reader to resolve a switch statement based on the features of the variants. + +## AoC1 +A simple implementation of the first day of the Advent of Code 2023. First the input is checked in, then the basic file input +and then the solutions to part 1 and 2. You may then check out both features combined into one and execute the script in +TypeScript runtime. The example is set up to use `deno` as the runtime. diff --git a/examples/typescript_variants/shape2/step1/.config b/examples/typescript_variants/shape2/step1/.config new file mode 100644 index 000000000..ef771af4b --- /dev/null +++ b/examples/typescript_variants/shape2/step1/.config @@ -0,0 +1 @@ +shape1.1 \ No newline at end of file diff --git a/examples/typescript_variants/shape2/step1/Shape.ts b/examples/typescript_variants/shape2/step1/Shape.ts new file mode 100644 index 000000000..7bc425541 --- /dev/null +++ b/examples/typescript_variants/shape2/step1/Shape.ts @@ -0,0 +1,4 @@ +abstract class Shape { + getArea : () => number + abstract getName() : string +} \ No newline at end of file diff --git a/examples/typescript_variants/shape2/step2/.config b/examples/typescript_variants/shape2/step2/.config new file mode 100644 index 000000000..cc21b1834 --- /dev/null +++ b/examples/typescript_variants/shape2/step2/.config @@ -0,0 +1 @@ +shape1.1, rect1.1 \ No newline at end of file diff --git a/examples/typescript_variants/shape2/step2/App.ts b/examples/typescript_variants/shape2/step2/App.ts new file mode 100644 index 000000000..af2fbdc41 --- /dev/null +++ b/examples/typescript_variants/shape2/step2/App.ts @@ -0,0 +1,14 @@ +class App{ + check = (shape : Shape) => { + switch (shape.constructor) { + default: + return "Unknown Shape" + } + } + + printShape(shape : Shape){ + console.log(shape.getName + " has the area: " + shape.getArea) + } +} + +const app = new App() \ No newline at end of file diff --git a/examples/typescript_variants/shape2/step2/Shape.ts b/examples/typescript_variants/shape2/step2/Shape.ts new file mode 100644 index 000000000..7bc425541 --- /dev/null +++ b/examples/typescript_variants/shape2/step2/Shape.ts @@ -0,0 +1,4 @@ +abstract class Shape { + getArea : () => number + abstract getName() : string +} \ No newline at end of file diff --git a/examples/typescript_variants/shape2/step3/.config b/examples/typescript_variants/shape2/step3/.config new file mode 100644 index 000000000..3093e0eeb --- /dev/null +++ b/examples/typescript_variants/shape2/step3/.config @@ -0,0 +1 @@ +shape1.1, rect1.1, app1.1 \ No newline at end of file diff --git a/examples/typescript_variants/shape2/step3/App.ts b/examples/typescript_variants/shape2/step3/App.ts new file mode 100644 index 000000000..fad34078c --- /dev/null +++ b/examples/typescript_variants/shape2/step3/App.ts @@ -0,0 +1,20 @@ +class App{ + check = (shape : Shape) => { + switch (shape.constructor) { + case Rectangle: + return "This should be a Rectangle" + default: + return "Unknown Shape" + } + } + + printShape(shape : Shape){ + console.log(shape.getName + " has the area: " + shape.getArea) + } +} + +const app = new App() +const rect = new Rectangle(3,2) + +app.check(rect) +app.printShape(rect) \ No newline at end of file diff --git a/examples/typescript_variants/shape2/step3/Rectangle.ts b/examples/typescript_variants/shape2/step3/Rectangle.ts new file mode 100644 index 000000000..bc9ffeed6 --- /dev/null +++ b/examples/typescript_variants/shape2/step3/Rectangle.ts @@ -0,0 +1,19 @@ +class Rectangle extends Shape { + + height:number + width:number + + constructor(width:number,height:number) { + super(); + this.width = width + this.height = height + } + + getArea = () => { + return this.width * this.height + } + + getName(){ + return "Rectangle" + } +} \ No newline at end of file diff --git a/examples/typescript_variants/shape2/step3/Shape.ts b/examples/typescript_variants/shape2/step3/Shape.ts new file mode 100644 index 000000000..7bc425541 --- /dev/null +++ b/examples/typescript_variants/shape2/step3/Shape.ts @@ -0,0 +1,4 @@ +abstract class Shape { + getArea : () => number + abstract getName() : string +} \ No newline at end of file diff --git a/examples/typescript_variants/shape2/step4/.config b/examples/typescript_variants/shape2/step4/.config new file mode 100644 index 000000000..a67b9619b --- /dev/null +++ b/examples/typescript_variants/shape2/step4/.config @@ -0,0 +1 @@ +shape1.1, circ1.1, app1.1 \ No newline at end of file diff --git a/examples/typescript_variants/shape2/step4/App.ts b/examples/typescript_variants/shape2/step4/App.ts new file mode 100644 index 000000000..688b830c5 --- /dev/null +++ b/examples/typescript_variants/shape2/step4/App.ts @@ -0,0 +1,20 @@ +class App{ + check = (shape : Shape) => { + switch (shape.constructor) { + case Circle: + return "This should be a Circle" + default: + return "Unknown Shape" + } + } + + printShape(shape : Shape){ + console.log(shape.getName + " has the area: " + shape.getArea) + } +} + +const app = new App() +const circ = new Circle(5) + +console.log(app.check(circ)) +app.printShape(circ) \ No newline at end of file diff --git a/examples/typescript_variants/shape2/step4/Circle.ts b/examples/typescript_variants/shape2/step4/Circle.ts new file mode 100644 index 000000000..9d18695db --- /dev/null +++ b/examples/typescript_variants/shape2/step4/Circle.ts @@ -0,0 +1,17 @@ +class Circle extends Shape { + + radius:number + + constructor(radius : number) { + super(); + this.radius = radius + } + + getArea = () => { + return this.radius * 2 * Math.PI + } + + getName(){ + return "Circle" + } +} \ No newline at end of file diff --git a/examples/typescript_variants/shape2/step4/Shape.ts b/examples/typescript_variants/shape2/step4/Shape.ts new file mode 100644 index 000000000..7bc425541 --- /dev/null +++ b/examples/typescript_variants/shape2/step4/Shape.ts @@ -0,0 +1,4 @@ +abstract class Shape { + getArea : () => number + abstract getName() : string +} \ No newline at end of file diff --git a/examples/typescript_variants/shapes/step1/.config b/examples/typescript_variants/shapes/step1/.config new file mode 100644 index 000000000..1a6de94fb --- /dev/null +++ b/examples/typescript_variants/shapes/step1/.config @@ -0,0 +1 @@ +base1.1 \ No newline at end of file diff --git a/examples/typescript_variants/shapes/step1/shapes.ts b/examples/typescript_variants/shapes/step1/shapes.ts new file mode 100644 index 000000000..fed48d109 --- /dev/null +++ b/examples/typescript_variants/shapes/step1/shapes.ts @@ -0,0 +1,8 @@ +abstract class Shape{ + abstract getName() : string + abstract getArea() : number +} + +let areas : Array = [] + +areas.forEach(s => console.log(s.getName + " has an area of " + s.getArea)) \ No newline at end of file diff --git a/examples/typescript_variants/shapes/step2/.config b/examples/typescript_variants/shapes/step2/.config new file mode 100644 index 000000000..254022863 --- /dev/null +++ b/examples/typescript_variants/shapes/step2/.config @@ -0,0 +1 @@ +base1.1, rect1.1 \ No newline at end of file diff --git a/examples/typescript_variants/shapes/step2/shapes.ts b/examples/typescript_variants/shapes/step2/shapes.ts new file mode 100644 index 000000000..78540837a --- /dev/null +++ b/examples/typescript_variants/shapes/step2/shapes.ts @@ -0,0 +1,20 @@ +abstract class Shape{ + abstract getName() : string + abstract getArea() : number +} + +class Rectangle extends Shape{ + width : number = 3 + height : number = 2 + getName(): string { + return "Rectangle {"+this.width+","+this.height+"}" + } + getArea(): number { + return this.width * this.height + } +} + +let areas : Array = [] +areas.push(new Rectangle()) + +areas.forEach(s => console.log(s.getName + " has an area of " + s.getArea)) \ No newline at end of file diff --git a/examples/typescript_variants/shapes/step3/.config b/examples/typescript_variants/shapes/step3/.config new file mode 100644 index 000000000..436f4ff3b --- /dev/null +++ b/examples/typescript_variants/shapes/step3/.config @@ -0,0 +1 @@ +base1.1, circ1.1 \ No newline at end of file diff --git a/examples/typescript_variants/shapes/step3/shapes.ts b/examples/typescript_variants/shapes/step3/shapes.ts new file mode 100644 index 000000000..46b0130f1 --- /dev/null +++ b/examples/typescript_variants/shapes/step3/shapes.ts @@ -0,0 +1,20 @@ +abstract class Shape{ + abstract getName() : string + abstract getArea() : number +} + +class Circle extends Shape{ + radius : number = 2 + + getName(): string { + return "Rectangle {"+this.radius+"}" + } + getArea(): number { + return this.radius * 2 * Math.PI + } +} + +let areas : Array = [] +areas.push(new Circle()) + +areas.forEach(s => console.log(s.getName + " has an area of " + s.getArea)) \ No newline at end of file diff --git a/examples/typescript_variants/shapes/step4/.config b/examples/typescript_variants/shapes/step4/.config new file mode 100644 index 000000000..6cb39cd77 --- /dev/null +++ b/examples/typescript_variants/shapes/step4/.config @@ -0,0 +1 @@ +base1.1, square1.1 \ No newline at end of file diff --git a/examples/typescript_variants/shapes/step4/shapes.ts b/examples/typescript_variants/shapes/step4/shapes.ts new file mode 100644 index 000000000..67eff0255 --- /dev/null +++ b/examples/typescript_variants/shapes/step4/shapes.ts @@ -0,0 +1,20 @@ +abstract class Shape{ + abstract getName() : string + abstract getArea() : number +} + +class Square extends Shape{ + side : number = 2 + + getName(): string { + return "Square {"+this.side+"}" + } + getArea(): number { + return this.side * this.side + } +} + +let areas : Array = [] +areas.push(new Square()) + +areas.forEach(s => console.log(s.getName + " has an area of " + s.getArea)) \ No newline at end of file diff --git a/gui/build.gradle b/gui/build.gradle index 8577606f9..e52a1f403 100644 --- a/gui/build.gradle +++ b/gui/build.gradle @@ -25,17 +25,18 @@ dependencies { runtimeOnly project(':ecco-adapter-file') runtimeOnly project(':ecco-adapter-text') runtimeOnly project(':ecco-adapter-image') + runtimeOnly project(':ecco-adapter-typescript') runtimeOnly project(':ecco-adapter-golang') runtimeOnly project(':ecco-adapter-python') - + testRuntimeOnly project(':ecco-adapter-golang') testRuntimeOnly project(':ecco-adapter-file') testRuntimeOnly project(':ecco-adapter-text') testRuntimeOnly project(':ecco-adapter-image') testRuntimeOnly project(':ecco-adapter-challenge') testRuntimeOnly project(':ecco-adapter-cpp') + testRuntimeOnly project(':ecco-adapter-typescript') testRuntimeOnly project(':ecco-adapter-runtime') -} ospackage { summary 'GUI (Graphical User Interface) for ECCO.' diff --git a/settings.gradle b/settings.gradle index 371b3ed07..0b480e6c1 100644 --- a/settings.gradle +++ b/settings.gradle @@ -14,6 +14,7 @@ include 'adapter-challenge' include 'adapter-java' include 'adapter-python' include 'adapter-cpp' +include 'adapter-typescript' include 'adapter-runtime' include 'adapter-golang' @@ -30,6 +31,7 @@ project(':adapter-challenge').projectDir = file('adapter/challenge') project(':adapter-java').projectDir = file('adapter/java') project(':adapter-python').projectDir = file('adapter/python') project(':adapter-cpp').projectDir = file('adapter/cpp') +project(':adapter-typescript').projectDir = file('adapter/typescript') project(':adapter-runtime').projectDir = file('adapter/runtime') project(':adapter-golang').projectDir = file('adapter/golang')