(inspirado nesta postagem sobre Puzzling. CUIDADO: SPOILERS PARA ESSE ENIGMA ESTÃO ABAIXO.)
O teclado padrão do telefone correlaciona letras com números da seguinte maneira:
1 ->
2 -> ABC
3 -> DEF
4 -> GHI
5 -> JKL
6 -> MNO
7 -> PQRS
8 -> TUV
9 -> WXYZ
0 ->
Uma determinada palavra de entrada é definida como uma Palavra Ordenada se, quando traduzida para o teclado pressiona usando o acima, o número resultante é não decrescente ou não crescente. Em outras palavras, o número resultante não pode aumentar e diminuir.
Por exemplo, a palavra se CAT
traduz em 228
, que não diminui e, portanto, em uma palavra ordenada. No entanto, a palavra DOG
é 364
, que aumenta e diminui e, portanto, não é uma Palavra Ordenada.
O desafio
Dada uma palavra, faça a saída, seja ordenada ou não.
Entrada
- Uma palavra (não necessariamente uma palavra do dicionário) que consiste apenas no alfabeto ASCII (
[A-Z]
ou[a-z]
), em qualquer formato adequado . - Sua escolha se a entrada for toda maiúscula ou minúscula, mas deve ser consistente.
- A palavra terá pelo menos três caracteres.
Saída
Um valor truthy / falsey consistente para se a palavra de entrada é Ordered (truthy) ou não Ordered (falsey).
Regras
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- Se possível, inclua um link para um ambiente de teste on-line para que outras pessoas possam experimentar seu código!
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
Exemplos
Aqui estão algumas palavras ordenadas (ou seja, verdade), e há mais sobre o quebra-cabeça enigmático vinculado.
CAT
TAC
AAA
DEMONS
SKID
LKJONMSRQP
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Aqui estão algumas palavras não ordenadas (ie falsey)
DOG
GOD
ROSE
COFFEE
JKLMNOGHI
abc->t9
e esse desafio é verificar a monotonicidade?abc->t9
.AAA
Respostas:
Python 2 ,
16414813277 bytes-16 bytes graças à sugestão de Rod em outro lugar . A -55 bytes graças a Arnold Palmer.
Experimente online!
A entrada deve estar em maiúsculas. Saídas
True
ou comFalse
base em sua ordem.Explicação
A primeira linha mapeia cada letra para um número.
Isso funciona com base em:
* Os valores são arredondados. : P
A segunda linha será exibida se a lista de números estiver em ordem crescente ou decrescente.
fonte
JavaScript (ES6),
83 ... 7170 bytesRetorna um booleano.
Casos de teste
Mostrar snippet de código
Quão?
Conversão de letras
Usamos
parseInt(c, 35)
para converter cada letra da string de entrada em algum número em [ 10 .. 34 ]. Por ser base 35, "Z" é convertido emNaN
vez disso.A expressão
* .32 | 0
mapeia esse número no intervalo [ 3 .. 10 ], levando a 8 grupos de letras corretos para "A" a "Y" . Precisamos|| 10
obter o valor correto para "Z" .Teste de ordem
Nós acompanhamos os sinais de diferenças entre números consecutivos na máscara de bits v , inicialmente definida como 3 (0b11):
O valor anterior é armazenado na mesma variável x que a entrada. Isso garante que a primeira iteração - na qual não existe realmente nenhum valor anterior - não apague nenhum bit, porque uma sequência contendo apenas letras não é maior nem menor que qualquer número:
Uma palavra é ordenada, a menos que ambos os sinais sejam encontrados, o que leva a v = 0 e causa
every()
falha.fonte
Jelly ,
28, 27, 25, 23, 22, 21, 19,18 bytesExperimente online!
Foi muito divertido escrever!
Explicação:
Obrigado a @ErikTheOutgolfer, @leakynun e @BusinessCat por todos os bytes salvos. :)
fonte
05AB1E , 36 bytes
Experimente online!
fonte
.•1нJ©½è`ÇHø¹á₂N¸°…ÈáÀ•#
porA•22ā₂•S£
.MATL ,
2625 bytesA entrada está em maiúsculas. A saída é
1
ou0
.Experimente online!
Explicação
fonte
Casco ,
22 21 1918 bytesRetorna
1
para entradas0
verdadeiras , para falsas. As entradas devem estar em maiúsculas. Passa em todos os casos de teste. Experimente online!Explicação
fonte
Python 2 , 60 bytes
Experimente online!
Aceita entrada em minúsculas.
Como funciona
813681 / x ⌋ diminui de
a
;c
ed
;f
eg
;i
ej
;l
em
;o
ep
;s
et
;v
ew
;z
.fonte
C ++,
375199195194 bytesGraças à resposta de Shaggy JavaScript:
-5 bytes graças a Zacharý
fonte
int j=1,i=0,d=0
para o loop for?i
ed
são utilizados fora do bloco de loop, eu não possoi==0||d==0
==>i*d==0
.!(i*d)
? (removendo o espaço depoisreturn
)05AB1E , 30 bytes
Experimente online!
-1 graças a Magic Octopus Urn .
fonte
¥0K0.SË
porque¥0‹Ë
não está correto? Não sei dizer se0.S
é necessário.¥0K0‹Ë
parece funcionar.Retina , 65 bytes
Experimente online! O link inclui casos de teste. Explicação:
Mude a primeira letra de cada tecla para um dígito. (Isso é desativado por 1, mas isso não importa para uma verificação ascendente / descendente. Por outro lado, zeros tornariam minha vida mais difícil, então deixei um caractere de preenchimento.)
Embaralhe todas as letras restantes até 1 e repita até que todas tenham sido convertidas em dígitos.
Converta os dígitos em unários, mas apenas uma vez por execução de dígitos idênticos. Os valores unários são separados com um
<
...... mas se o LHS for maior que o RHS, corrija o
<
para>
.Exclua os
1
que não são mais necessários.Verifique se a palavra está ordenada. (O final
>
é proveniente do último dígito, que sempre compara maior que o espaço vazio a seguir.)fonte
Pitão , 23 bytes
Uma das minha primeira resposta Pyth não trivial! Guardado 6 bytes graças a @LeakyNun. A solução inicial está abaixo.
Suíte de teste.
Pitão , 29 bytes
Suíte de teste.
Explicação
fonte
05AB1E ,
2117 bytesCódigo
Usa a codificação 05AB1E .
Experimente online! ou Verifique todos os casos de teste!
Explicação
Agora, agora essencialmente mapeia as seguintes letras para os seguintes números:
fonte
JavaScript (ES6),
1079795928885 bytesFunciona com seqüências de caracteres mistos. Retorna
1
para verdade ou0
para falsey.Tente
fonte
Math.min((parseInt(c,36)-3)/3.13|0,9)
em vez"2..9"[parseInt(c,36)-10]
de salvar alguns bytesAAA
.Gaia ,
29272517 bytesExperimente online!
Explicação
fonte
05AB1E , 13 bytes
Sempre que vejo uma pergunta numpad, tenho que fazer uma resposta baseada em pi.
Experimente online ou verifique todos os casos de teste
fonte
Geléia , 32 bytes
Experimente online!
fonte
32222323
portanto, ele salva apenas 2 bytes.C # (.NET Core) , 133 bytes
Experimente online!
Eu sinto que há algum espaço para economizar, mas o C # não é um idioma conciso, então talvez não. Ungolfed:
Em particular, acho que há uma maneira mais curta de expressar a verificação final de validade, possivelmente uma maneira de alinhar com a
Zip
. Encontrar uma maneira de expressar issoZip
sem precisar de armazenamento temporárioSkip
também pouparia algo, mas duvido que exista algo mais conciso para isso.fonte
Python 3 ,
143147148149 149130 bytesO melhor que posso fazer por enquanto. A função bruta transforma a letra no número com base no código ascii. Definitivamente, existem algumas melhorias a serem feitas. 0 é verdade, 1 é falsey (desculpe). Economizou 10 bytes graças ao Rod, outros 3 graças ao Sr. Xcoder.
Experimente online!
fonte
x=[f(a)-f(b)for a,b in zip(s,s[1:])]
para salvar alguns bytesmin(int((ord(c)-58)/3.13),9)
é uma maneira mais curta de converter o charPython 2 ,
111103 bytes-8 bytes graças a @Arnold Palmer: não é
lower()
necessárioExperimente online!
fonte
.lower()
dado que a entrada pode estar no caso que você especificar.PHP 7,
98 + 1 95 + 184 + 1 bytesum porto de golfe da resposta de Arnauld .
aceita maiúsculas; saída vazia por falsidade,
1
por verdade.Execute como pipe
-nR
ou experimente online .postagem original:
fonte
CJam,
37313027 bytesExperimente Online
Claro que a versão feia acaba sendo mais curta ...
fonte
C (gcc) ,
183 169 153117 117 bytesExperimente online!
Solução antiga:
Economizou 8 bytes graças ao ThePirateBay.
Solução antiga antiga:
Solução antiga antiga:
fonte
TI-Basic,
9266 bytesConverte cada caractere na seqüência de caracteres em um número inteiro de 0 a 7 e leva a diferença entre cada elemento consecutivo; depois verifica se as diferenças mínimas e máximas têm o mesmo sinal (ou é 0).
fonte
ΔList(int(4^-1seq(inString("DEF GHI JKL MNO PQRSTUV WXYZ",sub(Ans,I,1))+3,I,1,length(Ans
economiza um byte.Zsh ,
73 6957 bytes-12 bytes usando a
3681/code
conversão de @ anders-kaseorg .Experimente online! Experimente online!Experimente online!Algumas coisas que abusamos:
((statement,statement,...))
é uma sequência de expressões aritméticas que retorna verdade se a última instrução for diferente de zero.apenas um par deparênteses não foi usado. Um byte pode ser salvo se!
vinculado menos firmemente que&
.0
em expansões aritméticas.A função que usamos para mapear para o número do teclado écomo precisamos apenas da alteração entre códigos, não fazemos o ajuste linear.CODE / 3.2 - 18
(com um caso especial paraZ
), masPodem ser salvos 2 bytes se os valores de verdade / falsey puderem ser trocados.
fonte