Contar os palitos de fósforo

20

A maioria das pessoas aqui estão familiarizadas com sete displays de segmento, que também são usados ​​em quebra-cabeças de palitos de fósforo. Abaixo estão os dígitos 0através de 9e cartas aatravés z, exceto k,m,t,v,w, escritos neste formato.

 _        _   _         _    _    _    _    _
| |   |   _|  _|  |_|  |_   |_     |  |_|  |_|
|_|   |  |_   _|    |   _|  |_|    |  |_|   _|

 _       _      _  _  _                        _   _      _               _
|_| |_  |   _| |_ |_ |   |_  |   | |   _   _  |_| |_|  _ |_      |_| |_|  _|
| | |_| |_ |_| |_ |  |_| | | | |_| |_ | | |_| |     | |   _| |_| | |   | |_

O desafio aqui é simples. Dada uma sequência de entrada, produza o número de palitos de fósforo necessários para representar essa sequência. Se a string contiver um caractere fora da representação acima, ignore-a (conte-a como 0).

Por exemplo, para entrada 53, 10são necessários um total de palitos de fósforo, 5para 5e 5para 3, portanto a saída é 10.

Para entrada, é necessário helloum total de 19palitos de fósforo h (4), e (5), l (3), l (3), o (4), portanto a saída é 19.

Para maior clareza, aqui estão os palitos de fósforo necessários para criar cada personagem:

0 -> 6
1 -> 2
2 -> 5
3 -> 5
4 -> 4
5 -> 5
6 -> 6
7 -> 3
8 -> 7
9 -> 6
a -> 6
b -> 5
c -> 4
d -> 5
e -> 5
f -> 4
g -> 5
h -> 4
i -> 2
j -> 4
l -> 3
n -> 3
o -> 4
p -> 5
q -> 5
r -> 2
s -> 5
u -> 3
x -> 5
y -> 4
z -> 5

Agora, para a reviravolta, e há dois deles.

  • A primeira é que a entrada é considerado caso- em sensível. Ou seja, Ae aambos devem contar para 6palitos de fósforo, mesmo que a representação visual pareça maiúscula A.
  • Sua pontuação é o seu código-fonte executado nesse algoritmo; além do tamanho do seu código-fonte em bytes, quanto menor, melhor. Por exemplo, se o seu código-fonte fosse abc123, sua pontuação seria 6+5+4+2+5+5 = 27 + 6 = 33. Se o seu código-fonte fosse #&@()*, sua pontuação seria 0 + 6 = 6.

Exemplos de entrada / saída

0    -> 6
53   -> 10
111  -> 6
112  -> 9
8888 -> 28
hello -> 19
PPCG  -> 19
Programming Puzzles & Code Golf -> 99
#&()mt!!~ -> 0
*DḌƤÆE%Ḅċ0 -> 16

Regras

  • Se aplicável, você pode supor que a entrada / saída caiba no tipo Inteiro nativo do seu idioma.
  • A entrada e saída podem ser fornecidas por qualquer método conveniente .
  • Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
  • As brechas padrão são proibidas.
AdmBorkBork
fonte
2
T é comumente escrito como |_\n|_(em minúsculas t)
12Me21 23/03
@ 12Me21 eu tinha pensado em fazer algo assim, mas não sentia que parecesse suficientemente próximo da letra, então deixei de fora.
AdmBorkBork 23/03
E a sua letra X (H)? (bem, eu não importa agora que há uma resposta.)
12Me21
Para caracteres externos [0-9a-z], devemos contar 0 palitos de fósforo? Isso é o que eu entendo em Sua pontuação: seu código-fonte é executado nesse algoritmo , além do tamanho do seu código-fonte em bytes .
Erik the Outgolfer 23/03/19
@EriktheOutgolfer Sim, está correto.
AdmBorkBork 23/03

Respostas:

8

Python 2 , 97 bytes + 237 correspondências = 334

lambda w:sum(map(('1ir'*2+'7lnu'*3+'4cfhjoy'*4+'235bdegpqsxz'*5+'069a'*6+'8'*7).count,w.lower()))

Experimente online!

Isso funciona gerando uma sequência em que cada caractere edificável aparece com a mesma quantidade de palitos de fósforo necessários para criar esse caractere

