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 0
a través 9
y cartas a
a 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
, 10
se requiere un total de fósforos, 5
para el 5
y 5
para el 3
, por lo que la salida es 10
.
Para la entrada se requiere hello
un total de 19
fó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,
A
ya
ambos deben contar para los6
fósforos, a pesar de que la representación visual parece mayúsculaA
. - 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ía6+5+4+2+5+5 = 27 + 6 = 33
. Si su código fuente fuera#&@()*
, su puntaje sería0 + 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.
fuente
|_\n|_
(minúsculast
)[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 .Respuestas:
Python 2 , 97 bytes + 237 coincidencias = 334
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
fuente
+'069a8'*6+'8')
lugar de+'069a'*6+'8'*7)
.Perl 5 con
-pF
, 95 bytes + 14, 109Esto es equivalente a:
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:
fuente
}{
? Sueltalo y la-n
opción. También sigues falsificando en+lc
lugar delc()
:-)+
no recuerdo de inmediato! ¡Necesiton
en mi máquina y olvido que puedo soltarla!}{
y-p
(y reemplazarlo-n
si su perl todavía lo necesita. Hoy en día no cuenta de todos modos)JavaScript (ES6), 198 (102 bytes + 96 fósforos)
Ahorro de 5 puntos gracias a @ l4m2
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.
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()
devuelveNaN
y se produce la búsqueda de cadenaundefined
. 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.fuente
v=>[...v].map(w=>t+='~{w__^_{]|{{_^__^_^w^~]~]^__w_~]~~_^_'.charCodeAt(1+parseInt(w,36))%9,t=+[])|t
1 menosGelatina , 42 bytes + 0 fósforos = 42 puntos
¡Gracias a @JonathanAllan por -2 puntos!
Pruébalo en línea!
Cómo funciona
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
×/
reduce por multiplicación, produciendo(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ċЀØ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.fuente
D
guardar otro. Pruébelo en líneaƊ
. ¡Gracias!Perl 5
-p
,9064 código + 9 arnés eval + 14 fósforos = 87Reemplace los códigos hexadecimales por su variante literal de 1 byte ( no UTF-8 como TIO intenta) para el puntaje reclamado
Pruébalo en línea!
Código dentro de la cadena complementada:
fuente
Gelatina , 34 bytes + 3 coincidencias = 37
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 (
Œl
contiene unl
) 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.ØW
produce"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.fuente
PHP 176 bytes = 397 puntaje
Pruébalo en línea!
fuente
SOGL V0.12 , 34 bytes + 18 = 52
Pruébalo aquí!
Golfó, pero no tanto :
fuente
Python 3 , 138 + 265 = 403 bytes
Pruébalo en línea!
fuente
Rubí , 125 bytes + 87 fósforos = 212
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(/./).map
cambió eso. ¡Este fue un desafío divertido!fuente
MAT , la puntuación de
166156Longitud del código 41 + salida para el código utilizado como entrada 115.
Pruébalo en línea!
fuente
R, 112 bytes + 319 coincidencias = 431 puntaje
Pruébalo en línea!
Felicitaciones a Giuseppe a quien se le ocurrió esta mejora.
Versión anterior, 143 bytes + 454 coincidencias = 597 puntaje
Para hacer el
el()
función funcione en TIO, debe usarlalibrary(methods)
.Dios mío, es R detallado!
fuente
methods
paquete, pero como es unbase
paquete, siempre lo he introducido en el encabezado y no lo cuento para el conteo de bytes.readline
tampoco funcionará en TIO ya que no es una sesión interactiva. Sin embargo, esto es definitivamente golfable.Perl 6 , 87 bytes + 26 fósforos = 113
Pruébalo en línea!
Utiliza algunos caracteres Unicode no ASCII. La tabla de búsqueda está codificada en una cadena Unicode:
Los caracteres se convierten en índices con conversión de base 36 utilizando números arábigos-índicos:
fuente
sed, 367 (bytes del código fuente) + 532 (cantidad de fósforos para el código fuente) = 899
Pruébalo en línea
Versión multilínea:
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:
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.
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).
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í.
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.
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:
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;
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.
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:
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.
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.
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.
fuente
C (gcc) , 134 bytes + 38 fósforos = 172
Pruébalo en línea!
fuente
05AB1E , 30 bytes + 70 coincidencias = 100 puntaje
Pruébalo en línea!
-5 gracias a Emgina
fuente
Al
=A
. Tampoco necesitas el}
.Java 10,
452432416404 puntaje (145 bytes + 259 coincidencias)Explicación:
Pruébalo en línea.
EDITAR:$ραετ
Se usan nombres de variables en lugar de letras.kmtvw
ahora 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 de6
.m-m
yt-t
se usan en lugar de0
.(char)(w|32)+""
con la entrada de matriz de caracteres utilizada en lugar dew.toLowerCase()
con la entrada de matriz de cadenas.fuente
AutoHotkey , 148 bytes + 345 fósforos = 493
Este fue un poco difícil de acortar.
fuente
Python 3 , 123 bytes + 65 coincidencias = 188
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!
fuente
Carbón , 48 bytes + 3 = 51
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
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 ...
Busque el número de fósforos en la cadena comprimida
65455454240303455250300545
.De lo contrario, si aparece en el valor de
2 ** 1000
...Busque el número de fósforos en la cadena comprimida
6255456376
.fuente
PHP, 98 + 253 = 351
Ejecutar como tubería
-nr
o probarlo en línea .fuente