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
a
es montañoso. - Si
S
es una cadena montañosa ya
es un personaje, entoncesaSa
es montañosa, donde la yuxtaposición representa la concatenación de cadenas. - Si
aSa
yaTa
son cadenas montañosas, entoncesaSaTa
es 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
aaa
sería bueno, donde el mismo personaje debe usarse en múltiples niveles.wasitacaroraratisaw
? Me parece montañosowasitacaroraratisaw
es realmente montañoso AFAICTaaa
hacen 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
+
parap
Imprime 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//0
que 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
c
seguido de un número (podría ser cero) de cadenas montañosas conc
tachuelas 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)*
dondeM
es 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 unoc
debe ser el mismo personaje,M
no 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
Mc
ocurre cero y una vez respectivamente.En el caso de que la cadena montañosa ha
Mc
producenn
tiempos donden > 1
entonces la cadena puede ser reescrito comocMcSc
dondeS
es los últimosn - 1
tiempos queMc
se produce excluyendo la últimac
(nota queM
es cualquier cadena montañosa y no necesariamente el mismo que el otroM
). ComoM
es una cadena montañosa, según la regla 2,cMc
debe ser una cadena montañosa. O bienS
es una cadena montañosa, en cuyo casocSc
es una cadena montañosa oS
puede reescribirse comocMcTc
dóndeT
es la últiman - 2
vez queMc
ocurre excluyendo la últimac
. Esta línea de razonamiento puede seguir aplicándose hasta que la cadena no garantizada sea montañosaMc
una vez que significaría que también tendría que ser montañoso. Por lo tanto, yacMc
es montañoso y sicMc
ycM'c
son montañosas entoncescMcM'c
debe ser montañosa toda la cadena debe ser montañoso.Por el contrario, para una cadena
cScTc
dondecSc
ycTc
son montañosas, entonces o biencSc
es 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, entoncesS
también debe ser una cadena montañosa. Si es una cadena montañosa según la regla 3, entoncescSc
debe tener la formacUcVc
donde estáncUc
ycVc
son cadenas montañosas. Dado que el más largo decUc
ycVc
debe ser al menos dos caracteres más corto quecSc
y 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 losc
s seleccionados por las aplicaciones de la regla 3 debe ser montañosa cuerda. La misma línea de razonamiento se puede aplicar acTc
así 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//0
regla DCG, definida en la primera línea, coincide con cualquier cadena montañosa. La+//1
regla 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 seX
clavan en los extremos de ellas. . O para decirlo con las expresiones regulares similar a la notación que he usado anteriormente,a//0
partidosc(Mc)*
, pero subcontrata el trabajo de realidad que coincide con el(Mc)*
de+//1
los que tomac
como 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 queX
se establezca igual al primer carácter. La+X
continuación que el resto de la cadena debe coincidir la regla DCG+//1
con el personaje queX
se establece en como su argumento.Esta línea define la
+//1
regla 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+//1
lo que siempre es capaz de coincidir con la cadena vacía. Si la cadena no está vacía, el inicio debe coincidira//0
y, por lo tanto, debe ser una cadena montañosa. Esto debe ser seguido por cualquier carácterX
establecido. 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
aba
cona
hasta 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, dondeaba
no parece ser un pico:Afortunadamente, siempre podemos transformarlo en uno:
fuente
true
casos 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