Cajado
fonte
Um caractere pode ser salvo com em +'069a8'*6+'8')vez de +'069a'*6+'8'*7).
xbarbie
@xbarbie, de fato, mas isso aumentaria a contagem de partidas, resultando em +3 pontos
Rod
6

Perl 5 com -pF, 95 bytes + 14, 109

eval~"Û£Ô„…ÊÏÉÎÍÍÊÌÊËËÊÊÉÉÈÌÇÈÆÉžÉʜ˛ʚʙ˘ʗ˖͕˓̑ÌËÊŽÊ͌ʊ̇ʆËÂÐÑИ‚ÒÁ„Ô“œ‚™¿¹"}{

Isso é equivalente a:

$\+={z506122535445566738796a6b5c4d5e5f4g5h4i2j4l3n3o4p5q5r2s5u3x5y4=~/./g}->{+lc}for@F

mas, usando o ~operador, podemos usar caracteres de byte alto e evitar muitos caracteres sem sacrificar os bytes.

Ainda muito longe da pontuação de Ton, mesmo com assistência!

Experimente online!

Esta solução contém imprimíveis, então aqui está um dump hexadecimal reversível para verificar a contagem de bytes:

00000000: 6576 616c 7e22 dba3 d4c2 8485 cacf c9ce  eval~"..........
00000010: cdcd cacc cacb cbca cac9 c9c8 ccc7 c8c6  ................
00000020: c99e c99d ca9c cb9b ca9a ca99 cb98 ca97  ................
00000030: cb96 cd95 cb93 cc91 cc90 cb8f ca8e ca8d  ................
00000040: cd8c ca8a cc87 ca86 cbc2 81d0 d1d0 9882  ................
00000050: d2c1 84d4 939c 8299 908d bfb9 227d 7b    ............"}{
Dom Hastings
fonte
Por que o }{? Solte-o e a -nopção. Além disso você continua esquecendo +lcvez de lc():-)
Ton Hospel
@TonHospel Goddammit! Eu até examinei nossas postagens e não conseguia me lembrar em que post eu a vi e +não me vem à mente imediatamente! Preciso nna minha máquina e esqueço que posso largar!
Dom Hastings
Desculpe, eu errei. Eu quis dizer "soltar o }{e -p" (e substituí-la -nse o seu perl ainda precisa dele hoje em dia não conta qualquer maneira.)
Ton Hospel
@TonHospel eu não tinha atualizado meu código para o mais recente, oops ...
Dom Hastings
6

JavaScript (ES6), 198 (102 bytes + 96 palitos de fósforo)

Economizou 5 pontos graças a @ l4m2

v=>[...v].map(w=>t+=('{w__^_{]|{{_^__^_^w^~]~]^__w_~]~~_^_'[parseInt(w,36)]+v).charCodeAt()%9,t=+[])|t

Experimente online!

Quão?

Usamos o módulo 9 do código ASCII de caracteres que não adiciona nenhuma penalidade para codificar o número de palitos de fósforo.

 char. | code | modulo 9
-------+------+-----------------
   ~   |  126 |   0
   v   |  118 |   1  (not used)
   w   |  119 |   2
   ]   |   93 |   3
   ^   |   94 |   4
   _   |   95 |   5
   {   |  123 |   6
   |   |  124 |   7

Não precisamos nos preocupar com o caso, porque não parseInt()faz distinção entre maiúsculas e minúsculas.

Para caracteres que não correspondem a [0-9A-Za-z] , parseInt()retornos NaNe a pesquisa de sequência resultam em undefined. Uma vez coagido a uma sequência, "undefined".charCodeAt()retorna o código ASCII de "u", que é 117 . Convenientemente, 117 módulo 9 fornece 0 como esperado.

Arnauld
fonte
v=>[...v].map(w=>t+='~{w__^_{]|{{_^__^_^w^~]~]^__w_~]~~_^_'.charCodeAt(1+parseInt(w,36))%9,t=+[])|t1 menos
l4m2 28/03/19
5

Geleia , 42 bytes + 0 palitos de fósforo = 42 pontos

“ṄḟṭkɗØæ⁶ṡ“£ƈṠ¤żȥṬ}ė$t¿ƬⱮȷ|çƓ’×/ṚṚæ.ċЀØW$

Graças a @ Jonathanon Allan por -2 pontos!

Experimente online!

Como funciona

“ṄḟṭkɗØæ⁶ṡ“£ƈṠ¤żȥṬ}ė$t¿ƬⱮȷ|çƓ’

