En un desafío anterior, le pedí a los golfistas de código que produjeran cadenas que copiaran cada carácter en una cadena. Por ejemplo:
TThhiiss iiss ddoouubbllee ssppeeaakk!!
Este desafío es simplemente detectar si algún texto cumple con la definición de una cadena de doble voz.
- Hay un número par de caracteres.
- Cuando se divide en pares, cada par consta de dos del mismo personaje.
El reto
- Es código de golf, hazlo en pocos bytes.
- Utiliza el idioma que elijas.
- Incluya un enlace a un intérprete en línea.
- El código aceptará algún texto.
- Para simplificar, la entrada solo consistirá en caracteres ASCII imprimibles
- Devolverá una indicación de si la entrada es de doble voz. Podría ser:
- Un booleano
- Cadenas ('verdadero', 'falso', 'sí', 'no', etc.)
- Enteros 0 o 1
Casos de prueba:
- aba - falso
- abba - falso
- aabb - cierto
- aaabb - falso
- tthhiiss - cierto
- ttthhhiiisss - falso
code-golf
string
decision-problem
AJFaraday
fuente
fuente
abba
que debería ser falseyaabbbb
que debería ser sincero0
que debería ser falsey.Respuestas:
Python 3 , 24 bytes
Pruébalo en línea!
fuente
brainfuck , 20 bytes
Guardado 1 byte gracias a Jo King.
Pruébalo en línea!
Salida legible!
Toma la entrada de dos caracteres a la vez y se aleja del 1 en la cinta si algún par no coincide. EOF se trata como 0 y, por lo tanto, se maneja automáticamente.
La salida es un byte nulo si la cadena no es de doble habla, y 0x01 si lo es. La versión legible los genera como caracteres a un costo de 14 bytes.
fuente
MATL , 4 bytes
La entrada es una cadena, encerrada con qoutes individuales. La salida es
0
para doble hablar, de lo1
contrario.Pruébalo en línea!
Explicación
Considere la entrada
'TThhiiss iiss ddoouubbllee ssppeeaakk!!'
como un ejemplo.fuente
05AB1E ,
652 bytesEntrada como una lista de caracteres.
-3 bytes portando la respuesta de @ Shaggy's Japt , ¡así que asegúrate de votarlo!
Pruébelo en línea o verifique algunos casos de prueba más .
Explicación:
fuente
Japt , 4 bytes
Intentalo
Alternativa
Intentalo
fuente
Retina , 9 bytes
Pruébalo en línea.
Explicación:
Elimina todos los pares de los mismos personajes:
Comprueba si no quedan caracteres:
fuente
^$
como su etapa final.false
salir como verdadero ytrue
falso (pero si guarda un byte y está permitido, aún lo usaré). ;) Pero como se trata de una solución de bytes iguales que genera los resultados esperados, es mejor.Jalea , 3 bytes
Pruébalo en línea!
fuente
¹©s2L€=2Ạa®s2E€Ạ
...ḢƝs2E€Ạ
... pero no pude conseguir lo que quería, y luego viŒœ
lolStax , 5 bytes
Ejecutar y depurarlo
Procedimiento:
fuente
PHP ,
5856 bytesPruébalo en línea!
Como una función recursiva.
PHP ,
615652 bytesPruébalo en línea!
O programa independiente. Cadena de entrada vía
STDIN
, la salida estruthy
(1
) si es de doble habla yfalsey
(0
) si no es de doble habla.-4 bytes gracias a @ Night2 !
fuente
código de máquina x86,
9 97 bytesCadena de
SI
entrada, longitud de cadena de entradaCX
. SalidaZF
si es doble hablar.O 14 bytes como un ejecutable completo de PC DOS:
La entrada es vía
STDIN
, ya sea tubería o interactiva. Se hará eco de la entrada "desdoblada" hasta que se detecte un carácter no doblado, en cuyo punto saldrá (tal vez flexionar las reglas de E / S un poco, pero esto es solo una respuesta adicional).Compile y pruebe ISDBL2.COM usando
xxd -r
:Original ejecutable de PC de DOS de 24 bytes completo:
Entrada desde la línea de comando, salida a la pantalla
'Y'
si es doble,'N'
si no.Compile y pruebe ISDBL.COM usando
xxd -r
:Créditos
fuente
LOOPE
lugar deJNZ
/LOOP
para guardar 2 bytes.Lua ,
676663593332 bytes-25 bytes gracias a Giuseppe
-1 byte gracias a val
Pruébalo en línea!
Elimina todos los caracteres duplicados, luego verifica si el resultado está vacío.
fuente
i:gsub("(.)%1","")
y comprobar sii==""
?"(.)%1"
por sí solo incluía colisiones, pero no se me ocurrió que reemplazarlo de una vez para todas las capturas sería suficiente. ¿Debo implementar su solución o debería escribir su propia respuesta? ¡Y gracias!arg[1]
se puede reemplazar con(...)
para guardar un byte.Perl 5 , 15 bytes
Pruébalo en línea!
Salidas 1 para doble habla, nada para no doble hablar.
fuente
MathGolf , 2 bytes
Pruébalo en línea!
Básicamente lo mismo que la respuesta 05AB1E,
½
divide la cadena en caracteres pares e impares, luego verifica la igualdad. Pases para la cadena vacía.fuente
JavaScript, 28 bytes
Pruébalo en línea!
23 bytes usando la expresión regular de wastl
Pruébalo en línea!
fuente
null
para falso: ¡ Pruébelo en línea!s=>!s.some((x,y)=>x>s[y|1])
>
con!=
Haskell ,
2823 bytesPruébalo en línea!
Muy sencillo El doble discurso solo está vacío o un carácter repetido antepuesto al doble habla.
Menos sencillo ahora. Salidas por presencia o ausencia de un error, por meta consenso ; sin error significa doble hablar. La coincidencia de patrones falla cuando los dos primeros caracteres difieren o cuando hay un número impar de caracteres. ¡Gracias a Laikoni por estos ahorros!
fuente
V (vim) , 7 bytes
Pruébalo en línea! o Verificar casos de prueba
Hexdump:
Solo dos expresiones regulares. Explicación:
fuente
Brachylog , 5 bytes
Pruébalo en línea!
Tiene éxito o falla.
fuente
PowerShell ,
3938 bytesPruébalo en línea!
donde
$p
contiene un carácter anterior.Sin recursividad , sin expresiones regulares :). Toma la entrada como una matriz de caracteres a través de una cadena de salpicaduras (ver enlace TIO).
PowerShell , 48 bytes
Pruébalo en línea!
Sin recursividad , sin expresiones regulares y sin tubería: D. También toma la entrada como una matriz de caracteres a través de una cadena de salpicaduras. En su
$b-eq$a
lugar, se usa$a-eq$b
para un caso en el que un último personaje tiene el código # 0.fuente
PowerShell ,
6459 bytesPruébalo en línea!
Función recursiva, no regex. Toma la entrada como una
char
matriz (ver enlace TIO). Despega los primeros dos elementos en$a
y$b
, almacena el resto en$r
. Si todavía tenemos elementos restantes, recurse junto con$a -eq $b
. De lo contrario, solo verifique si$a -eq $b
. La salida es implícita.-5 bytes gracias a mazzy
fuente
$
bloque de declaración anterior y no podía entender por qué no estaba funcionando.Julia 1.0 , 25 bytes
Pruébalo en línea!
fuente
f
, por ejemplo!a=...
. O para usar una función anónima:s->...
J ,
131110 bytesPruébalo en línea!
-2 bytes gracias a Adám
-1 byte gracias a millas
Explicación de TLDR: ¿la entrada es la misma que cualquier otro carácter de la entrada duplicada?
fuente
-:]#~2 0$~#
-:2#_2{.\]
debería guardar otro byteLenguaje de programación Shakespeare ,
204156bytes-48 bytes gracias a Jo King (principalmente cambiando el método de salida)
Pruébalo en línea!
Sale con error si la entrada es de doble voz, y con advertencia si no es de doble voz (lo cual está permitido por defecto).
fuente
Barril ,
1917 caracteresExplicación:
Pruébalo en línea!
fuente
R ,
5334 bytes-19 bytes gracias a Giuseppe
Pruébalo en línea!
fuente
gsub("(.)\\1","",a)==""
que también haría el truco; muchos otros usan la misma expresión regular.function(a)!sum(rle(a)$l%%2)
para 28Brain-Flak ,
26, 22 bytesPruébalo en línea!
Salidas 1 para falso y 0 para verdadero.
Versión legible:
Originalmente tuve esto:
Que es 10 bytes más largo.
fuente
({({}[{}]){{}}{}})
QuadR , 11 bytes
Pruébalo en línea!
''≡⍵
el resultado es una cadena vacía cuando(.)\1
un personaje seguido soloes reemplazado por nada
fuente
JavaScript,
2623 bytesPruébalo en línea!
Solución recursiva, 30 bytes
Gracias a Arnauld por una solución al costo de 0 bytes.
Pruébalo en línea!
fuente
Rojo , 36 bytes
Pruébalo en línea!
Alternativa más larga:
Rojo , 40 bytes
Pruébalo en línea!
fuente
Zsh , 36 bytes
Sale de verdad (0) si NO habla dos veces, y falso (1) si habla dos veces. (Según lo permitido en un comentario).
Pruébalo en línea!
fuente
Prólogo (SWI) ,
6045 bytesgracias a Cadena no relacionada
Pruébalo en línea!
Convertirlo de una cadena a una lista de átomos arruinó el puntaje, pero bueno ...
fuente
atom_chars
lugar destring_chars
, aunque estés tomando una cadena como entrada, y no un átomo. Pero eso puede ser irrelevante si puede tomar una cadena delimitada por retroceso, es decir, una lista de códigos de caracteres.