La tarea
En este desafío, su tarea es escribir un programa o función que tome una Cadena y genere un valor verdadero o falso en función de si el primer carácter y el último carácter de la Cadena de entrada son iguales.
Entrada
Puede tomar aportes de cualquier manera razonable. Sin embargo, asumir que la entrada está presente en una variable predefinida no está permitido. Se permite leer desde un archivo, consola, línea de comando, campo de entrada, etc., o tomar información como argumento de función.
Salida
Puede imprimir en cualquier formato razonable, excepto para asignar el resultado a una variable. Se permite escribir en un archivo, consola, línea de comando, cuadro modal, return
declaraciones de funciones , etc.
Reglas Adicionales
La entrada también puede ser una cadena vacía, para la cual debe devolver un valor falsey.
Las cadenas de entrada de un solo carácter deberían tener un resultado verdadero.
Su programa debe ser sensible a mayúsculas y minúsculas.
helloH
debería generar un valor de falsey.Solo puede tener un único valor de Verdad y un solo valor de Falsey. Por ejemplo, la salida
false
para una Cadena de entrada y0
para otra Cadena de entrada como valores de Falsey no está permitida.Las lagunas estándar no están permitidas.
Casos de prueba
Input -> Output
"10h01" Truthy
"Nothing" Falsey
"Acccca" Falsey
"wow!" Falsey
"wow" Truthy
"H" Truthy
"" Falsey
Este es el código de golf , por lo que gana el código más corto en bytes.
.
, pero no coincidiría con los avances de línea. En general, si se encuentra utilizando la etiqueta de cadena , especifique exactamente qué caracteres pueden aparecer en la entrada.AbAb => false
Respuestas:
Jalea , 3 bytes
Pruébalo en línea!
fuente
Python 3 , 23 bytes
La salida es a través del código de salida, por lo que 0 (éxito) es verdadero y 1 (fracaso) es falso. Si esto es aceptable, se puede guardar un byte.
Pruébalo en línea!
Cómo funciona
En primer lugar, si s es una cadena vacía,
s[0]
generará un IndexError , haciendo que el programa falle.Para que no estén vacíos s , si los caracteres primero y último son iguales,
s[0]!=s[-1]
se evaluará como falso , por lo que el programa se cierra de forma limpia y de inmediato.Finalmente, si los caracteres son diferentes,
s[0]!=s[-1]
se evaluará como Verdadero , haciendo que se realice la comparacións[-1]<e
. Como e no está definido, eso genera un NameError .Si no se desea compatibilidad con Python 2,
también funciona, ya que comparar una cadena con un número entero genera un TypeError .
fuente
JavaScript, 19 bytes
fuente
endsWith
método de objeto String. ¡Agradable! :)endsWith()
? He estado esperando una oportunidad para usarlo.Mathematica, 15 bytes
Toma una gran variedad de caracteres. Lanza errores cuando la entrada está vacía pero puede ignorarse.
fuente
===
maneja el caso vacío :)05AB1E , 4 bytes
Pruébalo en línea! o probar todas las pruebas
fuente
ÂâćüQ
para ser más confuso y ganar un byte!ćsθQ
Es otro 4 byter.Retina ,
1312 bytesPruébalo en línea! Incluye suite de prueba. Editar: Guardado 1 byte gracias a @Kobi.
fuente
C ++, 39 bytes
Programas completos:
Pruébalo en línea
fuente
s[0]
a*s
para guardar dos bytes cada una?Brachylog , 4 bytes
Pruébalo en línea!
Explicación
fuente
Java,
8177 bytesProbar en línea
true
si son iguales, de lo contrariofalse
,false
para una cadena vacíaVersión de matriz, 60 bytes
fuente
Charcter.MAX_VALUE - Character.MIN_VALUE
, que es 65535s.charAt(l-1)==s.charAt(0)
ahorraría dos bytes.Python 2 ,
262524 bytes¡Gracias a @Dennis por guardar un byte!
Pruébalo en línea!
fuente
brainfuck , 43 bytes
Pruébalo en línea!
Explicación
El bucle principal es
[>[->+<<->],]
. Después de cada iteración, la celda a la derecha de la posición actual es el primer byte de la cadena, y la celda a la izquierda es la diferencia entre el carácter manejado más recientemente y el primero.<[[-]-<]
convierte el resultado final a -1 si no es cero, y el resto convierte -1 y 0 a 48 y 49 ("0" y "1") respectivamente.fuente
Haskell , 21 bytes
c
toma aString
y devuelve aBool
.Pruébalo en línea!
c s=s!!0==last s
.take 1s
da una lista que es solo el primer elemento de, as
menos ques
esté vacío, en cuyo caso también está vacío.last s
error en una cadena vacía, pero la pereza de Haskell lo guarda: una cadena con un solo elemento siempre es diferente de la cadena vacía, sin evaluar su elemento.fuente
MATL, 5 bytes
¡Pruébalo en MATL Online!
Explicación
En el caso de que se deba manejar una cadena de entrada vacía, entonces algo como lo siguiente (8 bytes) funcionaría
Esta solución simplemente antepone
0
a al frente de la matriz N x N de tal manera que para una entrada vacía, cuando la matriz está0 x 0
, todavía hay un0
valor que luego es agarrado por0)
Pruébalo en MATL Online
fuente
5L)d~
.tn?&=PO)}F
frente a la entrada vacía; no estoy seguro si hay una manera más eficiente)Japt , 6 bytes
Pruébalo en línea!
fuente
false
). Creo que se puede solucionar este problema contJ ¥Ug
APL (Dyalog) , 4 bytes
Pruébalo en línea!
Explicación
Aquí está la razón por la que esto funciona en cadenas vacías. Aplicar
⊃
a una cadena vacía devuelve un espacio. Pero invertir una cadena vacía aún devuelve una cadena vacía, por lo que comparar una cadena vacía con una cadena no vacía (en este caso
) da un vector numérico vacío. Y aplicar
⊃
a un vector numérico vacío devuelve0
. Por lo tanto, pasar una cadena vacía devuelve0
.fuente
(⊃⌽)=⊃
o⊢/=⊃
, pero ninguno de los dos da el resultado correcto. En su lugar,⌽=⊃
compara la cadena invertida con su primer carácter y luego selecciona el primer elemento de ese. Si la cadena está vacía, termina comparando un espacio con una cadena vacía, lo que da una lista booleana vacía, de la cual el primer elemento (forzado)⊃
es0
la respuesta correcta para cadenas vacías. Su expresión es equivalente a⊃⊃=⌽
porque=
es conmutativa.⊃⌽=⊃
No es lo mismo que(⊃⌽)=⊃
. Es más costoso, ya que compara todos los elementos en lugar de solo el primero y el último. Además, no funcionaría si el OP utilizara números en lugar de cadenas.The first argument reversed
→The right argument reversed
Java,
5243 bytesPara que funcione, alimente esto en una función como la siguiente que hace que un lambda "vaya":
fuente
s.endsWith(""+s.charAt(0))
lugar des.charAt(0)==s.charAt(s.length()-1)
s->""!=s&&s.endsWith(""+s.charAt(0))
new String()
a la lambda. Lanzará una excepción. La semántica de referencia no funciona aquí.Ruby,
2624 bytes¡ Ahorré dos bytes gracias a @philomory !
Primera publicación en codegolf -))
fuente
e[0]&&e[0]==e[-1]
, ya que sie
está vacío,e[0]
será nulo. En realidad, ahora que lo pienso,nil
no es bueno ya que es falsey pero no es el mismo falsey que la comparación regresa; Aún así, después de agregar!!
aún está guardando 2 caracteres.PHP> = 7.1, 23 bytes
imprime 1 para igual y nada si el personaje es diferente
fuente
Rápido, 57 bytes
fuente
a.last
necesario el espacio después ?C #,
3830 bytesGuardado 8 bytes gracias a @raznagul.
fuente
s
simplemente compararlo con""
. Además, no necesita el?:
operador. Usar&&
tiene el mismo resultado.&
el mismo efecto también?&
no funciona. Con&&
la segunda expresión no se valida si la primera expresión es falsa. Con&
los segundos, la expresión siempre se valida y falla con unIndexOutOfRangeException
caso de prueba de cadena vacía.s.Last()
lugar des[s.Length-1]
R, 40 bytes
Gracias a Nitrodon por -2 bytes.
Gracias a MickyT por -8 bytes.
Prueba:
Salida:
fuente
rev(y<-el(strsplit(x,"")))==y
.f=
function(x)x>""&&rev(y<-charToRaw(x))==y
> <> ,
3933 bytesEsta es mi primera vez usando> <> y jugando al golf de código, por lo que agradecería sugerencias útiles.
El código está en tres secciones básicas.
fuente
Hojas de cálculo de Google, 33 bytes
Toma la entrada de la celda
[A1]
y las salidas1
para la entrada veraz y0
para la entrada falsey.Se observa que los paréntesis en
Exact(
yRight(
se dejan sin cerrar ya que Google Sheets corrige esto automáticamente tan pronto como el usuario ingresa el texto de la fórmula y presiona Enter para salir de esa celda.Salida
fuente
&
así. Además, se consideraA=a
cierto. Lo más corto que puedo obtener es 38 bytes:=AND(EXACT(LEFT(A1),RIGHT(A1)),A1<>"")
o la alternativa=IFERROR(CODE(A1)=CODE(RIGHT(A1)),1=0)
.TRUE
para cualquier entrada no error. ( captura de pantalla ) ¿Funciona en su copia para todos los casos de prueba? ExcelGuy tiene una respuesta que termina como la mía anterior por las mismas razones.*
lugar&
para el binario y la declaración, pero eso todavía deja el"A"="a"
problema, que había pasado por alto por completo. Todo eso y un poco de correcciones de sintaxis me llevan a=EXACT(LEFT(A1),RIGHT(A1))*(A1<>"")
35, pero he cambiado el idioma a Hojas de cálculo de Google, lo que me permitió colocar el terminal doble entre paréntesis en laExact
declaración, lo que representa=(A1<>"")*Exact(Left(A1),Right(A1
33 bytesR
5043414064Segunda solución con 41 bytes para una función invocable, gracias a @ niczky12 y @Giuseppe, modificada para x = ""
Primero con 50 bytes pero no para el desafío
fuente
charToRaw
conutf8ToInt
para producirNA
s cuando la cadena está vacía.{}
alrededor del cuerpo de la función.(y==rev(y))[1]
es más corto por un byteNA
para una cadena vacía, peroFALSE
para"ab"
. Pruébalo en línea! .Octava, 16 bytes
Toma una cadena
s
como entrada y compara el primers(1)
elemento con el últimos(end)
.Esto podría ser
@(s)s(1)-s(end)
si estaba bien de intercambiotrue/false
afalse/true
.fuente
GNU grep , 12 bytes
Ejecutar en modo extendido o PCRE.
No sé si esto se considera trampa o no.
fuente
JavaScript, 20 bytes
Agregue
f=
al principio e invoque comof(arg)
.Explicación
Esta función toma un argumento
_
. En el cuerpo de la función,_[0]==_.slice(-1)
verifica si el primer elemento de_
(en el0
índice th) es igual al último elemento del mismo y devuelve el apropiadotrue
ofalse
booleano.fuente
SILOS , 81 bytes
Pruébalo en línea!
fuente
Lisp común,
83746158 bytesOriginal: 83 bytes
Acabo de comenzar a aprender Common Lisp, así que siento que estoy llevando un putter a un campo de prácticas. Debe haber algún tipo de macroasistencia recursiva o manipulación de matriz posible aquí que no estoy viendo.
Esta es una función anónima que acepta una cadena como entrada:
Prettified:
¡Me encantaría ver una solución más elegante!
Revisión 1: 74 bytes
¡Tengo que amar esas funciones de biblioteca estándar!
Feo:
Bonita:
Revisión 1.5: 61 bytes
Espacios en blanco!
Revisión 2: 58 bytes
Feo:
Bonita:
¡Eso es todo por ahora! Creo que ya soy más inteligente.
fuente
if
lugar deand
y en(mismatch(reverse s)s)
lugar de(mismatch s(reverse s))
AWK,
2934 bytesEste podría estar engañando un poco, porque requiere invocar AWK con la opción:
En GNU Awk puedes usar los sinónimos de forma larga:
Así que agregué 5 bytes al total para dar cuenta de esto.
Feo:
Bonita:
fuente