Nadie, por favor!


20

Absolutamente odio el dígito 1. Por lo tanto, necesito su ayuda para convertir los números a sus "formas adecuadas".

Los números en forma adecuada nunca tienen dos 1s seguidos. 101Está bien, pero 110es horrible.

Para convertir, simplemente omita todos los números impropios y cuente normalmente. Por ejemplo...

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

y así.

Su programa debe tomar un número entero y generarlo en forma adecuada. Este es el , por lo que gana el código más corto en bytes.


1
¿Hay un límite superior en la entrada?
lirtosiast

2
No consigo la 109 -> 120conversión ...
kirbyfan64sos

44
@ kirbyfan64sos Dado que 108 se asigna a 109, 109 se asignaría al siguiente número, que es 110. Pero ese tiene dos 1 seguidos, por lo que pasa al siguiente número hasta llegar a uno que no. Que es 120, ya que todos los 110-119 están excluidos.
Reto Koradi

3
@ Corey Ogburn No se trata de binairy. Míralo como sería una lista de números cuando cuentas hasta el número dado con la regla del no 11 para cada número de la lista
LukStorms

2
@leymannx El número de la izquierda representa el número de la serie. Entonces, el primer valor de la serie es 1, el segundo valor de la serie es 2, yadda yadda (sopa de langosta), el décimo valor de la serie es 10 y el undécimo valor de la serie es 12, porque omitimos 11 como Talex considera que es una abominación para el Señor. Esta idea continúa, por eso el valor 108 de la serie es 109, y el valor 110 de la serie es 120, ya que omitimos todo de 110 a 119. Espero haber aclarado lo suficiente.
ahall

Respuestas:



8

Perl 5 , 34 bytes

Colocando un contador y cambiando el doble de vez en cuando.

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

Prueba

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

7

Bash + GNU utils, 36

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

Seguramente es 1$1suficiente, en lugar de $1$1?
Neil



4

Pitón 2, 50

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

Una función anónima que enumera los números que no contienen 11en orden, y toma el nnúmero uno. El error off-by-one de indexación cero se cancela con la inclusión de 0en la lista.

En teoría, esto fallará para números suficientemente altos donde f(n)>2*n, pero esto no debería suceder hasta que nsea ​​al menos 10**50.


51 bytes:

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

Cuenta los números ihasta que se cumpla la cuota de nnúmeros sin 11.

Una función tiene la misma longitud debido a las correcciones off-by-one necesarias.

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

3

Python 3 74

Todavía necesito un poco de golf.

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

Es bastante fuerza bruta en este momento.


2

Perl 5, 47 bytes

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

2

JavaScript (ES6) 41

Como una función anónima

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

Nota: la forma más simple sería 44:

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

Prueba a ejecutar el fragmento a continuación.

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]!!)

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

Cómo 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

Muy claro. Lo único "interesante" aquí es la construcción j'[11: '[es el operador "no contiene", por lo que "abc"'["ab"es falso y "abc"'["cd"verdadero. A pesar de que ambos operandos j'[11son números, MUMPS permanece imperturbable. Felizmente autocoerce ambos operandos a cadenas y continuará con su vida. ¡Hurra!

(Por cierto, si estás de acuerdo con el programa nunca terminar, podemos acortar este a 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

Rubí, 24 bytes

Mal interpretado la tarea, volverá a trabajar más tarde!

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

No funciona en entradas que no contienen 11. Por ejemplo, 12debería dar 13, no 12.
DLosc

@DLosc ¡Vaya, he malinterpretado la tarea! ¡Lo reelaboraré más tarde!
Peter Lenkefi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.