Un simple FizzBuzz con cadenas.
Dado
- 1 palabra o frase (cadena)
- 2 personajes únicos
Salida
La palabra o frase con cada aparición del primer carácter reemplazado con efervescencia y cada uno de los segundos caracteres reemplazados con zumbido
Reglas
- La primera letra en Fizz y Buzz debe permanecer en mayúscula
- Para el resto de las palabras fizz y zumbido, debe coincidir con las mayúsculas y minúsculas del carácter reemplazado (si no hay mayúsculas y minúsculas)
- Si los caracteres dados no están en la frase, envíe la frase original
Casos de prueba
Given: Hello, h, l
Output: FIZZeBuzzBuzzo
Given: test, a, b
Output: test
Given: PCG rocks!, , !
PCGFizzrocksBuzz
Given: This
Is
SPARTA!,
, S
Output: ThiBuzzFizzIBuzzFizzBUZZPARTA!
Given: FizzBuzz, a, b
Output: FizzBUZZuzz
Este es el código de golf, por lo que gana el código más corto, en bytes.
Nota
Técnicamente, manejar el caso de la nueva línea (¡Esto es SPARTA!) Es parte del desafío. Sin embargo, no anularé una respuesta por no incluirla, ya que es muy difícil o incluso imposible en algunos idiomas.
you must match the case of the replaced character
yInput is not case sensitive
parecen contradecirseThiBuzzFizzIBuzzFizzBUZZPARTA
le falta un signo de exclamación final.aa, a, f
? ¿Cuál sería el resultado esperado?BUZZizzBUZZizz
,FizzFizz
o ambos permitidos a nuestra opción?FizzFizz
.Respuestas:
Jalea , 34 bytes
Pruébalo en línea!
¿Cómo?
fuente
Python 3 ,
180174168160152 bytesEsta es solo una versión más golfizada de Stephen la respuesta , en Python 3. Esto elimina el 42% de sus bytes. Python 2 ahorraría un byte en la impresión, pero ese es el precio del progreso. Esto maneja las nuevas líneas correctamente.
Gracias a Blckknight por guardar 8 bytes en la entrada.
fuente
fileinput
usan los módulos?from sys import*
ys,a,b=J(stdin).split(', ')
para salvar algunos personajes?Python, 109 bytes
Pruébalo en línea!
Toma los dos caracteres como una sola cadena
Editar: Se agregó un caso de prueba al enlace TIO, la nueva línea también funciona
fuente
Python 2 ,
271, 261 bytesPruébalo en línea!
Wow, este era un doozie! Resulta que Python no aceptará entradas de varias líneas, por lo que
fileinput
debe usarse.editar: debería pasar todos los casos ahora :)
fuente
import fileinput as f
...for m in f.input():
MATLAB / Octave ,
106102111 bytesEsto probablemente podría optimizarse aún más.
Utiliza un reemplazo simple de Regex. Sin embargo, se requiere un paso intermedio reemplazando los caracteres de entrada por números primero. Esto es para que si la segunda letra de reemplazo de entrada estuviera contenida,
Fizz
laFizz
no se reemplace cuando se realice la siguiente expresión regular.Por supuesto, esto supone que no hay números en la entrada. Sin embargo, dado que la pregunta dice que la entrada es una palabra o frase, creo que esta es una suposición aceptable.
El código manejará nuevas líneas en la entrada correctamente.
¡Puedes probarlo en línea!
fuente
Bash 4.4 + GNU sed,
70228222227 bytesAparentemente
alias e=echo
arroja un error si se hace referencia en Bash 4.3 o inferior, la versión que TIO aparentemente está usando. Por lo tanto, el código Bash 4.3 más largo y equivalente se proporciona en el siguiente conjunto de pruebas TIO en aras de la prueba. Esto pasa todos los casos de prueba, por lo que es bueno.Pruébalo en línea!
fuente
JavaScript (ES6), 92 bytes
Toma la entrada como una cadena y una matriz de dos caracteres. Soporta nuevas líneas.
Casos de prueba
Mostrar fragmento de código
fuente
Pyth - 25 bytes
Test Suite .
fuente
"Hl", Hello
no capitaliza la salida correctamente y"hL", Hello
no sustituye lal
s.GNU sed , 135 + 1 (r flag) = 136 bytes
Por defecto, un script sed se ejecuta tantas veces como haya líneas de entrada. Para manejar la entrada de varias líneas, utilizo un bucle para agregar todas las líneas restantes posibles a la primera, sin comenzar un nuevo ciclo.
Pruébalo en línea!
La tabla de reemplazo utilizada en la línea 4 debe estar en ese orden exacto, es decir, 'Fizz' y 'Buzz' después de sus formas mayúsculas. Esto se debe a que la expresión regular sed
.*
, utilizada durante la búsqueda de la tabla, es codiciosa. Si el carácter actual que se debe reemplazar no es una letra (sin mayúsculas y minúsculas), entonces se necesita la cadena en minúsculas (coincide con la última).Como sed no tiene tipos de datos, uso un delimitador de caracteres para iterar una cadena. Marcará mi posición actual y en un bucle la cambio de izquierda a derecha. Afortunadamente, puedo usar
,
para esto, ya que es el delimitador de datos de entrada.Explicación:
fuente
Haskell, 114 bytes
r
toma los caracteres fizz y buzz como una lista de 2 elementos como el primer argumento, y la cadena de entrada como el segundo argumento. Las líneas nuevas y Unicode deben manejarse adecuadamente, aunque desafortunadamente la función no es total (permitiendo entradas no válidas guardadas en 5 bytes).fuente
u=Data.Char.toUpper
solo funciona en ghci hasta donde yo sé. En Haskell estándar necesitas elimport
. Sin embargo, debería poder guardar algunos bytes utilizando en=<<
lugar deconcatMap
.Mathematica, 94 bytes
Función anónima. Toma dos cadenas como entrada y devuelve una función que toma una cadena como entrada y devuelve una cadena como salida como salida. Debe invocarse en el formato
prog["c1", "c2"]["s"]
, donde"s"
está la cadena de destino"c1"
y"c2"
son los dos caracteres. Probablemente podría jugar más golf.fuente