Cuenta los fósforos

20

La mayoría de las personas aquí están familiarizadas con las pantallas de siete segmentos, que también se usan en rompecabezas de cerillas. A continuación se presentan las cifras 0a través 9y cartas aa través de z, excepto k,m,t,v,w, escritos en este formato.

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

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

El desafío aquí es simple. Dada una cadena de entrada, genera el número de fósforos necesarios para representar esa cadena. Si la cadena contiene un carácter fuera de la representación anterior, ignórela (cuente como 0).

Por ejemplo, para la entrada 53, 10se requiere un total de fósforos, 5para el 5y 5para el 3, por lo que la salida es 10.

Para la entrada se requiere helloun total de 19fósforos h (4), e (5), l (3), l (3), o (4), por lo que la salida es 19.

Para mayor claridad, estos son los fósforos necesarios para construir cada personaje:

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

Ahora para el giro, y hay dos de ellos.

  • La primera es que la entrada se considera sensible a mayúsculas y minúsculas. Es decir, Ay aambos deben contar para los 6fósforos, a pesar de que la representación visual parece mayúscula A.
  • Su puntaje es su código fuente ejecutado a través de este algoritmo, más la longitud de su código fuente en bytes, menor es mejor. Por ejemplo, si su código fuente fuera abc123, su puntaje sería 6+5+4+2+5+5 = 27 + 6 = 33. Si su código fuente fuera #&@()*, su puntaje sería 0 + 6 = 6.

Ejemplos de entrada / salida

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

Reglas

  • Si corresponde, puede suponer que la entrada / salida se ajustará al tipo entero nativo de su idioma.
  • La entrada y salida se pueden dar por cualquier método conveniente .
  • Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
  • Las lagunas estándar están prohibidas.
AdmBorkBork
fuente
2
T se escribe comúnmente como |_\n|_(minúsculas t)
12Me21
@ 12Me21 Había pensado hacer algo así, pero no sentí que se pareciera lo suficiente a la carta, así que lo dejé fuera.
AdmBorkBork
¿Qué pasa con tu letra X (H)? (bueno, ahora no importa que haya una respuesta.)
12Me21
Para caracteres fuera [0-9a-z], ¿deberíamos contar 0 fósforos? Eso es lo que entiendo de Su puntaje es su código fuente ejecutado a través de este algoritmo , más la longitud de su código fuente en bytes .
Erik the Outgolfer
@EriktheOutgolfer Sí, eso es correcto.
AdmBorkBork

Respuestas:

8

Python 2 , 97 bytes + 237 coincidencias = 334

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

Pruébalo en línea!

Esto funciona mediante la generación de una cadena donde cada personaje edificable aparece la misma cantidad de fósforos necesarios para construir ese personaje

varilla
fuente
Se puede guardar un personaje con en +'069a8'*6+'8')lugar de +'069a'*6+'8'*7).
xbarbie
@xbarbie de hecho, pero eso aumentaría el recuento de partidos, lo que resultaría en +3 puntos
Rod
6

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

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

Esto es equivalente a:

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

pero usando el ~operador podemos usar caracteres de alto byte y evitar muchos caracteres sin realmente sacrificar bytes.

Todavía lejos de la puntuación de Ton, ¡incluso con ayuda!

Pruébalo en línea!

