Em um desafio anterior , pedi aos jogadores de código que produzissem strings que copiam cada caractere em uma string. Por exemplo:
TThhiiss iiss ddoouubbllee ssppeeaakk!!
Esse desafio é simplesmente detectar se algum texto atende à definição de uma string de fala dupla.
- Há um número par de caracteres.
- Quando dividido em pares, cada par consiste em dois do mesmo personagem.
O desafio
- É código de golfe, faça em poucos bytes.
- Use qualquer idioma que você escolher.
- Inclua um link para um intérprete online.
- O código aceitará algum texto.
- Para simplificar, a entrada consistirá apenas em caracteres ASCII imprimíveis
- Ele retornará uma indicação sobre se a entrada é ou não de fala dupla. Poderia ser:
- Um booleano
- Strings ('verdadeiro', 'falso', 'sim', 'não' etc)
- Inteiros 0 ou 1
Casos de teste:
- aba - false
- abba - false
- aabb - true
- aaabb - false
- tthhiiss - verdadeiro
- ttthhhiiisss - false
code-golf
string
decision-problem
AJFaraday
fonte
fonte
abba
que deve ser falseyaabbbb
que deve ser0
que deve ser falsey.Respostas:
Python 3 , 24 bytes
Experimente online!
fonte
brainfuck , 20 bytes
Guardou 1 byte graças a Jo King.
Experimente online!
Saída legível!
Pega dois caracteres de cada vez e se afasta do 1 na fita se algum par não corresponder. O EOF é tratado como 0 e, portanto, tratado automaticamente.
A saída é um byte nulo se a sequência não for de fala dupla e 0x01 se for. A versão legível gera esses caracteres como um custo de 14 bytes.
fonte
MATL , 4 bytes
Input é uma string, delimitada por qoutes únicos. A saída é
0
para fala dupla,1
caso contrário.Experimente online!
Explicação
Considere a entrada
'TThhiiss iiss ddoouubbllee ssppeeaakk!!'
como um exemplo.fonte
05AB1E ,
652 bytesInsira como uma lista de caracteres.
-3 bytes, portando a resposta Japt de @ Shaggy , certifique-se de votá-lo!
Experimente online ou verifique mais alguns casos de teste .
Explicação:
fonte
Japonês , 4 bytes
Tente
Alternativa
Tente
fonte
Retina , 9 bytes
Experimente online.
Explicação:
Remova todos os pares dos mesmos caracteres:
Verifique se não há caracteres restantes:
fonte
^$
como estágio final.false
como verdade etrue
como falsey (mas se ele salvar um byte e for permitido, eu ainda o usarei). ;) Mas, como essa é uma solução de bytes iguais, com os resultados esperados, isso é melhor.Geléia , 3 bytes
Experimente online!
fonte
¹©s2L€=2Ạa®s2E€Ạ
...ḢƝs2E€Ạ
... mas eu não conseguia conseguir o que queria, e então viŒœ
lolStax , 5 bytes
Execute e depure
Procedimento:
fonte
PHP ,
5856 bytesExperimente online!
Como uma função recursiva.
PHP ,
6156.52 bytesExperimente online!
Ou programa autônomo. Seqüência de entrada via
STDIN
, output étruthy
(1
) se for de fala dupla efalsey
(0
) se não for de fala dupla.-4 bytes thx para @ Night2 !
fonte
código de máquina x86,
97 bytesEntrada da string
SI
, comprimento da string de entradaCX
. SaídaZF
se for falar duas vezes.Ou 14 bytes como um executável completo do PC DOS:
A entrada é via
STDIN
pipe ou interativa. Irá ecoar a entrada "duplicada" até que um caractere não duplicado seja detectado, e nesse ponto será encerrado (talvez regras de E / S flexíveis sejam um pouco, mas essa é apenas uma resposta bônus).Crie e teste o ISDBL2.COM usando
xxd -r
:Executável completo do PC DOS original de 24 bytes :
Entrada da linha de comando, saída para a tela
'Y'
se dupla,'N'
se não.Crie e teste ISDBL.COM usando
xxd -r
:Créditos:
fonte
LOOPE
vez deJNZ
/LOOP
para salvar 2 bytes.Lua ,
676663593332 bytes-25 bytes graças a Giuseppe
-1 byte graças a val
Experimente online!
Remove todos os caracteres dobrados e verifica se o resultado está vazio.
fonte
i:gsub("(.)%1","")
e verificar sei==""
?"(.)%1"
por si só incluísse colisões, mas não me ocorreu que substituí-lo de uma vez por todas as capturas seria suficiente. Devo implementar sua solução ou você deve escrever sua própria resposta? E obrigada!arg[1]
pode ser substituído por(...)
para salvar um byte.Perl 5 , 15 bytes
Experimente online!
Saídas 1 para fala dupla, nada para não fala dupla.
fonte
MathGolf , 2 bytes
Experimente online!
Basicamente, o mesmo que a resposta 05AB1E,
½
divide a sequência em caracteres pares e ímpares e, em seguida, verifique a igualdade. Passa para a sequência vazia.fonte
JavaScript, 28 bytes
Experimente online!
23 bytes usando o regex de wastl
Experimente online!
fonte
null
para falso: Experimente online!s=>!s.some((x,y)=>x>s[y|1])
>
por!=
Haskell ,
2823 bytesExperimente online!
Muito simples. A fala dupla é apenas vazia ou um caractere repetido é prefixado para falar duas vezes.
Menos direto agora. Resultados via presença ou ausência de erro, por meta consenso ; nenhum erro significa falar duas vezes. A correspondência de padrões falha quando os dois primeiros caracteres diferem ou quando há um número ímpar de caracteres. Obrigado a Laikoni por essas economias!
fonte
V (vim) , 7 bytes
Experimente online! ou Verificar casos de teste
Hexdump:
Apenas duas regexes. Explicação:
fonte
Braquilog , 5 bytes
Experimente online!
Sucesso ou falha.
fonte
PowerShell ,
3938 bytesExperimente online!
onde
$p
contém um caractere anterior.Sem recursão , sem regex :). Recebe a entrada como um array de caracteres por meio de uma string de splatting (consulte o link TIO).
PowerShell , 48 bytes
Experimente online!
Sem recursão , sem regex e sem pipe: D. Ele também recebe a entrada como um array de caracteres por meio de uma string de splatting. Em
$b-eq$a
vez disso, usa$a-eq$b
para um caso em que um último caractere possui o código # 0.fonte
PowerShell ,
6459 bytesExperimente online!
Função recursiva, sem regex. Recebe a entrada como uma
char
matriz (consulte o link TIO). Descasca os dois primeiros elementos em$a
e$b
armazena o restante em$r
. Se ainda tivermos elementos restantes, recorra junto com$a -eq $b
. Caso contrário, basta verificar se$a -eq $b
. A saída está implícita.-5 bytes graças ao mazzy
fonte
$
bloco de declaração anterior e não conseguia descobrir por que não estava funcionando.Julia 1.0 , 25 bytes
Experimente online!
fonte
f
, por exemplo!a=...
. Ou para usar uma função anônima:s->...
J ,
131110 bytesExperimente online!
-2 bytes graças a Adám
-1 byte graças a milhas
Explicação do TLDR: A entrada é igual a todos os outros caracteres da entrada duplicada?
fonte
-:]#~2 0$~#
-:2#_2{.\]
deve salvar outro byteLinguagem de programação de Shakespeare ,
204156 bytes-48 bytes graças a Jo King (principalmente alterando o método de saída)
Experimente online!
Sai com erro se a entrada for de fala dupla e com aviso se não for de fala dupla (o que é permitido por padrão).
fonte
Barril ,
1917 caracteresExplicação:
Experimente online!
fonte
R ,
5334 bytes-19 bytes graças a Giuseppe
Experimente online!
fonte
gsub("(.)\\1","",a)==""
que faria o truque também; muitos outros usam o mesmo regex.function(a)!sum(rle(a)$l%%2)
para 28Flak cerebral ,
26, 22 bytesExperimente online!
Saídas 1 para falso e 0 para verdadeiro.
Versão legível:
Eu originalmente tinha isso:
Qual é 10 bytes mais longo.
fonte
({({}[{}]){{}}{}})
QuadR , 11 bytes
Experimente online!
''≡⍵
o resultado é uma string vazia quando(.)\1
um personagem seguido por ele mesmoé substituído por nada
fonte
JavaScript,
2623 bytesExperimente online!
Solução Recursiva, 30 bytes
Agradecimentos a Arnauld por uma correção ao custo de 0 bytes.
Experimente online!
fonte
Vermelho , 36 bytes
Experimente online!
Alternativa mais longa:
Vermelho , 40 bytes
Experimente online!
fonte
Zsh , 36 bytes
Sai verdadeiramente (0) se NÃO falar duas vezes e falso (1) se falar duas vezes. (Conforme permitido em um comentário.)
Experimente online!
fonte
Prolog (SWI) ,
6045 bytesgraças a String não relacionada
Experimente online!
Convertê-lo de uma string para uma lista de átomos arruinou a pontuação, mas bem ..
fonte
atom_chars
vez destring_chars
, mesmo tendo uma string como entrada, e não um átomo. Mas isso pode ser irrelevante se você puder usar uma string delimitada por backtick - ou seja, uma lista de códigos de caracteres.