Os literais que começam com e terminam com divisão , substituem os caracteres restantes pelos índices baseados em 1 na página de código de Jelly e depois convertem da base bijetiva 250 para inteiro.

Esse literal literal codifica

[3096734725226860846495, 211369264881118657055472842435156679693648].

×/ reduz por multiplicação, produzindo

654554542403034552503005456545545424030345525030054562554563760

(Codificar esse número inteiro economizaria 6 bytes, mas custaria 28 palitos de fósforo.)

ṚṚreverte duas vezes; a primeira chamada promove um número inteiro para sua matriz de dígitos. Isso gera

[6, 5, 4, 5, 5, 4, 5, 4, 2, 4, 0, 3, 0, 3, 4, 5, 5, 2, 5, 0, 3, 0, 0, 5, 4, 5, 6, 5, 4, 5, 5, 4, 5, 4, 2, 4, 0, 3, 0, 3, 4, 5, 5, 2, 5, 0, 3, 0, 0, 5, 4, 5, 6, 2, 5, 5, 4, 5, 6, 3, 7, 6, 0]

ċЀØW$conta ( ċ) as ocorrências de cada Ѐcaractere ( ) de "A ... Za ... z0 ... 9_" ( ØW) na sequência de entrada.

Finalmente, æ.pega o produto escalar, multiplicando cada contagem de caracteres pelo custo correspondente em palitos de fósforo e, em seguida, obtendo a soma.

Dennis
fonte
Use uma fatoração do número grande para salvar um byte e descompressão de base e módulo em vez de Dsalvar outro. Experimente online
Jonathan Allan
ponto byte ... err :)
Jonathan Allan
1
E mais um com Ɗ. Obrigado!
Dennis
3

Código Perl 5-p , 90 64 + 9 chicotes eval + 14 palitos de fósforo = 87

Substitua os códigos hexadecimais pela variante literal de 1 byte ( não UTF-8, como o TIO tenta) pela pontuação reivindicada

