Antecedentes
Cuando estaba en la escuela primaria, solíamos jugar un juego en la clase de matemáticas que dice lo siguiente.
Todos los niños se sientan en un gran círculo y se turnan para contar, comenzando desde 1 .
Sin embargo, se deben omitir los siguientes números mientras se cuenta:
- Números que son múltiplos de 3 .
- Números que tienen un 3 en su representación decimal.
Los primeros 15 números que los niños deberían decir son
1 2 4 5 7 8 10 11 14 16 17 19 20 22 25
Cada vez que alguien se equivoca con un número, dice un número que no está en la secuencia o se salta un número que sí, lo elimina del círculo. Esto continúa hasta que solo queda un niño.
Tarea
Eres malo en este juego, así que decides hacer trampa. Escriba un programa o una función que, dado un número de secuencia, calcule el siguiente número de secuencia.
No tiene que manejar números que no pueden representarse utilizando el tipo numérico nativo de su idioma, siempre que su programa funcione correctamente hasta la entrada 251 y que su algoritmo funcione para entradas arbitrariamente grandes.
La entrada y la salida pueden usar cualquier base conveniente.
Como debe ocultar su código, debe ser lo más breve posible. De hecho, este es el código de golf , por lo que gana el código más corto en bytes.
Casos de prueba
1 -> 2
2 -> 4
11 -> 14
22 -> 25
29 -> 40
251 -> 254
fuente
7
lo omití cuando lo jugué, pero en cambio, dirías algo más, en lugar de pasar al siguiente número en la fila.Respuestas:
Brachylog , 10 bytes
Pruébalo en línea!
Explicación
fuente
JavaScript (ES6), 30 bytes
fuente
J, 24 bytes
Enfoque directo que simplemente itera hacia adelante desde la entrada n hasta que encuentra el siguiente número que es válido según las reglas.
Formas cinco emoticonos,
$:
,:)
,0=
,=|
, y>:
.Uso
Explicación
fuente
Python 2,
73 6643 bytesGracias a xnor por decirme que estaba siendo tonto usando 2 variables, y gracias a Mitch Schwartz también.
fuente
x=input()+1
while'3'[:x%3]in`x`:x+=1
print x
.x=~input()
, restar en lugar de sumar e imprimir-x
.05AB1E , 11 bytes
Pruébalo en línea!
Explicación
fuente
Perl, 19 bytes
Código de 18 bytes + 1 para
-p
.Uso
fuente
Java 8,
57565550 bytesGracias a @Numberknot por 1 byte Gracias a @Kevin Cruijssen por 5 bytes
Esto es un
Function<Integer, Integer>
Explicación
Implementación ingenua que simplemente se incrementa hasta alcanzar un número aceptable.
Clase de prueba
Salida de clase de prueba:
fuente
|
lugar de||
do-while
? Solo un ciclo for regular es más corto:i->{for(;++i%3<1|(i+"").contains("3"););return i;}
( 50 bytes )while
ydo-while
ambos me dieron la misma puntuación, pero me gustó lado-while
apariencia ... No pensé en usar unfor
bucle ... ¡Gracias!Japt, 18 bytes
Pruébelo en línea
Finalmente tengo la oportunidad de usar
ß
:-)Cómo funciona
fuente
PowerShell v2 +, 46 bytes
Toma entrada
$args[0]
, agrega1
, guarda$a
, inicia unfor
ciclo. El condicional mantiene el ciclo mientras que$a-match3
(coincidencia de expresiones regulares)-or
$a%3
es cero (el!
cual es1
). El bucle simplemente se incrementa$a++
. Al final del ciclo, simplemente lo colocamos$a
en la tubería y la salida a través de lo implícitoWrite-Output
ocurre al finalizar el programa.Ejemplos
fuente
R, 46 bytes
fuente
n
lugar decat(n)
.Python 2,
494442 bytesLa otra entrada de Python supera esto (editar: no más :-D), pero la publiqué porque prefiero su enfoque recursivo. Gracias a Mitch Schwarz y Erik the Golfer por ayudarme a acortar esto.
fuente
f=lambda x:f(x+1)if x%3>1or'3'in`x+1`else-~x
. Si desea mantener Python 3, se puede jugar golf la últimax+1
a-~x
y retire el espacio.f=lambda x:'3'[:~x%3]in`~x`and f(x+1)or-~x
yf=lambda x:f(x+1)if'3'[:~x%3]in`~x`else-~x
Lua, 58 Bytes
fuente
Pyke, 13 bytes
Pruébalo aquí!
fuente
while
al principio.C #,
56, 51 bytes.¡Esto es sorprendentemente corto para una respuesta de C #!
fuente
t=x=>(++x)%3<1|(x+"").Contains("3")?t(x):x;
En Visual Studio, solo necesita definir la variable y establecerla como nulaFunc<int, int> t = null;
y luego definir la función recursiva en la siguiente línea.Haskell,
5048 bytesPruébalo en Ideone. Guardado 2 bytes gracias a @Charlie Harding .
Alternativa: (50 bytes)
fuente
until(\x->mod x 3>0&¬Elem '3'(show x))succ.succ
.Pyth, 11 bytes
Pruébelo en línea: Demostración o conjunto de pruebas
Explicación:
fuente
GolfSharp , 43 bytes
fuente
Ruby, 47 bytes
Realmente siento que esto se puede jugar más golf.
fuente
i
lugar de"#{i}"
MATL , 14 bytes
Pruébalo en línea!
Explicación
fuente
Laberinto ,
117102 bytesPruébalo en línea!
Labyrinth es un lenguaje de programación bidimensional basado en la pila y en los cruces, la dirección está determinada por la parte superior de la pila (lo positivo va a la derecha, lo negativo va a la izquierda, el cero va derecho). Hay dos bucles principales en estos programas. El primero modifica la entrada entera por 3 y aumenta si es 0. El segundo verifica repetidamente si el último dígito es 3 (restando 3 y modificando por 10) y luego dividiendo entre 10 para obtener un nuevo último dígito.
fuente
PHP,
60555446 bytesGracias a @ user59178 por eliminar algunos bytes, @AlexHowansky por un byte, @Titus por otros pocos bytes
Llamado desde la línea de comando con
-r
. Método ingenuo que se repite mientras el número es múltiplo de 3, o tiene 3 en sus dígitos.fuente
for($i=$argv[1];!(++$i%3)|strpos(" $i",'3'););echo$i;
puede ser posible hacerlo mejor asignando$i
mientras lo usa también.strpos(_.$i,'3')
%3<1
, uno con en51
lugar de'3'
, dos más con enstrstr($i)
lugar destrpos(_.$i)
y otros dos intercambiando los|
operandos en la segunda versión:<?for(;strstr($i=++$argv[1],51)|$i%3<1;);echo$i;
-> 48 bytesPHP,
4741 bytesinspirado en Xanderhall , pero la última idea finalmente justifica una respuesta propia.
o
Esto se aprovecha del hecho de que la entrada también proviene de la secuencia: para
$n%3==1
, el nuevo módulo es2
. Para$n%3==2
, el nuevo módulo es4-3=1
.$n%3==0
Nunca sucede.Ejecutar como tubería
-R
o probarlos en línea .fuente
APL (Dyalog Unicode) ,
33282719 bytes SBCSPruébalo en línea!
-6 gracias a Adám. -8 gracias a ngn.
Vieja explicación:
APL (Dyalog Extended) ,
2317 bytes SBCSPruébalo en línea!
Gracias a Adám. -6 gracias a ngn.
Vieja explicación:
fuente
Perl 6 ,
27 2524 bytesPruébalo en línea!
Encuentra el primer número más grande que la entrada que no tiene un tres y tiene un resto cuando está modulado por 3. Esperaba hacer algo elegante con la condición, como,
!/3/&*%3
pero no funciona con el!
.:(
Explicación:
fuente
C, 81 bytes
fuente
reticular, 30 bytes
Pruébalo en línea!
Explicación
1: inicialización
Esto convierte la
i
entrada a un númeron
, luego baja (v
)2: bucle
3: final
fuente
Lote, 93 bytes
Toma entrada en STDIN.
fuente
CJam, 19 bytes
EN LÍNEA
Explicación:
Si se pidiera una explicación menos detallada, habría hecho esto:
fuente
Pyth, 19 bytes
Banco de pruebas
Estoy seguro de que puedo jugar golf ... es lo mismo que mi respuesta de CJam.
Explicación:
fuente
J
. Puedes incrementarQ
. Y si lo está haciendo de manera inteligente, puede incorporar la operación a la condición while:W|!%=hQ3/
Q \ 3; Q`.W|!%=hQ3/`Q\3;Q
Clojure, 73 bytes
Se repite recíprocamente mientras
n
es divisible por 3, o contiene un 3 en su representación de cadena. Aunque estoy usando una recursión no optimizada, fue capaz de manejar 2999999 como entrada, por lo que debería estar bien.Sin golf
fuente