Inspirado por ¿Es doble hablar? , Ideé un desafío más difícil. Dada una cadena, determine si la cadena es n-speak , para cualquier .
N-speak se define repitiendo cada letra veces. Con , la cadena Hello
se transforma en HHHHeeeelllllllloooo
. Su objetivo es averiguar si la entrada es una salida válida para cualquier transformación de n-speak.
Cabe señalar que cualquier oración que sea válida n-hablar, para , también es válida k-hablar. Por lo tanto, las partes difíciles de resolver serán valores impares de .
Entrada
Una cadena que consta de al menos 2 caracteres. La entrada también podría ser una lista de caracteres. La entrada es sensible a mayúsculas y minúsculas.
Salida
Truthy
si la cadena es n-speak, de lo falsey
contrario.
Ejemplos
Casos verdaderos
HHeelllloo,, wwoorrlldd!!
TTTrrriiipppllleee ssspppeeeaaakkk
QQQQuuuuaaaaddddrrrruuuupppplllleeee ssssppppeeeeaaaakkkk
7777777-------ssssssspppppppeeeeeeeaaaaaaakkkkkkk
999999999
aaaabb
aaaaaaaabbbbcc
aaaaabbbbb
@@@
Si desea generar casos de verdad adicionales, puede usar este script MathGolf . Coloque la cadena entre comillas y el valor de como entrada.
Casos falsos
Hello, world!
TTTrrriiipppllleee speak
aaaaaaaaaaaaaaaab
Ddoouubbllee ssppeeaakk
aabbab
aaaabbb
a (does not need to be handled)
(empty string, does not need to be handled)
Por supuesto, como se trata de código de golf, ¡prepárate para recortar algunos bytes!
aabbab
aaaabbb
Respuestas:
APL (Dyalog Unicode) , 12 bytes
Corre con
⎕io←0
Pruébalo en línea!
Golf junto con Adám .
En la entrada (ejemplo:
"aaccccaaaaaabb"
, utilizando""
para denotar una cadena (una serie de caracteres) y''
para denotar un char)∊0⍞0
rodear con 0s y aplanar,0 'a' 'a' 'c' 'c' 'c' 'c' 'a' 'a' 'a' 'a' 'a' 'a' 'b' 'b' 0
2≠/
realizar pares no iguales,1 0 1 0 0 0 1 0 0 0 0 0 1 0 1
⍸
obtener los índices indexados 0,0 2 6 12 14
∨/
calcular el MCD,2
1≠
¿No es esto igual a 1?fuente
Java 10, 85 bytes
Regex portado de la respuesta de JavaScript de @Arnauld .
Pruébalo en línea.
Explicación:
Explicación de expresiones regulares:
fuente
Jalea , 5 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 53 bytes
Derivado de la expresión regular utilizada por @wastl en ¿Es doble hablar? .
Pruébalo en línea!
Versión recursiva, 55 bytes.
Pruébalo en línea!
Comentado
fuente
05AB1E , 5 bytes
Pruébalo en línea!
fuente
Python 2 ,
73706967 bytesPruébalo en línea!
-4 bytes, gracias a Jitse
fuente
set(...)
con{...}
...1 in[...
Python 3 , 69 bytes
Pruébalo en línea!
fuente
QuadS , SBCS de 16 bytes
Pruébalo en línea!
1≠
es 1 diferente de∨/
el MCD⍵
del resultado de(.)\1*
PCRE Buscando cualquier personaje seguido de 0 o más repeticiones del mismo⊃⍵L
y devolver la primera de las duraciones del partido (es decir, la duración del partido)fuente
Stax , 5 bytes
Ejecutar y depurarlo
Procedimiento:
fuente
Consulta T-SQL 2008, 193 bytes
Pruébalo en línea
fuente
PHP ,
7675 bytesPruébalo en línea!
Primer intento, un enfoque iterativo algo ingenuo.
Sin golf:
-1 byte , gracias a @ Night2!
fuente
Perl 6 ,
302726 bytesPruébalo en línea!
También usa el truco de GCD, pero usa el índice de la posición final de cada ejecución que coincide con la expresión regular. Devuelve un número negativo (verdad) si n-habla, cero (falsey) de lo contrario.
fuente
Haskell , 48 bytes
Pruébalo en línea!
Sencillo; usa el truco de GCD.
fuente
Rojo , 80 bytes
Pruébalo en línea!
Rojo más idiomático :
Rojo , 81 bytes
Pruébalo en línea!
fuente
Brachylog , 5 bytes
Pruébalo en línea!
Toma entrada a través de la variable de entrada y sale a través de éxito o fracaso.
Al principio pensé que esto sería más corto que mi solución a ¿Es doble hablar? , pero luego me di cuenta de que
ġ
puede y probaré una longitud de grupo de 1.fuente
Japt
-¡
, 8 bytesIntentalo
fuente
Kotlin , 78 bytes
Pruébalo en línea!
Explicación
fuente
Scala , 80 bytes
Pruébalo en línea!
PD. La solución original se basó en la
split
función pero es más larga (83 bytes).fuente
true
para la entradaaab
, por desgracia.s.
reemplazado con(s+s).
para manejar eso.aaaabb
yaabbbb
.Wolfram Language (Mathematica) , 34 bytes
Pruébalo en línea!
fuente
Perl 5
-p
,83797674 bytesPruébalo en línea!
fuente
Brain-Flak , 96 bytes
Pruébalo en línea!
Utiliza el mismo truco de GCD que usan muchas otras presentaciones. La salida es 0 si la entrada no es n-speak, y un entero positivo de lo contrario.
fuente
Oracle SQL, 182 bytes
Funciona suponiendo que los datos de entrada se almacenan en una tabla t (x), por ejemplo
fuente
K (ngn / k) ,
2923 bytesPruébalo en línea!
editar: eliminé algunos dos puntos innecesarios (sé cuándo se requiere un monádico pero no siempre me queda claro si hay ambigüedad, por lo que por defecto
x-y*x%y
incluyo los dos puntos) y cambié el mod a ngn / ky!x
, lo que significa que podría eliminar una asignación variablefuente
APL (Dyalog Unicode) ,
2422 bytes SBCSFunción de prefijo tácito anónimo.
Pruébalo en línea!
⊂
encierra la cadena para tratar el mapa usando toda la cadena,por ejemplo
"aaabbb"
⍳∘≢{
...}¨
para cada uno de los⍳
ɩ ndices 1 a través del recuento de caracteres en la cadena:por ejemplo,
3
⍺↑⍺
tomar el número actual de elementos del número actual, rellenando con 0s,por ejemplo
[3,0,0]
(≢⍵)⍴
cíclicamente r eshape en la forma de la cuenta de caracteres en la cadenapor ejemplo,
[3,0,0,3,0,0]
⍵/⍨
usar eso para replicar los caracteres de la cadena"aaabbb"
1↓
soltar el primero ( n = 1)⊂∊
¿Es la cadena completa un miembro de esa lista?fuente
[1,0,0,1,0,0…]
etc. Estaré encantado de enseñarle APL (no toma mucho tiempo aprender). Solo dirígete al APL Orchard .{1<∨/≢¨⍵⊆⍨≢∘∪¨,\⍵}
para 18{1<∨/≢¨⍵⊆⍨≢¨∪\⍵}
?aacccaaaaabb
Retina 0.8.2 , 28 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Divide el texto en series de caracteres idénticos.
Reemplácelos todos con el mismo personaje.
Compruebe si el MCD de las longitudes de las ejecuciones es mayor que 1.
fuente
Japt
-mR
, 12 bytesIntentalo
fuente
MathGolf , 14 bytes
Pruébalo en línea!
Explicación
Comprueba todas las divisiones posibles de la cadena de entrada en fragmentos de igual longitud y comprueba si hay una partición en la que todos los fragmentos tienen un solo carácter único.
fuente
Pyth , 7 bytes
Outputs 0 for falsy inputs or a positive integer otherwise.
Try it online!
fuente
Pyth, 8 bytes
Try it online!
fuente
Perl 5
-n
, 38 bytesTry it online!
The
print"\n"
in the footer is needed to separate the outputs.Straightforward loop through all possible
n
s. Outputs nothing for "1-speak", anything else for n-speak where n > 1.fuente