eval~"\xdb\xa3\xd4\xc2\x86\xd0\xcf\xd2\xc6\x9e\xd2\x85\xd0\xc9\xcd\xca\xca\xcb\xca\xc9\xcc\xc8\xc9\xc9\xca\xcb\xca\xca\xcb\xca\xcb\xcd\xcb\xcf\xcc\xcf\xcc\xcb\xca\xca\xcd\xca\xcf\xcc\xcf\xcf\xca\xcb\xca\xd0\x8d\x99\x90\x8d\xdf\x93\x9c\xc2\x81\xd0\xd1\xc0\xd0\x98"}{

Experimente online!

Código Dentro da sequência complementada:

$\+=y/0-9a-z/625545637665455454240303455250300545/rfor lc=~/.?/g
Ton Hospel
fonte
3

Geléia , 34 bytes + 3 correspondências = 37

⁽[ɱד®-&]Ṙṙ£⁺ÐĊṂⱮɼ ’‘ḤṚæ.ŒlċЀØWṚƊ

Um link monádico que aceita uma lista de caracteres e retorna um número inteiro.

Experimente online!

Quão?

Funciona de maneira semelhante à resposta de Dennis 'Jelly, mas foi necessário esforço suficiente para que eu justifique outra resposta. A principal diferença é que ela diminui a entrada para um custo de três correspondências ( Œlcontém um l), o que permite que um número muito menor seja usado para criar a matriz de custos. A parte complicada foi encontrar uma maneira de construir esse número sem correspondências, mantendo-se conciso.

ØWproduz, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"portanto, contar as ocorrências de entrada com letras minúsculas sempre começa com 26 zeros. Podemos reverter isso e executar um produto escalar com uma matriz de comprimento 37 em vez de uma de comprimento 63.

⁽[ɱד®-&]Ṙṙ£⁺ÐĊṂⱮɼ ’‘ḤṚæ.ŒlċЀØWṚƊ - Link: list of characters
⁽[ɱ                                - literal                                     23913
    “®-&]Ṙṙ£⁺ÐĊṂⱮɼ ’               - literal         136861653160003879166772353166783
   ×                               - multiply  = 3272772712015172762515027281277281879
                    ‘              - increment = 3272772712015172762515027281277281880
                     Ḥ             - double    = 6545545424030345525030054562554563760
                      Ṛ            - reverse (implicit decimal list) -> [0,6,7,3,6,5,4,5,5,2,6,5,4,5,0,0,3,0,5,2,5,5,4,3,0,3,0,4,2,4,5,4,5,5,4,5,6]
                                   -                     (to align with: _ 9 8 7 6 5 4 3 2 1 0 z y x w v u t s r q p o n m l k j i h g f e d c b a)
                                 Ɗ - last four links as a monad:
                         Œl        -   lower-case (the input)
                              ØW   -   word -> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"
                            Ѐ     -   map across right:
                           ċ       -     count (right character in lower-cased input)
                                Ṛ  -   reverse (to align with the values as shown above)
                       æ.          - dot-product
Jonathan Allan
fonte
2

PHP 176 bytes = 397 pontos

<?$n="6255456376";$l="065455454240303455250300545";$a=strtolower($argv[1]);for($i=0;$i<strlen($a);$i++)$t+=(is_numeric($a[$i])?$n[$a[$i]]:$l[max((ord($a[$i])-96),0)]);echo$t;

Experimente online!

Dave
fonte
1
Bem-vindo ao PPCG!
AdmBorkBork 23/03
1

Python 3 , 138 + 265 = 403 bytes

k='0123456789abcdefghijlnopqrsuxyz'
m=lambda t:sum([ord(''[k.index(v)])if v in k else 0for v in t.lower()])

Experimente online!

Dat
fonte
1

Ruby , 125 bytes + 87 palitos de fósforo = 212

->m{v=->w,k{w.scan(/./).map &k};v[m,->t{v["!#&&;&=$(==&;&&;&;#;!$!$;&&#&!$!!&;&",->k{k.ord%11}][t.to_i 36].to_i+(t==?0?6:0)}].sum}

Experimente online!

Fortemente inspirado pela resposta Javascript de Arnauld .

Normalmente, o custo de declarar um lambda para ser usado apenas duas vezes não vale a pena, mas o peso do palito de fósforos " scanap" .scan(/./).mapmudou isso. Este foi um desafio divertido!

->m{
  v=->w,k{w.scan(/./).map &k};                # v is a lambda taking a string and a block
  v[m,->t{                                    # Transform each char t of the input:
    v["!#&&;&=$(==&;&&;&;#;!$!$;&&#&!$!!&;&", # Transform each char of this magic string
      ->k{k.ord%11}                           #  into a matchstick count ([0,2,5,5,4,5...])
    ][t.to_i 36]+                             # Parse t as a base 36 index into the counts
    (t==?0?6:0)                               # If t was "0", add 6 matchsticks
  }].sum                                      # Add the counts for all characters
}
benj2240
fonte
1

MATL , pontuação 166 156

Comprimento do código 41 + saída para o código usado como entrada 115.

'%p#21jgyDT7o?pe}['TIW:qZajk4Y22Y2h&mXz)s

Experimente online!

Luis Mendo
fonte
1

R, 112 bytes + 319 correspondências = 431 pontos

sum(strtoi(el(strsplit(chartr("0-9a-z","625545637665455454240303455250300545",tolower(scan(,""))),""))),na.rm=T)

Experimente online!

Parabéns a Giuseppe, que apresentou essa melhoria.

Versão antiga, 143 bytes + 454 correspondências = 597 pontos

b=el(strsplit(chartr("0123456789abcdefghijlnopqrsuxyz","6255456376654554542433455253545",tolower(readline())),""))
sum(as.numeric(b[b%in%0:9]))

Para fazer a el()função funcionar no TIO, você precisa usar library(methods).

Meu Deus, é R detalhado!

Andreï Kostyrka
fonte
O TIO, por qualquer motivo, não carrega o methodspacote automaticamente , mas como é um basepacote, sempre o empurrei no cabeçalho e não o conto para a contagem de bytes. readlinetambém não funcionará no TIO, pois não é uma sessão interativa. Isso é definitivamente jogável, no entanto.
Giuseppe
^ precisa de aspas ao redor da entrada contendo espaços, no entanto.
Giuseppe
Além disso, eu comecei uma sala de bate - papo para jogar golfe! ! Eu vi um monte de respostas em R recentemente por uma série de diferentes usuários, o que é bastante encorajador :)
Giuseppe
@ Giuseppe Acho que você deve postar sua resposta separadamente. É diferente em princípio e muito superior ao meu.
Andreï Kostyrka 23/03
1

