Inspirado por É falar duas vezes? , Eu projetei um desafio mais difícil. Dada uma sequência, determine se a sequência é n-speak , para qualquer .
N-speak é definido repetindo cada letra vezes. Com , a sequência é transformada em . Seu objetivo é descobrir se a entrada é uma saída válida para qualquer transformação n-speak.Hello
HHHHeeeelllllllloooo
Deve-se notar que qualquer sentença que seja válida para n-speak, para , também é válida para k-speak. Assim, as partes difíceis a serem resolvidas serão valores ímpares de n .
Entrada
Uma sequência que consiste em pelo menos 2 caracteres. A entrada também pode ser uma lista de caracteres. A entrada diferencia maiúsculas de minúsculas.
Saída
Truthy
se a sequência for n-speak, falsey
caso contrário.
Exemplos
Casos verdadeiros
HHeelllloo,, wwoorrlldd!!
TTTrrriiipppllleee ssspppeeeaaakkk
QQQQuuuuaaaaddddrrrruuuupppplllleeee ssssppppeeeeaaaakkkk
7777777-------ssssssspppppppeeeeeeeaaaaaaakkkkkkk
999999999
aaaabb
aaaaaaaabbbbcc
aaaaabbbbb
@@@
Se você deseja gerar casos de verdade adicionais, pode usar este script MathGolf . Coloque a string entre aspas e o valor de como entrada.
Casos falsos
Hello, world!
TTTrrriiipppllleee speak
aaaaaaaaaaaaaaaab
Ddoouubbllee ssppeeaakk
aabbab
aaaabbb
a (does not need to be handled)
(empty string, does not need to be handled)
Obviamente, como se trata de código de golfe, prepare-se para aparar alguns bytes!
aabbab
aaaabbb
Respostas:
APL (Dyalog Unicode) , 12 bytes
Corre com
⎕io←0
Experimente online!
Jogou golfe com Adám .
Na entrada (exemplo :,
"aaccccaaaaaabb"
usando""
para indicar uma sequência (uma matriz de caracteres) e''
para indicar um caractere)∊0⍞0
cercar com 0s e achatar,0 'a' 'a' 'c' 'c' 'c' 'c' 'a' 'a' 'a' 'a' 'a' 'a' 'b' 'b' 0
2≠/
executar pares não iguais,1 0 1 0 0 0 1 0 0 0 0 0 1 0 1
⍸
obtenha os índices indexados em 0,0 2 6 12 14
∨/
calcular o GCD,2
1≠
isso não é igual a 1?fonte
Java 10, 85 bytes
Regex portado da resposta JavaScript de @Arnauld .
Experimente online.
Explicação:
Explicação Regex:
fonte
Gelatina , 5 bytes
Experimente online!
fonte
JavaScript (ES6), 53 bytes
Derivado da expressão regular usada por @wastl em É falar duas vezes? .
Experimente online!
Versão recursiva, 55 bytes
Experimente online!
Comentado
fonte
05AB1E , 5 bytes
Experimente online!
fonte
Python 2 ,
73706967 bytesExperimente online!
-4 bytes, graças ao Jitse
fonte
set(...)
por{...}
...1 in[...
Python 3 , 69 bytes
Experimente online!
fonte
QuadS , SBCS de 16 bytes
Experimente online!
1≠
é 1 diferente de∨/
o GCD⍵
do resultado de(.)\1*
PCRE Procurando por qualquer caractere seguido por 0 ou mais repetições⊃⍵L
e retornando o primeiro comprimento da partida (ou seja, a duração da partida)fonte
Stax , 5 bytes
Execute e depure
Procedimento:
fonte
Consulta T-SQL 2008, 193 bytes
Experimente online
fonte
PHP ,
7675 bytesExperimente online!
Primeira tentativa, uma abordagem iterativa um tanto ingênua.
Ungolfed:
-1 byte , thx para @ Night2!
fonte
Perl 6 ,
302726 bytesExperimente online!
Também usa o truque GCD, mas usa o índice da posição final de cada execução correspondida pelo regex. Retorna um número negativo (verdade) se n-speak, zero (falsey) caso contrário.
fonte
Haskell , 48 bytes
Experimente online!
Direto; usa o truque do GCD.
fonte
Vermelho , 80 bytes
Experimente online!
Vermelho mais idiomático :
Vermelho , 81 bytes
Experimente online!
fonte
Braquilog , 5 bytes
Experimente online!
Recebe a entrada pela variável de entrada e sai por sucesso ou falha.
No começo, pensei que isso seria realmente menor do que minha solução. É falar duas vezes? , mas percebi que
ġ
pode e vou tentar um grupo de 1.fonte
Japonês
-¡
, 8 bytesTente
fonte
Kotlin , 78 bytes
Experimente online!
Explicação
fonte
Scala , 80 bytes
Experimente online!
PS. A solução original foi baseada na
split
função, mas é mais longa (83 bytes).fonte
true
para entradaaab
, infelizmente.s.
substituído por(s+s).
para lidar com isso.aaaabb
eaabbbb
.Wolfram Language (Mathematica) , 34 bytes
Experimente online!
fonte
Perl 5
-p
,83797674 bytesExperimente online!
fonte
Brain-Flak , 96 bytes
Experimente online!
Usa o mesmo truque do GCD usado por muitos outros envios. A saída é 0 se a entrada não for n-speak, e um número inteiro positivo caso contrário.
fonte
Oracle SQL, 182 bytes
Ele trabalha com a suposição de que os dados de entrada são armazenados em uma tabela t (x), por exemplo
fonte
K (ngn / k) ,
2923 bytesExperimente online!
edit: removeu alguns dois pontos desnecessários (eu sei quando uma monádica é necessária, mas nem sempre é claro para mim se há ambiguidade, por padrão eu
x-y*x%y
incluo dois pontos) e alterei o mod para ngn / k'sy!x
, o que significava que eu poderia remover uma atribuição de variávelfonte
APL (Dyalog Unicode) ,
24SBCSde22 bytesFunção de prefixo tácito anônimo.
Experimente online!
⊂
coloque a string para tratar o mapa usando a string inteira,por exemplo
"aaabbb"
⍳∘≢{
...}¨
para cada um dos⍳
ɩ ndices 1 através da contagem de caracteres no string:por exemplo,
3
⍺↑⍺
pegue o número atual de elementos do número atual, preenchendo com 0s,por exemplo
[3,0,0]
(≢⍵)⍴
ciclicamente r eshape na forma da contagem de caracteres na cadeia, por exemplo
[3,0,0,3,0,0]
⍵/⍨
use isso para replicar os caracteres da string"aaabbb"
1↓
largue o primeiro ( n = 1)⊂∊
a string inteira é membro dessa lista?fonte
[1,0,0,1,0,0…]
etc. Ficarei feliz em ensinar a você APL (não demorará muito para aprender). Basta ir ao APL Orchard .{1<∨/≢¨⍵⊆⍨≢∘∪¨,\⍵}
para 18{1<∨/≢¨⍵⊆⍨≢¨∪\⍵}
?aacccaaaaabb
Retina 0.8.2 , 28 bytes
Experimente online! O link inclui casos de teste. Explicação:
Divida o texto em séries de caracteres idênticos.
Substitua todos eles pelo mesmo caractere.
Verifique se o GCD dos comprimentos das execuções é maior que 1.
fonte
Japonês
-mR
, 12 bytesTente
fonte
MathGolf , 14 bytes
Experimente online!
Explicação
Verifica todas as divisões possíveis da sequência de entrada em pedaços de comprimento igual e verifica se há uma partição na qual todos os pedaços têm apenas um caractere exclusivo.
fonte
Pitão , 7 bytes
Saídas 0 para entradas falsas ou um número inteiro positivo, caso contrário.
Experimente online!
fonte
Pitão , 8 bytes
Experimente online!
fonte
Perl 5
-n
, 38 bytesExperimente online!
o
print"\n"
no rodapé é necessário para separar as saídas.Loop direto através de todos os
n
s possíveis . Não produz nada para "1-speak", qualquer outra coisa para n-speak onde n> 1.fonte