A tarefa
Nesse desafio, sua tarefa é escrever um programa ou função que recebe uma String e gera um valor de verdade ou falsey com base em se o primeiro caractere e o último caractere da String de entrada são iguais.
Entrada
Você pode receber sugestões de qualquer maneira razoável. No entanto, supondo que a entrada esteja presente em uma variável predefinida não é permitido. É permitida a leitura de um arquivo, console, linha de comando, campo de entrada etc. ou a entrada como argumento de função.
Saída
Você pode produzir em qualquer formato razoável, exceto para atribuir o resultado a uma variável. A gravação em um arquivo, console, linha de comando, caixa modal, return
instruções de função etc. é permitida.
Regras adicionais
A entrada também pode ser String vazia, para a qual você deve retornar um valor falsey.
As seqüências de entrada de caractere único devem ter um resultado verdadeiro.
Seu programa deve fazer distinção entre maiúsculas e minúsculas.
helloH
deve gerar um valor de falsey.Você pode ter apenas um único valor Truthy e um único valor Falsey. Por exemplo, a saída
false
para uma String de entrada e0
para outra String de entrada como valores Falsey não é permitida.As brechas padrão não são permitidas.
Casos de teste
Input -> Output
"10h01" Truthy
"Nothing" Falsey
"Acccca" Falsey
"wow!" Falsey
"wow" Truthy
"H" Truthy
"" Falsey
Isso é código-golfe , então o código mais curto em bytes vence!
fonte
.
, mas não corresponderia a feeds de linha. Em geral, se você estiver usando a tag string , especifique exatamente quais caracteres podem aparecer na entrada.AbAb => false
Respostas:
Gelatina , 3 bytes
Experimente online!
fonte
Python 3 , 23 bytes
A saída é via código de saída, então 0 (sucesso) é verdadeiro e 1 (falha) é falso. Se isso for aceitável, um byte pode ser salvo.
Experimente online!
Como funciona
Primeiro, se s for uma string vazia,
s[0]
irá gerar um IndexError , causando falha no programa.Para s não vazios , se o primeiro e o último caracteres forem iguais,
s[0]!=s[-1]
serão avaliados como Falso , para que o programa saia limpa e imediatamente.Por fim, se os caracteres forem diferentes, ele
s[0]!=s[-1]
será avaliado como True , fazendo com que o compairsons[-1]<e
seja executado. Como e é indefinido, isso gera uma NameError .Se a compatibilidade com o Python 2 não for desejada,
também funciona, pois comparar uma string com um número inteiro gera um TypeError .
fonte
JavaScript, 19 bytes
fonte
endsWith
método de objeto String. Agradável! :)endsWith()
?! Eu estava esperando por uma oportunidade de usá-lo.Mathematica, 15 bytes
Toma uma matriz de caracteres. Lança erros quando a entrada está vazia, mas pode ser ignorada.
fonte
===
trata o caso vazio :)05AB1E , 4 bytes
Experimente online! ou Experimente todos os testes
fonte
ÂâćüQ
para ser mais confuso e ganhar um byte!ćsθQ
é outro 4-byter.Retina ,
1312 bytesExperimente online! Inclui suíte de teste. Editar: salvou 1 byte graças a @Kobi.
fonte
C ++, 39 bytes
Programas completos:
Experimente online
fonte
s[0]
que*s
para salvar dois bytes cada um?Braquilog , 4 bytes
Experimente online!
Explicação
fonte
Java,
8177 bytesExperimente on-line
true
se eles são iguais, caso contráriofalse
,false
para cadeia vaziaVersão da matriz, 60 bytes
fonte
Charcter.MAX_VALUE - Character.MIN_VALUE
, o que é 65535s.charAt(l-1)==s.charAt(0)
salvaria dois bytes.Python 2 ,
262524 bytesObrigado a @Dennis por salvar um byte!
Experimente online!
fonte
brainfuck , 43 bytes
Experimente online!
Explicação
O loop principal é
[>[->+<<->],]
. Após cada iteração, a célula à direita da posição atual é o primeiro byte da string e a célula à esquerda é a diferença entre o caractere manipulado mais recentemente e o primeiro.<[[-]-<]
converte o resultado final em -1 se diferente de zero e o restante converte -1 e 0 em 48 e 49 ("0" e "1"), respectivamente.fonte
Haskell , 21 bytes
c
pega aString
e retorna aBool
.Experimente online!
c s=s!!0==last s
.take 1s
fornece uma lista que é apenas o primeiro elemento de, as
menos ques
esteja vazio; nesse caso, também está vazio.last s
iria errar uma string vazia, mas a preguiça de Haskell a salvaria: uma string com um único elemento é sempre diferente da string vazia, sem avaliar seu elemento.fonte
MATL, 5 bytes
Experimente no MATL Online!
Explicação
No caso, que uma string de entrada vazia deve ser manipulada, algo como o seguinte (8 bytes) funcionaria
Essa solução simplesmente anexa
0
a à frente da matriz N x N, de modo que, para uma entrada vazia, quando a matriz está0 x 0
, ainda existe uma0
valor que é então capturado por0)
Experimente no MATL Online
fonte
5L)d~
.tn?&=PO)}F
para lidar com entrada vazia; não tenho certeza se existe uma maneira mais eficiente)Japonês , 6 bytes
Experimente online!
fonte
false
). Eu acho que você pode consertar isso comtJ ¥Ug
APL (Dyalog) , 4 bytes
Experimente online!
Explicação
Aqui está a razão pela qual isso funciona em cadeias vazias. A aplicação
⊃
a uma sequência vazia retorna um espaço. Mas a reversão de uma string vazia ainda retorna uma string vazia, portanto, comparar uma string vazia com uma string não vazia (nesse caso
) fornece um vetor numérico vazio. E a aplicação
⊃
a um vetor numérico vazio retorna0
. Portanto, a passagem de uma string vazia retorna0
.fonte
(⊃⌽)=⊃
ou⊢/=⊃
, mas nenhum deles dá o resultado certo. Em vez disso,⌽=⊃
compara a sequência invertida com seu primeiro caractere e, em seguida, escolhe o primeiro elemento disso. Se a string estiver vazia, ela acaba comparando um espaço com uma string vazia, o que fornece uma lista booleana vazia, da qual o primeiro elemento (coagido)⊃
é0
- a resposta correta para as strings vazias. Sua expressão é equivalente a⊃⊃=⌽
porque=
é comutativa.⊃⌽=⊃
não é o mesmo que(⊃⌽)=⊃
. É mais caro, pois compara todos os elementos em vez de apenas o primeiro e o último. Também não funcionaria se o OP tivesse usado números em vez de strings.The first argument reversed
→The right argument reversed
Java,
5243 bytesPara fazê-lo funcionar, alimente isso em uma função como a seguinte que faz um lambda "ir":
fonte
s.endsWith(""+s.charAt(0))
em vez des.charAt(0)==s.charAt(s.length()-1)
s->""!=s&&s.endsWith(""+s.charAt(0))
new String()
o lambda. Isso lançará uma exceção. A semântica de referência não funciona aqui.Ruby,
2624 bytesGuardado dois bytes graças a @philomory !
Primeiro post no codegolf -))
fonte
e[0]&&e[0]==e[-1]
, pois see
estiver vazio,e[0]
será nulo. Na verdade, pense bem,nil
não é bom, pois é falsey, mas não é o mesmo falsey que a comparação retorna; Ainda assim, depois de adicionar,!!
você ainda está salvando 2 caracteres.PHP> = 7.1, 23 bytes
imprime 1 para igual e nada se o caractere for diferente
fonte
Rápido, 57 bytes
fonte
a.last
necessário ?C #,
38bytes 30Guardado 8 bytes graças a @raznagul.
fonte
s
basta compará-lo com""
. Além disso, você não precisa do?:
operador. Usar&&
tem o mesmo resultado.&
teria o mesmo efeito também?&
não funciona. Com&&
a segunda expressão, não é validado se a primeira expressão for falsa. Com&
os segundos, a expressão é sempre validada e falha com umIndexOutOfRangeException
caso de teste de cadeia vazia.s.Last()
em vez des[s.Length-1]
R, 40 bytes
Obrigado ao Nitrodon por -2 bytes.
Graças ao MickyT por -8 bytes.
Teste:
Saída:
fonte
rev(y<-el(strsplit(x,"")))==y
.f=
function(x)x>""&&rev(y<-charToRaw(x))==y
> <> ,
3933 bytesEsta é a minha primeira vez, usando> <> e jogando código-golfe, portanto, sugestões úteis serão apreciadas.
O código está em três seções básicas.
fonte
Planilhas Google, 33 bytes
Recebe entrada da célula
[A1]
e saídas1
para entrada0
de verdade e para entrada de falsey.Note-se que os parênteses em
Exact(
eRight(
são deixados unclosed como Google Sheets corrige automaticamente este assim que o usuário insere o texto da fórmula e pressionou entrar para deixar essa célula.Saída
fonte
&
assim. Além disso, consideraA=a
ser verdade. O menor que consigo é 38 bytes:=AND(EXACT(LEFT(A1),RIGHT(A1)),A1<>"")
ou a alternativa=IFERROR(CODE(A1)=CODE(RIGHT(A1)),1=0)
.TRUE
para qualquer entrada sem erro. ( captura de tela ) Ele funciona na sua cópia para todos os casos de teste? O ExcelGuy tem uma resposta que acaba como a minha pelas mesmas razões.*
em vez&
do binário e afirmação, mas isso ainda deixa a"A"="a"
questão, que eu tinha completamente esquecido. Tudo isso e um pouco de correções de sintaxe me leva a=EXACT(LEFT(A1),RIGHT(A1))*(A1<>"")
35, mas eu mudei a linguagem de planilhas do Google, o que me permitiu soltar o parenthetical dupla terminal naExact
declaração, tornando=(A1<>"")*Exact(Left(A1),Right(A1
por 33 bytesR,
50.434140.64Segunda solução com 41 bytes para uma função que pode ser chamada - graças a @ niczky12 e @Giuseppe - alterada para x = ""
Primeiro com 50 bytes, mas não para o desafio
fonte
charToRaw
porutf8ToInt
para produzirNA
s quando a sequência estiver vazia.{}
ao redor do corpo da função.(y==rev(y))[1]
é mais curto por um byteNA
para cadeia vazia, masFALSE
para"ab"
. Experimente online! .Oitava, 16 bytes
Ele pega uma string
s
como entrada e compara o primeiros(1)
elemento com o últimos(end)
.Esta poderia ser
@(s)s(1)-s(end)
se era OK para trocartrue/false
afalse/true
.fonte
GNU grep , 12 bytes
Execute no modo estendido ou PCRE.
Não sei se isso é considerado trapaça ou não.
fonte
JavaScript, 20 bytes
Adicione
f=
no início e chame likef(arg)
.Explicação
Esta função recebe um argumento
_
. No corpo da função,_[0]==_.slice(-1)
verifica se o primeiro elemento de_
(no0
índice th) é igual ao último elemento e retorna o apropriadotrue
oufalse
booleano.fonte
SILOS , 81 bytes
Experimente online!
fonte
Lisp comum,
83746158 bytesOriginal: 83 bytes
Eu comecei a aprender Common Lisp, então sinto que estou trazendo um taco para um driving range. Deve haver algum tipo de magia de macro recursiva ou manipulação de matriz possível aqui que não estou vendo.
Esta é uma função anônima que aceita uma string como entrada:
Pré-especificado:
Gostaria de ver uma solução mais lisa!
Revisão 1: 74 bytes
Conseguiu amar essas funções padrão da biblioteca!
Feio:
Bonita:
Revisão 1.5: 61 bytes
Espaço em branco!
Revisão 2: 58 bytes
Feio:
Bonita:
É tudo por agora! Eu acho que já sou mais inteligente.
fonte
if
vez deand
e em(mismatch(reverse s)s)
vez de(mismatch s(reverse s))
AWK,
2934 bytesEste pode estar trapaceando um pouco, porque requer chamar o AWK com a opção:
No GNU Awk, você pode usar os sinônimos de formato longo:
Então eu adicionei 5 bytes ao total para explicar isso.
Feio:
Bonita:
fonte