Perl 6 , 87 bytes + 26 palitos de fósforo = 113

{+[+] (~'򘮉򛫡񯌞𺪯񯉒񉘁'.ords~~m:g/\w/)[m:g/<[/..{]-[\W_]>/>>.&{:٣٦(~$_)}]}

Experimente online!

Usa alguns caracteres Unicode não ASCII. A tabela de pesquisa é codificada em uma sequência Unicode:

say '򘮉򛫡񯌞𺪯񯉒񉘁'.ords;
# (625545 637665 455454 240303 455250 300545)

Os caracteres são convertidos em índices com a conversão de base 36 usando algarismos em indicativo árabe:

:٣٦('z'); # is equivalent to
:36('z');
Nwellnhof
fonte
1

sed, 367 (bytes do código-fonte) + 532 (quantidade de palitos de fósforo para o código-fonte) = 899

s/[^0-9a-jln-suxyz]//Ig;/^$/{s/.*/0/;b};s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/;:1;s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I;/ ;/!b1;s/;.+//;s/^/,;/;:2;s/(;[^%]*)(%+)/\2\1/;:3;s/,%{10}/%,/;s/^%/,&/;/%{10}/b3;/;.*%/b2;:4;s/,[;,]/,0,/;/,[;,]/b4;s/%{9}/9/g;s/%{8}/8/g;s/%{7}/7/g;s/%{6}/6/g;s/%{5}/5/g;s/%%%%/4/g;s/%%%/3/g;s/%%/2/g;s/%/1/g;s/[^0-9]//g

Experimente Online

Versão multilinhas:

s/[^0-9a-jln-suxyz]//Ig
/^$/{s/.*/0/;b}
s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/
:1
s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I
/ ;/!b1
s/;.+//
s/^/,;/
:2
s/(;[^%]*)(%+)/\2\1/
:3
s/,%{10}/%,/
s/^%/,&/
/%{10}/b3
/;.*%/b2
:4
s/,[;,]/,0,/
/,[;,]/b4
s/%{9}/9/g
s/%{8}/8/g
s/%{7}/7/g
s/%{6}/6/g
s/%{5}/5/g
s/%%%%/4/g
s/%%%/3/g
s/%%/2/g
s/%/1/g
s/[^0-9]//g

Explicação:

O script acima lê a entrada padrão linha por linha (no espaço do padrão - o "modo sed" usual)) e, para cada linha, gera a quantidade de palitos de fósforo necessários para representar todos os caracteres representáveis ​​pelo palito de fósforo nessa linha. Os cálculos para cada linha de entrada acontecem da seguinte maneira:


s/[^0-9a-jln-suxyz]//Ig

Primeiro, removemos todos os caracteres para os quais não temos uma representação de palito de fósforo correspondente (conforme fornecido na pergunta) do espaço do padrão. Ou seja, removemos todos os caracteres que não são um número de "0" a "9", uma letra de "a" a "j", "n" a "s", "l", "u", "x", "y" ou "z". Letras maiúsculas e minúsculas são tratadas da mesma forma.

/^$/{s/.*/0/;b}

Se acabarmos com um espaço de padrão vazio, imprimiremos 0 (automaticamente seguido por uma nova linha, como sed sempre faz a menos que você passe uma bandeira especial), pularemos todas as linhas posteriores do script e prosseguiremos para o próximo "ciclo sed" ( ou seja, leia a próxima linha de entrada e repita o processamento novamente desde o primeiro comando até que não haja mais linhas de entrada a serem processadas).

s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/

Caso contrário, se o espaço do padrão não estiver vazio, agora o dividimos em dois "subespaços" separados por ponto e vírgula: primeiro, o espaço de entrada , formado inicialmente por todos os caracteres que não foram removidos do espaço do padrão após o execução da linha 1; a seguir, vem o ponto-e-vírgula e, depois, o espaço do mapa .

O espaço do mapa indica quantos palitos de fósforo ao lado de 1 são necessários para representar cada caractere alfanumérico relevante. Se quisermos saber quantas palitos de fósforo são necessários para representar qualquer caractere alfanumérico no espaço do mapa, procuraremos a primeira sequência de% 's contíguos à esquerda desse caractere e a resposta será o número de%' s em essa sequência mais 1. Portanto, por exemplo, o número de palitos de fósforo necessários para representar um "b" é 4 + 1 = 5; representar um "4", 3 + 1 = 4, representar um "y", 3 + 1 = 4; e assim por diante.

