Esta é uma versão de código-golfe de uma pergunta semelhante que fiz anteriormente na pilha, mas pensei que seria um quebra-cabeça interessante.
Dada uma sequência de comprimento 10 que representa um número base 36, aumente-a em um e retorne a sequência resultante.
Isso significa que as cordas irá conter apenas dígitos de 0
a 9
e cartas de a
a z
.
A base 36 funciona da seguinte maneira:
O dígito mais à direita é incrementado, primeiro usando 0
para9
0000000000> 9 iterações> 0000000009
e depois que a
a z
é usado:
000000000a> 25 iterações> 000000000z
Se z
precisar ser incrementado, ele volta ao zero e o dígito à esquerda é incrementado:
000000010
Regras adicionais:
- Você pode usar letras maiúsculas ou minúsculas.
- Você não pode soltar zeros à esquerda. Tanto a entrada quanto a saída são cadeias de comprimento 10.
- Você não precisa manipular
zzzzzzzzzz
como entrada.
Casos de teste:
"0000000000" -> "0000000001"
"0000000009" -> "000000000a"
"000000000z" -> "0000000010"
"123456zzzz" -> "1234570000"
"00codegolf" -> "00codegolg"
code-golf
string
base-conversion
Jack Hales
fonte
fonte
"0zzzzzzzzz"
(modifique o dígito mais significativo) como um caso de teste. Ele disparou na minha solução C por causa de um erro de um por um.Respostas:
05AB1E , 10 bytes
A entrada está em maiúscula .
Código
Explicação
Usa a codificação 05AB1E . Experimente online! ou Verifique todos os casos de teste .
fonte
Japonês , 13 bytes
Experimente online! e verificar casos de teste
Recebe entrada como uma string
Explicação
fonte
JavaScript (ES6), 45 bytes
Guardado 4 bytes graças a @OOBalance
Experimente online!
fonte
Haskell , 58 bytes
Experimente online!
Uma estratégia de força bruta: gere todas as seqüências de comprimento-10-base-36 em ordem e encontre a que vem depois da entrada da lista. Reserve uma quantidade enorme de tempo em seqüências de caracteres distantes do início da lista.
Haskell , 60 bytes
Experimente online!
Lê a string da esquerda para a direita até atingir um caractere seguido por um sufixo de todos os zs, que podem estar vazios. Incrementa esse caractere e substitui o z pelo 0.
fonte
Stax , 7 bytes
Execute e depure
Explicação:
fonte
C (gcc) ,
5048 bytesUm sinalizador de transporte explícito não era necessário após a reestruturação do loop para terminar assim que nenhum transporte acontecesse. O ajuste 9-> A é realizado durante a verificação do loop.
Agradecimentos a ceilingcat pela sugestão.
Experimente online!
Versão original:
7157 bytesEsta versão usa um sinalizador carry para propagar atualizações: eu o defino como verdadeiro para iniciar o incremento. A sequência é modificada no local e aceita apenas 0-9, AZ. A parte complicada era garantir que 9-> A fosse manuseado corretamente nos carregamentos.
Edit: Eu redirecionei o ponteiro de entrada como o sinalizador de transporte.
Experimente online!
fonte
C,
82815350 bytesModifica diretamente a sequência de entrada; entrada e saída estão em maiúsculas. Experimente online aqui . Agradecimentos a Arnauld pelo golfe de 24 bytes e ao tetocat por jogar mais 3 bytes.
Ungolfed:
fonte
ZZZZZZZZZZ
. A resposta do ErikF faz o mesmo, mas ainda mais curta: codegolf.stackexchange.com/a/169468/79343 #Simulador de máquina de Turing on-line , 745 bytes
Intérprete online
fonte
Perl 6 ,
34 3230 bytesGraças ao nwellnhof por -2 bytes através do uso do
o
operador para combinar funçõesExperimente online!
Função que converte o argumento na base 36, adiciona 1, converte novamente e depois o formata. Agora usa a mesma tática da resposta de Adnan para preservar os zeros à esquerda.
fonte
{S/.//}o{base :36(1~$_)+1: 36}
por 30 bytes.o
quando jogava golfe antes, mas posso ver onde isso pode ser útil!.succ
(incremento por um) não funcionaMATL , 12 bytes
Experimente online!
fonte
Haskell , 63 bytes
Experimente online! Inverte a string e verifica o primeiro caractere:
9
é substituído por uma
.z
é substituído por um0
e recursivamente o próximo caractere é verificado.succ
, a função sucessora que pode ser usada em Chars porque são uma instância da classe Enum .Finalmente, a sequência resultante é revertida novamente.
fonte
Rotina de código de máquina 6502 (NMOS *) , 26 bytes
*) usa um código de operação "ilegal"
ISB
/0xF3
, funciona em todos os chips NMOS 6502 originais, não nas variantes posteriores do CMOS.Espera um ponteiro para uma sequência de 10 caracteres em
$fb
/$fc
que deve ser um número de base 36. Incrementa esse número no local.Não faz nada sensato na entrada inválida (como, por exemplo, uma string mais curta) - manipula
ZZZZZZZZZZ
"corretamente" por acidente;)Desmontagem comentada
Exemplo de programa assembler C64 usando a rotina:
Demonstração online
Código na sintaxe ca65 :
fonte
Retina 0.8.2 , 12 bytes
Experimente online! Explicação: A
dl
parte do destino de substituição se expande para0-9a-z
enquanto aso
cópias são enviadas para a origem, resultando emz0-9a-z
(embora o segundoz
seja ignorado, pois nunca poderá corresponder). Isso incrementa os dígitos correspondentes. A.z*$
parte do padrão corresponde ao último nãoz
dígito mais todos osz
s finais , manipulando assim o transporte do incremento para0
.fonte
Ruby , 40 bytes
Experimente online!
0
s"zzzzzzzzzz"
retorna uma cadeia de 11 caracteresfonte
brainfuck , 109 bytes
Experimente online!
fonte
Apl (Dyalog Unicode) ,
302824 bytesAgradecemos a ngn pela dica de salvar alguns bytes.
Experimente online!
Requer ⎕IO de 0
Usa maiúsculas
fonte
'1',
participarf
? então1↓
vai se tornar parte de seu inverso(⎕D,⎕A)⍳'1',
->1,(⎕D,⎕A)⍳
(f⍣¯1)1+f←36⊥1,(⎕D,⎕A)⍳⊢
PHP,
6964 bytesversão coxo :
Corra como cano com
-R
. Insensível a maiúsculas e minúsculas, saída em minúsculas.primeira abordagem, 69 bytes:
Executar como tubo com
-F
versão em loop, também 69 bytes :
o PHP mais novo emitirá avisos para constantes indefinidas.
Y
eA
por letras minúsculas para inserir letras minúsculas.Executar como tubo com
-nR
... ou experimentá-los online .
fonte
-R
e chamar esse de 66 bytes também.printf('%010s',($b=base_convert)(1+$b($argn,36,10),10,36));
- 59 bytes($b=base_convert)(a,b,c)
. Estou aprendendo muito com você.Python 2 , 88 bytes
Experimente online!
Incrementa a string "manualmente".
fonte
Carvão , 14 bytes
Experimente online!Link é a versão detalhada do código. Explicação:
Imprima 9
0
s. Isso serve para amortecer o resultado.Converta a entrada da base 36, aumente e depois converta novamente na base 36. Em seguida, inverta o resultado e imprima para a esquerda.
fonte
Java 8,
907656 bytesAceita letras maiúsculas e minúsculas para entrada. A saída está sempre em minúsculas.
Graças a Okx por jogar 18 bytes.
Experimente online aqui .
Ungolfed:
fonte
"".format("%10s",t).replace(' ','0')
1
no início e removê-lo:s->Long.toString(Long.valueOf("1"+s,36)+1,36).substring(1)
"1"+s
=>1+s
JavaScript (ES6), 89 bytes
Este não é tão eficiente em bytes quanto a outra entrada JavaScript , mas eu fiz isso sem observar esta regra:
Portanto, essa não é uma entrada séria - apenas por diversão! Ele funciona com cadeias de comprimento geral, como
0abc
, e precede a1
quando o primeiro dígito éz
, por exemplozzz
- ->1000
. A entrada deve estar em minúscula.Explicação
A expressão
(A, B, C)
realmente significa "faça A, depois faça B e depois retorne C", que utilizo para declarar algumas variáveis que reutilizo no código.s
significa "string",l
significa "last",r
significa "descanso".Esta é uma função recursiva. Para uma string típica como
aza
, isso apenas aumentará o último caractere (veja a linha 6) -azb
. Mas uma string que termina comz
, comoh0gz
, será executada em tudo até o último caractere (thez
) e substituirá a0
no lugar dela (consulte a linha 5) -f(h0gz)
=f(h0g) + 0
=h0h0
.A
||'0'
linha 5 é para que a função funcione quando é chamada em uma string de 1 comprimento (ou seja, a string'z'
). Sem ele,f('')
é chamado (como'z'.slice(0, -1)
está''
), que tem um comportamento indefinido (literalmente - tente você mesmo), e isso não é bom. O resultado esperado def('z')
é'10'
, que é o que obtemosf('0') + 0
, então usamos||'0'
. (||'0'
é particularmente útil porque não atrapalha o caso usual -r
sendo pelo menos um comprimento (s
pelo menos 2) - porque as strings são falsey apenas quando são 0).O método para incrementar uma sequência é o mesmo usado na outra entrada JS: converta o "número" da base-36 em um número real, adicione 1 e depois converta-o novamente em base-36. Não precisamos nos preocupar com o
1
incremento de 'z' ('z'
->'10'
), pois nunca incrementamos 'z' (consulte as linhas 4 e 6: o último caractere só é incrementado se não for 'z').Além disso, nunca corremos o risco de descartar zeros à esquerda, porque na verdade nunca manipulamos mais de um caractere por vez - apenas o último caractere da string. O restante dos caracteres é cortado em fatias à medida que você corta qualquer sequência de caracteres e o prefixo anexado.
fonte
Limpo ,
8984 bytesExperimente online!
Uma solução mais curta graças ao Laikoni .
Limpar \ limpo , 115 bytes
Adoro quando uso
limit(iterate...
Experimente online!
Produz a resposta sem converter bases usando a correspondência de lista.
? :: [Char] -> [Char]
executa transporte para frente.@ :: Char -> Char
incrementos de um, representando a diferença entre'9'
e'z'
.$ :: [Char] -> [Char]
incrementa o último caractere e aplica-se?
até o valor estabilizar.fonte
R ,
152123 bytesExperimente online!
Uma abordagem completamente diferente. Obtenha os pontos de código ASCII e "incremente" recursivamente o ponto de código mais à direita (fazendo
0
(57) pular paraa
(97) ez
(122) voltar para0
(48)) até ficar semz
s. Converta de volta para string.Versão antiga
Experimente online!
Isso é tudo manipulação de texto, que não caminha de mãos dadas com o golfe com código R.
Substitua tudo
z
no final das cordas por0
. Encontre a localização do último elemento antes dos0
s à direita recém-formados . Encontre a próxima base de 36 dígitos. Fazer a mudança. Fique feliz por ter vencido a solução Online Turing Machine Simulator.fonte
strtoi
para você começar; há um par mais golfe truques para obtê-lo para baixo para 72.strtoi
é limitado a números bastante pequenos embora? Eu desisti disso há um tempo atrás.int
restrição era tão problemática. Vadio! Para a posteridade, esta foi minha solução fracassada: Experimente online!Estrelado , 325 bytes
Experimente online!
Explicação:
fonte
Wolfram Language (Mathematica) , 39 bytes
Experimente online!
fonte
Python 3.6+ e gmpy2 , 62 bytes
Experimente online!
(Observe que o gmpy2 não faz parte da biblioteca padrão do Python e requer instalação separada)
fonte
f=
. Funções anônimas são geralmente consideradas localizadas no código golf.Pyke , 11 bytes
Experimente aqui!
Pode ser 2 bytes mais curto com a seguinte alteração de idioma: Se o modo hexadecimal for usado, altere todos os usos base_36 e base_10 para base_92 (que não é realmente a base 92 nesse contexto).
fonte
sed , 94 bytes
Experimente online!
Sed sofre muito por ter que mudar os caracteres pela pesquisa.
fonte
Zsh ,
4136 bytesExperimente online!
fonte
Geléia , 21 bytes
Experimente online!
Usa maiúsculas. O link TIO também permite letras minúsculas / mistas.
fonte