Esta solución contiene elementos no imprimibles, así que aquí hay un volcado hexadecimal reversible para verificar el recuento 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
fuente
¿Por qué el }{? Sueltalo y la -nopción. También sigues falsificando en +lclugar de lc():-)
Ton Hospel
@TonHospel Goddammit! ¡Incluso miré a través de nuestras publicaciones y no podía recordar en qué publicación la había visto y +no recuerdo de inmediato! ¡Necesito nen mi máquina y olvido que puedo soltarla!
Dom Hastings
Lo siento, hablé mal. Me refería a "soltar el " }{y -p(y reemplazarlo -nsi su perl todavía lo necesita. Hoy en día no cuenta de todos modos)
Ton Hospel
@TonHospel No había actualizado mi código a la última, ¡Uy ...
Dom Hastings
6

JavaScript (ES6), 198 (102 bytes + 96 fósforos)

Ahorro de 5 puntos gracias a @ l4m2

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

Pruébalo en línea!

¿Cómo?

Utilizamos el código ASCII módulo 9 de caracteres que no agregan ninguna penalización para codificar los números de fósforos.

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

No tenemos que preocuparnos por el caso porque parseInt()no distingue entre mayúsculas y minúsculas.

Para los caracteres que no coinciden con [0-9A-Za-z] , se parseInt()devuelve NaNy se produce la búsqueda de cadena undefined. Una vez forzado a una cadena, "undefined".charCodeAt()devuelve el código ASCII de "u", que es 117 . Convenientemente, 117 módulo 9 da 0 como se esperaba.

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

Gelatina , 42 bytes + 0 fósforos = 42 puntos

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

¡Gracias a @JonathanAllan por -2 puntos!

Pruébalo en línea!

Cómo funciona

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

Los literales que comienzan con y terminan con división , reemplazan los caracteres restantes con sus índices basados ​​en 1 en la página de códigos de Jelly, luego se convierten de la base biyectiva 250 a entero.

Este literal literal codifica

[3096734725226860846495, 211369264881118657055472842435156679693648].

×/ reduce por multiplicación, produciendo

654554542403034552503005456545545424030345525030054562554563760

(Codificar este entero directamente ahorraría 6 bytes, pero costaría 28 fósforos).

ṚṚse invierte dos veces; la primera llamada promueve un entero a su matriz de dígitos. Esto produce

[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$cuenta ( ċ) las apariciones de cada ( Ѐ) carácter de "A ... Za ... z0 ... 9_" ( ØW) en la cadena de entrada.

Finalmente æ.toma el producto de punto, multiplicando el conteo de cada personaje por el costo correspondiente en matchsticks, luego toma la suma.

Dennis
fuente
Use una factorización del gran número para guardar un byte y descompresión y módulo base en lugar de Dguardar otro. Pruébelo en línea
Jonathan Allan
byte ... err point :)
Jonathan Allan el
1
Y uno más con Ɗ. ¡Gracias!
Dennis
3

Perl 5 -p , 90 64 código + 9 arnés eval + 14 fósforos = 87

Reemplace los códigos hexadecimales por su variante literal de 1 byte ( no UTF-8 como TIO intenta) para el puntaje reclamado

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"}{

Pruébalo en línea!

Código dentro de la cadena complementada:

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

Gelatina , 34 bytes + 3 coincidencias = 37

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

Un enlace monádico que acepta una lista de caracteres y devuelve un entero.

Pruébalo en línea!

¿Cómo?

Funciona de manera similar a la respuesta de Dennis 'Jelly, pero tomó el esfuerzo suficiente para sentir que justifica otra respuesta. La diferencia principal es que reduce la entrada en minúsculas por un costo de tres coincidencias ( Œlcontiene un l) que luego permite utilizar un número mucho menor para crear la matriz de costos. Lo complicado fue encontrar una manera de construir ese número sin coincidencias mientras se mantenía conciso.

ØWproduce "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"así que contar las ocurrencias de entrada en minúsculas siempre comienza con 26 ceros. Podemos revertir esto y realizar un producto de punto con una matriz de longitud 37 en lugar de una de longitud 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
fuente
2

PHP 176 bytes = 397 puntaje

<?$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;

Pruébalo en línea!

Dave
fuente
1
Bienvenido a PPCG!
AdmBorkBork
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()])

Pruébalo en línea!

Dat
fuente
1

Rubí , 125 bytes + 87 fósforos = 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}

Pruébalo en línea!

Muy inspirado por la respuesta Javascript de Arnauld .

Normalmente, el costo de declarar que una lambda se usará solo dos veces no vale la pena, pero el peso del fósforo de " scanap" en .scan(/./).mapcambió eso. ¡Este fue un desafío 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
fuente
1

MAT , la puntuación de 166 156

Longitud del código 41 + salida para el código utilizado como entrada 115.

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

Pruébalo en línea!

Luis Mendo
fuente
1

R, 112 bytes + 319 coincidencias = 431 puntaje

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

Pruébalo en línea!

Felicitaciones a Giuseppe a quien se le ocurrió esta mejora.

Versión anterior, 143 bytes + 454 coincidencias = 597 puntaje

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

Para hacer el el() función funcione en TIO, debe usarla library(methods).

Dios mío, es R detallado!

Andreï Kostyrka
fuente
TIO, por cualquier motivo, no carga automáticamente el methodspaquete, pero como es un basepaquete, siempre lo he introducido en el encabezado y no lo cuento para el conteo de bytes. readlinetampoco funcionará en TIO ya que no es una sesión interactiva. Sin embargo, esto es definitivamente golfable.
Giuseppe
^ necesita comillas alrededor de la entrada que contiene espacios, sin embargo.
Giuseppe
Además, ¡acabo de comenzar una sala de chat para golf R! ! He visto muchas respuestas en R últimamente por muchos usuarios diferentes, lo cual es bastante alentador :)
Giuseppe
@Giuseppe Creo que deberías publicar tu respuesta por separado. Es diferente en principio y muy superior al mío.
Andreï Kostyrka el
1