:1
s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I
/ ;/!b1

Este é um loop. Agora, substituiremos todos os caracteres no espaço de entrada pela sequência (completa) de% s cujo número indica a quantidade necessária de palitos de fósforo para representar esse caractere e seguiremos essa sequência por um caractere de espaço em branco (novamente, letras maiúsculas e minúsculas são dado o mesmo tratamento). O critério para determinar se o loop deve terminar é verificar se há um caractere de espaço em branco na esquerda imediata do ponto e vírgula no espaço do padrão: se essa condição for válida, encerramos o loop e continuamos na próxima linha.

s/;.+//
s/^/,;/

Essas duas linhas removem o ponto e vírgula e tudo depois do espaço do padrão e, em seguida, inserem uma vírgula e um ponto e vírgula no início do espaço do padrão. Agora, temos o espaço padrão dividido novamente em dois novos subespaços: o espaço de resultado analógico antes do ponto e vírgula e o espaço de entrada analógica depois dele.

O espaço de entrada analógica é exatamente o que chamamos anteriormente de "espaço de entrada", mas de uma forma diferente: agora contém seqüências de% s separadas por espaço em branco. O número total desses% 's no espaço de entrada analógica é o mesmo número de palitos de fósforo necessários para representar a cadeia de caracteres de entrada inicial, ou seja, esse número é o resultado. Mas devemos imprimir esse resultado em notação decimal, não como uma sequência de sinais de porcentagem. O objetivo do espaço de resultados analógico é manter uma representação analógica de cada dígito do resultado enquanto calculamos esse resultado somando cada sequência contígua de% s no espaço de entrada analógica, um por um. O próximo loop executa essa soma:

:2
s/(;[^%]*)(%+)/\2\1/
    :3
    s/,%{10}/%,/
    s/^%/,&/
    /%{10}/b3
/;.*%/b2
  1. Primeiro, após o rótulo 2 , movemos a próxima sequência contígua de% s após o ponto e vírgula do espaço de entrada analógica para a esquerda imediata do ponto e vírgula, no espaço de resultado analógico;

  2. Em seguida, entramos em um sub-loop (rótulo 3 ) que executa os seguintes cálculos:

    • Se houver uma sequência contígua de dez% 's após uma vírgula no espaço de resultado analógico, removemos esses%' s e colocamos um único% imediatamente à esquerda da vírgula. Simplificando, isso indica que uma das casas decimais no resultado adquiriu mais de 9 unidades, portanto, retiramos 10 unidades dessa casa decimal e adicionamos 1 unidade à próxima casa decimal maior;

    • Se um "%" for o primeiro caractere no espaço do padrão, inseriremos uma nova vírgula imediatamente antes dele. Isso indica que a soma atingiu um valor cuja representação decimal tem mais uma casa decimal à esquerda que o valor anterior;

    • Se ainda houver uma sequência contígua de dez% no espaço de resultados analógicos, voltamos ao rótulo 3 e repetimos esse processo. Caso contrário, sairemos deste sub-loop e passaremos para a próxima linha.

  3. Agora, se ainda houver "%" no espaço de entrada analógica (ou seja, após o ponto-e-vírgula), significa que ainda há algum número de palitos de fósforo a serem adicionados à soma total - então voltamos ao rótulo 2 .

Depois que a soma estiver concluída, entramos no loop final do código:

:4
s/,[;,]/,0,/
/,[;,]/b4

Aqui, verificamos todos os caracteres formados por uma vírgula à esquerda e um ponto-e-vírgula ou uma vírgula à direita. Substituímos todos esses pares de caracteres por um "0" dentro de duas vírgulas.

s/%{9}/9/g
s/%{8}/8/g
s/%{7}/7/g
s/%{6}/6/g
s/%{5}/5/g
s/%%%%/4/g
s/%%%/3/g
s/%%/2/g
s/%/1/g

O trecho de código acima é bastante simples: substituímos cada sequência contígua de% 's no espaço de resultados analógico por um caractere de dígito decimal que corresponde ao número de%' s em cada sequência específica.

s/[^0-9]//g

Finalmente, removemos todos os caracteres não numéricos do espaço do padrão e o que resta é o resultado final na notação decimal familiar. Esse valor é impresso na saída padrão e o próximo ciclo sed começa, se houver mais linhas de entrada a serem processadas.

