# Собачка

Jump to navigation
Jump to search

Paradigm(s) | String-rewriting |
---|---|

Designed by | User:Hakerh400 |

Appeared in | 2022 |

Computational class | Unknown |

Major implementations | Implemented |

File extension(s) | `.txt` |

**Собачка** is a string-rewriting esolang invented by User:Hakerh400 in 2022.

## Overview

Source code consists of a list of decimal digits. The interpreter rewrites the list until the program halts. The output is a single digit.

## Rewriting rules

Repeat this until the program halts. If the list is empty, output digit `0`

and halt. If the list contains exactly one digit, output that digit and halt. Otherwise, rewrite the list using the following algorithm.

For each two consecutive digits and :

- If , produce list
`[a + b]`

- Otherwise, if , produce list
`[a]`

- Otherwise, if , produce list
`[1, a + b - 10]`

- Otherwise produce an empty list

Concatenate all productions in order. It represents the new list of digits.

## Example

Program:

4866857774615622223321

Computation steps:

4866857774615622223321 12614127710761184445653 38755397817729889118 1158121598791181729 2613933614162998911 874126975578119172 5381551215921089 81196563361431817 9210119697574998 3112101512139 4233116633412 656427696753 116915138 271566411 98611652 7277 997 9

The output is `9`

.

## Implementation

Implementation in Haskell:

type N = Integer infixr 0 # (#) = id xs :: [N] xs = [1, 2, 3, 4, 5] f :: N -> N -> [N] f a b = let c = a + b in if c <= 9 then [c] else if a == b then [a] else if a < b then [1, c - 10] else [] step :: [N] -> [N] step xs = concat # zipWith f xs # tail xs run :: [N] -> [[N]] run xs = if null xs then [[0]] else xs : if length xs == 1 then [] else run # step xs main :: IO () main = mapM_ (putStrLn . (>>= show)) # run xs

## Computational class

We conjecture that this language is total.