Una vez que escribí un programa de JavaScript que tomaría como entrada una cadena y un carácter y eliminaría todos los caracteres excepto el primero y el carácter dado como entrada, uno por uno.
Por ejemplo, calcular esto con entradas codegolf.stackexchange.com
y e
para los rendimientos de caracteres:
codegolf.stackexchange.com
cdegolf.stackexchange.com
cegolf.stackexchange.com
ceolf.stackexchange.com
celf.stackexchange.com
cef.stackexchange.com
ce.stackexchange.com
cestackexchange.com
cetackexchange.com
ceackexchange.com
ceckexchange.com
cekexchange.com
ceexchange.com
ceechange.com
ceehange.com
ceeange.com
ceenge.com
ceege.com
ceee.com
ceeecom
ceeeom
ceeem
ceee
Mantiene el primer personaje y todos los e
s. Todos los demás personajes se eliminan uno por uno.
Su tarea es escribir un programa (o función) que tome dos entradas y salidas (o devuelva) una cadena que logre este efecto.
Especificaciones
- Puede suponer que la cadena no contendrá ninguna línea nueva.
- La segunda entrada siempre será un carácter.
- Si la respuesta tiene la forma de una función, puede devolver una serie de cadenas que contienen cada línea en la salida.
- La salida puede contener una nueva línea final.
Casos de prueba
Test Cases
, s
:
Test Cases
Tst Cases
Ts Cases
TsCases
Tsases
Tsses
Tsss
Make a "Ceeeeeeee" program
, e
:
Make a "Ceeeeeeee" program
Mke a "Ceeeeeeee" program
Me a "Ceeeeeeee" program
Mea "Ceeeeeeee" program
Me "Ceeeeeeee" program
Me"Ceeeeeeee" program
MeCeeeeeeee" program
Meeeeeeeee" program
Meeeeeeeee program
Meeeeeeeeeprogram
Meeeeeeeeerogram
Meeeeeeeeeogram
Meeeeeeeeegram
Meeeeeeeeeram
Meeeeeeeeeam
Meeeeeeeeem
Meeeeeeeee
Hello World!
, !
:
Hello World!
Hllo World!
Hlo World!
Ho World!
H World!
HWorld!
Horld!
Hrld!
Hld!
Hd!
H!
Hello World!
, z
:
Hello World!
Hllo World!
Hlo World!
Ho World!
H World!
HWorld!
Horld!
Hrld!
Hld!
Hd!
H!
H
alphabet
, a
:
alphabet
aphabet
ahabet
aabet
aaet
aat
aa
upperCASE
, e
:
upperCASE
uperCASE
uerCASE
ueCASE
ueASE
ueSE
ueE
ue
Este es el código de golf , por lo que gana el código más corto (en bytes).
Meeeeeeeeegram
Respuestas:
V , 12 bytes
Pruébalo en línea!
Hexdump:
He probado esto con la última versión de V disponible antes del desafío , y todo funciona correctamente, haciendo que esta respuesta sea competitiva.
Explicación:
La expresión regular comprimida se traduce en
Lo que significa
Versión no competitiva (11 bytes)
Esta versión utiliza un acceso directo para
Yp
que no estaba disponible cuando se publicó este desafío.fuente
cat filename | vim
Haría o haría otra cosa?Vim,
27, 26, 25 bytesPruébalo en línea!
La entrada viene en este formato:
Mi primer acercamiento ingenuo es tres bytes más largo:
También estoy contento con esta respuesta porque comienza con mi nombre.
¿Ves la similitud? Eh?
Enfoques menos exitosos:
Explicación:
fuente
k
demasiado :)(...)comk
En la línea 5 actualmente.:t
aquí. NormalYp
salvaría un byte. Tendrás que cambiar a,<C-R>-
por supuesto. Las reglas típicas de PPCG son frustrantes, porque para cualquier caso de prueba razonable,:t.|s
con99@:
o incluso999@:
sería correcto, pero no hay una buena manera de obtener una repetición infinita de esa manera. Estás obligado a usar estrategias menos interesantes.MATL ,
2016 bytesPruébalo en línea! O verificar los casos de prueba: 1 , 2 , 3 , 4 , 5 .
Prima
Código modificado para ver que la cadena se reduce gradualmente (compilador fuera de línea):
¡O pruébalo en MATL Online!
Explicación
fuente
Haskell, 50 bytes
Define una función que
(%)
devuelve una lista de cadenas.Explicación
(%)
se llama comow%c
,w
siendo la cadena de entrada, yc
el carácter a mantener. En resumen, esta definición funciona separándosew
en el primer carácter (a
) y el resto (x
), dividiéndosex
en la primera aparición de un carácter que no seac
, y recursivamente se llama a sí mismo con ese carácter eliminado.fuente
Retina ,
2827 bytesEl recuento de bytes asume la codificación ISO 8859-1.
Pruébalo en línea!
Explicación
Hay mucha configuración aquí. El escenario en sí es realmente justo
G1`
, lo que mantiene solo la primera línea, descartando el carácter de entrada.*
lo convierte en una ejecución en seco, lo que significa que el resultado (es decir, la primera línea de la cadena) se imprime sin cambiar realmente la cadena.{
le dice a Retina que ejecute ambas etapas en un bucle hasta que la cadena deje de cambiar e;
impide la salida al final del programa.Esto descarta el primer carácter que a) no está al comienzo de la entrada, b) no es igual al carácter de entrada separado.
fuente
Pip ,
22262422 bytesToma la cadena como primer argumento de la línea de comandos, el carácter como segundo. Pruébalo en línea!
Explicación
Recorre los caracteres de entrada; si el personaje es igual al personaje especial, pase al siguiente; si no, elimínelo e imprima la cadena.
Una versión sin golf (
a
,b
obtener cmdline args;o
comienza con un valor de1
,x
es""
):Trucos de golf:
L
solo se evalúa una vez, por lo que podemos filtrar la impresión inicial allí.#Pa-1
no funcionará porqueP
es de baja precedencia (se analizaría como#P(a-1)
), pero podemos reorganizarlov+#Pa
, usando lav
variable preinicializada en-1
.RA:
operador devuelve el nuevo valor dea
, por lo que podemos imprimir esa expresión en lugar de tener unaPa
declaración separada .?
lugar.fuente
Perl 5, 29 bytes
Obtuve 35 bytes usando Strawberry Perl: 31 bytes, más 1 para en
-nE
lugar de-e
, más 3 para espacio +-i
(usado para la entrada de una sola letra; la cadena más larga es de STDIN).Sin embargo, no tengo dudas de que esto es factible sin
chomp;
usar<<<
, que es de 29 bytes, aunque no puedo probarlo yo mismo usando Strawberry.Así:
fuente
-l
opción, que activa un modo de manejo automático de nueva línea en el queprint
imprime una nueva línea adicional (irrelevante aquí) y-p
/-n
input elimina la nueva línea (muy relevante). Además, está en desuso, pero creo que puede reemplazarlo^I
con un control literal-I para obtener un byte adicional de ahorro. Finalmente, creos/.\K[^$^I]/redo/e
que sería un personaje más corto, aunque no estoy 100% seguro de que sea un lugar legal para poner unredo
.^I
, eso es cierto para la mayoría de las variables de letras de control, pero no esta, IIRC. Re\K
y ponerredo
en el reemplazo con/e
, gracias! Lo probaré cuando tenga la oportunidad de ...Perl 6 ,
47 4038 bytesExpandido:
La razón que
...^
se utilizó en lugar de...
es que&[eq]
no volveríaTrue
hasta que se repitiera el último valor.fuente
05AB1E ,
2625 bytesPruébalo en línea!
Tenga en cuenta que
¬²k0Q
podría reescribirse¬²Q
, pero por alguna razón no funciona cuando el carácter actual es una comilla: Q devuelve la cadena real en lugar de un booleano y provoca un bucle infinito.Este código se puede seguir jugando ya que
¯J?
está duplicado. Mover esta parte en el bucle eliminaría la duplicación y también permitiría soltar el corchete de cierre.fuente
DˆćUΔD²KRнõ.;DXìˆ}¯¨»
para 21, pero que usa nuevos comandos.Python 2,
7166 bytes:Un programa completo Toma 2 entradas a través de STDIN en el formato
'<String>','<Char>'
.Además, aquí hay una solución recursiva actualmente en 140 bytes :
Este debería llamarse en el formato
print(Q('<String>','<Char>'))
.fuente
Python 3 , 72 bytes
Pruébalo en línea!
Ponerse a dieta:
fuente
JavaScript (ES6), 74 bytes
fuente
f('test cases', 's')
(que termina constss
, en lugar detsss
). Creo que esto se debe a quereplace
elimina la primera ocurrencia, por lo que elimina la primera ent
lugar de la segundat
en la cuarta iteración delmap
bucle.Ruby,
1481399790837762 bytesNo estoy seguro de si se acepta el código de aficionado en este intercambio, pero estoy interesado en aprender a codificar el golf, aunque soy terrible, ¿alguna ayuda sobre cómo conseguiría que este programa se vea tan pequeño como los otros aquí?
EDITAR:
Reemplaza put con p
Se eliminó una tonelada de espacios en blanco y bytes contados correctamente gracias al Asistente de trigo
Gracias a challenger5 pasó de
s=gets.chop;c=gets.chop;
as,c=gets.chop,gets.chop;
reemplazado
then
con;
ygets.chop
congets[0]
gracias Mhutter!Tomando entrada como variables de línea de comando ahora, por ejemplo.
prog.rb helloworld l
Gracias a numerosas mejoras mediante la sustitución de jeroenvisser101
a=s.dup
cons=""+a
y la anterior sentencia ifif s[i]!=c;s[i]="";p s;else i+=1;end
con(d!=c)?(s[i]="";p s):i+=1;
gran mejora!fuente
=
s. Para obtener consejos más completos, puede visitar nuestra página de consejos .s=gets.chomp
. No estoy seguro de si puedes hacer esto en Ruby, pero en algunos lenguajes como Python puedes combinar múltiples tareas en una sola declaración, comoa,b,c=0,1,2
.do
,then
yend
), y alrededor del cuarto=
.c90,
129125 bytescon espacios en blanco:
sin espacios en blanco:
sin golf:
Esto lleva un puntero al inicio de la cadena y realiza un bucle, iterando este puntero hasta que llega al final de la cadena. Dentro del ciclo, imprime el primer carácter, luego cualquier instancia del segundo argumento que encuentra entre el inicio de la cadena y el puntero. Después de esto, llama a puestos en el puntero, imprimiendo el resto de la cadena.
Esto debe compilarse en un sistema donde sizeof (int) == sizeof (char *). +3 bytes de lo contrario.
Esta es la primera vez que intento jugar golf con código aquí, así que estoy seguro de que hay algunas optimizaciones que hacer.
fuente
Dyalog APL , 27 bytes
{×i←⊃1+⍸⍺≠1↓⎕←⍵:⍺∇⍵/⍨i≠⍳≢⍵}
⍺
es el carácter excluido,⍵
es la cadena inicialargumento de impresión; encontrar el índice
i
del primer no⍺
después del primer carácter; si se encuentra, llame recursivamente coni
eliminadofuente
Mathematica, 64 bytes
Función anónima. Toma dos cadenas como entrada y devuelve una lista de cadenas como salida. Funciona eliminando repetidamente la primera no instancia del personaje.
fuente
FixedPointList
.PHP,
88848685828178 bytes1 byte guardado gracias a @IsmaelMiguel, 3 bytes gracias a @ user59178, 3 bytes inspirados por @ user59178
toma datos de los argumentos de la línea de comandos; corre con
php -r <code> '<string>' <character>
Eso agrega
54 bytes de código, pero guarda en la salida y un adicionalecho$a;
.fuente
$argv[1]."\n"
puede escribirse como"$argv[1]\n"
$b
se agrega una nueva línea, siempre será verdadera siempre que tenga una longitud> = 1. Como tal,""<
es innecesario.substr()
lugar de asignar$b
.substr
resultado tanto para la condición como para elprint
; así que debería asignarlo en alguna parte. Pero me inspiraste.for(;$b=substr($b?:".$argv[1]\n",1);)
pero lo que tienes ahora es aún mejor.05AB1E,
262423 bytes¡Gracias @Kade por 2 bytes!
¡Gracias @Emigna por 1 byte!
Utiliza la codificación CP-1252 . Pruébalo en línea!
y²k0Ê
podría sery²Ê
pero lo"
arruina todo.Esto probablemente podría ser más golf porque
«
se repite dos veces. Por favor, deje un comentario si tiene alguna sugerencia o forma de jugar más golf.fuente
Java 10,
155140139124 bytesPruébalo en línea.
Explicación:
Antigua respuesta recursiva de 139 bytes:
-1 bytes gracias a @Eugene . (La próxima vez haga un comentario en lugar de editar la publicación de otra persona, por favor).
Pruébalo en línea.
Explicación:
fuente
C #,
122117112 bytesSin golf:
Devuelve una colección de cadenas.
fuente
c
. En ese caso, el bucle intentará funcionar para siempre.TSQL, 127 bytes (excluyendo definiciones de variables)
Formateado:
fuente
patindex
, pero elalphabet
ejemplo no parece del todo correcto, se muestraaaphabet
hacia abajoaaa
. También vale la pena mencionar que esto debe ejecutarse en un servidor o base de datos con una intercalación entre mayúsculas y minúsculas; de lo contrario, elupperCASE
ejemplo también falla y se muestraueE
en su fila final.C #,
135138 :(137 bytesGolfizado:
Sin golf:
La función devuelve la colección de cadenas.
EDITAR1: @psycho notó que el algoritmo no se implementó correctamente.
EDIT2: Variable creada para
s.Length
. Un byte guardado gracias a @TheLethalCoder.fuente
codeegolf e
daría ence
lugar decee
.if
conwhile
y funciona.s.Length
guardar un byte:int i=1,l;for(;;){yield return s;l=s.Length;while(i<l&&s[i]==c)i++;if(i>=l)break;s=s.Remove(i,1);}}
Python 2 -
6573 bytesY una solución recursiva de 76 Bytes , porque a pesar de ser más larga que la primera, me gusta más:
fuente
Raqueta 194 bytes
Sin golf:
Pruebas:
Salida:
fuente
JavaScript (ES6), 64
69Devolver una sola cadena con nuevas líneas
fuente
.map
era acumulativo. Vi.map().filter()
y pensé "¡Esto sería una gran comprensión de la matriz!", Pero la falta de índice en las comprensiones de la matriz lo mató y terminó con la misma longitud:s=>c=>[for(x of(i=0,z=[...s]))if(--i&&x!=c)(z[~i]=~i?'':x,z.join``)]
(por cierto, cuento 68 bytes para todos estos).([...z],c,i=0)=>[for(x of z)if(--i&&x!=c)(z[~i]=~i?'':x,z.join``)]
Swift 3 -
151147 bytesSwift no es el lenguaje ideal para jugar al golf, especialmente cuando se relaciona con la indexación de cadenas. Esto es lo mejor que puedo hacer:
Desafortunadamente, Swift necesita espacios alrededor
!=
(pero no para==
), y Swift 3 dejó caer al++
operador. El truco para ambos es convertir a una matriz de caracteres que permita la indexación de enteros y usar la interpolación de cadenas de un carácter para volver a convertir aString
("\(c)"
).Sin golf:
Solución previa no recursiva
fuente
while
necesidad de espacios para compilar. También jugué con el typealiasingString
e intenté establecerprint
un cierre, pero no ahorraron espacio.Pyke,
261917 bytesPruébalo aquí!
fuente
Mathematica, 78 bytes
Maldita sea Martin Ender, casi fui el primero: p
Función sin nombre; Implementación sencilla con un
While
bucle y algunas variables temporales.fuente
JavaScript ES6, 89 bytes
Pensé que sería un desafío fácil, pero estoy bastante seguro de que me falta algo aquí ...
Utiliza la recursividad y devuelve una serie de cadenas.
fuente
Groovy, 34 bytes
fuente