Si expresa algún número entero positivo en binario sin ceros a la izquierda y reemplaza cada 1
con a (
y cada 0
con a )
, ¿coincidirán todos los paréntesis?
En la mayoría de los casos no lo harán. Por ejemplo, 9 está 1001
en binario, que se convierte ())(
, donde solo coinciden los dos primeros paréntesis.
Pero a veces coinciden. Por ejemplo, 44 está 101100
en binario, que se convierte ()(())
, donde todos los paréntesis izquierdos tienen un paréntesis derecho coincidente.
Escriba un programa o función que tome un entero positivo de base diez e imprima o devuelva un valor verdadero si la versión del número entre paréntesis binarios tiene todos los paréntesis coincidentes. Si no es así, imprima o devuelva un valor falso .
El código más corto en bytes gana.
Verdaderos ejemplos debajo de 100:
2, 10, 12, 42, 44, 50, 52, 56
Ejemplos de falsa por debajo de 100:
1, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 45, 46, 47, 48, 49, 51, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
Respuestas:
TeaScript , 9 bytes
16 18 20 22 24Guardado 2 bytes gracias a @ETHproductions
Woah Eso es corto Utiliza el enfoque de @ xnor. Esto usará la función de reemplazo recursivo (
W
) que reemplazará todo10
igual a()
nada. Si la cadena está en blanco, está equilibrada.Usando una versión de TeaScript hecha después de que se publicó este desafío, esto podría convertirse en 7 bytes:
Sin golf
Explicación
fuente
~--c
es falso en exactamente el mismo escenario quec--
.Pyth, 10 bytes
Pruebe este conjunto de pruebas en el compilador Pyth.
Cómo funciona
fuente
!u:G`Tk.BQ
. Posiblemente más fácil de entender.Python2, 87 bytes
Una implementación terrible que abusa de los errores de sintaxis.
fuente
JavaScript (ES6),
555451 bytesBytes guardados gracias a @ Vɪʜᴀɴ y @xsot !
Explicación
fuente
f=
. También puede usar use en+c
lugar dec|0
case para un número entero. También puedes usar el(+c?d++:d--)
que es aún más cortof=
? Debido a que muchas otras respuestas de JavaScript en el sitio nombran sus funciones.11
, regresatrue
cuando debería regresarfalse
n=>![...n.toString(d=2)].some(c=>(d+=c*2-1)<2)*d==2
Python 2, 45 bytes
Una función recursiva. Lee dígitos binarios
n
desde el final, manteniendo un recuentoi
del nivel de anidamiento actual de los padres. Si cae por debajo0
, rechazar. Cuando llegamos al inicio, verifica si el conteo es0
.En realidad, comenzamos el conteo en
i=1
para que sea más fácil verificar si ha caído0
. El único caso de éxito de terminal esn==0
yi==1
, verificado conn<i<2
. Forzamos esta verificación para que ocurra sin==0
, o sii
cae0
, en cuyo caso falla automáticamente.feersum ahorró dos bytes al reestructurar los casos no recursivos con desigualdades en cortocircuito.
fuente
f=lambda n,i=1:n>0<i*f(n/2,i+(-1)**n) or n<i<2
, al menos, ahorra 1.CJam, 11 bytes
Esto es un poco impuro: para los números que se pueden comparar con los padres, imprimirá uno o más bloques. Para los números que no se pueden sincronizar entre padres, se bloqueará sin imprimir nada en STDOUT. Si prueba esto en línea en el intérprete de CJam , tenga en cuenta que no distingue entre STDOUT y STDERR.
Dado que las cadenas no vacías / vacías son verdaderas / falsas en CJam y la salida impresa siempre es una cadena, podría decirse que cumple con las reglas. Con el costo adicional de 3 bytes más, para un total de 14 bytes , podemos dejar una cadena verdadera o falsa en la pila que se imprimirá:
Esto todavía se bloquea para los números que no se pueden modificar entre padres, lo cual está permitido de manera predeterminada .
Pruebas de funcionamiento
Cómo funciona
CJam, 15 bytes
Pruebe este violín en el intérprete de CJam o verifique todos los casos de prueba a la vez .
Cómo funciona
fuente
Python, 51 bytes
Una función anónima. Evalúa una expresión que se parece a
Cada reemplazo elimina todo lo
10
que corresponde()
. Después de que se hayan realizado todos los reemplazos, la función devuelve si lo que queda es solo el prefijo binario0b
. Es más que suficiente hacern
reemplazos, ya que unk
número de dígitos toma en la mayoría de losk/2
pasos, y su valor es más2**k
.fuente
Rubí, 40
Manipulación simple de cuerdas. Cae '10' hasta que no quede ninguno.
fuente
En serio , 17 bytes
Salidas
0
para falso y1
para verdadero. Pruébalo en línea .Explicación:
fuente
Japt, 23 bytes
Japt es una versión abreviada de Ja vaScri pt . Interprete
Esto me recuerda cuán lejos aún tiene que ir Japt en comparación con TeaScript. Después de renovar el intérprete en los próximos días, me gustaría agregar caracteres de "atajo" como los de Vɪʜᴀɴ.
Cómo funciona
Poco después de este desafío, @ Vɪʜᴀɴ (ahora conocido como @Downgoat) me ayudó a implementar una función de reemplazo recursivo, como
W
en la respuesta de TeaScript. Esto significa que este desafío ahora se puede hacer en solo 5 bytes:¡Pruébalo en línea!
fuente
Mathematica, 49 bytes
fuente
1,0
de la lista y pruebe si el resultado es una lista vacía.Octava, 48 bytes
fuente
C ++,
10494 bytesEjecutar con este compilador , debe especificar la entrada estándar antes de ejecutar.
Explicación
n>>=1
.c+=n&1?-1:1
mantiene el recuento de paréntesis abierto)
.n&c>=0
se detiene cuando solo quedan 0 iniciales o los paréntesis se cierran más de lo que se abren.fuente
Haskell,
4946 bytesEjemplo de uso:
f 13
->False
.Estoy siguiendo el nivel de anidación
l
como muchas otras respuestas. Sin embargo, el caso "equilibrado" está representado por1
, así que el caso "más- que)
-(
" lo es0
.PD: encontré el ajuste del nivel de anidación
l+(-1)^n
en la respuesta de xnor .fuente
signum
parece demasiado complicado, ¿qué tal solo_#0=1<0
?l>0
lugar del==1
?l==1
está equilibrado. Sil>1
, los paréntesis no están equilibrados.Python 2,
6057565553525049 bytes¡Gracias a xnor por guardar dos bytes y feersum por llevar el conteo final de bytes a 49!
Explicación
El número de entrada
n
, se procesa desde su bit menos significativo.i
es un contador que realiza un seguimiento del número de 0 y 1. Tenga en cuenta que se inicializa1
para guardar un byte. El ciclo abortará antes den
llegar a 0 si el número de 1 excede el número de 0 (i<=0
).Para que los paréntesis sean equilibrados, se requieren dos condiciones:
i==1
)n==0
). Editar: me di cuenta de que esta condición no es necesaria, ya quei
debe ser no positiva sin!=0
la condición anterior es suficiente.fuente
i
yn
no son negativos, entonces loi==n==0
esi+n==0
.i
puede ser negativo si el ciclo aborta prematuramente.i|n==0
siempre debería funcionar.while i*n
debería funcionarJavaScript ES5,
11887858277 bytesTécnica interesante en mi opinión. Menos muchísimo, gracias a @ETHproductions y @NotthatCharles
JavaScript ES6,
77575654 bytes-21 bytes a ETHproductions.
fuente
function p(x){x=x.toString(2);r=/10/;while(x.search(r)>=0){x=x.replace(r,"")}return!x}
x=>([...x=x.toString(2)].map(_=>x=x.replace(/10/,"")),!x)
el truco es mover el ciclo while a un.map
, ya que nunca hay más '10 en una entrada que su longitud.map
.x=>[...x=x.toString(2)].map(_=>x=x.replace(/10/,""))&&!x
IDK si puede acortarse .D,
209170 bytesEsto hace exactamente lo que se supone que debe hacer sin adiciones o beneficios.
fuente
C, 67 bytes
Más o menos un puerto de mi presentación de Python.
fuente
Prólogo, 147 bytes
Cómo funciona
Convierte el número decimal N en su representación binaria como una lista (invertida). Sentido:
Luego:
Recurre sobre la lista [H | T] aumentando N si el elemento principal es 0, de lo contrario disminuyéndolo.
Si N en cualquier punto se vuelve negativo o si N al final no es 0, devuelve falso, de lo contrario es verdadero.
El corte en
Existe para evitar el retroceso y encontrar soluciones no binarias para las
pruebas b (N, [N])
Pruébelo en línea aquí
Ejecútelo con una consulta como:
fuente
PowerShell, 106 bytes
No voy a ganar ninguna competencia de corta duración, eso es seguro. Pero oye, ¿al menos está superando a Java?
Utiliza la llamada .NET muy larga
[convert]::ToString($a,2)
para convertir nuestro número de entrada en una cadena que representa los dígitos binarios. Luego for-loop a través de esa cadena con1..$b.length|%{..}
. Cada ciclo, si nuestro dígito es un1
(evaluado en%2
lugar de-eq1
guardar un par de bytes), incrementamos nuestro contador; de lo contrario, lo decrementamos. Si alguna vez llegamos negativo, lo que significa que había más)
de lo(
encontrado hasta ahora, por lo que la salida0
yexit
. Una vez que pasamos por el ciclo,$c
es uno0
o algún número>0
, por lo que tomamos el no lógico!
del mismo, que obtiene salida.Esto tiene la peculiaridad de generar resultados
0
si los elementos parentales no coinciden porque tenemos más)
, pero generar resultadosFalse
si los elementos parentales no coinciden porque tenemos más(
. Esencialmente declaraciones falsas funcionalmente equivalentes, simplemente interesantes. Si todos los parens coinciden, salidasTrue
.fuente
GNU Sed (con extensión eval), 27
Sed realmente no tiene una idea definida de verdad y falsey, por lo que aquí estoy afirmando que la cadena vacía significa verdad y todas las demás cadenas significan falsey.
Si esto no es aceptable, entonces podemos hacer lo siguiente:
GNU Sed (con extensión eval), 44
Esto genera 1 para verdad y 0 en caso contrario.
fuente
ES (ESMin), 21 caracteres / 43 bytes
Try it here (Firefox only).
Tenga en cuenta que esto utiliza variables predefinidas a números (específicamente 2 y 0). Hay variables numéricas predefinidas de 0 a 256.
19 caracteres / 40 bytes, no competitivos
Try it here (Firefox only).
Decidí implementar la salida implícita ... Sin embargo, los formularios de salida anteriores todavía son compatibles, por lo que obtienes varias opciones de salida.
fuente
Java,
129131 bytesProbablemente se puede acortar. Explicación por venir. ¡Gracias a Geobits por 4 bytes de descuento!
fuente
int k=0;
conint j=0;
?int k=0,j=0;for(...
luego podría poner lachar[]
declaración dentro del inicializador de bucle para guardar también un punto y coma.C ++, 61 bytes
Creo que la respuesta actual de C ++ es incorrecta: devuelve un valor verdadero para todos los números pares, p. Ej. 4. Descargo de responsabilidad: no pude usar el compilador mencionado, así que usé g ++ 4.8.4. El problema radica en el uso del operador AND binario en lugar del AND lógico que se usa para romper temprano cuando el número de paréntesis de cierre excede el número de paréntesis de apertura. Este enfoque podría funcionar si
true
se representa como una palabra con un patrón de bits verdadero. En mi sistema, y probablemente en la mayoría de los otros sistemas,true
es equivalente a1
; Solo una parte es cierta. Además,n/=2
es más corto quen>>=1
. Aquí hay una versión mejorada como una función:fuente
𝔼𝕊𝕄𝕚𝕟 (muy poco competitivo), 6 caracteres / 8 bytes
Try it here (Firefox only).
He decidido volver a visitar este desafío después de mucho, mucho tiempo. 𝔼𝕊𝕄𝕚𝕟 ha mejorado mucho.
La razón por la que esta es una respuesta separada es porque las 2 versiones son casi completamente diferentes.
Explicación
Convierte la entrada a binario, reemplaza recursivamente instancias de 10, luego verifica si el resultado es una cadena vacía.
fuente
C # 98 bytes
Abierto para cualquier sugerencia. me gusta este desafío, aunque sea antiguo
fuente