La inspiración del desafío fue esta que vi en alguna parte:
La palabra "monja" es solo la letra n haciendo una voltereta
Su desafío es tomar una cuerda y determinar si es la primera letra que hace una voltereta.
Reglas
Una cadena es una letra que hace una voltereta si:
- La primera letra es igual a la última letra. (La carta no puede aterrizar sobre su cabeza).
- La cadena alterna entre letras de carretas cada carácter.
Las letras del carro son n
y u
, m
y w
, b
y q
. Tenga en cuenta que n
y w
juntos no son letras que giran en el carro, y tampoco lo son w
y b
.
- Tomarás una cadena usando cualquiera de nuestros métodos de entrada estándar.
- Producirá un valor verdadero si la cadena es una letra de volteo y un valor falso si no lo es. La salida se puede hacer usando cualquier método de salida estándar.
Reglas adicionales:
- Solo se deben manejar las letras minúsculas de la carretilla
n
/u
/m
/w
/b
/q
. - Puede suponer que la entrada nunca está vacía.
- Una cadena de un carácter no es una voltereta válida.
Casos de prueba
Input -> Output
nun -> truthy
nunun -> truthy
nunununu -> falsy
wmw -> truthy
wmwun -> falsy
bqbqbqbqbqb -> truthy
v^v^v -> falsy
AVAVA -> falsy
OOO -> falsy
ununununu -> truthy
nunwmwnun -> falsy
nun unun -> falsy
nunwmw -> falsy
nnuunnuunnuu -> falsy
nwnwnwnwn -> falsy
m -> falsy
nunuuunun -> falsy
Ganador
Al igual que con el código de golf , ¡el código más corto (en cada idioma) gana!
b
vueltaq
, ¿no?d
yp
también son compañeros de volteretas. La clave es que giran, no giran.uwuwuwuwuwu
bqb
pero nopdp
?dpd
,pdp
y eso no funciona, creo que debería tenerlos en los casos de prueba con una respuesta falsa.Respuestas:
Jalea , 23 bytes
¡Esto tomó más trabajo de lo que uno podría pensar!
Un enlace monádico que toma una lista de personajes y regresa
1
(verdad) o0
(falsey).Pruébalo en línea! o ver un conjunto de pruebas .
¿Cómo?
Encuentra el índice de cada carácter de la entrada en la lista de caracteres indexados en 1
nmbuwq
. Esta cadena está dispuesta de tal manera que los índices de pares están separados por tres, por lo que la diferencia incremental de los índices para volteretas válidas serán repeticiones de uno de[-3,3]
o[3,-3]
.Cuando un elemento no se encuentra en una lista por el átomo del "índice de"
i
, devuelve0
, lo que emparejaría caracteres no encontradosb
, haciendo que la entrada seabxbxb
verdadera. Por lo tanto, los0
s se reemplazan por10
un valor a más de tres de cualquier otro valor antes de verificar la validez.fuente
sed 4.2.2 , 30 + 1
-r
=4331 bytesAhorró 12 bytes gracias a @Neil al acortar la primera línea
Pruébalo en línea!
Elimina la entrada si falsey, de lo contrario no hace nada a la entrada.
Explicación
Con la
-r
bandera, no necesitamos usar\(
y\)
para capturar grupos y esto ahorra bytes.fuente
sed
asistente ...sed
parece magia. : Punu
ynun
contener,nu
y la segunda línea garantiza que el resto de las letras coincidan con esos dos.JavaScript (ES6),
827877 bytesSe guardó 1 byte utilizando dos valores falsos, como lo sugieren ThePirateBay y MD XF.
Casos de prueba
Mostrar fragmento de código
fuente
&&
lugar de&
?&
produciría cualquierafalse
o0
.)&
; En algún momento especifiqué (en el chat) que se permiten valores falsos inconsistentes.Python 3 , 111 bytes
-2 bytes gracias al Sr. Xcoder.
Pruébalo en línea!
fuente
nunununu
.Python 2 , 63 bytes
Pruébalo en línea!
fuente
"nu un nm mn bp pb".split()
para guardar 4 bytes, y puede eliminar algunos espacios en blanco. 75 bytes:lambda s:any(s==c[-1]+c*max(len(s)/2,1)for c in"nu un nm mn bp pb".split())
s[0]
lugar dec[-1]
.unmnu
yunmwnu
. Realmente devuelve falsos positivos cuando(s==s[::-1])+len(set(s))
es 4, lo cual es fácil de forzar. Incluso solo 4 caracteres diferentes hacen que regrese True.Python 3 , 71 bytes
Pruébalo en línea!
-1 gracias a @HyperNeutrino y -13 gracias a @ovs
Si se encuentra que lo anterior falla para cualquier caso de prueba, hay una alternativa:
Pruébalo en línea!
Explicación
''.join(sorted(list({*n[1::2]}).union({*n[::2]}))))
- Obtiene los caracteres en índices impares y los caracteres en índices pares, los duplica y ordena la lista formada por su unión.in'nu,mw,bq'
- Comprueba si son combinaciones válidas de carrito-carta.n[0]==n[-1]
- Comprueba si el primer carácter es el mismo que el último.fuente
uwuwuwuwuwu
resultados en verdadnuuun -> True
. Esto no está bien.JavaScript (ES6), 40 bytes
Comprueba si la cadena de entrada concatenada con el segundo carácter de la cadena de entrada es una cadena repetitiva del mismo par de caracteres de volteretas.
Pruebas:
fuente
Clojure, 156 bytes
¡Esto fue engañosamente difícil! Terminé teniendo que dividirlo en 3 subproblemas:
Ciertamente no gané, ¡pero este fue un buen ejercicio de la mañana! Explicación completa a continuación:
fuente
Haskell,
8078 bytesPruébalo en línea!
Cómo funciona:
fuente
Python 2 , 45 bytes
Pruébalo en línea!
Los espacios en la cadena son
DEL
caracteres.fuente
|u|
se interpreta como una voltereta.DEL
caracteres para que quede claro.s[:3]in'bqbqnunuwmwm'
Retina , 24 bytes
Salidas 1 para verdad, 0 para falsedad.
La respuesta del curandero del puerto de vacas.
Pruébalo en línea!
fuente
nunwmwnun
(cuando debería ser falsa), por lo que tenía la\1*
respuesta en mi sed.G`nu|mw|bp
porque todas las cadenas verdaderas contienen uno de esos pares de letras y la segunda línea asegurará que todo el resto de la cadena contenga esas letras también ..ununununu
Grime , 28 bytes
Pruébalo en línea! Imprime
1
para entradas verdaderas y0
falsas.Explicación
La sintaxis de Grime se asemeja a las expresiones regulares, y un programa de Grime especifica un patrón que puede coincidir o no con un rectángulo de caracteres.
Algunas características de Grime que ayudaron a acortar esto:
""
esto cambia: los elementos de sintaxis se escapan pero los literales no. Sin las comillas, la parte que enumera los pares de caracteres sería(\n\u|\b\p|\m\w)oT
.-
) actúan sobre su resultado:..-#!"…"oT
es equivalente a(..-"…"oT)#!
.v
s reducen la precedencia de los elementos de sintaxis que los siguen. Un solitario&
tiene mayor prioridad que-
, perov&
tiene menor. Del mismo modo,..+
se analiza como.(.+)
, pero..v+
es equivalente a(..)+
.fuente
Python 2 , 69 bytes
Pruébalo en línea!
fuente
Pyth , 27 bytes
Banco de pruebas.
Salidas
1
para Truthy yFalse
o0
para Falsy, como el PO permitido en el chat.fuente
Jalea , 27 bytes
Pruébalo en línea!
Cómo funciona
fuente
Python 2 , 103 bytes
Pruébalo en línea!
fuente
Japt , 47 bytes
Pruébalo en línea!
fuente
Python 3 , 88 bytes
len(x)%2
: una cadena de longitud par no puede terminar en el primer carácterx[:2] in
: verifique cualquiera de los 6 pares iniciales válidoslen(set())
: obtenga la longitud de los conjuntos de caracteres en 0,2,4 ... y 1,3,5 ...Devuelve
True
si la lista de evaluaciones es igual a [1,1,1,1], de lo contrarioFalse
.Pruébalo en línea!
fuente
Perl 5 , 55 + 1 (-p) = 56 bytes
Pruébalo en línea!
Imprime la versión "al revés" del primer personaje para verdadero, nada para falso.
fuente
PHP, 59 + 1 bytes
Ejecutar como tubería con
-F
.solución parcialmente regex, 101 + 1 bytes:
Salida vacía para falsedad. Ejecutar como tubería con
-nR
.fuente
Java 8, 57 bytes
Pruébalo aquí
Regex simple para combinar los seis casos. Tenga en cuenta que Java
String#matches
coincide automáticamente con toda la cadena, por lo que no es necesario^...$
.fuente
MATL , 25 bytes
La salida es un vector de columna numérica no vacío, que es verdadero si todas sus entradas son distintas de cero, y falso de lo contrario. Pruébalo en línea!
Para verificar todos los casos de prueba ,
if
se agrega una rama en el pie de página que reemplaza cualquier valor verdadero por la cadena'truthy'
, o cualquier valor falso por la cadena'falsy'
, y luego muestra la cadena.Explicación
fuente
Python 2 , 74 bytes
Pruébalo en línea! Esta toma del problema es sorprendentemente competitiva.
fuente
Clojure, 115 bytes
Construya una expresión regular de cada par de letras y vea si la entrada coincide con una. Muchas formas más elegantes de hacer todas estas partes, pero todas son más detalladas. Así es la vida con el golf Clojure.
fuente
Perl 5, 68 + 1 = 69 bytes
Corre con
-n
.Explicación:
fuente
TXR Lisp , 50 bytes
Correr:
f^$
es un combinador que toma un objeto regex y devuelve una función que coincide con esa expresión regular de forma anclada. (Por sí mismo, un objeto regex es un objeto invocable por funciones que toma una cadena y la busca a través de ella).fuente
Python 3 , 66 bytes
Pruébalo en línea!
fuente
TXR :
7874 bytesEjecutar, desde el indicador del sistema. El número en la solicitud es el estado de terminación: 0 = éxito, 1 = falla:
Explicación:
@{x 2}
: coincide con dos caracteres, se une a lax
variable.@(rep :gap 0)@x@(end)
: coincidencia repetida sin espacios omitidos: cero o más ocurrencias delx
dígrafo previamente coincidente.@y
: resto de línea coincidente, capturado eny
.@(bind(x y)(foo bar))
: enlazarx
afoo
, y abar
. Comox
yay
están obligados, tienen que coincidirfoo
ybar
, de lo contrario, hay un fallo.foo
es#"nu un mw wm bq qb"
, una lista de palabras literal, azúcar sintáctica para la lista Lisp("nu" "un" ... "qb")
. Unabind
coincidencia entre una variable y una lista significa que la variable debe coincidir con un elemento.bar
es@[x 0..1]
: la subcadena de un carácter dex
desde el principio. Labind
coincidencia entrey
y esto obliga a que la última letra de la línea coincida con la primera.fuente
C ++, 268 bytes
fuente
n
= 110,u
= 117,m
= 109,w
= 119,q
= 113. Por lo tanto, usar valores ASCII o no no importa para ningún carácter superior ac
(99)JavaScript (ES6), 63 bytes
Devoluciones
1
o0
.Explicación
Todas las cadenas de volteretas tendrán uno o más de bq , wm o un . Probamos eso con:
Si reemplaza todas las instancias de las dos primeras letras de una cadena de volteretas con nada, le queda la primera letra de la cadena. Probamos eso con:
Mostrar fragmento de código
fuente