Tanstore

From Esolang
Jump to navigation Jump to search

Tanstore stands for Tommyaweosme's alphanumeric storage unit.

Possible values

0     (space)
1-26  alphabet
27-36 numberbet
37    (newline)

A more explicit listing comprehending the recognized symbols and their affiliated Tanstore character codes may be extracted from the following tabulation:

Code Character Category
0 (space) (space)
1 A alphabet
2 B alphabet
3 C alphabet
4 D alphabet
5 E alphabet
6 F alphabet
7 G alphabet
8 H alphabet
9 I alphabet
10 J alphabet
11 K alphabet
12 L alphabet
13 M alphabet
14 N alphabet
15 O alphabet
16 P alphabet
17 Q alphabet
18 R alphabet
19 S alphabet
20 T alphabet
21 U alphabet
22 V alphabet
23 W alphabet
24 X alphabet
25 Y alphabet
26 Z alphabet
27 0 numberbet
28 1 numberbet
29 2 numberbet
30 3 numberbet
31 4 numberbet
32 5 numberbet
33 6 numberbet
34 7 numberbet
35 8 numberbet
36 9 numberbet
37 (newline) (newline)

Implementations

An peirastic implementation of an encoder and decoder in the Common Lisp programming language shall be adduced below:

(deftype tanstore-code ()
  "Defines the valid integral range for Tanstore character codes."
  '(integer 0 37))

;;; -------------------------------------------------------

(deftype destination ()
  "Defines a sink for output operations."
  '(or null (eql T) stream string))

;;; -------------------------------------------------------

(define-condition Tanstore-Error (error)
  ()
  (:documentation
    "Furnishes the firmament for all Tanstore-related errors."))

;;; -------------------------------------------------------

(define-condition No-Tanstore-Character-Error (Tanstore-Error)
  ((offending-character
    :initarg       :offending-character
    :initform      (error "Missing offending character.")
    :reader        no-tanstore-character-error-offending-character
    :type          character
    :documentation "The non-Tanstore symbol."))
  (:report
    (lambda (condition stream)
      (declare (type No-Tanstore-Character-Error condition))
      (declare (type destination                 stream))
      (format stream "No Tanstore symbol: ~c."
        (no-tanstore-character-error-offending-character condition))))
  (:documentation
    "Communicates the attempt to request a non-Tanstore symbol."))

;;; -------------------------------------------------------

(define-condition Invalid-Tanstore-Code-Error (Tanstore-Error)
  ((offending-code
    :initarg       :offending-code
    :initform      (error "Missing offending code.")
    :reader        invalid-tanstore-code-error-offending-code
    :type          integer
    :documentation "The number representing no valid Tanstore code."))
  (:report
    (lambda (condition stream)
      (declare (type Invalid-Tanstore-Code-Error condition))
      (declare (type destination                 stream))
      (format stream "No valid Tanstore code: ~d."
        (invalid-tanstore-code-error-offending-code condition))))
  (:documentation
    "Communicates an attempt to request a character by adminiculum of
     an invalid Tanstore code."))

;;; -------------------------------------------------------

(declaim (type (simple-string 38) +TANSTORE-SYMBOLS+))

;;; -------------------------------------------------------

(defparameter +TANSTORE-SYMBOLS+
  " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
"
  "Maps the recognized characters via their indices into this string to
   their Tanstore codes.")

;;; -------------------------------------------------------

(defun get-tanstore-code (character)
  "Returns the Tanstore code affiliated with the CHARACTER, or signals
   an error of the type ``No-Tanstore-Character-Error`` upon its
   disrespondency with the Tanstore character repertoire."
  (declare (type character character))
  (the tanstore-code
    (or (position character +TANSTORE-SYMBOLS+ :test #'char-equal)
        (error 'No-Tanstore-Character-Error :offending-character character))))

;;; -------------------------------------------------------

(defun get-tanstore-character (code)
  "Returns the character amenable to the Tanstore character CODE, or
   signals an error of the type ``Invalid-Tanstore-Code-Error`` upon
   its disrespondency with the valid Tanstore character code range."
  (declare (type tanstore-code code))
  (the character
    (if (array-in-bounds-p +TANSTORE-SYMBOLS+ code)
      (schar +TANSTORE-SYMBOLS+ code)
      (error 'Invalid-Tanstore-Code-Error :offending-code code))))

See also