kenken 1.5.0 copy "kenken: ^1.5.0" to clipboard
kenken: ^1.5.0 copied to clipboard

Create and solve Kenkens!

example/kenken_example.dart

// This example uses a terminal and command line,
// but most likely you want
// to draw kenken and to handle custom events in a web application.

// You can see a working example of such an application at http://superkenken.ru

import 'dart:io';
import 'dart:convert';
import 'package:kenken/kenken.dart';

void main() {
  // Cteate kenken:
  var kenken = Kenken(3);

  /// You can use automacic filling kenken with rules:
  kenken.autoFillCustomRules();

  // Manually adding rules (if you have own logic):
  // kenken
  //   ..addRuleFor([RC(1, 1)], SingleValue(), 1)
  //   ..addRuleFor([RC(1, 2), RC(1, 3)], Sum(), 5)
  //   ..addRuleFor([RC(2, 1), RC(3, 1)], Diff(), 1)
  //   ..addRuleFor([RC(2, 2), RC(2, 3)], Sum(), 4)
  //   ..addRuleFor([RC(3, 2), RC(3, 3)], Sum(), 3);

  // kenken.brokenRules.isNotEmpty - will return true when kenken will solved:
  while (kenken.brokenRules.isNotEmpty) {
    // kenken.brokenRules - contains all rules what are broken by user:
    print(kenken.brokenRules);
    printKenken(kenken);
    // User enters a row number of cell:
    p('Enter row:');
    var row = int.tryParse(stdin.readLineSync());
    // User enters a column numer of cell:
    p('Enter col:');
    var col = int.tryParse(stdin.readLineSync());
    // User enters a value for cell:
    p('Enter value:');
    var val = int.tryParse(stdin.readLineSync());
    // Put value to kenken cell:
    kenken.setValue(row, col, val);
  }

  p('DONE!');

  // You can also...
  // ... serialize kenken as JSON:
  var kenkenJsonString = jsonEncode(kenken);

  // ... create kenken object from JSON:
  // ignore: unused_local_variable
  var kenkenFromJson = Kenken.fromJson(jsonDecode(kenkenJsonString));

  // How to encode KenKen to urlEncoded string:
  var urlEncoded = base64UrlEncode(utf8.encode(kenkenJsonString));
  print('urlEncoded: $urlEncoded');

  // And vice versa:
  var decodedJsonString = utf8.decode( base64Decode(urlEncoded) );
  print('decoded: $decodedJsonString');
}

/// Primitive sample of way to print kenken to terminal
void printKenken(Kenken kenken) {
  for (var rowNumber in kenken.rowOrColNumbers) {
    for (var colNumber in kenken.rowOrColNumbers) {
      var cell = kenken.cellOf(RC(rowNumber, colNumber));
      // print top borders
      p(topBorderAsString(cell, 8));
    }
    // print new line:
    print('');

    // print Left borders, rules, Right borders
    for (var colNumber in kenken.rowOrColNumbers) {
      var cell = kenken.cellOf(RC(rowNumber, colNumber));
      //print left border, cell text and right border:
      p(wrapTextWithLeftAndRightBorders(
          '${cell.ruleText} ${cell.valueAsString}', cell, 8));
    }
    // print new line:
    print('');
  }
}

/// Prints `val` to stdout without trailing '\n'
void p(val) {
  stdout.write(val);
}

/// Returns string representation of top cell border.
String topBorderAsString(Cell cell, int cellWidth) =>
    cell.isTopBorderBold ? '-' * cellWidth : '|' + ' ' * (cellWidth - 2) + '|';

/// Returns string with left and right borders and text between they
String wrapTextWithLeftAndRightBorders(String text, Cell cell, int cellWidth) {
  var leftBorder = cell.isLeftBorderBold ? '|' : ' ';
  var rightBorder = cell.isRightBorderBold ? '|' : ' ';
  var spacesCount = cellWidth - text.length - 2;
  return '$leftBorder$text' + (' ' * spacesCount) + rightBorder;
}
0
likes
15
pub points
0%
popularity

Publisher

unverified uploader

Create and solve Kenkens!

Homepage

License

unknown (LICENSE)

More

Packages that depend on kenken