Reto
Para este desafío, una cadena montañosa es una que se ajusta a la regla gramatical M: x(Mx)*donde en cada producción, todas las x son el mismo carácter. Cuando se sangra, una cadena montañosa podría verse así:
A
 B
  C
   D
  C
   E
    F
   E
  C
 B
A
Como puede ver, se parece un poco a una montaña desde el costado.
Definicion formal
- Cualquier personaje individual aes montañoso.
- Si Ses una cadena montañosa yaes un personaje, entoncesaSaes montañosa, donde la yuxtaposición representa la concatenación de cadenas.
- Si aSayaTason cadenas montañosas, entoncesaSaTaes una cadena montañosa. Tenga en cuenta que esta regla implica que este patrón se cumple para cualquier número de repeticiones. (es deciraSaTaUa,aSaTaUaVa,aSaTaUaVaWa... son todos montañosa.)
Ejemplos
Todos los palíndromos de longitud impar son montañosos, por ejemplo:
t
 a
  c
   o
  c
 a
t
qwertytrasdfdgdsarewqjklkjq Es un ejemplo menos trivial:
q
 w
  e
   r
    t
     y
    t
   r
    a
     s
      d
       f
      d
       g
      d
     s
    a
   r
  e
 w
q
 j
  k
   l
  k
 j
q
Salidas de ejemplo
a                           ==> true
aaa                         ==> true
mom                         ==> true
tacocat                     ==> true
qwertytrasdfdgdsarewqjklkjq ==> true
wasitacaroraratisaw         ==> true
abcbcbcbcba                 ==> true
aaaaabcbbba                 ==> true
<empty string>              ==> false
aa                          ==> false
pie                         ==> false
toohottohoot                ==> false
asdfdghgfdsa                ==> false
myhovercraftisfullofeels    ==> false
Reglas
- Este es un problema de decisión, por lo que cualquier representación de verdadero o falso es una salida válida siempre que sea correcta, consistente, inequívoca y el programa finalice en un período de tiempo finito. Asegúrese de indicar su convención de salida con su solución.
- Debería ser trivial determinar si la salida indica verdadero o falso sin tener que saber cuál es la cadena de entrada. Tenga en cuenta que esto no significa que los resultados verdaderos o falsos tienen que ser constantes, sin embargo, la convención de "imprimir una cadena montañosa si la cadena es montañosa y una cadena no montañosa si no es montañosa" es una laguna prohibida por razones obvias.
- Por otro lado, una convención como "arroja una excepción para falso y sale silenciosamente para verdadero" estaría bien, así como "imprime un solo carácter para verdadero y cualquier otra cosa para falso"
 
- Este es el código de golf, por lo que gana el programa más corto.
- Las lagunas estándar están prohibidas.
                    
                        code-golf
                                string
                                decision-problem
                                
                    
                    
                        Carne de res
fuente
                
                fuente

