Vencedor: Chilemagic , um enorme 21 bytes!
Você pode continuar enviando sua resposta, mas não poderá mais vencer. Postagem original mantida:
Seu objetivo é encontrar todos os números em uma sequência e multiplicar cada um individualmente por um valor inserido pelo usuário
- Você não precisará se preocupar com decimais
- O usuário irá inserir um número e uma string
- O usuário deve digitar o número e a string em algum momento; no entanto , o método que o programa lê não importa. Pode ser com stdin, lendo um arquivo de texto, etc., no entanto, o usuário deve pressionar o botão 9 no teclado (por exemplo) em algum momento
- Qualquer coisa que possa compilar e executar é aceitável
Exemplo:
Entrada da frase: esta 1 is22a 3352sentença 50
Número de entrada: 3
Saída: Esta 3 is66a 10056sentença 150
- Este concurso termina em 6 de setembro de 2014 (7 dias após a publicação).
- Este é um código de golfe , então o código mais curto vence
Respostas:
Atualização - Perl - 17
15 caracteres + 2 para
-i
e-p
sinalizadores.Podemos usar o
-i
sinalizador para inserir uma extensão de arquivo, mas como não estamos lendo nenhum arquivo, podemos usá-lo para obter o número e a variável$^I
será atribuída a ele.Correr com:
Perl - 21
Atualizado conforme o comentário de @ Dennis.
Corra com a
-p
bandeira.Exemplo de execução:
Explicação:
$n=<>;
leia o número-p
imprime a saídas/\d+/$&*$n/ge
Leia a entrada com <> e procure um ou mais dígitos e substitua-os pelos dígitos vezes o número.g
é global,e
éeval
a poção de substituição do s ///.$&
contém o que foi correspondido e multiplicado pelo número$n
,.Você pode ler mais sobre
s///
no perlop e mais sobre Perl expressões regulares em perlre .Outra solução:
@ F.Hauri apontou que você também pode usar a
s
opção para atribuir a$n
variável a 4. Não sei quantos caracteres isso conta, mas vou deixar aqui:fonte
<>=~
vez de_$=<>;
. Você também poderia explicar o significado das
parte da regex para nós, novatos?$&
vez de$1
, poderá reduzir(\d)
para\d
. 2. Se você usar o-p
comutador e alterar a ordem de entrada, poderá soltarsay<>=~
er
.-s
switch, para whipe$n=<>
out:perl -spe 's/\d+/$&*$n/ge' -- -n=4 <<<'This 1 is22a 3352sentence 50'
(não render:This 4 is88a 13408sentence 200
)JavaScript (ES6) -
4844 caracteresObrigado a @bebe por salvar um caractere. Atualização: 8 / Mar / 16, removidos outros quatro caracteres
Ungolfed :
43 caracteres:
Requer entrada de número primeiro e depois sentença. Corte um char mais aqui, obrigado @bebe novamente!
fonte
(p=prompt)(p(b=p()).replace(/\d+/g,y=>y*b))
outro (mas esta pede multiplicador primeiro)Python 2 (79)
Amostra de execução
Entrada: Resultado:Demonstração on-line: http://ideone.com/V6jpyQ
fonte
re.sub
é o método Beta Decay e eu (os outros dois envios de Python) estávamos tentando reimplementar. Teria sido tão fácil ... Outra coisa que eu aprendi! ;)re.sub
lado, você fez um excelente trabalho no golfe o texto de substituição lógicare.sub
é exatamente o que eu queria!Python 2-126
Primeira entrada: inteiro
n
.Segunda entrada: string
s
(com aspas, por exemplo"abc42"
).fonte
CJam,
473330 bytesLê o número e a sequência (nessa ordem e separados por um único espaço) de STDIN.
Experimente online.
Exemplo de execução
Como funciona
fonte
Bash + coreutils, 38 bytes
Lê a string de entrada de STDIN e o multiplicador como um parâmetro da linha de comandos.
Resultado:
fonte
1 D4R3 Y0U: ; rm -rf /
C # no LINQPad, 124
Direto. Por favor, use CTRL + 2 no LINQPad (Language: C # Statements).
Se o multiplicador for dado como primeiro parâmetro de entrada, isso poderá ser feito em 116 caracteres:
EDITAR:
Graças ao comentário de Abbas abaixo, isso pode ser ainda mais aproveitado usando o método estático Regex , em vez de instancia-lo:
fonte
var k=int.Parse(Console.ReadLine());Regex.Replace(Console.ReadLine(),"\\d+",t=>""+int.Parse(t.Value)*k).Dump();
. Em ambas as versões isso economiza mais 5 caracteres, você ficar em 119 para a versão de comprimento e 111 para a versão multiplicador-primeiroCobra - 171
fonte
Python 3-141
Acho que não posso mais jogar golfe ...
Exemplo:
fonte
n=2
es="1 2"
produz4 4
, uma vez quereplace
modifica o primeiro número duas vezes. Esse é o mesmo problema que estou enfrentando agora com Python 2 ...;)m=input()
você não economiza nada. Ex=int
é na verdade 2 bytes mais longo do que chamarint(...)
duas vezes.Mathematica
7161Com 10 caracteres salvos, graças a Martin Buttner.
Os espaços no código são para facilitar a leitura.
f
é uma função na quals
é a sequência de entrada en
é o número pelo qual multiplicar os números de sequência descobertos.Exemplos
Inteiro
Número racional
Número complexo
fonte
StringReplace
não faz diferença se existem espaços. Eu usei os exemplos originalmente dados por Chiperyman.StringReplace
não faz diferença se existem espaços.Ruby 40
Entrada de stdin.
Exemplo de execução:
Demonstração on-line: http://ideone.com/4BiHC8
fonte
Lua:
7369 caracteresExemplo de execução:
fonte
JavaScript, ES6, 43 caracteres
Esta é a minha primeira tentativa de jogar golfe!
Execute isso no console mais recente do Firefox. A primeira entrada é o número e a segunda entrada é a sequência a partir da qual os números devem ser multiplicados pelo primeiro número de entrada.
O prompt final lista a saída.
fonte
Perl - 48 caracteres
Leia um número na primeira linha, depois leia uma frase e divida-a em pedaços de dígitos ou não. Imprima os não dígitos como estão e os números serão multiplicados.
fonte
J - 63 char
O programa lê o número e a frase.
Explicado por explosão:
Se usarmos a biblioteca PCRE de J e fizermos a frase primeiro, podemos reduzir para 54 caracteres :
Explicado por explosão:
J é ruim nisso, o que posso dizer. É um inconveniente, porque J é tão imperativo.
Alguns exemplos:
fonte
CJam - 35
Experimente em http://cjam.aditsu.net/
Entrada de amostra:
Saída de amostra:
Explicação:
O programa percorre cada caractere, coletando os dígitos na pilha e, para cada não dígito, primeiro imprime o número coletado (se houver) multiplicado pela entrada numérica e depois imprime o caractere.
li:X;
lê a entrada numérica e a armazena em XlN+
lê a string e anexa uma nova linha (ajuda com números à direita){…}/
para cada caractere na string-
_s
copia o caractere e converte em string-
A,s-,
remove todos os dígitos e conta os caracteres restantes; o resultado será 0 se o caractere for um dígito ou 1 se não-
{…}*
executa o bloco se a contagem for 1 (ou seja, não dígito); para dígitos, não faz nada, então eles permanecem na pilha-
]
coleta os caracteres da pilha em uma matriz (isto é, uma string); os caracteres são quaisquer dígitos das iterações anteriores, mais o caractere atual-
)\
separa o último item (o caractere atual) e o move antes da string (restante)-
_!!
copia a string e a converte em um valor booleano - 0 se vazio, 1 se não-
{…}*
executa o bloco se a string não estiver vazia, ou seja, tivemos alguns dígitos antes do caractere não dígito atual---
iX*
converte a string para inteiro e multiplica por X-
o
imprime a parte superior da pilha - o número multiplicado ou a sequência vazia, se não tivermos um número-
o
(a segunda) imprime a nova parte superior da pilha - a não atual caractere de dígitofonte
Haskell (161)
Golfe
Ungolfed
Infelizmente, Haskell não tem uma biblioteca Regex em seu Prelude .
fonte
{}
para um ganho de 1 caractere. Além disso, eu só postou esta solução Haskell com 70 bytes: codegolf.stackexchange.com/questions/37110/...flex (-lexer) (
9489 caracteres)Versão ungolfed que não falha automaticamente se você esquecer o argumento da linha de comando (não muito mais):
Ajuntar com:
ou:
Por exemplo:
fonte
Groovy
- 124Clique no título para ver o exemplo executável
Exemplos tentados:
fonte
GNU Awk: 86 caracteres
Exemplo de execução:
fonte
PHP -
75/11568/109Duas versões, versões mais recentes do php, podem fazer isso:
Versões mais antigas de php: eu não contei a nova linha, as adicionei para facilitar a leitura.
Exemplo de entrada + saída
Meio difícil, as palavras 'function' e 'preg_replace_callback' ocupam muitos caracteres.
O espaço após
global
ereturn
não é necessário se seguido por um $ var (-2 caracteres)fonte
\d
na classe de caracteres (-2 caracteres); não há necessidade de colocar a função entre aspas duplas (-2 caracteres); você precisa finalizar corretamente a instrução dentro da função com ponto e vírgula (+1 caractere). By the way,\d
na cadeia de citação dupla deve ser escrito como\\d
, para melhor mudar as aspas para aspas simples.0-9
para \ d. Não tinha certeza das aspas em torno da função, não posso testar essa, a versão do meu php local não permite.C (
142134 caracteres)Nova linha inserida para maior legibilidade. Passe o fator como o primeiro, a string como a segunda opção de linha de comando. Esta implementação requer a
dprintf
função que faz parte do POSIX.1 2008 e pode não estar disponível no Windows. Aqui está a fonte não minificada:Melhorias
strspn
e, emstrcspn
vez de dar laços na corda.fonte
Python 89
por exemplo:
fonte
Rebol - 117
Ungolfed:
fonte
Clojure -
141140128 caracteresEu sou um novato Clojure, mas FWIW:
Exemplo de execução:
Ungolfed (feio, mas espero um pouco mais fácil de ler):
fonte
Python - 142
fonte
Java 218
Alguém tinha que fazer java. A sequência de entrada é de 2 token na linha de comando.
java M 'This 1 is22a 3352sentence 50' 3
fonte
if
condição também funciona com bit a bit|
, que é 1 caractere menor.Resposta dois: perl + bash
Festa pura (~ 262)
Primeiro, existe uma versão do bash pura e não tão curta (sem bifurcação, sem binários externos)!
Vamos mostrar:
(Que é uma frase totalmente improvável)
Perl pouco ofuscado (apenas por diversão)
Esta versão (baseada na resposta de @ Chilemagic ) não é mais curta, mas foi projetada como um script de totem :
Exemplo de execução:
fonte
Haskell, 70
Pena que eu estou muito atrasado IMHO isso é muito bom para esta pergunta e linguagem específica. a outra solução Haskell aqui tem 161 caracteres ..
isso funciona usando a
reads
função que analisa parcialmente uma string. por exemploreads "34abc" = [(34, "abc")]
,. obviamente isso é perfeito para esse desafio.uso:
fonte