Nous avons de nouveaux modérateurs de shérif en ville, Mego et DJMcMayhem . Nous avons besoin d'un défi pour bien les honorer pour leurs nouveaux postes, alors c'est parti.
Voici quelque chose qui a attiré mon attention lorsque je survole leurs profils: leurs identifiants d'utilisateur sont et 45941 . Si vous effectuez une soustraction numérique, vous remarquerez quelque chose d'assez excitant (bien sûr, en prenant les différences absolues):
3|1|7|1|6
4|5|9|4|1
-+-+-+-+- (-)
1|4|2|3|5
Le nombre généré par l'algorithme ci-dessus est . Cet entier a quelque chose de spécial: il ne se compose que de chiffres consécutifs , triés par ordre croissant, mais l' un des chiffres n'est pas placé correctement - 4 .
Nous appellerons une paire d’entiers positifs une paire DJMcMego si les différences absolues en chiffres sont des entiers consécutifs, triés par ordre croissant, mais l’un d’eux n’est pas celui auquel il appartient. C'est-à-dire qu'il est possible de déplacer exactement un chiffre du résultat de la soustraction numérique vers une autre position, de sorte que le nombre entier obtenu ne comporte que des chiffres consécutifs, triés par ordre croissant.
Dans notre exemple ci-dessus, la paire est une paire DJMcMego , car si 4 est déplacé entre 3 et 5 , le résultat est 12345 , ce qui répond aux critères. Notez que les chiffres du nombre résultant ne doivent pas nécessairement commencer par 1 , ils doivent simplement être consécutifs. Lorsqu'une personne ne sait pas quelle décision elle devrait prendre, elle peut toujours compter sur l'aide de l'autre pour régler le problème.
Votre tâche consiste à générer une valeur vérité / fausseté selon que la paire d'entiers positifs donnée en entrée est une paire DJMcMego.
Vous avez la garantie que et b auront le même nombre de chiffres, toujours au moins 4.
Vous pouvez prendre les entiers dans n'importe quel format raisonnable (entiers natifs, chaînes, listes de chiffres, etc.)
Vous pouvez concurrencer dans n’importe quel langage de programmation et prendre des entrées et des sorties selon n’importe quelle méthode standard , tout en prenant note que ces failles sont interdites par défaut. C'est du code-golf , donc la soumission la plus courte (en octets) pour chaque langue gagne.
Cas de test
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, dans un autre format .
25631, 11114
comme exemple. Les différences sont14523
ce qui confond plusieurs des programmes actuelsRéponses:
05AB1E , 18 octets
Essayez-le en ligne!
la source
1
est le seul numéro de vérité dans 05AB1E; Si M. Xcoder ne m'avait pas informé de ce fait, j'aurais mis en doute la validité de cette solution. Pourriez-vous ajouter une explication également lorsque vous avez le temps?C (gcc) ,
259258254253250248233222 octetsfor(...;l++)b*=B[l]==-~B[l-1];
au golffor(...;b*=B[l]==-~B[~-l++]);
(reposant probablement sur un comportement indéfini, car il faut d'abord évaluerB[l]
suivi de-~B[~-l++]
).troiscinq octets.quinzevingt-six octets grâce à ceilingcat .Essayez-le en ligne!
Explication (version de 248 octets)
Essayez-le en ligne!
la source
j=0
comme dans le 41e personnagej
la valeur,0
ce qui n'est pas nécessairement le cas après plusieurs appels. Une fonction, cependant, devrait être souvent appelable de manière arbitraire et toujours résoudre le problème ( méta-poste pertinent ).j
zéro avant la boucle et ainsi sauvegarder un octet.f(char*A,char*B){
->f(A,B)char*A,*B;{
.JavaScript (ES6), 130 octets
Prend les entrées sous forme de deux tableaux de chiffres en syntaxe de curry
(a)(b)
. Retourne un booléen.Essayez-le en ligne!
la source
SWI-Prolog, 157 octets
Pas très court, mais le problème semblait particulièrement bien adapté aux prédicats déclaratifs, aux liaisons variables et à la récursivité, c'est-à-dire Prolog :)
Appeler avec, par exemple,
n([3,1,7,1,6],[4,5,9,4,1]).
Explication: déplacez un élément des deux listes vers un nouvel emplacement (à l'aide de SWI-Prolog
nth0
intégré) et vérifiez si la différence entre les nouvelles listes est consécutive.la source
J , 27 octets
−8 octets grâce à FrownyFrog
Essayez-le en ligne!
Solution initiale:
J , 35 octets
Essayez-le en ligne!
Explication
Prend des listes de chiffres en entrée
|@-
trouve la différence absolue entre les chiffres des listes1=1#.0<2-/\]
Vérifie si un seul chiffre est déplacé. Tout d'abord, je trouve les différences entre toutes les paires de chiffres adjacents et vérifie si un seul d'entre eux est positif.*
Multipliez le résultat du test ci-dessus (1 ou 0) avec le test suivant:1=[:*/2-/\\:~
Tous les chiffres sont-ils consécutifs? Je trie la liste, prends les différences pour toutes les paires de chiffres adjacents, les multiplie et vérifie si elle est égale à 1la source
25634 11111
(comme beaucoup d'autres soumissions)Gelée , 14 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Japt , 18 octets
Prend les entrées sous forme de tableaux à 2 chiffres, de sorties
0
pourtrue
ou de tout autre nombre pourfalse
.Essayez-le ou vérifiez tous les cas de test
Explication
Et, pour parcourir ce processus sur quelques autres cas de test:
la source
25634 11111
(comme beaucoup d'autres soumissions)Perl,
121118 octetsTest à Bash:
la source
25634 11111
(comme beaucoup d'autres soumissions)Java 8 ,
245227223194188 octetsMerci à Kevin pour avoir économisé environ 29 octets
Merci encore à Kevin pour 6 autres octets
Suit le même schéma que Galen propose pour sa réponse en J.
Essayez-le en ligne!
la source
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;}
j'ai combiné leint
etint[]
au début; utilisél=z.length/2
une fois et réutilisél
au lieu de 4 fois; changé leif(...)j++
àj+=...?1:0
afin qu'ils puissent être placés à l'intérieur des boucles et que les crochets et le deuxième point-virgule puissent être supprimés; supprimé lei++
et faites++
directement sur le dernieri
de la boucle; 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;}
. Supprimezd[]
et réutilisez les informations dontz
vous n’avez plus besoin; Changéj+=c[i]-c[i+1]?1:0;
etj+=d[i+1]-d[i++]!=1?1:0
àj+=c[i]-c[++i]?1:0;
etj+=z[i]-z[i-1]?1:0
. +1 de moi, cependant. Bonne réponse! :)25634 11111
(comme beaucoup d'autres soumissions)Rétine , 102 octets
Essayez-le en ligne! Le lien inclut des cas de test. Renvoie le nombre de façons dont les chiffres peuvent être déplacés pour obtenir une séquence ascendante, ce qui correspond à 2 pour un échange simple, car l'un ou l'autre chiffre peut être déplacé au-delà de l'autre dans ce cas. Explication:
Associez les chiffres.
Convertir en unaire.
Prenez la différence, mais ajoutez ensuite 1 parce que travailler avec zéro dans Retina is hard ™.
Répertoriez toutes les séquences de chiffres obtenues en déplaçant exactement un chiffre.
Recherchez des chiffres consécutifs.
la source
Perl 5 , -F
878483 octetsComptage de style ancien: 86 octets (
+3
pour-F
)Donne les nombres sous forme de 2 lignes sur STDIN, la dernière ligne sans fin de nouvelle ligne.
Imprime la chaîne de différence jusqu'à 2 fois pour vrai, rien pour faux
La longue
A0123456789
ficelle est vraiment énervante.Essayez-le en ligne!
Je suis habitué si cela
79
compte comme valide:Il se bloque pour une paire valide, vous obtenez donc un code de sortie non nul. Cela ne fait rien si ce n'est une paire et sort avec le code de sortie 0. Je sais que renvoyer le résultat via le code de sortie est autorisé, mais sont-ils correctement véridiques et faux, ou en fait inversés (car le shell
0
est vrai)?la source
Ruby ,
124 113 9995 octetsEssayez-le en ligne!
la source
25634 11111
(comme beaucoup d'autres soumissions)+1
:-)Pyt ,
2018 octetsEssayez-le en ligne!
Explication:
la source
25634 11111
(comme beaucoup d'autres soumissions)Ajouter ++ , 105 octets
Essayez-le en ligne!
Définit une fonction lambda qui prend deux listes de chiffres en entrée. Renvoie un entier positif divisible par 24 1 pour les paires DJMcMego, 0 sinon.
1: Si cela est trop restrictif, il génère également un entier positif pour les paires DJMcMego, et 0 sinon
Comment ça fonctionne
Ici, nous effectuons 4 contrôles pour déterminer si l'entrée est valide. Les parties du code qui effectuent ces vérifications sont
Ici, nous prenons la liste des différences absolues en chiffres, puis comptons le nombre de paires qui se chevauchent et qui sont triées par ordre décroissant. Chaque paire DJMcMego produit un résultat égal à 1 , mais ils ne sont pas uniques à cet égard. Nous enregistrons également les différences de chiffres absolus des entrées, pour économiser des octets plus tard. Ce tableau sera appelé A tout au long.
Ensuite, nous prenons les différences élémentaires entre A et A triées, avant d’affirmer qu’au moins une de ces différences est négative.
Troisièmement, nous vérifions si la paire [1, 2] est contenue dans les incréments à terme de A . Ceci vérifie que, dans au moins une position de A , il est trié, ce qui est un critère pour les paires DJMcMego.
Lors de notre dernier contrôle, nous affirmons que le deuxième élément de A n’est jamais égal à 0 . Pour qu'un couple, X et Y , soit un couple DJMcMego, nous pouvons supposer que leur A est toujours unique, puisqu'un tableau contenant des doublons ne peut jamais être rendu consécutif en échangeant une seule valeur avec un autre.
Enfin, nous vérifions que les trois premiers de ces tests ont retourné 1 et que le quatrième a retourné une valeur x telle que x ≠ 0
Une marche à suivre du code est la suivante
la source
R ,
110 10684 octetsEssayez-le en ligne!
@JayCe avec une sauvegarde ridicule de 22 octets!
Le cheval de travail est ici
adist
, ce qui donne une "distance de levée généralisée Levenshtein" entre deux chaînes. Par défaut, la distance est le nombre minimal d'insertions, de suppressions et de substitutions nécessaires pour transformer une chaîne en une autre. Maisadist
vous permet de pondérer les choses comme vous le souhaitez - j'ai pondéré chaque substitution pour ajouter 9 à la distance au lieu de 1. Cela force efficacement l'algorithme à rechercher uniquement les insertions et les suppressions.Ce code accepte les vecteurs d’entiers, calcule les différences absolues par élément et traduit le résultat de manière à ce qu'il commence par 1, en l’appelant
w
.Ensuite, la distance de Levenshtein pondérée personnalisée est calculée entre
w
collé pour former une chaîne et la chaîne"1234..."
(en réalité, utf-8"\001\002\003\004...
"maisadist
ne s’en soucie pas.) Avec le même nombre de caractères quew
.La seule façon dont la chaîne peut avoir exactement un chiffre déplacé est si vous effectuez une suppression et une insertion, ce qui donne une distance de 2.
la source
paste0
peut être justepaste
puisqu'il n'y a qu'une entrée.p=intToUtf8
?w=z-min(z)+1)adist(p(1:max(w))
parw=z-min(z))adist(p(0:max(w))
mais ça ne marche pas carintToUtf8(\000)
c'est nul.JavaScript,
137136135134132123 123 octetsPrend les entrées sous forme de deux tableaux de chiffres dans la syntaxe de curry, les sorties
0
pourtrue
et tout autre nombre pourfalse
.Cas de test
la source
[...u].sort(y=0)
est invalide javascript, l'argument pour le tri doit être une fonction25634 11111
(comme beaucoup d'autres soumissions)" - Ton HospelPython 2 ,
116119106 octetsMerci M. Xcoder pour la
116->84
coupe, mais j'ai constaté que j'ai manqué le critère de "numéro consécutif", donc 26 octets sont ajoutés à cet effet :(Après cela, -1 merci de plus M. Xcoder, et -13 Merci ovs
Essayez-le en ligne!
Celui ci-dessous corrige le
25634 - 11111
problème mais avec double longueur (211206145142B) ... Golf ...Essayez-le en ligne!
Et félicitations aux nouveaux modérateurs :)
Explication:
Génère la liste des différences absolues des chiffres.
Calcule le décalage à partir de la position appropriée.
Si la séquence n'est pas continue, la somme de décalage ne sera "généralement" pas égale à 0. Mais même si elle est égale à 0, les suivantes la bloqueront.
Seul 0 ou 1 élément aura un décalage absolu supérieur à 1 (celui avec la mauvaise position et 0 dans le cas comme
1,2,3,5,4
)Bloque le cas quand les nombres sont tous dans les positions correctes
la source
m([3,3,3,3],[2,1,0,1])
(retourneTrue
) Tio25634 11111
(comme beaucoup d'autres soumissions)Haskell ,
182163162132 octetsPrend la saisie sous forme de liste de chiffres. La fonction d'assistance
p
qui donne toutes les manières possibles de scinder une liste en deux parties permet d'extraire un élément et de l'insérer à un autre endroit.Essayez-le en ligne!
la source