Ninguém, por favor!

20

Eu absolutamente odeio o dígito 1. Então, preciso da sua ajuda para converter números para as "formas apropriadas".

Os números na forma correta nunca têm dois 1s seguidos. 101está bem, mas 110é horrível.

Para converter, basta pular todos os números impróprios e contar normalmente. Por exemplo...

1 -> 1
2 -> 2
...
10 -> 10
11 -> 12
12 -> 13
...
108 -> 109
109 -> 120
110 -> 121
111 -> 122

e assim por diante.

Seu programa deve pegar um número inteiro e produzi-lo na forma correta. Isso é , então o código mais curto em bytes vence.

talex
fonte
1
Existe um limite superior na entrada?
lirtosiast
2
Eu não obter a 109 -> 120conversão ...
kirbyfan64sos
4
@ kirbyfan64sos Como 108 mapeia para 109, 109 mapeia para o próximo número, que é 110. Mas esse tem dois 1s seguidos, então ele passa para o próximo número até chegar a um que não possui. O que é 120, pois todos os 110-119 estão excluídos.
Reto Koradi 23/10/2015
3
@ Corey Ogburn Não é sobre binairy. Veja-o como como uma lista de números seria quando você contar até o número dado com a regra de não-11 para cada número na lista
LukStorms
2
@leymannx O número à esquerda representa o número da série. Portanto, o primeiro valor da série é 1, o segundo valor da série é 2, yadda yadda (bisque de lagosta), o décimo valor da série é 10 e o décimo primeiro valor da série é 12, porque pulamos 11 como O talex considera abominação ao senhor. Essa idéia continua, daí o motivo pelo qual o 108º valor da série é 109, e o 110º da série é 120, quando pulamos tudo de 110 para 119. Espero ter esclarecido o suficiente.
ahall

Respostas:

8

Burlesco , 10 bytes

{11 ~ [n!} FO

Versões mais antigas:

ro{11~[n!}f[

ro{Sh"11"~=n!}f[
mroman
fonte
Por favor, adicione um link para o idioma :)
mınxomaτ 23/10/2015
feito. Existe desde 2012, também há um artigo sobre o RosettaCode e o esowiki.
mroman 23/10/2015
8

Perl 5 , 34 bytes

Looping um contador e mudar o ocasional um duplo.

map{$i++;$i=~s/11/12/}1..pop;say$i

Teste

$ perl -M5.012 -e 'map{$i++;$i=~s/11/12/}1..pop;say$i' 111
$ 122
LukStorms
fonte
7

Utilitários Bash + GNU, 36

seq $1$1|grep -v 11|sed -n "$1{p;q}"
Trauma Digital
fonte
Certamente 1$1é suficiente, e não $1$1?
Neil
6

Pitão, 13 11 bytes

e.f!}`hT`ZQ

Economizou 2 bytes graças a @FryAmTheEggman.

Demonstração ao vivo e casos de teste.

Versão de 13 bytes

e.f!}"11"+ZkQ
kirbyfan64sos
fonte
Contexto: Pitão , Pitão e Pitão .
Peter Mortensen
@PeterMortensen O terceiro não está relacionado ao Pyth usado aqui - é de 8 anos antes que este Pyth fosse criado, na verdade. Pyth é apenas um nome popular para linguagens inspiradas em Python.
Isaacg 26/10/2015
5

JavaScript, 53 bytes

n=>[...Array(n*2).keys()].filter(a=>!/11/.test(a))[n]

Alternativo (usando compreensões, mesmo comprimento):

n=>[for(i of Array(n*2).keys())if(!/11/.test(i))i][n]
Mwr247
fonte
É bom ver, mas exagero nessa tarefa. codegolf.stackexchange.com/a/61594/21348
edc65
4

Python 2, 50

lambda n:[i for i in range(n*2)if'11'not in`i`][n]

Uma função anônima que lista os números que não contêm 11em ordem e aceita o nth. O erro de um por zero da indexação zero é cancelado com a inclusão de 0na lista.

Em teoria, isso falhará em números suficientemente altos onde f(n)>2*n, mas isso não deve acontecer até que nseja pelo menos 10**50.


51 bytes:

n=input();i=0
while n:i+=1;n-='11'not in`i`
print i

Conta os números iaté que a cota de nnúmeros sem 11seja atingida.

Uma função tem o mesmo comprimento devido às correções necessárias.

f=lambda n,i=0:n+1and f(n-('11'not in`i`),i+1)or~-i
xnor
fonte
3

Python 3 74

Ainda precisa de um pouco de golfe.

n=int(input())
c=0
for x in ' '*n:
 c+=1
 while'11'in str(c):c+=1
print(c)

É uma força bruta agora.

Morgan Thrapp
fonte
2

Perl 5, 47 bytes

@_[$_]=++$i!~/11/?$i:redo for 1..<>;print$_[-1]
msh210
fonte
2

JavaScript (ES6) 41

Como uma função anônima

n=>eval('for(i=0;/11/.test(++i)||n--;)i')

Nota: a maneira mais simples seria 44:

n=>{for(i=0;/11/.test(i)||n--;i++);return i}

Teste a execução do trecho abaixo.

f=n=>eval('for(i=0;/11/.test(++i)||n--;)i')

alert(f(+prompt('Enter number')))

edc65
fonte
2

Haskell, 51 bytes

([x|x<-[0..],notElem('1','1')$zip=<<tail$show x]!!)

Exemplo de uso: ([x|x<-[0..],notElem('1','1')$zip=<<tail$show x]!!) 110-> 121.

Como funciona:

[x|x<-[0..]                                   ]    -- take all x starting with 0
           ,                                       -- where
                   ('1','1')                       -- the pair of two chars '1'
            notElem                                -- is not part of
                             zip=<<tail            -- the list of pairs of neighbor elements of
                                        show x     -- the string representation of x
                                               !!  -- take nth element, where n is the parameter
nimi
fonte
1

MUMPS, 37 bytes

t(i) f j=1:1 s:j'[11 k=k+1 q:k=i
    q j

Bem direto. A única coisa "interessante" aqui é a construção j'[11- '[é o operador "não contém", portanto isso "abc"'["ab"é falso e "abc"'["cd"verdadeiro. Apesar de ambos os operandos dej'[11 serem números, o MUMPS permanece imperturbável. Felizmente, auto-executará ambos os operandos em seqüências de caracteres e seguirá com sua vida. Viva!

(Aliás, se você está bem com o programa nunca terminando, podemos encurtar isso para 35 bytes: t2(i) f j=1:1 s:j'[11 k=k+1 w:k=i j)

senshin
fonte
0

PHP, 43 bytes

while(preg_match('/11/',$i)){$i++;}print$i;
leymannx
fonte
-1

Ruby, 24 bytes

Mal interpretou a tarefa, retrabalhará mais tarde!

$><<gets.gsub('11','12')
Peter Lenkefi
fonte
Não funciona em entradas que não contêm 11. Por exemplo, 12deve dar 13, não 12.
23815 DLosc #
@DLosc Oh Deus, eu interpretei mal a tarefa! Vou retrabalhá-lo mais tarde!
Peter Lenkefi