A inspiração do desafio foi essa que vi em algum lugar:
A palavra "freira" é apenas a letra n fazendo uma roda de carroça
Seu desafio é pegar uma corda e determinar se é a primeira letra que faz uma roda estrelada.
Regras
Uma string é uma letra que roda uma roda se:
- A primeira letra é igual à última letra. (A carta não pode cair de cabeça para baixo.)
- A sequência alterna entre letras de roda giratória a cada caractere.
As letras cartwheeling são n
e u
, m
e w
, b
e q
. Observe que n
e w
juntos não são letras giratórias e nem são w
e b
.
- Você pegará uma string usando qualquer um dos nossos métodos de entrada padrão.
- Você produzirá um valor verdadeiro se a sequência for uma letra de roda giratória e um valor falso se não for. A saída pode ser feita usando qualquer método de saída padrão.
Regras adicionais:
- Somente letras em minúsculas
n
/u
/m
/w
/b
/q
precisam ser manuseadas. - Você pode assumir que a entrada nunca está vazia.
- Uma cadeia de um caractere não é uma roda dentada válida.
Casos de teste
Input -> Output
nun -> truthy
nunun -> truthy
nunununu -> falsy
wmw -> truthy
wmwun -> falsy
bqbqbqbqbqb -> truthy
v^v^v -> falsy
AVAVA -> falsy
OOO -> falsy
ununununu -> truthy
nunwmwnun -> falsy
nun unun -> falsy
nunwmw -> falsy
nnuunnuunnuu -> falsy
nwnwnwnwn -> falsy
m -> falsy
nunuuunun -> falsy
Vencedora
Como no code-golf , o código mais curto (em cada idioma) vence!
code-golf
string
decision-problem
MD XF
fonte
fonte
b
estraga tudoq
, não é?d
ep
também são amigos de roda dentada. A chave é que eles giram, não giram.uwuwuwuwuwu
bqb
mas nãopdp
?dpd
,pdp
e tais não funcionam, acho que você deveria tê-los nos casos de teste com uma resposta falsa.Respostas:
Gelatina , 23 bytes
Isso levou mais trabalho do que se poderia pensar!
Um link monádico que pega uma lista de caracteres e retorna
1
(verdade) ou0
(falsey).Experimente online! ou veja uma suíte de testes .
Quão?
Localiza o índice de cada caractere da entrada na lista de caracteres indexados em 1
nmbuwq
. Essa sequência é organizada de modo que os índices dos pares sejam separados por três, portanto, a diferença incremental dos índices para cartwheels válidos será repetições de um de[-3,3]
ou[3,-3]
.Quando um item não é encontrado em uma lista pelo átomo "index of"
i
, ele retorna0
, o qual emparelharia caracteres não encontradosb
, fazendo com que a entrada fosse realmente verdadebxbxb
. Portanto,0
s são substituídos por10
um valor a mais de três de qualquer outro valor antes de verificar a validade.fonte
sed 4.2.2 , 30 + 1
-r
=4331 bytesEconomizou 12 bytes graças a @Neil, encurtando a primeira linha
Experimente online!
Exclui a entrada se falsey, caso contrário, não faz nada na entrada.
Explicação
Com o
-r
sinalizador, não precisamos usar\(
e\)
para capturar grupos e isso economiza bytes.fonte
sed
assistente ...sed
parece mágico para mim. : Punu
enun
containsnu
e a segunda linha garante que o restante das letras corresponda a esses dois.JavaScript (ES6),
827877 bytesEconomizou 1 byte usando dois valores falsy, conforme sugerido por ThePirateBay e MD XF.
Casos de teste
Mostrar snippet de código
fonte
&&
vez de&
?&
produziria querfalse
ou0
.)&
; Especifiquei (no chat) em algum momento que valores inconsistentes de falsidade são permitidos.Python 3 , 111 bytes
-2 bytes graças ao Sr. Xcoder.
Experimente online!
fonte
nunununu
.Python 2 , 63 bytes
Experimente online!
fonte
"nu un nm mn bp pb".split()
para salvar 4 bytes e remover alguns espaços em branco. 75 bytes:lambda s:any(s==c[-1]+c*max(len(s)/2,1)for c in"nu un nm mn bp pb".split())
s[0]
invés dec[-1]
.unmnu
eunmwnu
. Realmente retorna falso positivo quando(s==s[::-1])+len(set(s))
é 4, o que é fácil de forçar. Mesmo apenas 4 caracteres diferentes fazem com que retorne True.Python 3 , 71 bytes
Experimente online!
-1 graças a @HyperNeutrino e -13 graças a @ovs
Se o que foi dito acima falhar em qualquer caso de teste, há uma alternativa:
Experimente online!
Explicação
''.join(sorted(list({*n[1::2]}).union({*n[::2]}))))
- Obtém os caracteres em índices ímpares e os caracteres em índices pares, desduplica-os e classifica a lista formada por sua união.in'nu,mw,bq'
- Verifica se são combinações válidas de cart-carta.n[0]==n[-1]
- Verifica se o primeiro caractere é o mesmo que o último.fonte
uwuwuwuwuwu
resulta em truenuuun -> True
. Isto não está certo.JavaScript (ES6), 40 bytes
Verifica se a sequência de entrada concatenada com o segundo caractere da sequência de entrada é uma sequência repetida do mesmo par de caracteres de roda dentada.
Testes:
fonte
Clojure, 156 bytes
Isso foi enganosamente difícil! Acabei tendo que dividi-lo em três sub problemas:
Certamente não ganhei, mas este foi um bom dia de exercício! Explicação completa abaixo:
fonte
Haskell,
8078 bytesExperimente online!
Como funciona:
fonte
Python 2 , 45 bytes
Experimente online!
Os espaços na sequência são
DEL
caracteres.fonte
|u|
é interpretado como uma roda de carroça.DEL
caracteres para ficar claro.s[:3]in'bqbqnunuwmwm'
Retina , 24 bytes
Saídas 1 para verdade, 0 para falsidade.
Resposta do charlatão do Porto de Vacas.
Experimente online!
fonte
nunwmwnun
(quando deveria ser falso), e foi por isso que tive a\1*
resposta na minha sed.G`nu|mw|bp
uma vez que todos cordas truthy conter um desses pares de letras ea segunda linha irá assegurar que todo o resto da cadeia contém essas letras também ..ununununu
Grime , 28 bytes
Experimente online! Imprime
1
para entradas0
verdadeiras e falsas.Explicação
A sintaxe do Grime se parece com expressões regulares e um programa Grime especifica um padrão que pode ou não corresponder a um retângulo de caracteres.
Alguns recursos do Grime que ajudaram a diminuir isso:
""
altera isso: os elementos de sintaxe são escapados, mas os literais não. Sem as aspas, a parte que enumera os pares de caracteres seria(\n\u|\b\p|\m\w)oT
.-
) agem sobre seu resultado:..-#!"…"oT
é equivalente a(..-"…"oT)#!
.v
diminuem a precedência dos elementos de sintaxe que os seguem. Um solitário&
tem maior precedência do que-
, masv&
menor. Da mesma forma,..+
é analisado como.(.+)
, mas..v+
é equivalente a(..)+
.fonte
Python 2 , 69 bytes
Experimente online!
fonte
Pitão , 27 bytes
Suíte de teste.
Saídas
1
para verdade e /False
ou0
falsidade, conforme o OP permitido no bate-papo.fonte
Gelatina , 27 bytes
Experimente online!
Como funciona
fonte
Python 2 , 103 bytes
Experimente online!
fonte
Japt , 47 bytes
Experimente online!
fonte
Python 3 , 88 bytes
len(x)%2
: uma sequência de comprimento par não pode terminar no primeiro caracterex[:2] in
: verifique se há um dos 6 pares iniciais válidoslen(set())
: obtém o comprimento dos conjuntos de caracteres em 0,2,4 ... e 1,3,5 ...Retorna
True
se a lista de avaliações for igual a [1,1,1,1], caso contrárioFalse
.Experimente online!
fonte
Perl 5 , 55 + 1 (-p) = 56 bytes
Experimente online!
Imprime a versão "invertida" do primeiro caractere para true, nada para false.
fonte
PHP, 59 + 1 bytes
Corra como cano com
-F
.solução parcialmente regex, 101 + 1 bytes:
Saída vazia por falsidade. Corra como cano com
-nR
.fonte
Java 8, 57 bytes
Experimente aqui.
Regex simples para combinar com todos os seis casos. Observe que o Java
String#matches
corresponde automaticamente a toda a String, portanto, não há necessidade^...$
.fonte
MATL , 25 bytes
A saída é um vetor de coluna numérica não vazio, que é verdadeiro se todas as suas entradas são diferentes de zero e, caso contrário , falsas . Experimente online!
Para verificar todos os casos de teste ,
if
é adicionada uma ramificação no rodapé que substitui qualquer valor verdadeiro pela sequência'truthy'
ou qualquer valor falso pela sequência'falsy'
e, em seguida, exibe a sequência.Explicação
fonte
Python 2 , 74 bytes
Experimente online! Esta opinião sobre o problema é surpreendentemente competitiva.
fonte
Clojure, 115 bytes
Crie uma regex com cada par de letras e veja se a entrada corresponde a um. Muitas maneiras mais elegantes de fazer todas essas partes, mas são todas mais detalhadas. Tal é a vida com o golfe Clojure.
fonte
Perl 5, 68 + 1 = 69 bytes
Corra com
-n
.Explicação:
fonte
TXR Lisp , 50 bytes
Corre:
f^$
é um combinador que pega um objeto regex e retorna uma função que corresponde a esse regex de maneira ancorada. (Por si só, um objeto regex é um objeto que pode ser chamado de função que pega uma string e pesquisa por ela mesma.)fonte
Python 3 , 66 bytes
Experimente online!
fonte
TXR :
7874 bytesExecute, a partir do prompt do sistema. O número no prompt é o status de encerramento: 0 = êxito, 1 = falha:
Explicação:
@{x 2}
: corresponde a dois caracteres, vincula àx
variável.@(rep :gap 0)@x@(end)
: correspondência repetida sem intervalos ignorados: zero ou mais ocorrências dox
dígrafo correspondente anteriormente.@y
: restante da linha correspondente, capturado emy
.@(bind(x y)(foo bar))
: vincularx
afoo
, y abar
. Comox
ey
já estão vinculados, eles precisam corresponderfoo
ebar
, caso contrário, há uma falha.foo
é#"nu un mw wm bq qb"
uma lista literal de palavras, açúcar sintático para a lista Lisp("nu" "un" ... "qb")
. Umabind
correspondência entre uma variável e uma lista significa que a variável deve corresponder a um elemento.bar
é@[x 0..1]
: a substring de um caracterex
desde o início. Abind
correspondência entrey
e isso força a última letra da linha a corresponder à primeira.fonte
C ++, 268 bytes
fonte
n
= 110,u
= 117,m
= 109,w
= 119,q
= 113. Então, usando valores ASCII ou não, não importa para quaisquer caracteres superioresc
(99)JavaScript (ES6), 63 bytes
Retorna
1
ou0
.Explicação
Todas as seqüências de roda dentada terão um ou mais de bq , wm ou un . Testamos isso com:
Se você substituir todas as instâncias das duas primeiras letras de uma sequência de caracteres estrelada por nada, ficará com a primeira letra da sequência. Testamos isso com:
Mostrar snippet de código
fonte