Alguma experiência
As barras de contagem são pequenas barras (3-14 cm de comprimento) que foram usadas por matemáticos de muitas culturas asiáticas por mais de 2000 anos para representar qualquer número ou fração inteira. (Neste desafio, nos concentraremos em números inteiros não assinados). Havia também uma versão escrita, chamada numerais de barras.
Veja como funciona:
(Se em algum momento você ficar confuso, verifique a representação ascii de cada dígito e alguns exemplos que incluí na parte inferior)
Os números de barra são um sistema numérico posicional verdadeiro, com dígitos de 1 a 9 e em branco, a 0. Os dígitos consistem em linhas horizontais e verticais; quanto mais linhas, maior o dígito. Depois de passar das cinco, coloque uma linha horizontal em cima para adicionar 5 ao número de linhas abaixo. Uma linha vertical é 1, duas linhas verticais 2, cinco linhas verticais são 5, uma linha vertical com uma linha horizontal no topo é 6, quatro linhas verticais com uma linha horizontal no topo são 9 (o dígito mais alto).
Um dígito vertical de 3:
|||
|||
|||
|||
|||
Para facilitar a leitura dos números das barras, eles usaram notação diferente para cada dígito alternado. A segunda notação troca o papel das linhas horizontais e verticais. de modo que 3 é representado por três linhas horizontais e 8 por três linhas horizontais com uma linha vertical no topo.
Um dígito horizontal de 8:
|
|
__|__
_____
_____
Sabendo que notação usar é fácil, como dito anteriormente, eles são usados alternadamente e Sun Tzu escreveu que "um é vertical, dez é horizontal". Portanto, o dígito mais à direita é vertical e alternamos a partir daí.
O desafio
Essas hastes foram usadas para representar números e frações negativas (conforme explicado no artigo da wikipedia sobre elas . Para o objetivo deste desafio, focaremos apenas números inteiros positivos. O objetivo é simples:
Escreva uma função ou programa completo que aceite um valor inteiro como entrada e imprima a representação numérica da haste desse número inteiro em STDOUT (você também pode gravar em um arquivo se isso funcionar melhor). O menor código em bytes vence.
Cada dígito será representado por caracteres ASCII 5x5 e separados por duas colunas de 5 espaços. A representação exata que você usará para cada dígito é a seguinte:
space between two digits (two colums):
0 digit, both vertical and horizontal (five columns):
1 digit, vertical:
|
|
|
|
|
2 digit, vertical:
| |
| |
| |
| |
| |
3 digit, vertical:
|||
|||
|||
|||
|||
4 digit, vertical:
|| ||
|| ||
|| ||
|| ||
|| ||
5 digit, vertical:
|||||
|||||
|||||
|||||
|||||
6 digit, vertical:
_____
|
|
|
|
7 digit, vertical:
_____
| |
| |
| |
| |
8 digit, vertical:
_____
|||
|||
|||
|||
9 digit, vertical:
_____
|| ||
|| ||
|| ||
|| ||
1 digit, horizontal:
_____
2 digit, horizontal:
_____
_____
3 digit, horizontal:
_____
_____
_____
4 digit, horizontal:
_____
_____
_____
_____
5 digit, horizontal:
_____
_____
_____
_____
_____
6 digit, horizontal:
|
|
|
|
__|__
7 digit, horizontal:
|
|
|
__|__
_____
8 digit, horizontal:
|
|
__|__
_____
_____
9 digit, horizontal:
|
__|__
_____
_____
_____
Os dígitos devem ser impressos um ao lado do outro. Não são permitidos espaços à direita além da caixa delimitadora do último dígito. São necessários espaços à direita para completar a caixa delimitadora do (s) último (s) dígito (s). Você deve finalizar a saída com uma única nova linha à direita. Os espaços iniciais que não pertencem à caixa delimitadora do primeiro dígito também são proibidos.
Saída de exemplo
As linhas que começam com >
devem ser interpretadas como entrada.
>12
| |
| |
| |
| |
_____ | |
>8037
| _____
| | |
__|__ _____ | |
_____ _____ | |
_____ _____ | |
>950
_____ _____
|| || _____
|| || _____
|| || _____
|| || _____
fonte
Respostas:
Python 2 - 216
Meu primeiro tiro, pode ser algumas coisas para tirar, mas meu cérebro dói, então é bom o suficiente por enquanto
fonte
JavaScript (ES6) 223
Função com parâmetro numérico, saída para o console. NB Se o parâmetro de entrada pudesse ser uma string, o código seria 5 caracteres mais curto e sem o limite de 17 dígitos significativos dos números JS.
Teste
Teste no console do Firefox.
F(12)
Resultado
F(8037)
Resultado
F(950)
Resultado
Ungolfed
fonte
PowerShell , 229 bytes
Experimente online!
Onde esta sequência apresenta dígitos:
hastes verticais:
hastes horizontais:
Script desenrolado:
fonte