Introducción
Observemos la siguiente cadena:
AABBCCDDEFFGG
Puede ver que cada letra ha sido duplicada , excepto la letra E
. Eso significa que la carta E
ha sido desduplicada . Entonces, lo único que necesitamos hacer aquí es revertir ese proceso, lo que nos da la siguiente cadena no deduplicada :
AABBCCDDEEFFGG
Tomemos un ejemplo más difícil:
AAAABBBCCCCDD
Puede ver que hay un número desigual de consecutivos B
, por lo que eso significa que uno de ellos BB
se desduplicado de la cadena original. Solo necesitamos des-duplicar esta carta, lo que nos da:
AAAABBBBCCCCDD
El reto
Dada una cadena no duplicada no vacía , que consta de solo caracteres alfabéticos (ya sea mayúsculas o minúsculas), devuelve la cadena no duplicada . Puede suponer que siempre habrá al menos un carácter desduplicado en la cadena.
Casos de prueba
AAABBBCCCCDDDD --> AAAABBBBCCCCDDDD
HEY --> HHEEYY
AAAAAAA --> AAAAAAAA
N --> NN
OOQQO --> OOQQOO
ABBB --> AABBBB
ABBA --> AABBAA
Este es el código de golf , por lo que gana el envío válido más corto en bytes.
AABBBB
.ABBB
mapaAABBBB
noAABBBBBB
?A BB B
. Los caracteres que no están emparejados (y, por lo tanto, no están duplicados) deben duplicarse, loAA BB BB
que resulta en la cadena no deduplicada.Respuestas:
MATL , 7 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Tomemos
'ABBA'
como ejemplo la entrada.fuente
Retina , 11 bytes
Pruébelo en línea : contiene todos los casos de prueba
fuente
Perl, 16 bytes
15 bytes de código +
-p
bandera.Para ejecutarlo:
fuente
Haskell, 36 bytes
Ejemplo de uso:
u "OOQQO"
->"OOQQOO"
.Si la cadena tiene al menos 2 elementos, tome dos copias del primero y agregue una llamada recursiva con
Si hay menos de dos elementos (uno o cero), tome dos copias de la lista.
fuente
Brachylog , 17 bytes
Pruébalo en línea!
Explicación
fuente
Ruby, 21 bytes
20 bytes más la
-p
bandera.fuente
JavaScript (ES6),
3730 bytesGuardado 7 bytes mediante el uso de los mucho más eficientes '$ 1 $ 1' como [otros] [respuestas] hizo
Casos de prueba
Mostrar fragmento de código
fuente
Mathematica, 41 bytes
Función sin nombre que ingresa una cadena y genera una cadena. Deduplicar completamente y luego duplicar por completo. No muy corto, pero no podría hacerlo mejor por ahora.
fuente
Befunge 98 , 24 bytes
Pruébalo en línea!
$
se puede reemplazar fácilmente con-
, y el segundo@
con;
.Creo que esto se puede jugar más debido al
-
principio de ambos-,
(o$,
arriba) y-\,
.¿Cómo?
fuente
Java 7, 58 bytes
Sin golf:
Código de prueba:
Pruébalo aquí.
Salida:
fuente
PHP, 65 bytes, sin expresiones regulares
toma información del argumento de la línea de comando. Corre con
-r
.regex? En PHP, la expresión regular utilizada por la mayoría de las respuestas duplica cada carácter. sería de 44 bytes:
fuente
Brain-Flak 69 Bytes
Incluye +3 para
-c
Pruébalo en línea!
Explicación:
fuente
Jalea , 9 bytes
Pruébalo en línea!
fuente
V 10 bytes
TryItOnline
Solo busque y reemplace regex como todos los demás en el hilo. La única diferencia es que puedo reemplazar cualquier cosa que requiera un
\
frente con el carácter con el mismo valor ASCII, pero el conjunto de bits alto. (Entonces(
, 00101000 se convierte en¨
10101000)fuente
Perl 6 , 17 bytes
con el interruptor de línea de comandos -p
Ejemplo:
fuente
Raqueta 261 bytes
Sin golf:
Pruebas:
Salida:
fuente
05AB1E, 10 bytes
Try it online!
Explanation
fuente
Python3,
10294 bytesThanks to xnor for saving 8 bytes! -> bithack.
fuente
x+x%2
asx&-2
.s.count(c)&-2
and it returned an empty string... :/ Any thoughts?x+1&-2
should do it. Evens go to themselves and odds round up to evens.R, 81 bytes
Reads a string from stdin, splin into vector of characters and perform run-length encoding (rle). Subsequently repeat the each values from the rle, the sum of the lengths and the lengths mod
2
.If we can read input separated by space (implicitly as a vector/array of characters) then we can skip the splitting part and the program reduces to 64 bytes:
fuente
><> (Fish) 39 bytes
Pretty sure this can be golfed a lot using a different technique.
It takes an input and compares against the current stack item, if it's different it'll print the first stack item twice, if the same it prints them both.
The stack when empty gets supplied with a 0 which prints nothing so can be appended on whenever.
fuente
Pyth, 15 bytes
Verify all test cases here.
Thanks to Luis Mendo for the methodology.
Explanation
As is often the case, I feel like this could be shorter. I think there should be a better way to extract elements from the list than what I am using here.
fuente
PowerShell, 28 bytes
Try it online! (includes all test cases)
Port of the Retina answer. The only points of note are we've got
$args
instead of the usual$args[0]
(since the-replace
will iterate over each item in the input array, we can golf off the index), and the'$1$1'
needs to be single quotes so they're replaced with the regex variables rather than being treated as PowerShell variables (which would happen if they were double-quote).fuente
C, 67 bytes
Call with:
fuente
brainfuck, 22 bytes
Try it online.
Prints the current character twice, unless it's equal to a character that was just printed twice.
fuente