lucasb
fonte
1

C (gcc) , 134 bytes + 38 palitos de fósforo = 172

v(t,w)char*t;{t=(w=*t++)?v(t)+(isalnum(w|=w>'@'&w<'['?' ':!w)?")%(('()&*))('(('('%'#&#&'((%(#&##('("[w-=w>'`'?'W':'_'-'/']-'#':!w):w;}

Experimente online!

gastropner
fonte
1

05AB1E , 30 bytes + 70 correspondências = pontuação 100

žLÃlv•Ƶγ¤и©X´≠Ø&c3Íεç•žhA«ykèO

Experimente online!


-5 graças a Emgina

Urna de polvo mágico
fonte
Al= A. Você também não precisa do }.
Emigna
1

Pontuação do Java 10, 452 432 416 404 (145 bytes + 259 correspondências)

k->{int m=0,t;for(var w:k)for(t=m-m;t<'';)m+="1ir 7lnu 4cfhjoy 235bdegpqsxz 069a 8".split(" ")[t++].contains((char)(w|32)+"")?-~t:t-t;return m;}

Explicação:

Experimente online.

k->{                   // Method with character-array parameter and int return-type
  int m=0,             //  Result-integer, starting at 0
      t;               //  Index-integer
  for(var w:k)         //  Loop over the input String-array
    for(t=m-m;t<'';)   //   Inner loop over the parts array with index [0,6)
      m+="1ir 7lnu 4cfhjoy 235bdegpqsxz 069a 8".split(" ")[t++]
                       //     If the current part ordered by amount of matches (2-8)
         .contains((char)(w|32)+"")?
                       //     contains the current (lowercase) letter
          -~t          //      Increase the result by the index + 2
         :             //     Else:
          t-t;         //      The result remains the same by adding 0
  return m;}           //  Return the result
  • Nomes de variáveis $ραετsão usados ​​em vez de letras. EDIT: nomes de variáveis kmtvwagora são usados, porque não podem ser formados por correspondências de acordo com a descrição do desafio.
  • ''(não imprimível) é usado em vez de 6.
  • m-me t-tsão usados ​​em vez de 0.
  • (char)(w|32)+""com entrada de matriz de caracteres usada em vez de w.toLowerCase()com entrada de matriz de caracteres.
Kevin Cruijssen
fonte
0

AutoHotkey , 148 bytes + 345 palitos de fósforo = 493

Este foi um desafio para encurtar.

n:=["1ir","7lnu","4cfhjoy","235bdegpqsxz","09a5",7+1]
Loop Parse,i
{r:=A_LoopField
Loop % n.Length()
{l:=A_Index
if InStr(n[l],r)
u+=l+1
}}
send % u
nelsontruran
fonte
0

Python 3 , 123 bytes + 65 correspondências = 188

lambda w,m='',t='',k=ord:sum(~-k((m+t+m+''+t)[k(v)%77])*('/'<v<'{')for v in w)

Uma função sem nome que aceita uma sequência e retorna um número inteiro.

Contém muitos caracteres não imprimíveis (especificamente bytes de um a oito).

Experimente online!

Jonathan Allan
fonte
0

Carvão , 48 bytes + 3 = 51

IΣEθ⎇№α↥ιI§”)➙⊞←!Σw➙⊙↘⁴↘”⌕α↥ι∧№IX²φιI§”)⧴u↑$◨”Iι

Experimente online! Link é a versão detalhada do código. Explicação:

IΣEθ

Faça um loop sobre os caracteres da entrada, calculando o número de palitos de fósforo de cada um, depois some o resultado, converta em sequência e imprima implicitamente.

⎇№α↥ι

Se é uma carta ...

I§”)➙⊞←!Σw➙⊙↘⁴↘”⌕α↥ι

Procure o número de palitos de fósforo na sequência compactada 65455454240303455250300545.

∧№IX²φι

Caso contrário, se aparecer no valor de 2 ** 1000...

I§”)⧴u↑$◨”Iι

Procure o número de palitos de fósforo na sequência compactada 6255456376.

Neil
fonte
0

PHP, 98 + 253 = 351

for(;$k=ord($argn[$v++]);)$m+=$k>64?_65455454240303455250300545[$k&31]:_6255456376[$k-47];print$m;

Execute como pipe -nrou experimente online .

Titus
fonte