Dada uma sequência contendo números decimais:
teststring134this 123test string54 100
incremente cada número dessa sequência em um para fornecer a nova
teststring135this 124test string55 101
.
A cadeia pode ser fornecida como:
- um argumento de linha de comando
- STDIN
- um argumento de função ou variável codificado
Cubra todas as posições possíveis para um número:
- como um prefixo para uma palavra;
123test
►124test
- como sufixo para uma palavra;
test123
►test124
- dentro de uma palavra;
te123st
►te124st
- sozinho
test 123 test
►test 124 test
Aqui está uma solução não-golfe no Python:
NUMBERS = '0123456789'
def increment(s):
out = ''
number = ''
for c in s:
if c in NUMBERS:
number += c
else:
if number != '':
out += str(int(number) + 1)
number = ''
out += c
if number != '':
out += str(int(number) + 1)
number = ''
return out
print "\"%s\"" % (increment('teststring134this 123test string54 100'))
Esta é uma code-golf
pergunta, o código mais curto vence.
Respostas:
Perl, 14 bytes
Requer a
-p
opção, que contei como um byte.Exemplo de execução
fonte
Ruby,
3024 bytesEspera que a entrada seja armazenada
s
.fonte
$1.next
ser usado no bloco?next
que era tão sofisticado.Vim - 13 pressionamentos de teclas
Espera que a entrada seja a linha atual.
Ou para muitos números finitos (por exemplo, 999) em pressionamentos de tecla 8 + ceil (log (n)):
fonte
JavaScript (ES6) - 28
Execute usando
H("test 123 234t")
.fonte
H=
e apenas ter uma função anônima.Perl, 23
Assume que a sequência de entrada está atribuída a
$_
fonte
Python 2-59
Forneça a string como a variável
n
fonte
C99 - 86 (GCC 4.9.0 e Visual C ++ 2013)
Editar: o GCC 4.9.0 (com -std = c99) e o Visual C ++ 2013 criam com êxito (com avisos) o mesmo código sem as inclusões. Eu não sabia que você poderia fazer isso! Obrigado pela dica.
Editar: nem me ocorreu que eu deveria escrevê-lo na tela em tempo real, em vez de criar a sequência e imprimi-la. Isso faz uma enorme diferença. Graças à dennis!
Isso está usando uma sequência codificada, mas o conteúdo da sequência não é contado no total (o = "" é contado).
Basicamente, ele percorre a string, um caractere de cada vez, verificando cada um para ver se é um número inteiro. Se for, ele incrementa o número inteiro e o grava na saída, caso contrário, ele copia o caractere atual para a saída.
Isso vaza a string codificada porque aumenta s.
fonte
include
ele ainda será compilado com o gcc.99
?J (20)
Espera que a entrada seja armazenada na variável
a
.Teste:
fonte
(f?) lex (39)
Arquivo
inc.l
:Compilar:
Corre:
Não testei isso com o original
lex
. Comentários são bem-vindos.fonte
%%
já que este não é um código de usuário: flex.sourceforge.net/manual/…Emacs - 20 caracteres
Requer que o texto a ser processado esteja presente no buffer atual. Contei CM-% como um caractere aqui, pois ele pode ser digitado com um toque de tecla ao pressionar três modificadores.
fonte
GNU sed, 304 (incluindo 1 para sinalizador -r)
Votei de perto essa questão como uma possível duplicata, mas isso talvez seja contrário a isso, porque essa resposta não pode ser trivialmente alterada para funcionar lá. De longe, a resposta mais longa.
Inspirado neste exemplo da documentação sed , apesar de precisar de algum trabalho para lidar com vários números em uma string:
Resultado:
Observe que isso insere
_
caracteres temporariamente ; portanto, isso pode levar a resultados incorretos se houver_
no fluxo de entrada. Como uma mitigação disso, podemos substituir o_
script sed por algum caractere não imprimível (por exemplo, ASCII 0x07 BEL) e assumir que o fluxo de entrada contém apenas ASCII imprimível. Isso parece funcionar bem quando eu testo.fonte
Raquete 74
fonte
Lua - 68 caracteres
Espera que a entrada seja armazenada em s.
fonte
CJam,
67 58 534831 caracteresEsta pergunta é como a pior pergunta para CJam. Sem regex, sem correspondência de padrões, sem captura de exceção. Mas aqui vamos nós (#YOLO)
Este divide a string no grupo de apenas alfabetos e apenas dígitos. Ele incrementa cada dígito e costura a matriz dois, obtendo um elemento de cada vez.
Solução anterior:
Experimente online aqui
Como funciona:
A idéia básica é continuar armazenando o caractere separadamente em uma string, se for um dígito, e despejar o valor incrementado na string final assim que obtivermos um caractere sem dígito.
fonte
Cobra - 88
fonte
C # -
178169157 caracteresIsso pressupõe que números como 999 podem transbordar para 000 e que - +, E não fazem parte de um número.
Melhor forma legível:
Eu sou novo aqui, nunca tentei código de golfe antes, apenas tentei :)
Gostaria de saber se alguém tem idéias para torná-lo ainda mais curto ...
Para participar do C #, seria bom se pudéssemos omitir toda a estrutura necessária em torno do código real - isso teria apenas 82 caracteres, e isso sem chamar nenhuma função poderosa do sistema.
O mesmo com ponteiros (182 caracteres):
Agora, sem transbordar, isso manipula corretamente o gabinete 999 (223 caracteres):
Outra versão mais antiga, lê da entrada padrão e usa recursão:
Nota:
Console.ReadKey();
e a string em si não deve ser contada.Eu melhorei isso já várias vezes, veja os comentários. Ainda há espaço para mais melhorias, eu diria :) E desculpe pelo tamanho, mas acho que as diferentes versões são interessantes o suficiente para mantê-las ...
fonte
if(c==57)
que você poderia escreverc--;
em vez dec=48;
, o que acontece com o operador ternário também. há muitos truques de golfe. talvez você deve visitar codegolf.stackexchange.com/questions/2203/tips-for-golfing-in-c... ? ... : c++*b--
Groovy, 38 bytes
Uggghhh ... Eu absolutamente odeio as palavras
replace
eall
, elas arruinam todos os golfe regex para mim.fonte
(it as int)+1
→it.next()
PHP - 91 bytes
Eu não queria usar expressões regulares. O PHP não é capaz de incrementar diretamente um deslocamento de string, portanto, eu precisava adicionar alguns bytes na etapa de incremento. Este script de uma linha lembra-me de uma idade muito sombria dos scripts PHP ...
fonte
K, 56
fonte
sed e bash - 40 (incluindo invocação e tubulações)
Saídas:
fonte
42;rm -rf /
funcionou pela primeira vez.\0
para&
(-1 char),$((…))
para$[…]
(-2 chars),s/^/echo /
paraiecho \\
(-2 chars) para encurtar seu código atual . No entanto, é melhor corrigir o erro mencionado por @Dennis primeiro. (Ele escreveu “Ele trabalhou pela primeira vez” para se divertir e como dica sobre a questão Na verdade o seu código de falha na entrada contendo.;
,#
,`…`
,$(…)
E talvez outros caracteres especiais também.)eval echo `sed 's/[0-9]\+/$[&+1]/g'`
- ainda tem o problema de injeção de código, de acordo com minha resposta a outra pergunta semelhante codegolf.stackexchange.com/a/37145/11259Java 7, 119 bytes
Se o requisito for um programa em vez de apenas uma função, serão 149 bytes:
Ungolfed & código de teste:
Experimente aqui.
Resultado:
fonte
Gema, 14 caracteres
Exemplo de execução:
fonte
DASH , 16 bytes (não competitivo)
Isso retorna uma função / aplicativo parcial.
Uso:
Explicação
fonte
CJam, 18 bytes
Experimente aqui.
Explicação
fonte
R, 83 bytes
Tarde para a festa. Assume entrada é armazenado na variável
x
. Provavelmente não é necessário usá-loregmatches
para resolver isso, mas não consegui descobrir substituições vetorizadas sem nenhum pacote externo.Ungolfed e explicou
Saída de exemplo
fonte
C # (Visual C # Interactive Compiler) com opção de linha de comando
/u:System.Text.RegularExpressions.Regex;System.Int32
, 40 bytesEspera que a entrada esteja em uma variável chamada n.
Experimente online!
fonte