Te dan una cadena y dos caracteres. Debe imprimir la cadena entre estos caracteres desde la cadena.
Entrada
La entrada primero contendrá una cadena (no vacía o null
). En la siguiente línea, habrá dos caracteres separados por un espacio.
Desafío
Devuelve la cadena entre los dos caracteres.
Ejemplo
Hello! What's your name?
! ?
debería dar como resultado la salida:
" What's your name"
Reglas
- La cadena no tendrá más de 100 caracteres y solo contendrá caracteres ASCII en el rango
(espacio) a
~
(tilde) (códigos de caracteres 0x20 a 0x7E, inclusive). Consulte la tabla ASCII para referencia. - Debe tomar la entrada de
stdin
(o la alternativa más cercana). - La salida debe estar entre comillas (
"
). - Puede escribir un programa completo, o una función que toma entrada y da salida a la cadena final
- Los dos caracteres solo contendrán caracteres ASCII en el rango
(espacio) a
~
(tilde) (códigos de caracteres 0x20 a 0x7E, inclusive). Ver tabla ASCII para referencia. - No hay garantía de que ambos caracteres estén en la cadena.
- Si alguno de los caracteres no se encuentra en la cadena, imprima
"null"
. - Si alguno de los caracteres se encuentra más de una vez (a menos que ambos caracteres sean iguales) en una cadena, imprima
"null"
. - Si ambos caracteres son el mismo carácter, imprima la cadena
"null"
.
Casos de prueba
1)
<HTML>code</HTML>
> < --> "null"
2)
What's what?
' ' --> "null"
3)
abcdefghijklmnopqrstuvwxyz
n k --> "lm"
4)
Testing...
e T --> ""
5)
Last test-case
- --> "test"
Puntuación
Este es el código de golf, por lo que gana el envío más corto (en bytes).
"
? ¿Deberíamos rodearlo con otro par de citas y no preocuparnos por eso?one"two-three \n" -
salida:"two"
(\n
es una nueva línea)Respuestas:
CJam,
343332 bytesPruébelo en línea en el intérprete de CJam .
Idea
Elimina el segundo personaje de la línea 2.
Forme una cadena que consista en una sola copia de todos los caracteres que ambas líneas tienen en común.
Repita la cadena resultante dos veces y descarte sus dos primeros caracteres.
Esto da como resultado una cadena de dos caracteres (si los caracteres de la línea 2 son diferentes y ambos aparecen en la línea 1) o una cadena vacía.
Reemplace los caracteres de la cadena resultante en la línea 1 por avances de línea.
Dividir la línea 1 en saltos de línea.
El segundo elemento de la matriz resultante será la cadena deseada si la matriz contiene exactamente tres fragmentos.
Reemplace el primer elemento de la matriz con la cadena nula .
Recupere el segundo elemento de la matriz si su longitud es 3 y el primero de lo contrario.
Anteponer y agregar una comilla doble.
Código
fuente
CJam, 38 bytes
Demasiado largo...
Explicación
fuente
Pyth,
373634 bytesGracias a @isaacg por los dos bytes guardados.
Pruébelo en línea: Pyth Compiler / Executor
Explicación:
fuente
*2]1
es más corto[1 1)
y- ... 1
aún más corto.-...1
no funciona, ya que también necesito verificar que haya exactamente dos números.[1 1)
:jT9
.Python 3, 149 bytes
Versión sin golf:
Esta es mi primera respuesta aquí, por lo que se agradecen los consejos y las críticas.
fuente
Ruby,
1089594Y para la versión sin golf
fuente
->s,f,l{begin a,b=[f,l].map{|u|raise if f==l||s.count(u)>1;s.index u}.minmax;p s[a+1...b];rescue;p'null'end}["<html>test</html>",?>,?<]
Al[...]
final es lo que llama a la función.->s,f,l{begin a,b=[f,l].map{|u|raise if f==l||s.count(u)>1;s.index u}.minmax;p s[a+1...b];rescue;p'null'end}["Last test-case"," ","-"]
raise
, puede reemplazarloraise
con una variable indefinida como_
oy
. Esto genera un NameError. Además, creo que podría guardar algunos bytes más sin un rescate explícito:->s,f,l{a,b=[f,l].map{|u|(f==l||s.count(u)!=1)&&p('null')&&exit;s.index u}.minmax;p s[a+1...b]}
C, 192 bytes
Código sin golf:
Pruébalo aquí
fuente
Python 3, 172 bytes
fuente
Javascript ( ES6 ),
125123 bytesIdea robada en gran medida de la solución de @ edc65.
fuente
[a,,b]=
, lo usaré la próxima vez. Como las expresiones regulares son una molestia, aquí hay una solución libre de[a,,b]=(P=prompt)(s=P()), P((s=s.split(a)).length==2& (s=[].concat(...s.map(s=>s.split(b)))).length==3 ?``"${s[1]}"``:null)
Python, 161 bytes
La solución usa principalmente una expresión regular para extraer la cadena. Para acomodar que las letras puedan coincidir en cualquier dirección, el inicio y el final de la parte coincidente permite cualquiera de las letras. Verificar que las letras que realmente coincidieron para ser diferentes excluyen que la misma letra coincida dos veces, así como que las dos letras en la entrada sean las mismas.
Este es mi primer intento de usar Python para obtener una respuesta aquí. Por lo tanto, los comentarios sobre posibles mejoras son bienvenidos. Particularmente tengo la sensación de que debe haber una forma de acortar la condición en la declaración impresa.
fuente
Python 3, 155 bytes
Pruébalo en línea
fuente
golflua, 132 bytes
Respuesta bastante fea. El bit de entrada es un poco aproximado (y requiere dos líneas, primero con la cadena y segundo con los caracteres de corte). Encontrar la ubicación de las banderas es sencillo, pero demasiado largo para competir con otras respuestas. La salida es bastante fácil. Un programa Lua equivalente sería
fuente
Perl, 65
Esto requiere que no haya un carácter de nueva línea en la segunda línea de la entrada.
fuente
null
caso.