Temos alguns novos moderadores de xerife na cidade, Mego e DJMcMayhem . Precisamos de um desafio para honrá-los adequadamente por suas novas posições, então vamos lá.
Aqui está algo que chamou minha atenção ao passar o mouse sobre seus perfis - seus IDs de usuário são e . Se você executar uma subtração em dígitos, notará algo bastante emocionante (é claro, considerando as diferenças absolutas):45941
3|1|7|1|6
4|5|9|4|1
-+-+-+-+- (-)
1|4|2|3|5
O número gerado pelo algoritmo acima é . Há algo de especial nesse número inteiro: ele consiste apenas em dígitos consecutivos , classificados em ordem crescente, mas exatamente um dos dígitos não está colocado corretamente - .4
Chamaremos um par de números inteiros positivos um par DJMcMego se as diferenças absolutas em dígitos forem números inteiros consecutivos, classificados em ordem crescente, mas exatamente um deles não é o seu lugar. Ou seja, é possível mover exatamente um dígito do resultado da subtração digitada para outra posição, de modo que o número inteiro obtido tenha apenas dígitos consecutivos, classificados em ordem crescente.
No exemplo acima, o par é um par DJMcMego , porque se é movido entre e , o resultado é , que atende aos critérios. Observe que os dígitos do número resultante não precisam começar em , eles devem ser consecutivos. Quando alguém não tem certeza sobre qual decisão deve tomar, sempre pode contar com a ajuda do outro para resolver as coisas.4 3 5 12345 1
Sua tarefa é gerar um valor de verdade / falsidade, dependendo se um par de números inteiros positivos fornecido como entrada é um par DJMcMego.
Está garantido que e terá o mesmo número de dígitos, sempre pelo menos 4.b
Você pode pegar os números inteiros em qualquer formato razoável (por exemplo, números inteiros nativos, seqüências de caracteres, listas de dígitos, etc.)
Você pode competir em qualquer linguagem de programação e pode receber e fornecer saída por qualquer método padrão , observando que essas brechas são proibidas por padrão. Isso é código-golfe , então a submissão mais curta (em bytes) para todos os idiomas vence.
Casos de teste
a, b -> Output
31716, 45941 -> Truthy
12354, 11111 -> Truthy
56798, 22222 -> Truthy
23564, 11111 -> Truthy
1759, 2435 -> Truthy
12345, 11111 -> Falsy
3333, 2101 -> Falsy
22354, 22222 -> Falsy
31717, 45941 -> Falsy
14325, 11111 -> Falsy
89789, 78865 -> Falsy
14954, 61713 -> Falsy
25631, 11114 -> Falsy
Ou, em outro formato .
fonte
25631, 11114
como exemplo. As diferenças são o14523
que confunde vários dos programas atuaisRespostas:
05AB1E , 18 bytes
Experimente online!
fonte
1
seja o único número de verdade em 05AB1E; se o Sr. Xcoder não tivesse me informado sobre esse fato, eu teria questionado a validade dessa solução. Você poderia adicionar uma explicação também quando tiver tempo?C (GCC) ,
259258254253250248233222 bytesfor(...;l++)b*=B[l]==-~B[l-1];
emfor(...;b*=B[l]==-~B[~-l++]);
(provavelmente dependendo de um comportamento indefinido, pois requer avaliação inicialB[l]
seguida por-~B[~-l++]
).trêscinco bytes.quinzevinte e seis bytes graças ao ceilingcat .Experimente online!
Explicação (versão de 248 bytes)
Experimente online!
fonte
j=0
como no 41º caracterej
ter o valor0
que não é necessariamente o caso após várias chamadas. Uma função, no entanto, deve ser arbitrariamente frequentemente solicitável e ainda resolver o desafio ( meta post relevante ).j
como zero antes do loop e, assim, salvar um byte.f(char*A,char*B){
->f(A,B)char*A,*B;{
.JavaScript (ES6), 130 bytes
Recebe a entrada como duas matrizes de dígitos na sintaxe de currying
(a)(b)
. Retorna um booleano.Experimente online!
fonte
SWI-Prolog, 157 bytes
Não é muito curto, mas o problema parecia particularmente adequado para predicados declarativos, ligação e recursão variáveis, ou seja, Prolog :)
Ligue com, por exemplo,
n([3,1,7,1,6],[4,5,9,4,1]).
Explicação: mova um elemento nas duas listas para uma nova posição (usando o SWI-Prolog interno
nth0
) e verifique se a diferença das novas listas é consecutiva.fonte
J , 27 bytes
−8 bytes graças ao FrownyFrog
Experimente online!
Solução inicial:
J , 35 bytes
Experimente online!
Explicação
Leva listas de dígitos como entrada
|@-
encontra a diferença absoluta entre os dígitos das listas1=1#.0<2-/\]
Verifica se apenas um dígito está fora de seu lugar. Primeiro, encontro as diferenças entre todos os pares de dígitos adjacentes e verifico se apenas um deles é positivo.*
Multiplique o resultado do teste acima (1 ou 0) com o seguinte teste:1=[:*/2-/\\:~
Todos os dígitos são consecutivos? Classifico a lista, pego as diferenças de todos os pares de dígitos adjacentes, multiplico-os e verifico se é igual a 1fonte
25634 11111
(como fazem muitas outras submissões)Gelatina , 14 bytes
Experimente online!
Como funciona
fonte
Japonês , 18 bytes
Recebe entradas como matrizes de 2 dígitos, saídas
0
paratrue
ou qualquer outro número parafalse
.Experimente ou verifique todos os casos de teste
Explicação
E, para percorrer esse processo em mais alguns casos de teste:
fonte
25634 11111
(como fazem muitas outras submissões)Perl,
121118 bytesTeste no bash:
fonte
25634 11111
(como fazem muitas outras submissões)Java 8 ,
245227223194188 BytesAgradecimentos a Kevin por salvar ~ 29 bytes
Graças a Kevin novamente por mais 6 bytes
Seguiu o mesmo padrão que Galen criou para sua resposta em J.
Experimente online!
fonte
z->{int l=z.length/2,c[]=new int[l],i=0,j=0,d[];for(;i<l;)c[i]=Math.abs(z[i]-z[i+++l]);java.util.Arrays.sort(d=c.clone());for(i=0;i<l-1;j+=d[i+1]-d[i++]!=1?1:0)j+=c[i]-c[i+1]>0?1:0;return j==1;}
eu combinei oint
eint[]
no início; usadol=z.length/2
uma vez e reutilizar eml
vez de 4 vezes; mudouif(...)j++
paraj+=...?1:0
para que eles possam ser colocados dentro dos loops e os suportes e o segundo ponto e vírgula podem ser removidos; removeu oei++
faça++
diretamente no últimoi
no loop; etc.z->{int l=z.length/2,c[]=new int[l],i=0,j=0;for(;i<l;)c[i]=Math.abs(z[i]-z[i+++l]);java.util.Arrays.sort(z=c.clone());for(i=0;i<l-1;j+=z[i]-z[i-1]!=1?1:0)j+=c[i]-c[++i]>0?1:0;return j==1;}
. Removidad[]
e reutilizada a entrada quez
você não precisa mais; Alteradoj+=c[i]-c[i+1]?1:0;
ej+=d[i+1]-d[i++]!=1?1:0
paraj+=c[i]-c[++i]?1:0;
ej+=z[i]-z[i-1]?1:0
. 1 de mim, no entanto. Boa resposta! :)25634 11111
(como fazem muitas outras submissões)Retina , 102 bytes
Experimente online! O link inclui casos de teste. Retorna o número de maneiras que os dígitos podem ser movidos para obter uma sequência ascendente, que é 2 para uma troca direta, pois um dos dígitos pode ser movido além do outro nesse caso. Explicação:
Emparelhe os dígitos.
Converta para unário.
Faça a diferença, mas adicione 1 porque trabalhar com zero no Retina é difícil ™.
Liste todas as seqüências de dígitos obtidas movendo exatamente um dígito.
Verifique se há dígitos consecutivos.
fonte
Perl 5 , -F
878483 bytesContagem de estilos antigos: 86 bytes (
+3
para-F
)Dê a ele números como 2 linhas em STDIN, a última linha sem uma nova linha à direita.
Imprime a sequência de diferenças até 2 vezes para true, nada para false
A
A0123456789
corda longa é realmente irritante.Experimente online!
Eu sou usure se isso
79
conta como válido:Trava para um par válido, para que você obtenha um código de saída diferente de zero. Ele não faz nada se não um par e sai com o código de saída 0. Eu sei que é permitido retornar o resultado via código de saída, mas eles são realmente verdadeiros e falsos ou de fato invertidos (pois o shell
0
é verdadeiro)?fonte
Ruby ,
124 113 9995 bytesExperimente online!
fonte
25634 11111
(como fazem muitas outras submissões)+1
:-)Pyt ,
2018 bytesExperimente online!
Explicação:
fonte
25634 11111
(como acontece com muitos outros envios)Adicionar ++ , 105 bytes
Experimente online!
Define uma função lambda que recebe duas listas de dígitos como entrada. Emite um número inteiro positivo divisível por 24 1 para pares DJMcMego, 0 caso contrário.
1: Se for muito restritivo, ele também gera um número inteiro positivo para os pares DJMcMego e 0, caso contrário
Como funciona
Aqui, realizamos 4 verificações para determinar se a entrada é válida. As partes do código que fazem essas verificações são
Aqui, pegamos a lista de diferenças absolutas de dígitos e contamos o número de pares sobrepostos que são classificados em ordem decrescente. Todo par DJMcMego produz um resultado de 1 , mas eles não são exclusivos nesse aspecto. Também armazenamos as diferenças absolutas de dígitos das entradas, para salvar os bytes posteriormente. Essa matriz será chamada de A por toda parte.
Em seguida, analisamos as diferenças elementares entre A e A antes de afirmar que pelo menos uma dessas diferenças é negativa.
Em terceiro lugar, podemos verificar se o par [1, 2] está contido nos incrementos de frente de Uma . Isso verifica se, em pelo menos uma posição de A , ele é classificado, o que é um critério para os pares DJMcMego.
Como nossa última verificação, afirmamos que o segundo elemento de A nunca é 0 . Para que um par, X e Y , seja um par DJMcMego, podemos assumir que seu A é sempre único, pois uma matriz com duplicatas nunca pode ser tornada consecutiva trocando um valor único por outro.
Finalmente, verificamos que os três primeiros desses testes retornaram 1 e que o quarto retornou um valor x tal que x ≠ 0
Um passo a passo do código é o seguinte
fonte
R ,
11010684 bytesExperimente online!
@JayCe com um ridículo salvamento de 22 bytes!
O cavalo de batalha aqui é
adist
, o que fornece uma "distância de edição generalizada de Levenshtein" entre duas cordas. Por padrão, a distância é a contagem do número mínimo de inserções, exclusões e substituições necessárias para transformar uma sequência em outra. Masadist
permite ponderar as coisas como você gosta - então, pesei cada substituição para adicionar 9 à distância, em vez de 1. Isso efetivamente força o algoritmo a procurar apenas inserções e exclusões.Este código aceita vetores de números inteiros, calcula as diferenças absolutas entre elementos e converte o resultado para começar em 1, chamando-o
w
.Em seguida, a distância de Levenshtein ponderada personalizada é calculada entre
w
coladas para formar uma sequência e a sequência"1234..."
(na verdade, utf-8"\001\002\003\004...
", masadist
não se importa.) Com o mesmo número de caracteres quew
.A única maneira pela qual a string pode ter exatamente um dígito fora do lugar é se você fizer uma exclusão e uma inserção, dando uma distância de 2.
fonte
paste0
pode ser apenaspaste
porque há apenas uma entrada.p=intToUtf8
?w=z-min(z)+1)adist(p(1:max(w))
comw=z-min(z))adist(p(0:max(w))
, mas ele não funciona desde queintToUtf8(\000)
é NULL.JavaScript,
137136135134132 132123 bytesRecebe entrada como duas matrizes de dígitos na sintaxe de curry, saídas
0
paratrue
e qualquer outro número parafalse
.Casos de teste
fonte
[...u].sort(y=0)
é javascript inválido, o argumento para a classificação deve ser uma função25634 11111
(assim como muitas outras submissões)" - Ton HospelPython 2 ,
116119106 bytesObrigado, Sr. Xcoder, pelo
116->84
corte, mas descobri que perdi os critérios de "número consecutivo", então 26 bytes são adicionados para esse fim :(Depois disso, -1 mais obrigado Sr. Xcoder e -13 obrigado ovs
Experimente online!
Aquele abaixo corrige o
25634 - 11111
problema, mas com comprimento duplo (211206145142B) ... Golfe ...Experimente online!
E parabéns aos novos moderadores :)
Explicação:
Gera a lista de diferenças absolutas dos dígitos.
Calcula o deslocamento da posição correta.
Se a sequência não for contínua, a soma deslocada "normalmente" não será 0. Mas, mesmo que seja igual a 0, as próximas as bloquearão.
Apenas 0 ou 1 item terá deslocamento absoluto maior que 1 (aquele com posição incorreta e 0 é o caso
1,2,3,5,4
)Bloqueia o caso quando todos os números estão nas posições corretas
fonte
m([3,3,3,3],[2,1,0,1])
(retornaTrue
) Tio25634 11111
(como fazem muitas outras submissões)Haskell ,
182163162 162132 bytesRecebe a entrada como uma lista de dígitos. A função auxiliar
p
que oferece todas as formas possíveis de dividir uma lista em duas partes é usada para retirar um elemento e inseri-lo novamente em outro lugar.Experimente online!
fonte