fundo
Quando eu estava no ensino fundamental, costumávamos jogar um jogo na aula de matemática que é o seguinte.
Todas as crianças se sentam em um grande círculo e se revezam na contagem, começando em 1 .
No entanto, os seguintes números devem ser ignorados durante a contagem:
- Números que são múltiplos de 3 .
- Números que têm um 3 em sua representação decimal.
Os 15 primeiros números que as crianças devem dizer são
1 2 4 5 7 8 10 11 14 16 17 19 20 22 25
Sempre que alguém erra um número - diz um número que não está na sequência ou pula um número que está - ele é removido do círculo. Isso continua até restar apenas um garoto.
Tarefa
Você é ruim neste jogo, então decide trapacear. Escreva um programa ou uma função que, dado um número da sequência, calcule o próximo número da sequência.
Você não precisa manipular números que não podem ser representados usando o tipo numérico nativo do seu idioma, desde que seu programa funcione corretamente até a entrada 251 e que seu algoritmo funcione para entradas arbitrariamente grandes.
Entrada e saída podem usar qualquer base conveniente.
Como você precisa ocultar seu código, ele deve ser o mais curto possível. De fato, isso é código-golfe , então o código mais curto em bytes vence.
Casos de teste
1 -> 2
2 -> 4
11 -> 14
22 -> 25
29 -> 40
251 -> 254
fonte
7
foi ignorado quando eu o toquei, mas você diria outra coisa, em vez de ir para o próximo número da fila.Respostas:
Braquilog , 10 bytes
Experimente online!
Explicação
fonte
JavaScript (ES6), 30 bytes
fonte
J, 24 bytes
Abordagem direta que apenas repete a partir da entrada n até encontrar o próximo número válido pelas regras.
Formulários cinco smileys,
$:
,:)
,0=
,=|
, e>:
.Uso
Explicação
fonte
Python 2,
73 6643 bytesAgradeço ao xnor por me dizer que eu estava sendo bobo usando 2 variáveis, e também a Mitch Schwartz.
fonte
x=input()+1
while'3'[:x%3]in`x`:x+=1
print x
.x=~input()
, subtraindo em vez de adicionar e imprimir-x
.05AB1E , 11 bytes
Experimente online!
Explicação
fonte
Perl, 19 bytes
Código de 18 bytes + 1 para
-p
.Uso
fonte
Java 8,
57565550 bytesObrigado a @Numberknot por 1 byte Obrigado a @ Kevin Cruijssen por 5 bytes
Isto é um
Function<Integer, Integer>
Explicação
Implementação ingênua que simplesmente aumenta até atingir um número aceitável.
Classe de teste
Saída da classe de teste:
fonte
|
vez de||
do-while
? Apenas um regular para-ciclo é mais curto:i->{for(;++i%3<1|(i+"").contains("3"););return i;}
( 50 bytes )while
edo-while
, e ambos me deram a mesma pontuação, mas gostei dado-while
aparência ... Não pensei em usar umfor
loop ... Obrigado!Japonês, 18 bytes
Teste on-line
Finalmente tenho a chance de usar
ß
:-)Como funciona
fonte
PowerShell v2 +, 46 bytes
Pega entrada
$args[0]
, adiciona1
, salva$a
, inicia umfor
loop. O condicional mantém o loop ativo enquanto qualquer um$a-match3
(correspondência de expressão regular)-or
$a%3
é zero (o!
que é1
). O loop simplesmente aumenta$a++
. No final do ciclo, simplesmente colocamos$a
no pipeline e a saída via implícitaWrite-Output
acontece na conclusão do programa.Exemplos
fonte
R, 46 bytes
fonte
n
invés decat(n)
.Python 2,
494442 bytesA outra entrada Python supera isso (edit: não mais :-D), mas eu a publiquei porque gosto bastante de sua abordagem recursiva. Agradeço a Mitch Schwarz e Erik, o jogador de golfe, por me ajudarem a diminuir isso.
fonte
f=lambda x:f(x+1)if x%3>1or'3'in`x+1`else-~x
. Se você quiser manter Python 3, você pode golfe a últimax+1
para-~x
e remover o espaço.f=lambda x:'3'[:~x%3]in`~x`and f(x+1)or-~x
ef=lambda x:f(x+1)if'3'[:~x%3]in`~x`else-~x
Lua, 58 bytes
fonte
Pyke, 13 bytes
Experimente aqui!
fonte
while
no começo.C #,
56, 51 bytes.Isso é surpreendentemente curto para uma resposta em C #!
fonte
t=x=>(++x)%3<1|(x+"").Contains("3")?t(x):x;
No Visual Studio, basta definir a variável e defini-la como nulaFunc<int, int> t = null;
e, em seguida, definir a função recursiva na linha a seguir.Haskell,
5048 bytesExperimente em Ideone. Economizou 2 bytes graças a @Charlie Harding .
Alternativa: (50 bytes)
fonte
until(\x->mod x 3>0&¬Elem '3'(show x))succ.succ
.Pitão, 11 bytes
Experimente on-line: Demonstration or Test Suite
Explicação:
fonte
GolfSharp , 43 bytes
fonte
Ruby, 47 bytes
Eu realmente sinto que isso pode ser jogado ainda mais.
fonte
i
vez de"#{i}"
MATL , 14 bytes
Experimente online!
Explicação
fonte
Labirinto ,
117102 bytesExperimente online!
O labirinto é uma linguagem de programação bidimensional baseada em pilha e, nas junções, a direção é determinada pelo topo da pilha (positivo vai para a direita, negativo vai para a esquerda, zero vai direto). Existem dois loops principais nesses programas. O primeiro modifica a entrada inteira em 3 e incrementa se 0. O segundo verifica repetidamente se o último dígito é 3 (subtraindo 3 e modificando por 10) e depois dividindo por 10 para obter um novo último dígito.
fonte
PHP,
60555446 bytesGraças a @ user59178 por remover alguns bytes, @AlexHowansky por um byte, @Titus por mais alguns bytes
Chamado na linha de comando com
-r
. Método ingênuo que faz um loop enquanto o número é múltiplo de 3 ou tem 3 em seus dígitos.fonte
for($i=$argv[1];!(++$i%3)|strpos(" $i",'3'););echo$i;
pode ser possível obter um melhor desempenho atribuindo$i
ao usá-lo também.strpos(_.$i,'3')
%3<1
, um com em51
vez de'3'
, mais dois com emstrstr($i)
vez destrpos(_.$i)
e outros dois trocando os|
operandos na segunda versão:<?for(;strstr($i=++$argv[1],51)|$i%3<1;);echo$i;
-> 48 bytesPHP,
4741 bytesinspirado por Xanderhall , mas a idéia mais recente finalmente justifica uma resposta própria.
ou
Isso tira vantagem do fato de que a entrada também é da sequência: For
$n%3==1
, o novo módulo é2
. Pois$n%3==2
, o novo módulo é4-3=1
.$n%3==0
nunca acontece.Execute como pipe
-R
ou experimente-os online .fonte
APL (Dyalog Unicode) ,
33282719 bytes SBCSExperimente online!
-6 graças a Adám. -8 graças a ngn.
Explicação antiga:
APL (Dyalog Extended) ,
2317 bytes SBCSExperimente online!
Graças a Adám. -6 graças a ngn.
Explicação antiga:
fonte
Perl 6 ,
27 2524 bytesExperimente online!
Encontra o primeiro número maior que a entrada que não possui três e tem um restante quando modulado por 3. Eu esperava fazer algo sofisticado com a condição, como
!/3/&*%3
mas não funciona com o!
.:(
Explicação:
fonte
C, 81 bytes
fonte
reticular, 30 bytes
Experimente online!
Explicação
1: inicialização
Isso converte a entrada
i
em um númeron
e depois desce (v
)2: loop
3: final
fonte
Lote, 93 bytes
Recebe entrada em STDIN.
fonte
CJam, 19 bytes
CONECTADOS
Explicação:
Se uma explicação menos detalhada fosse solicitada, eu teria feito o seguinte:
fonte
Pitão, 19 bytes
Suíte de teste
Tenho certeza de que posso jogar isso ... é o mesmo que minha resposta CJam.
Explicação:
fonte
J
. Você pode incrementarQ
. E se você estiver fazendo isso de maneira inteligente, poderá inserir a operação na condição while:W|!%=hQ3/
Q \ 3; Q`.W|!%=hQ3/`Q\3;Q
Clojure, 73 bytes
Faz um loop recursivamente enquanto
n
é divisível por 3 ou contém um 3 em sua representação de sequência. Embora eu esteja usando recursão não otimizada, ele foi capaz de lidar com 2999999 como uma entrada, portanto deve estar ok.Ungolfed
fonte