Perl 6 , 87 bytes + 26 fósforos = 113

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

Pruébalo en línea!

Utiliza algunos caracteres Unicode no ASCII. La tabla de búsqueda está codificada en una cadena Unicode:

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

Los caracteres se convierten en índices con conversión de base 36 utilizando números arábigos-índicos:

:٣٦('z'); # is equivalent to
:36('z');
nwellnhof
fuente
1

sed, 367 (bytes del código fuente) + 532 (cantidad de fósforos para el código fuente) = 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

Pruébalo en línea

Versión multilínea:

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

Explicación:

La secuencia de comandos anterior lee la entrada estándar línea por línea (en el espacio del patrón, la "forma de sed" habitual) y, para cada línea, genera la cantidad de fósforos necesarios para representar todos los caracteres representables por fósforos en esa línea. Los cálculos para cada línea de entrada ocurren de la siguiente manera:


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

Primero, eliminamos todos los caracteres para los que no tenemos una representación de fósforo correspondiente (como se indica en la pregunta) del espacio del patrón. Es decir, eliminamos todos los caracteres que no son un número de "0" a "9", una letra de "a" a "j", "n" a "s", "l", "u", "x", "y" o "z". Las letras mayúsculas y minúsculas se tratan igual.

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

Si terminamos con un espacio de patrón vacío, imprimimos 0 (seguido automáticamente por una nueva línea, como siempre hace sed a menos que le pase una bandera especial), omitimos todas las líneas posteriores del script y pasamos al siguiente "ciclo de sed" ( es decir, lea la siguiente línea de entrada y repita el proceso nuevamente desde el primer comando hasta que no haya más líneas de entrada para procesar).

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

De lo contrario, si el espacio del patrón no está vacío, ahora lo dividimos en dos "subespacios" separados por un punto y coma: primero viene el espacio de entrada , que inicialmente está formado por todos los caracteres que no se eliminaron del espacio del patrón después del ejecución de la línea 1; luego viene el punto y coma, y ​​después el espacio del mapa .

El espacio del mapa nos dice cuántas coincidencias junto a 1 se necesitan para representar cada carácter alfanumérico relevante. Si queremos saber cuántas coincidencias son necesarias para representar cualquier carácter alfanumérico en el espacio del mapa, buscamos la primera secuencia de% contiguos a la izquierda de ese carácter, y la respuesta será el número de% en esa secuencia más 1. Entonces, por ejemplo, el número de fósforos necesarios para representar una "b" es 4 + 1 = 5; para representar un "4", 3 + 1 = 4, para representar una "y", 3 + 1 = 4; y así.

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

Esto es un bucle. Ahora reemplazaremos cada carácter en el espacio de entrada por la secuencia (completa) de% 's cuyo número indica la cantidad necesaria de fósforos para representar ese carácter, y seguiremos esa secuencia por un carácter de espacio en blanco (nuevamente, las letras mayúsculas y minúsculas son dado el mismo tratamiento). El criterio para determinar si el ciclo debe finalizar es verificar si hay un carácter de espacio en blanco a la izquierda inmediata del punto y coma en el espacio del patrón: si esa condición se cumple, terminamos el ciclo y continuamos en la siguiente línea.

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

Esas dos líneas eliminan el punto y coma y todo lo que está después del espacio del patrón y luego insertan una coma y un punto y coma en el comienzo del espacio del patrón. Ahora tenemos el espacio del patrón dividido una vez más en dos subespacios nuevos: el espacio de resultados analógico antes del punto y coma, y ​​el espacio de entrada analógica después de él.

El espacio de entrada analógica es justo lo que anteriormente llamamos el "espacio de entrada", pero en una forma diferente: ahora contiene secuencias de% separadas por espacios en blanco. El número total de dichos% en el espacio de entrada analógica es el mismo número de coincidencias necesarias para representar la cadena de caracteres de entrada inicial, es decir, ese número es el resultado. Pero debemos imprimir ese resultado en notación decimal, no como una secuencia de signos de porcentaje. El propósito del espacio de resultados analógico es mantener una representación analógica de cada dígito del resultado mientras calculamos ese resultado sumando cada secuencia contigua de% 's en el espacio de entrada analógico, uno por uno. El siguiente ciclo realiza esa suma:

:2
s/(;[^%]*)(%+)/\2\1/
    :3
    s/,%{10}/%,/
    s/^%/,&/
    /%{10}/b3
/;.*%/b2
  1. Primero, después de la etiqueta 2 , movemos la siguiente secuencia contigua de% 's después del punto y coma desde el espacio de entrada analógica a la izquierda inmediata del punto y coma, en el espacio de resultados analógico;

  2. A continuación, entramos en un sub-loop (etiqueta 3 ) que realiza los siguientes cálculos:

    • Si hay una secuencia contigua de diez% después de una coma en el espacio de resultados analógico, eliminamos esos% y colocamos un solo% inmediatamente a la izquierda de la coma. En pocas palabras, esto indica que uno de los lugares decimales en el resultado ha adquirido más de 9 unidades, por lo que quitamos 10 unidades de ese lugar decimal y agregamos 1 unidad al siguiente lugar decimal más grande;

    • Si un "%" es el primer carácter en el espacio del patrón, insertamos una nueva coma inmediatamente antes. Esto indica que la suma ha alcanzado un valor cuya representación decimal tiene un lugar decimal más a la izquierda que el valor anterior;

    • Si todavía hay una secuencia contigua de diez% en el espacio de resultados analógico, volvemos a la etiqueta 3 y repetimos este proceso. De lo contrario, salimos de este sub-loop y pasamos a la siguiente línea.

  3. Ahora, si todavía hay un "%" en el espacio de entrada analógica (es decir, después del punto y coma), significa que todavía hay que agregar algún número de fósforos a la suma total, por lo que volvemos a la etiqueta 2 .

Una vez que se completa la suma, entramos en el bucle final del código:

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

Aquí, verificamos cada par de caracteres formados por una coma a la izquierda y un punto y coma o una coma a la derecha. Reemplazamos todos esos pares de caracteres por un "0" dentro de dos comas.

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

El código anterior es bastante simple: reemplazamos cada secuencia contigua de% 's en el espacio de resultados analógico por un carácter de dígito decimal que corresponde al número de%' s en cada secuencia particular.

s/[^0-9]//g

Finalmente, eliminamos todos los caracteres no numéricos del espacio del patrón y lo que queda es el resultado final en la notación decimal familiar. Ese valor se imprime en la salida estándar y comienza el siguiente ciclo de sed, si hay más líneas de entrada para procesar.

lucasb
fuente
1

C (gcc) , 134 bytes + 38 fósforos = 172

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

Pruébalo en línea!

gastropner
fuente
1

05AB1E , 30 bytes + 70 coincidencias = 100 puntaje

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

Pruébalo en línea!


-5 gracias a Emgina

Urna de pulpo mágico
fuente
Al= A. Tampoco necesitas el }.
Emigna
1

Java 10, 452 432 416 404 puntaje (145 bytes + 259 coincidencias)

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;}

Explicación:

Pruébalo en línea.

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
  • $ραετSe usan nombres de variables en lugar de letras. EDITAR: kmtvwahora se usan nombres de variables , porque no pueden formarse por coincidencias de acuerdo con la descripción del desafío.
  • ''(no imprimible) se utiliza en lugar de 6.
  • m-my t-tse usan en lugar de 0.
  • (char)(w|32)+""con la entrada de matriz de caracteres utilizada en lugar de w.toLowerCase()con la entrada de matriz de cadenas.
Kevin Cruijssen
fuente
0

AutoHotkey , 148 bytes + 345 fósforos = 493

Este fue un poco difícil de acortar.

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
fuente
0

Python 3 , 123 bytes + 65 coincidencias = 188

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

Una función sin nombre que acepta una cadena y devuelve un entero.

Contiene muchos caracteres no imprimibles (específicamente bytes uno a ocho).

Pruébalo en línea!

Jonathan Allan
fuente
0

Carbón , 48 bytes + 3 = 51

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

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

IΣEθ

Pase el cursor sobre los caracteres de la entrada, calculando el número de coincidencias de cada uno, luego sume el resultado, convierta a cadena e imprima implícitamente.

⎇№α↥ι

Si es una carta ...

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

Busque el número de fósforos en la cadena comprimida 65455454240303455250300545.

∧№IX²φι

De lo contrario, si aparece en el valor de 2 ** 1000...

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

Busque el número de fósforos en la cadena comprimida 6255456376.

Neil
fuente
0

PHP, 98 + 253 = 351

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

Ejecutar como tubería -nro probarlo en línea .

Titus
fuente