Si expresa algún número entero positivo en binario sin ceros a la izquierda y reemplaza cada 1con a (y cada 0con a ), ¿coincidirán todos los paréntesis?
En la mayoría de los casos no lo harán. Por ejemplo, 9 está 1001en binario, que se convierte ())(, donde solo coinciden los dos primeros paréntesis.
Pero a veces coinciden. Por ejemplo, 44 está 101100en 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á todo10igual 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
~--ces 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+clugar dec|0case 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, regresatruecuando debería regresarfalsen=>![...n.toString(d=2)].some(c=>(d+=c*2-1)<2)*d==2Python 2, 45 bytes
Una función recursiva. Lee dígitos binarios
ndesde el final, manteniendo un recuentoidel 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=1para que sea más fácil verificar si ha caído0. El único caso de éxito de terminal esn==0yi==1, verificado conn<i<2. Forzamos esta verificación para que ocurra sin==0, o siicae0, 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
10que 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 hacernreemplazos, ya que unknúmero de dígitos toma en la mayoría de losk/2pasos, 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
0para falso y1para 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
Wen 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,0de 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:1mantiene el recuento de paréntesis abierto).n&c>=0se 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
lcomo 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)^nen la respuesta de xnor .fuente
signumparece demasiado complicado, ¿qué tal solo_#0=1<0?l>0lugar del==1?l==1está 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.ies un contador que realiza un seguimiento del número de 0 y 1. Tenga en cuenta que se inicializa1para guardar un byte. El ciclo abortará antes denllegar 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 queidebe ser no positiva sin!=0la condición anterior es suficiente.fuente
iynno son negativos, entonces loi==n==0esi+n==0.ipuede ser negativo si el ciclo aborta prematuramente.i|n==0siempre debería funcionar.while i*ndeberí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/,""))&&!xIDK 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%2lugar de-eq1guardar 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 salida0yexit. Una vez que pasamos por el ciclo,$ces uno0o 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
0si los elementos parentales no coinciden porque tenemos más), pero generar resultadosFalsesi 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
truese representa como una palabra con un patrón de bits verdadero. En mi sistema, y probablemente en la mayoría de los otros sistemas,truees equivalente a1; Solo una parte es cierta. Además,n/=2es 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