Ganador: Chilemagic , ¡21 bytes masivos!
Puede continuar enviando su respuesta, sin embargo, ya no puede ganar. Publicación original mantenida:
Su objetivo es encontrar todos los números en una cadena y multiplicar cada uno individualmente por un valor ingresado por el usuario
- No tendrá que preocuparse por los decimales.
- El usuario ingresará un número y una cadena
- El usuario debe escribir el número y la cadena en algún momento, sin embargo , el método que lea el programa no importa. Puede ser con stdin, leer un archivo de texto, etc., sin embargo, el usuario debe presionar el botón 9 en su teclado (por ejemplo) en algún momento
- Cualquier cosa que pueda compilarse y ejecutarse es aceptable
Ejemplo:
Ingreso de oraciones: Este 1 es 22a 3352 frase 50
Entrada de número: 3
Salida: Este 3 es66a 10056sentencia 150
- Este concurso finaliza el 6 de septiembre de 2014 (7 días desde su publicación).
- Este es un código de golf , por lo que gana el código más corto
Respuestas:
Actualización - Perl - 17
15 caracteres + 2 para
-i
y-p
banderas.Podemos usar el
-i
indicador para ingresar una extensión de archivo, pero como no estamos leyendo ningún archivo, podemos usarlo para obtener el número y la variable se$^I
le asignará.Corre con:
Perl - 21
Actualizado según el comentario de @ Dennis.
Corre con
-p
bandera.Ejemplo de ejecución:
Explicación:
$n=<>;
leer en el número-p
imprime la salidas/\d+/$&*$n/ge
Lea la entrada con <> y busque uno o más dígitos y reemplácelos con los dígitos multiplicados por el número.g
es global,e
eseval
la poción de reemplazo de la s ///.$&
contiene lo que coincidió y se multiplicó por el número$n
,.Puede leer más acerca
s///
de perlop y más acerca de expresiones regulares de Perl en perlre .Otra solución:
@ F.Hauri señaló que también puede usar el
s
interruptor para asignar la$n
variable a 4. No estoy seguro de cuántos caracteres cuenta, pero lo dejaré aquí:fuente
<>=~
lugar de_$=<>;
. También, ¿podría explicar qué significa las
parte de la expresión regular, para nosotros los novatos?$&
lugar de$1
, puede acortar(\d)
a\d
. 2. Si usa el-p
interruptor y cambia el orden de entrada, puede soltarsay<>=~
yr
.-s
el interruptor, a whipe$n=<>
a cabo:perl -spe 's/\d+/$&*$n/ge' -- -n=4 <<<'This 1 is22a 3352sentence 50'
(no render:This 4 is88a 13408sentence 200
)JavaScript (ES6) -
4844 caracteresGracias a @bebe por salvar un personaje. Actualización: 8 / Mar / 16, eliminó otros cuatro caracteres
Sin golf :
43 caracteres:
Requiere entrada de número primero y luego oración. Corta un char más aquí gracias @bebe otra vez!
fuente
(p=prompt)(p(b=p()).replace(/\d+/g,y=>y*b))
otro (pero esto pide multiplicador primero)Pitón 2 (79)
Ejecución de la muestra
Entrada: Salida:Demostración en línea: http://ideone.com/V6jpyQ
fuente
re.sub
es el método que Beta Decay y yo (las otras dos presentaciones de Python) intentamos reimplementar. Hubiera sido tan fácil ... ¡Algo más que he aprendido! ;)re.sub
un lado, has hecho un excelente trabajo jugando al golf en la lógica de reemplazo de la cuerdare.sub
es exactamente lo que quería!Python 2 - 126
Primera entrada: entero
n
.Segunda entrada: cadena
s
(con comillas, por ejemplo"abc42"
).fuente
CJam,
473330 bytesLee el número y la cadena (en ese orden y separados por un solo espacio) de STDIN.
Pruébalo en línea.
Ejecución de ejemplo
Cómo funciona
fuente
Bash + coreutils, 38 bytes
Lee la cadena de entrada de STDIN y el multiplicador como un parámetro de línea de comandos.
Salida:
fuente
1 D4R3 Y0U: ; rm -rf /
C # en LINQPad, 124
Sencillo. Utilice CTRL + 2 en LINQPad (Idioma: declaraciones de C #).
Si el multiplicador se da como primer parámetro de entrada, se puede hacer en 116 caracteres:
EDITAR:
Gracias al comentario de Abbas a continuación, incluso se puede jugar más al golf utilizando el método estático Regex , en lugar de instanciarlo:
fuente
var k=int.Parse(Console.ReadLine());Regex.Replace(Console.ReadLine(),"\\d+",t=>""+int.Parse(t.Value)*k).Dump();
. En ambas versiones, esto ahorra otros 5 caracteres, obteniendo 119 para la versión larga y 111 para la primera versión del multiplicadorCobra - 171
fuente
Python 3 - 141
No creo que pueda jugar más golf ...
Ejemplo:
fuente
n=2
ys="1 2"
rinde4 4
, ya quereplace
modifica el primer número dos veces. Ese es el mismo problema que estoy enfrentando ahora con Python 2 ...;)m=input()
no te ahorra nada. Y enx=int
realidad es 2 bytes más largo que llamarint(...)
dos veces.Mathematica
7161Con 10 caracteres guardados gracias a Martin Buttner.
Los espacios en el código son para facilitar la lectura.
f
es una función en la que ses
encuentra la cadena de entrada yn
es el número para multiplicar los números de cadena descubiertos por.Ejemplos
Entero
Número racional
Número complejo
fuente
StringReplace
no importa si hay espacios. Usé los ejemplos dados originalmente por Chiperyman.StringReplace
no hay diferencia si hay espacios.Rubí 40
Entrada de stdin.
Ejemplo de ejecución:
Demostración en línea: http://ideone.com/4BiHC8
fuente
Lua:
7369 caracteresEjecución de muestra:
fuente
JavaScript, ES6, 43 caracteres
Este es mi primer intento de jugar al golf!
Ejecuta esto en la última consola de Firefox. La primera entrada es el número y la segunda entrada es la cadena a partir de la cual se multiplicarán los números con el primer número de entrada.
El mensaje final enumera la salida.
fuente
Perl - 48 caracteres
Lea un número en la primera línea, luego lea una oración y divídala en trozos de dígitos o no dígitos. Imprima los no dígitos como están, y los números se multiplican.
fuente
J - 63 char
El programa lee el número y luego la oración.
Explicado por explosión:
Si podemos usar la biblioteca PCRE de J y hacer que la oración sea lo primero, podemos reducir esto a 54 caracteres :
Explicado por explosión:
J es malo en esto, ¿qué puedo decir? Es un inconveniente porque J es tan poco motivador.
Algunos ejemplos:
fuente
CJam - 35
Pruébalo en http://cjam.aditsu.net/
Entrada de muestra:
Salida de muestra:
Explicación:
El programa revisa cada carácter, recolecta los dígitos en la pila, y para cada no dígito imprime primero el número recolectado (si lo hay) multiplicado por la entrada numérica, luego imprime el carácter.
li:X;
lee la entrada numérica y la almacena en XlN+
lee la cadena y agrega una nueva línea (ayuda con los números finales){…}/
para cada carácter de la cadena,
_s
copia el carácter y lo convierte en cadena,
A,s-,
elimina todos los dígitos y cuenta los caracteres restantes; el resultado será 0 si el carácter era un dígito o 1 si no:
{…}*
ejecuta el bloque si el recuento era 1 (es decir, sin dígito); para los dígitos no hace nada, por lo que permanecen en la pila:
]
recoge los caracteres de la pila en una matriz (es decir, una cadena); los caracteres son dígitos de las iteraciones anteriores, más el carácter actual:
)\
separa el último elemento (el carácter actual) y lo mueve antes de la cadena (restante)-
_!!
copia la cadena y la convierte en un valor booleano - 0 si está vacío, 1 si no-
{…}*
ejecuta el bloque si la cadena no estaba vacía, es decir, teníamos algunos dígitos antes del carácter actual sin dígitos---
iX*
convierte la cadena a entero y multiplica por X-
o
imprime la parte superior de la pila - ya sea el número multiplicado o la cadena vacía si no teníamos un número-
o
(el segundo) imprime la nueva parte superior de la pila - el actual no carácter de dígitosfuente
Haskell (161)
Golfed
Sin golf
Desafortunadamente, Haskell no tiene una biblioteca Regex en su Preludio .
fuente
{}
para obtener 1 char. Además, acabo de publicar esta solución Haskell con 70 bytes: codegolf.stackexchange.com/questions/37110/…flex (-lexer) (
9489 caracteres)Versión sin golf que no falla por defecto si olvida el argumento de la línea de comandos (no mucho más):
Compilar con:
o:
P.ej:
fuente
Groovy
- 124Haga clic en el título para ver el ejemplo ejecutable
Ejemplos probados:
fuente
GNU Awk: 86 caracteres
Ejecución de muestra:
fuente
PHP -
75/11568/109Dos versiones, las nuevas versiones de php pueden hacer esto:
Versiones anteriores de php: no conté la nueva línea, agregué las de legibilidad.
Ejemplo de entrada + salida
Un poco difícil, las palabras 'función' y 'preg_replace_callback' ocupan muchos caracteres.
El espacio después
global
yreturn
no son necesarios si va seguido de $ var (-2 caracteres)fuente
\d
en la clase de caracteres (-2 caracteres); no es necesario encerrar la función entre comillas dobles (-2 caracteres); debe terminar correctamente la declaración dentro de la función con punto y coma (+1 char). Por cierto,\d
en una cadena con comillas dobles debe escribirse como\\d
, así que mejor cambie las comillas a comillas simples.0-9
a \ d. No estaba seguro acerca de las comillas alrededor de la función, no puedo probar eso, la versión de mi php local no lo permite.C (
142134caracteres)Nueva línea insertada para mayor legibilidad. Pase el factor como el primero, la cadena como la segunda opción de línea de comando. Esta implementación requiere la
dprintf
función que forma parte de POSIX.1 2008 y podría no estar disponible en Windows. Aquí está la fuente no minificada:Mejoras
strspn
y enstrcspn
lugar de recorrer la cadena.fuente
Python 89
p.ej:
fuente
Rebol - 117
Sin golf:
fuente
Clojure -
141140128 caracteresSoy un novato de Clojure, pero FWIW:
Ejecución de muestra:
Ungolfed (feo pero con suerte algo más fácil de leer):
fuente
Python - 142
fuente
Java 218
Alguien tuvo que hacer Java. La cadena de entrada son 2 tokens en la línea de comando.
java M 'This 1 is22a 3352sentence 50' 3
fuente
if
condición también funciona con bit a bit|
, que es 1 carácter más corto.Dos respuesta: Perl + fiesta
Golpe puro (~ 262)
Primero, ¡hay una versión de bash pura no tan corta (sin fork, sin binarios externos)!
Vamos a mostrar:
(Que es una oración totalmente improbable)
Perl poco ofuscado (solo por diversión)
Esta versión (basada en la respuesta de @ Chilemagic ) no es más corta, sino que está diseñada como un script de tótem :
Ejecución de muestra:
fuente
Haskell, 70
lástima, llego tarde, en mi humilde opinión, esto es bastante bueno para esta pregunta y lenguaje específicos. La otra solución de Haskell aquí es de 161 caracteres.
esto funciona mediante el uso de la
reads
función que analiza una cadena parcialmente. por ejemploreads "34abc" = [(34, "abc")]
,. Obviamente, esto lo hace perfecto para este desafío.uso:
fuente