Hola, bienvenido a PPCG. Los desafíos para un solo idioma generalmente están mal vistos aquí en PPCG. Tal vez usted podría cambiarlo a un reto en general: dada una cadena, la salida de la suma de todos los números en la cadena, haciendo caso omiso de todo lo demás (es decir, "the 5is 108 seCONd4 a"dará como resultado 117debido 5+108+4=117). Además, cada 'pregunta' aquí debe tener una etiqueta de condición ganadora . En este caso, supongo que es [code-golf] (¿es la solución más corta posible?)
Kevin Cruijssen
44
Parece que ha publicado una pregunta similar en SO, que tiende a confirmar que no fue diseñada para ser un desafío PPCG y está buscando un código 'utilizable' en lugar de un código de golf. En su lugar, recomendaría mejorar su pregunta original sobre SO, para que se ajuste mejor a las reglas del sitio.
Arnauld
44
He revisado tu publicación para que se ajuste a nuestros estándares. Siéntase libre de editar si el resultado no le conviene.
Supongo que usar string.length en la consola para contar caracteres no es una buena idea cuando contiene caracteres de escape ... Vaya, lo arregló. Gracias de nuevo
Bassdrop Cumberwubwubwub
Una opción un poco mejor sería console.log(f.toString().length), pero es no fiable al 100%, ya sea.
þм# Only leave the non-digits of the (implicit) input-string# i.e. "the 5is 108 seCONd4 a" → "the is seCONd a"
S # Split it into a list of characters# → ["t","h","e"," ","i","s"," "," ","s","e","C","O","N","d"," ","a"]¡# Split the (implicit) input-string by each of these characters# → ["","","","","5","","","108","","","","","","","4","",""]þ# Remove the empty strings by only leaving the digits# → ["5","108","4"]
O # And sum these numbers (which is output implicitly)# → 117
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación: El Sumoperador del carbón de leña extrae automáticamente los números de una cadena, sin embargo, si la cadena no contiene caracteres que no sean dígitos, toma la suma digital, por lo que concateno un byte nulo para evitar esto. El resultado se devuelve a la cadena para la salida implícita.
Por qué no. Respuesta obligatoria de expresiones regulares. Probablemente podría acoplar 6 usando Python 2, pero lo que sea. Ya no se aplica ya que estoy usando un enfoque eval en lugar de usar el mapa.
import re;# Import regex module
x=lambda y: eval()# Run as Python code'+'.join()# Joined by '+'
re.findall('\d+',y)# A list of all matches of regex \d+ in string y
¡Agradable! En su TIO debe usar en z == l[1]lugar de z is l[1]sin embargo. El código actual puede dar falsos negativos si los números son lo suficientemente altos.
Una bastante simple. Ien cubix tomará el primer entero en la entrada y lo empujará a la pila. Esto tiene el efecto de omitir todos los personajes. El resto se ocupa de lo adicional y detecta el final de la entrada.
I! Ingrese un número entero y pruébelo para 0
s+q;;Si no es cero, intercambie TOS (fuerzas y 0 inicial) y agregue. Empuje el resultado al fondo de la pila y limpie la parte superior. Regresar al comienzo.
/i? Si es cero, redirige y realiza una entrada de caracteres para verificar
|?;/Si el positivo (personaje) gira a la derecha en un reflejo, esto lo empuja hacia atrás a través del corrector ?y gira a la derecha en el pop desde la pila, dejando 0 en TOS. Luego, la IP se redirige al bucle principal.
I>p.O@ si es negativo (final de la entrada), gire a la izquierda, ingrese enteros, coloque la parte inferior de la pila en la parte superior, haga salir y pare.
Una respuesta más interesante, pero indirecta (37 bytes): {Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
Explicación
Sum##N=>MatchAll&"\\d+"
Esto tiene la forma:
f##g=>h&x
que, cuando se expande y se hace paréntesis, se convierte en
f ## (g => (h&x))
##compone dos funciones juntas, =>crea una función que asigna la función izquierda sobre el resultado de la función derecha y &vincula un argumento a un lado de una función. Para la entrada _, esto es equivalente a:
{ f[Map[g, h[_, x]]] }
Primero, entonces, corremos MatchAllde caracteres de dígitos ( \\d+). Después, convertimos cada ejecución a un entero real usando la Nfunción. Finalmente, tomamos la suma de estos números usando Sum.
s->{// Lambda functionlong c=0;// Sum is zerofor(Matcher m=Pattern.compile("\\d+").matcher(s);// Prepare regex matcher
m.find();// While the string contains unused matches...
c+=newLong(m.group()));// Add those matches to the outputreturn c;// Return the output}
No creo que esto sea correcto: el (único) ejemplo del OP sugiere que los dígitos consecutivos deberían formar un solo entero, por lo que "123" debería producir 123, no 6 como lo hace su código.
-4 bytesmediante el uso de en Long::newlugar de Long::valueOf. -1 byteacortando la expresión regular, si ya estamos eliminando cadenas vacías más tarde, haciendo algunos extras cuando la división está bien.
Explicado
s->// Lambda (target type is ToLongFunction<String>)
java.util.Arrays.stream(// Stream the result of
s.split("\\D")// splitting on non-digits).filter(t->!t.isEmpty())// Discard any empty strings.mapToLong(Long::new)// Convert to long.sum()// Add up the stream's values.
"the 5is 108 seCONd4 a"
dará como resultado117
debido5+108+4=117
). Además, cada 'pregunta' aquí debe tener una etiqueta de condición ganadora . En este caso, supongo que es [code-golf] (¿es la solución más corta posible?)string x='-12hello3';
estás contando enteros negativos (es decir, -12 + 3 === -9)?Respuestas:
Javascript,
3432 bytess=>eval(s.match(/\d+/g).join`+`)
Une todos los dígitos y únelos
+
girándolos en 5 + 108 + 4, evalúa el resultado.Solo funciona en enteros positivos.
Guardado 2 bytes gracias a Arnauld
fuente
console.log(f.toString().length)
, pero es no fiable al 100%, ya sea.Perl 6 , 14 bytes
Pruébalo en línea!
Bloque de código anónimo que devuelve la suma de todas las series de dígitos
fuente
05AB1E ,
116 bytesPruébalo en línea.
Explicación:
fuente
¡
!R ,
644845 bytesDespués de ver la entrada de PowerShell, pude jugar más al golf.
Pruébalo en línea!
fuente
t=
es suficiente aquí en lugar detext
APL (Dyalog Unicode) , 11 bytes
Función anónima tácita prefic
Pruébalo en línea!
⊢
el argumento⊆
particionado (las ejecuciones de True se convierten en piezas, las ejecuciones de False son separadores) por∊
membresía∘
del⎕D
conjunto de dígitos#⍎¨
evaluar cada uno en el espacio de nombres raíz+/
sumafuente
Retina 0.8.2 , 8 bytes
Pruébalo en línea!
fuente
PowerShell , 29 bytes
Pruébalo en línea!
fuente
Carbón de leña , 5 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación: El
Sum
operador del carbón de leña extrae automáticamente los números de una cadena, sin embargo, si la cadena no contiene caracteres que no sean dígitos, toma la suma digital, por lo que concateno un byte nulo para evitar esto. El resultado se devuelve a la cadena para la salida implícita.fuente
Haskell , 50 bytes
Pruébalo en línea!
Probablemente haya una mejor manera, pero esta es la más obvia.
fuente
Zsh , 21 bytes
Pruébalo en línea!
Desafortunadamente, bash se queja porque interpreta
0108
como octal. Zsh no (a menos quesetopt octalzeroes
)fuente
Bash, 43 bytes
Reemplaza cada no número con un espacio, y luego los suma.
-5 bytes gracias a GammaFunction
fuente
{
}
lugar dedo
done
.Python 3 ,
635956 bytesPor qué no. Respuesta obligatoria de expresiones regulares.
Probablemente podría acoplar 6 usando Python 2, pero lo que sea.Ya no se aplica ya que estoy usando un enfoque eval en lugar de usar el mapa.Explicación:
Pruébalo en línea!
fuente
z == l[1]
lugar dez is l[1]
sin embargo. El código actual puede dar falsos negativos si los números son lo suficientemente altos.Java 10, 66 bytes
Esta es una lambda de
String
aint
.Los enteros negativos no son compatibles. Presumiblemente está bien.
Pruébalo en línea
Expresiones de gratitud
fuente
[^0-9]
por\D
unos pocos bytes, también puede cambiarlong
yString
porvar
(aunque tendrá que cambiar el tipo de retorno aint
Ruby,
3227 caracteresExpresiones de gratitud
fuente
*?+
lugar de.join ?+
para -7 bytes. Ver ary * strCubix , 17 bytes
Pruébalo en línea!
Míralo correr
Una bastante simple.
I
en cubix tomará el primer entero en la entrada y lo empujará a la pila. Esto tiene el efecto de omitir todos los personajes. El resto se ocupa de lo adicional y detecta el final de la entrada.I!
Ingrese un número entero y pruébelo para 0s+q;;
Si no es cero, intercambie TOS (fuerzas y 0 inicial) y agregue. Empuje el resultado al fondo de la pila y limpie la parte superior. Regresar al comienzo./i?
Si es cero, redirige y realiza una entrada de caracteres para verificar|?;/
Si el positivo (personaje) gira a la derecha en un reflejo, esto lo empuja hacia atrás a través del corrector?
y gira a la derecha en el pop desde la pila, dejando 0 en TOS. Luego, la IP se redirige al bucle principal.I>p.O@
si es negativo (final de la entrada), gire a la izquierda, ingrese enteros, coloque la parte inferior de la pila en la parte superior, haga salir y pare.fuente
PHP ,
4039 bytesPruébalo en línea!
Ejecutar con
php -nF
entrada es de STDIN. Ejemplo:fuente
Haskell , 43 bytes
Pruébalo en línea!
Hace uso de
reads
.fuente
Por delante , 13 bytes
Esto funciona porque
I
simplemente escanea el flujo de entrada para el siguiente token que parece un número, ignorando cualquier otra cosa.Pruébalo en línea!
fuente
QuadR , 9 bytes
Pruébalo en línea!
+/
la suma de⍎
evaluación como APL de⍵
el resultado de\D
reemplazando cada no dígito confuente
Japt
-x
, 5 bytesPruébalo en línea!
fuente
Adjunto , 23 bytes
Pruébalo en línea!
Una respuesta más interesante, pero indirecta (37 bytes):
{Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
Explicación
Esto tiene la forma:
que, cuando se expande y se hace paréntesis, se convierte en
##
compone dos funciones juntas,=>
crea una función que asigna la función izquierda sobre el resultado de la función derecha y&
vincula un argumento a un lado de una función. Para la entrada_
, esto es equivalente a:Primero, entonces, corremos
MatchAll
de caracteres de dígitos (\\d+
). Después, convertimos cada ejecución a un entero real usando laN
función. Finalmente, tomamos la suma de estos números usandoSum
.fuente
APL (NARS), caracteres 13, bytes 26
prueba:
fuente
C # (compilador interactivo de Visual C #),
117111 bytesPruébalo en línea.
fuente
Perl 5
-p
, 17 bytesPruébalo en línea!
fuente
Japt v2.0a0
-x
, 3 bytesOtra prueba de manejo para mi intérprete (muy WIP).
Intentalo
fuente
Java 8,
53130 bytes105 bytes + 25 bytes para la importación de expresiones regulares
Pruébalo en línea!
Explicación
fuente
SNOBOL4 (CSNOBOL4) , 81 bytes
Pruébalo en línea!
fuente
Swift, 109 bytes
Pruébalo en línea!
fuente
Pip , 6 bytes
Se trata
-123
como un entero negativo. Pruébalo en línea!Si se deben ignorar los guiones en lugar de tratarlos como signos menos, entonces lo siguiente funciona para 7 bytes :
XD
es una variable preestablecida para`\d`
;+XD
agrega el+
modificador regex , haciendo que coincida con 1 o más dígitos.fuente
Java (JDK) ,
989493 bytesPruébalo en línea!
-4 bytes
mediante el uso de enLong::new
lugar deLong::valueOf
.-1 byte
acortando la expresión regular, si ya estamos eliminando cadenas vacías más tarde, haciendo algunos extras cuando la división está bien.Explicado
fuente