Dada uma sequência de entrada, escreva um programa que produz o número total de linhas e curvas que possui.
O desafio
- Receber entrada de
STDIN
, ou qualquer outro método de entrada. - Saída para
STDOUT
, ou qualquer outro método de saída, o número total de linhas e curvas contidas na sequência, nessa ordem , com base na tabela abaixo no trecho de código. - Quaisquer caracteres não alfanuméricos devem ser ignorados.
- As brechas padrão são proibidas.
- Isso é código-golfe , então o código mais curto vence.
Esclarecimentos
- As linhas e curvas são determinadas pela fonte usada no Stackexchange for
code blocks
. - Círculos (como
O, o, 0
) e pontos (i, j
) são considerados 1 curva cada. - A entrada pode ser uma sequência, lista de caracteres, fluxo de caracteres, bytecodes etc.
- A saída pode ser uma matriz de números inteiros, tuplo de números inteiros, cadeia separados por vírgulas, etc. Os dois números tem de ser separado, por isso
104
não é válido, mas10,4
,10 4
,10\n4
,[10,4]
,(10, 4)
, e assim por diante é. - O espaço em branco à direita e à direita é perfeitamente aceitável.
Entrada e Saída de Amostra
# Format: str -> line, curve
hi -> 4, 2
HELLO WORLD -> 20, 4
l33+ 5pEak -> 13, 8
+=-_!...?~`g@#$%^ -> 1, 2
9001 -> 5, 3
O o O o O o -> 0, 6
Tabela de caracteres
Char | Lines | Curves
0 | 1 | 1
1 | 3 | 0
2 | 1 | 1
3 | 0 | 2
4 | 3 | 0
5 | 2 | 1
6 | 0 | 1
7 | 2 | 0
8 | 0 | 2
9 | 0 | 1
A | 3 | 0
B | 1 | 2
C | 0 | 1
D | 1 | 1
E | 4 | 0
F | 3 | 0
G | 2 | 1
H | 3 | 0
I | 3 | 0
J | 1 | 1
K | 3 | 0
L | 2 | 0
M | 4 | 0
N | 3 | 0
O | 0 | 1
P | 1 | 1
Q | 0 | 2
R | 2 | 1
S | 0 | 1
T | 2 | 0
U | 0 | 1
V | 2 | 0
W | 4 | 0
X | 4 | 0
Y | 3 | 0
Z | 3 | 0
a | 0 | 2
b | 1 | 1
c | 0 | 1
d | 1 | 1
e | 1 | 1
f | 1 | 1
g | 1 | 2
h | 1 | 1
i | 3 | 1
j | 1 | 2
k | 3 | 0
l | 3 | 0
m | 3 | 2
n | 2 | 1
o | 0 | 1
p | 1 | 1
q | 1 | 1
r | 1 | 1
s | 0 | 1
t | 1 | 1
u | 1 | 1
v | 2 | 0
w | 4 | 0
x | 4 | 0
y | 1 | 1
z | 3 | 0
s
2 curvas ou 1? O caule está naj
linha e na curva? Seria melhor se você pudesse listar os valores necessários para todas as letras.o
deve ser 0 linhas, 1 curvaRespostas:
Haskell,
214199188175 bytesExperimente online!
Os números de linhas e curvas são os dígitos dos números da base 5 e armazenados como números da base 16. A função é
g
convertida de volta na base 5.Editar: -13 bytes graças a @cole.
fonte
05AB1E ,
786965 bytes-4 bytes graças a Kevin Cruijssen, vá e confira sua ainda melhor resposta 05AB1E
Experimente online!
Saídas como [Curva, Linha]
Eu sou muito ruim no 05AB1E que acabei de descobrir. Definitivamente, posso salvar mais bytes se eu conseguir que 05AB1E faça
è
na minha lista de listasExplicação
fonte
line curve
, nãocurve line
.Output to STDOUT, or any other output method, the total number of lines and curves contained in the string, in that order
. Observe oin that order
, entãoline curve
.[Line, Curve]
a ordem de saída, embora isso seja coincidente e não intencional).Gelatina , 45 bytes
Um link monádico que aceita uma lista de caracteres que produz uma lista de (dois) números inteiros.
Experimente online! Ou veja a suíte de testes .
Como?
fonte
Scala , 235 bytes
Experimente online!
Não é tão pequeno, provavelmente pode ser jogado ainda mais.
Nota: A literal de cadeia de 52 caracteres é como um dicionário que mapeia um caractere para outro caractere que indica o número de linhas e curvas de acordo com a tabela a seguir:
fonte
Python 2 ,
159154 bytesPara qualquer personagem
lines*4 + curves
dê um valor de 0 a 16. A Base-36 é usada para codificar esses valores (1 caractere = 1 valor).-5 bytes graças a @Chas Brown
Experimente online!
Python 2 , 141 bytes
Esta é uma porta da minha solução Python3. Esta versão gera uma lista de entradas longas, pelo que parece em
[4L, 2L]
vez de[4, 2]
.Experimente online!
fonte
'/'<x<'{'
vez dex.isalnum()
.'/'<x<'{'
, mas tentei expressá-lo para me livrarif
também.Geléia , 51 bytes
Experimente online!
Um link monádico que recebe uma string como entrada e retorna uma lista de números inteiros como
[lines, curves]
fonte
JavaScript (Node.js) ,
251 219217 bytes-34 bytes de @ Dados expirados : o
Experimente online!
fonte
Retina 0.8.2 , 160 bytes
Experimente online! O link inclui casos de teste. Explicação:
Duplique a sequência de entrada.
Conte as linhas de cada personagem na primeira linha.
Conte as curvas de cada personagem na segunda linha.
Soma os dígitos separadamente em cada linha.
fonte
R ,
164153 bytesExperimente online!
Eu tive a mesma idéia que a resposta de nimi usando uma codificação de base 5, mas codifica como caracteres ASCII em vez de base 16. Usos
nomatch = 0
emmatch
eliminar caracteres não alfanuméricos.Retorna
curves lines
.fonte
Carvão , 60 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Esta é uma matriz de duas strings
13103202000101111131333201110112441331014323313243010202024433
e10120110212111112112002111111110001002110010010000112110100000
. As seqüências de caracteres são mapeadas.Os elementos da entrada são filtrados sobre se estão contidos nos (62) caracteres do alfabeto de conversão base padrão.
Os elementos que permanecem são então convertidos da base (62) e isso é indexado na cadeia mapeada.
Os dígitos são somados e convertidos de volta na sequência para impressão implícita.
fonte
Python 3 ,
165159148146 bytesPara qualquer caractere (incluindo não alfanumérico), o
lines*3 + curves
valor é de 0 a 12, para que possamos usar o número base 13 longo para codificar os dados. Para torná-lo mais curto, é convertido em base-36.Agradecemos a @Chas Brown por ótimos conselhos.
-2 bytes convertendo lambda em programa.
Experimente online!
fonte
Python 2 ,
179166165163 bytesExperimente online!
Retorna uma lista
[curves, lines]
.fonte
Python 2 , 525 bytes
Experimente online!
Abordagem semelhante à implementação de referência, mas um pouco mais curta.
fonte
Perl 5
-MList::Util=sum -p
, 180 bytesExperimente online!
fonte
05AB1E , 53 bytes
Experimente online ou verifique todos os casos de teste .
Explicação:
Consulte esta dica 05AB1E (seções Como compactar números inteiros grandes? E Como compactar listas de números inteiros? ) Para entender por que
•xþ¢*>ÌŸÑå#÷AUI'@æýXÁи<¥èå–ΘηžÎà₅åǚĕ
é101629259357674935528492544214548347273909568347978482331029666966024823518105773925160
e•xþ¢*>ÌŸÑå#÷AUI'@æýXÁи<¥èå–ΘηžÎà₅åǚĕ5в
é[1,0,2,0,0,2,1,0,1,2,0,3,2,0,1,1,0,3,1,1,0,3,0,3,0,4,0,4,0,2,1,0,0,2,1,0,1,2,2,0,1,1,1,0,0,3,0,4,0,2,0,3,1,1,0,3,0,3,1,2,0,3,0,4,1,1,1,0,2,1,0,3,0,3,1,1,0,4,0,4,0,2,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,2,2,3,0,3,0,3,2,1,1,3,1,1,2,1,1,1,1,1,1,1,1,0,1,1,2,0]
.fonte
Python 3 , 697 bytes
Uma primeira tentativa simples. Coloquei a tabela em um dicionário, passei pela string, incrementei alguns contadores e retornei uma tupla. Entrada é uma sequência.
Experimente online!
fonte
C # (compilador interativo do Visual C #) , 157 bytes
Experimente online!
fonte