aaasería bueno, donde el mismo personaje debe usarse en múltiples niveles.wasitacaroraratisaw? Me parece montañosowasitacaroraratisawes realmente montañoso AFAICTaaahacen que eso no funcione.Respuestas:
Japt v2 ,
1413 bytes¡Pruébelo en línea!
fuente
Limpio ,
94898780 bytesPruébalo en línea!
fuente
Perl, 22 bytes
Incluye
+parapImprime 1 para verdadero, nada para falso
fuente
Brain-Flak , 78 bytes
Pruébalo en línea!
Imprime 1 para verdadero, nada para falso.
Para verificar una palabra montañosa, es suficiente suponer que la palabra "baja" la montaña siempre que sea posible.
fuente
Python 2 ,
8983 bytesPruébalo en línea!
Gracias a ovs por 6 bytes.
fuente
Prólogo (SWI) , 29 bytes
Pruébalo en línea!
Este programa define una regla DCG
a//0que coincide con cualquier cadena (lista de caracteres) que sea una cadena montañosa.Explicación
Para este programa, utilizo una definición ligeramente diferente pero equivalente de cadenas montañosas que la que se describe en el desafío: una cadena montañosa es un carácter
cseguido de un número (podría ser cero) de cadenas montañosas conctachuelas en sus extremos. En una notación más breve derivada de expresiones regulares, una cadena montañosa debe coincidir con el patrónc(Mc)*dondeMes una cadena montañosa y*significa que la expresión entre paréntesis se repite cero o más veces. Tenga en cuenta que si bien cada unocdebe ser el mismo personaje,Mno es necesario que sea la misma cadena montañosa.Prueba de equivalencia
Está claro que las reglas 1 y 2 del desafío son equivalentes a mi regla donde
Mcocurre cero y una vez respectivamente.En el caso de que la cadena montañosa ha
Mcproducenntiempos donden > 1entonces la cadena puede ser reescrito comocMcScdondeSes los últimosn - 1tiempos queMcse produce excluyendo la últimac(nota queMes cualquier cadena montañosa y no necesariamente el mismo que el otroM). ComoMes una cadena montañosa, según la regla 2,cMcdebe ser una cadena montañosa. O bienSes una cadena montañosa, en cuyo casocSces una cadena montañosa oSpuede reescribirse comocMcTcdóndeTes la últiman - 2vez queMcocurre excluyendo la últimac. Esta línea de razonamiento puede seguir aplicándose hasta que la cadena no garantizada sea montañosaMcuna vez que significaría que también tendría que ser montañoso. Por lo tanto, yacMces montañoso y sicMcycM'cson montañosas entoncescMcM'cdebe ser montañosa toda la cadena debe ser montañoso.Por el contrario, para una cadena
cScTcdondecScycTcson montañosas, entonces o biencSces una cadena montañosa según la regla 2 o por la regla 3. Si es una cadena montañosa según la regla 2, entoncesStambién debe ser una cadena montañosa. Si es una cadena montañosa según la regla 3, entoncescScdebe tener la formacUcVcdonde estáncUcycVcson cadenas montañosas. Dado que el más largo decUcycVcdebe ser al menos dos caracteres más corto quecScy la regla 3 requiere que se apliquen al menos 5 caracteres, luego de un número finito de aplicaciones de la regla 3, cada cadena entre loscs seleccionados por las aplicaciones de la regla 3 debe ser montañosa cuerda. La misma línea de razonamiento se puede aplicar acTcasí la cadena es montañosa por mi definición.Como cualquier cadena que coincida con mi definición es montañosa y mi definición coincide con todas las cadenas montañosas, es equivalente a la que aparece en la pregunta.
Explicación del Código
En general, la
a//0regla DCG, definida en la primera línea, coincide con cualquier cadena montañosa. La+//1regla DCG (como los predicados, las reglas DCG pueden dar nombres de operadores ), definida en la línea dos, coincide con cualquier cadena que esté compuesta de una secuencia de cero o más cadenas montañosas con el carácter pasado a medida que sus argumentos seXclavan en los extremos de ellas. . O para decirlo con las expresiones regulares similar a la notación que he usado anteriormente,a//0partidosc(Mc)*, pero subcontrata el trabajo de realidad que coincide con el(Mc)*de+//1los que tomaccomo argumentoX.Línea por línea, los códigos se comportan de la siguiente manera:
Esta línea define la regla DCG
a. Los[X]estados que el primer carácter debe ser igual a la variable actualmente indefinidoX. Esto da como resultado queXse establezca igual al primer carácter. La+Xcontinuación que el resto de la cadena debe coincidir la regla DCG+//1con el personaje queXse establece en como su argumento.Esta línea define la
+//1regla DCG. El;representa un o en Prolog, lo que significa que la cadena puede coincidir con[]oa,[X],+X. El[]representa la cadena vacía, por+//1lo que siempre es capaz de coincidir con la cadena vacía. Si la cadena no está vacía, el inicio debe coincidira//0y, por lo tanto, debe ser una cadena montañosa. Esto debe ser seguido por cualquier carácterXestablecido. Finalmente, el resto de la cadena debe coincidir+X.fuente
Casco , 15 bytes
Pruébalo en línea! La inferencia de tipo tarda unos 40 segundos, así que sea paciente.
Explicación
La idea es reemplazar repetidamente una subcadena de la forma
abaconahasta que esto ya no es posible. La entrada es montañosa si y solo si esto da como resultado una cadena de un solo carácter (que es lo queεprueba). La única situación peligrosa es cuando tenemos una cadena como esta, dondeabano parece ser un pico:Afortunadamente, siempre podemos transformarlo en uno:
fuente
truecasos y, de lo contrario, no sería "coherente".Retina 0.8.2 , 15 bytes
Pruébalo en línea! Puerto trivial de la respuesta Japt de @ETHproductions.
fuente
JavaScript (Node.js) , 53 bytes
Supongo que este es casi el método más sencillo para hacerlo.
Pruébalo en línea!
JavaScript (Node.js) , 72 bytes
Menos trivial, pero mucho más largo.
Pruébalo en línea!
fuente