Usted está proporcionando soporte técnico a la Bruce Dickenson ya que produce una sesión de grabación Blue Öyster Cult. Cuando pide más cencerro , puedes dárselo.
Tu tarea
Escriba un programa o función que tome una cadena (o equivalente en su idioma) como entrada y genere una cadena relacionada que contenga un cencerro más.
¿Cuántos cencerros contiene una cuerda?
El número de cencerros que contiene una cadena es igual al número máximo de copias distintas de "cencerro" que se pueden obtener al permutar los caracteres de la cadena. Por ejemplo, "bbbccceeellllllooowwwwwwwww"
consta de 3 cowbells, mientras que "bbccceeellllllooowwwwwwwww"
y "bbbccceeelllllooowwwwwwwww"
contienen cada uno 2 cencerros, y "cowbel"
contiene 0 cowbells.
¿Cómo debe relacionarse la salida con la entrada?
La salida debe consistir en la concatenación, en este orden, de la cadena de entrada y el prefijo más corto de la cadena de entrada necesaria para aumentar el número de cencerros.
Por ejemplo, "bbbccceeelllllooowwwwwwwww"
solo necesita uno adicional "l"
para contener 3 cencerros en lugar de 2; el prefijo más corto que contiene ese "l"
es "bbbccceeel"
. Por lo tanto, si la entrada es "bbbccceeelllllooowwwwwwwww"
, entonces la salida debería ser "bbbccceeelllllooowwwwwwwwwbbbccceeel"
.
Tecnicismos
- Puede suponer que la entrada contiene solo caracteres ASCII imprimibles. Si hay uno o dos caracteres que son molestos para el procesamiento de cadenas de su idioma (como líneas nuevas o
\
), puede suponer que la entrada no los contiene, solo mencione esta restricción. - Además, puede suponer que los caracteres alfabéticos en la entrada están en minúsculas o en mayúsculas. Si elige no asumir uno de estos, cuente los cencerros sin distinción entre mayúsculas y minúsculas.
- Se puede suponer, además, que la entrada contiene al menos una copia de cada uno de los personajes
b
,c
,e
,l
,o
, yw
. Esto es equivalente a suponer que se puede concatenar algún prefijo de la cadena para producir una cadena que contenga más cencerro. (Tenga en cuenta que la cadena de entrada en sí no necesita contener un cencerro). - Si su idioma tiene una solución integrada que resuelve este problema ... entonces úsela totalmente, en serio, cuán increíble es eso.
Pañales bañados en oro
Como el tiempo de grabación en el estudio es costoso, su código debe ser lo más breve posible. ¡La entrada con la menor cantidad de bytes es la ganadora!
Casos de prueba
( enlace de pastebin para copiar / pegar más fácilmente)
Entrada de prueba n. ° 1: "christopher walken begs for more cowbell!"
Salida de prueba n. ° 1: "christopher walken begs for more cowbell!christopher wal"
Entrada de prueba # 2: "the quick brown fox jumps over the lazy dog"
Prueba de salida # 2: "the quick brown fox jumps over the lazy dogthe quick brown fox jumps over the l"
Entrada de prueba # 3: "cowbell"
Prueba de salida # 3: "cowbellcowbell"
Entrada de prueba # 4: "cowbell cowbell cowbell"
Prueba de salida # 4: "cowbell cowbell cowbellcowbell"
Entrada de prueba # 5: "cowbell cowbell cowbel"
Prueba de salida # 5: "cowbell cowbell cowbelcowbel"
Entrada de prueba # 6: "bcelow"
Prueba de salida # 6: "bcelowbcel"
Entrada de prueba # 7: "abcdefghijklmnopqrstuvwxyz"
Prueba de salida # 7: "abcdefghijklmnopqrstuvwxyzabcdefghijkl"
Entrada de prueba # 8: "cccowwwwbbeeeeelllll"
Prueba de salida # 8: "cccowwwwbbeeeeelllllccco"
Entrada de prueba # 9: "be well, programming puzzles & code golf"
Prueba de salida # 9: "be well, programming puzzles & code golfbe well, programming puzzles & c"
Entrada de prueba # 10: "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. wow!"
Prueba de salida # 10: "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. wow!lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab"
Entrada de prueba # 11:
"c-c-b-c
i have a cow, i have a bell.
uh! bell-cow!
i have a cow, i have a cowbell.
uh! cowbell-cow!
bell-cow, cowbell-cow.
uh! cow-cowbell-bell-cow.
cow-cowbell-bell-cow!
"
Prueba de salida # 11:
"c-c-b-c
i have a cow, i have a bell.
uh! bell-cow!
i have a cow, i have a cowbell.
uh! cowbell-cow!
bell-cow, cowbell-cow.
uh! cow-cowbell-bell-cow.
cow-cowbell-bell-cow!
c-c-b-c
i have a cow, i have a bell"
test case -> result
en un gran bloque de código preformateado. Es mucho más agradable estéticamente y más fácil copiar y pegar.L
s en la palabra, esto no es lo que pide el desafío.Respuestas:
Pip ,
504238 bytesPase la cadena como un argumento de línea de comandos, citado si es necesario. Pruébalo en línea!
Explicación
Voy a explicar esto en dos partes: la función cencerro y el programa completo. Primero, aquí está la función que calcula la cantidad de cencerro en una cadena:
{...}
define una función Muchos operadores Pip, cuando se aplican a una función, devuelven otra función; por ejemplo,-{a+1}
es lo mismo que{-(a+1)}
. Entonces lo anterior es equivalente aque funciona de la siguiente manera:
Ahora que tenemos eso, aquí está el programa completo:
fuente
cowbell cowbell cowbee
y la salida fuecowbellcowbelcowbel
pero podría estar usando el IDE incorrecto (nuevo en PIP)cowbell cowbell cowbeecowbell
( pruébalo en línea ). ¿Estás utilizando TIO o una copia local?C,
511488474470463454Pruébalo en línea
Formato legible + explicación:
Algunos trucos divertidos utilizados:
• Cuando verifico caracteres, escribo
'w'
para el carácter que es de 3 bytes, pero para los caracteres'c'
y'b'
puedo escribir sus valores ASCII 99 y 98 respectivamente para guardar un byte cada vez. (Editar: Gracias a @Titus, sé hacer esto con todas las letras de COWBELL utilizando solo mayúsculas, que son valores ascii numéricos de 2 bytes)•
r=~-l/2
estár=(l-1)/2
utilizando cambios de bits•
a[++i]
Estoy obteniendo el carácter en el índice (i) e iterando el índice todo al mismo tiempo. Solo comienzoi
eni=-1
lugar dei=0
(hago lo mismo conz
y lo inicioz=i
para guardar otro byte)fuente
c
) siempre se establece como 1 [...]". Nos agradaría tener su declaración de por qué lo piensa así porque a algunos de nosotros nos parece extraño.c,o,w,b,e
se inicialice con el mismo valor, en lugar de 1? Debido a que su pista # 2 parece no ser cierta, al menos no para que CI lo sepa. ¿Puedes aclarar? Pregunta SOPython 2,
125113112 bytesn
cuenta el número de cencerros-12 bytes gracias a @Rod
-1 byte gracias a @Titus
fuente
[]
la comprensión de la lista cuando es el único parámetro, también puede descartarenumerate
: ¿min(s.count(c)/-~(c=='l')for c in"cowbel")
dónde-~(n=='l')
hay una forma más corta de escribir1+(n=='l')
>>
sería más corto que/-~
?return
estaría el en el bucle while entonces?Perl 6 , 91 bytes
Asume una entrada en minúscula.
Cómo funciona
Dentro de la lambda, otra lambda para contar el número de cencerros en una cadena se define como tal:
El resto del código usa este lambda interno
&c
para encontrar el resultado, así:fuente
MATL ,
3837 bytes1 byte apagado gracias a la idea de @ DLosc de usar la cadena de plantilla en
lcowbe
lugar decowbel
Los caracteres de entrada son todos minúsculas. Si la entrada contiene nuevas líneas, el carácter de nueva línea debe ingresarse ya que su código ASCII se concatena con los caracteres normales (consulte la última entrada en el enlace con todos los casos de prueba).
Pruébalo en línea! O verificar todos los casos de prueba .
fuente
JavaScript (ES6), 106
107 113 126 141Una transferencia a javascript de la respuesta Pip por @DLosc. Necesitaba algo de tiempo para entenderlo completamente, y es genial.
Edite -15 bytes siguiendo la sugerencia de @Titus, agregando caracteres directamente a la cadena de entrada
a
y evitando el retorno temprano (así que nofor/if
)Edit 2 enumerando el valor 6 para la función Min guarda otros 13 bytes
Edit 3 cambió la función c nuevamente. Pensé en lo detallado
length
ysplit
sería demasiado largo. Estaba equivocado.Asumiendo entrada en minúsculas
Menos golf
Prueba
fuente
k[x]++
fallaría debido aundefined
. Pero estoy bastante seguro de quefor(i=0;c(a)==c(a+=a[i++]);),a
funciona.>>!i
ahorra 3 bytes. ¿Por qué no lo usasc(a+=z)
?c(a+=z)
. No en la versión menos golfizada , ya que es, ya ves, menos golfizada. Usando>>!i
ahorra 1 byte (en la versión de golf). Gracias de nuevoBash + Unix utilidades, 184 bytes
Pruébalo en línea!
Gracias a @AlbertRenshaw por jugar 2 bytes de descuento.
fuente
!=
JavaScript (ES6),
124114 bytesGracias a Neil por guardar unos pocos bytes.
Como esto es bastante diferente de la respuesta JavaScript ya existente, y dediqué bastante tiempo a esto, decidí crear una respuesta yo mismo.
Uso
Salida
fuente
.sort()[0]
Es una idea maravillosa.eval
es malvado : DMath.min()
, pero eso costó muchos personajes, y pensé que habría un camino más corto. Y sí,eval
es realmente bueno para jugar al golf..sort()[0]
funcionara, solo costaría 10 bytes, pero no lo hace, y.sort((a,b)=>a-b)[0]
cuesta 20 bytes peroMath.min(...)
solo cuesta 13.Octava,
808797 bytes¡Pruébelo en línea!
fuente
l
segundos para completar el cencerro adicional. Por ejemplo, en la entradacowbell
, devuelve incorrectamente encowbellcowbel
lugar decowbellcowbell
. (Espero que pueda solucionarlo, ¡me gusta el algoritmo atípico!)CJam, 37
Pruébalo en línea
Si puedo excluir los caracteres
"
y\
, entonces ...35 bytes
Pruébalo en línea
Explicación
El código agrega sucesivamente cada carácter de la cadena a la cadena inicial (va del original al doble), determina el número de cencerros para cada cadena (contando el número de apariciones de cada carácter en "cowbel" y dividiendo el de 'l' en 2, luego toma el mínimo), encuentra la posición de la primera cadena donde el número de cencerros aumenta en 1, luego toma el prefijo correspondiente de la entrada y lo coloca después de la cadena de entrada.
Para incluir también la cadena original (sin caracteres añadidos), el código antepone un carácter neutral a la cadena que se está iterando. La primera versión antepone un espacio, y la segunda versión utiliza la representación de cadena, es decir, la cadena entre comillas dobles.
fuente
PHP, 133 bytes
un puerto PHP del puerto JavaScript de @ edc65 de la respuesta Pip de DLosc.
toma la entrada en minúscula del argumento de la línea de comando. Corre con
-nr
.Descompostura
fuente