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.


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

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

7

Utilitários Bash + GNU, 36

seq $1$1|grep -v 11|sed -n "$1{p;q}"

Certamente 1$1é suficiente, e não $1$1?
Neil



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

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.


2

Perl 5, 47 bytes

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

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')))


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

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)


0

PHP, 43 bytes

while(preg_match('/11/',$i)){$i++;}print$i;

-1

Ruby, 24 bytes

Mal interpretou a tarefa, retrabalhará mais tarde!

$><<gets.gsub('11','12')

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.