Le défi:
Considérez la fonction F(N) = 2^N + 1
où N
est un entier positif inférieur à 31
. La séquence définie par cette fonction est:
3, 5, 9, 17, 33, 65, 129, 257, 513, 1025, 2049, 4097, 8193, 16385, 32769, 65537, 131073, 262145, 524289, 1048577, 2097153, 4194305, 8388609, 16777217, 33554433, 67108865, 134217729, 268435457, 536870913, 1073741825
Une entrée sera générée comme suit:
- Prenez 5 entiers contigus de la séquence ci-dessus.
- Remplacez l'un d'eux par un entier positif différent (qui peut ou non faire partie de la séquence ci-dessus).
- Réorganisez éventuellement les 5 numéros résultants.
Étant donné une telle liste de 5 entiers, recherchez celui qui a été échangé et ne fait donc pas partie des 5 entiers contigus d'origine.
Exemple:
- Sublist Original:
5, 9, 17, 33, 65
. - Remplacer un:
5, 7, 17, 33, 65
. - Réorganiser:
33, 17, 5, 7, 65
.
Le résultat attendu serait 7
.
Les 5 valeurs en entrée seront toujours distinctes et il y aura toujours une solution unique. (Par exemple, vous n'aurez pas à gérer des entrées comme l' 3, 9, 17, 33, 129
endroit où l'un 3
ou l' autre 129
aurait pu être échangé.)
Cas de test:
5,9,17,33,829
o/p: 829
9,5,17,829,33
o/p: 829
33, 17, 5, 7, 65
o/p: 7
5,9,177,33,65
o/p: 177
65,129,259,513,1025
o/p: 259
129,259,513,1025,65
o/p: 259
63,129,257,513,1025
o/p: 63
65,129,257,513,4097
o/p: 4097
5, 9, 2, 17, 33
o/p: 2
536870913, 67108865, 1073741825, 1, 268435457
o/p: 1
536870913,67108865,134217729,1,268435457
N = 30
comme l'une des valeurs d'entrée.Réponses:
Gelée, 15 octets
TryItOnline
Tous les cas de test également sur TryItOnline
Renvoie une liste contenant une liste contenant l'intrus.
Comment?
la source
JavaScript (ES6), 62 octets
Algorithme complètement nouveau, car comme l'a souligné @ edc65, le précédent était cassé. Explication: Nous traitons d'abord le cas facile en recherchant un 2 ou un nombre qui n'est pas supérieur à une puissance de 2. Si aucun n'a été trouvé, il y a deux cas possibles, selon que la valeur supplémentaire était inférieure ou supérieure à la série d'origine de cinq, nous vérifions donc si la plus petite et la deuxième valeur la plus grande appartiennent à la même série de cinq et si c'est le cas, blâmer la plus grande valeur sinon la plus petite valeur.
la source
n-1&n-2
avec la valeur2
[3, 17, 33, 65, 257]
.--n&--n|!n
air bien pour le2
cas?Python, 84 octets
Tous les cas de test sont à idéone
Pour une entrée valide, renvoie un ensemble contenant uniquement le impair-un.
Pour une entrée non valide, la limite de récursivité sera atteinte et une erreur sera levée.
la source
Mathematica, 65 octets
Ceci définit une fonction
f
qui doit être appelée avec 5 arguments, par exempleEn principe, la fonction peut être appelée avec n'importe quel nombre (non nul) d'arguments, mais vous pourriez obtenir des résultats inattendus ...
Je pense que c'est la première fois que je réussis à mettre la solution entière à un défi non trivial dans la partie gauche de a
=
.Explication
Cette solution met vraiment les capacités de correspondance de motifs de Mathematica à notre service. La fonctionnalité de base que nous utilisons est que Mathematica ne peut pas simplement définir des fonctions simples comme,
f[x_] := (* some expression in x *)
mais nous pouvons utiliser des modèles arbitrairement complexes sur le côté gauche, par exemplef[{a_, b_}, x_?OddQ] := ...
ajouterait une définition àf
laquelle n'est utilisée que lorsqu'elle est appelée avec un élément à deux éléments. liste et un entier impair. De manière pratique, nous pouvons déjà donner des noms à des éléments arbitrairement loin dans l'expression de gauche (par exemple, dans le dernier exemple, nous pourrions immédiatement faire référence aux deux éléments de la liste commea
etb
).Le modèle que nous utilisons dans ce défi est
f[a___,x_,b___]
. Icia___
etb___
sont des séquences de zéro ou plusieurs arguments etx
est un seul argument. Étant donné que le côté droit de la définition est simplementx
, ce que nous voulons, c'est de la magie qui assure qu'ilx
est utilisé pour l'entrée que nous recherchonsa___
et ceb___
sont simplement des caractères génériques qui couvrent les éléments restants.Pour ce faire, associez une condition au motif avec
/;
. Le côté droit de/;
(tout jusqu'au=
) doit revenirTrue
pour que ce modèle corresponde. La beauté est que le matcher modèle de Mathematica essaiera chaque mission uniquea
,x
etb
aux entrées pour nous, donc la recherche de l'élément correct est fait pour nous. Il s'agit essentiellement d'une solution déclarative au problème.Quant à la condition elle-même:
Notez que cela ne dépend pas
x
du tout. Au lieu de cela, cette condition dépend uniquement des quatre éléments restants. Ceci est une autre caractéristique pratique de la solution de correspondance de motif: en raison des modèles de séquence,a
etb
contiennent ensemble toutes les autres entrées.Cette condition doit donc vérifier si les quatre éléments restants sont des éléments contigus de notre séquence avec au plus un espace. L'idée de base pour vérifier cela est que nous générons les quatre éléments suivants à partir du minimum (via ) et vérifions si les quatre éléments sont un sous-ensemble de cela. Les seules entrées où cela peut causer des problèmes sont celles qui contiennent un , car cela génère également des éléments de séquence valides, nous devons donc les gérer séparément.
xi+1 = 2xi - 1
2
Dernière partie: passons par l'expression réelle, car il y a du sucre syntaxique plus drôle ici.
Cette notation infixe est l'abréviation de
Min[a,b]
. Mais rappelez-vous quea
etb
sont des séquences, donc cela se développe en fait aux quatre élémentsMin[i1, i2, i3, i4]
et nous donne le plus petit élément restant dans l'entrée.Si cela donne un 2, nous le remplaçons par un 0 (ce qui générera des valeurs qui ne sont pas dans la séquence). L'espace est nécessaire car sinon Mathematica analyse le littéral float
.2
.Nous appliquons la fonction sans nom à gauche 4 fois à cette valeur et collectons les résultats dans une liste.
Cela multiplie simplement son entrée par 2 et la décrémente.
Et enfin, nous vérifions que la liste contenant tous les éléments de
a
et enb
est un sous-ensemble.la source
Raquette 198 octets
Version non golfée:
Essai:
Production:
la source
05AB1E ,
3230262420 octetsExplication
Essayez-le en ligne!
la source
R, 97 octets
Cela s'est avéré plus difficile que je ne le pensais. Je suis sûr que cela peut être joué de manière significative.
Non golfé et expliqué
La
match()
fonction retourneraNA
si l'élément any du vecteur d'entrée n'est pas dans la séquence et par conséquent, nous pouvons simplement trouver l'index oùNA
existent dans l'entrée et retourner ceci:x[is.na(m)]
Cela devient un peu plus compliqué si l'entrée fait partie de la séquence mais est mal placée. Parce que l'entrée a été triée, la distance entre chaque paire d' indices doit être
1
. Nous pouvons donc trouver l'élément mal placé en recherchant la1st
différence des indices appariésl=diff(m)
et en sélectionnant l'indice pour lequell>1
. Ce serait juste suffisant s'il n'y avait pas le fait del
contenir des4
éléments plutôt que5
. Ce n'est un problème que si le dernier élément de l'entrée triée est un membre de la séquence MAIS ne fait pas partie de la sous-séquence (comme dans le cas de test final). Par conséquent, si l'4th
élément>1
récupère l'5th
entrée dans l'entrée triée, recherchez l'index dans le4
vecteur -length:x[ifelse(l[4]>1,5,l>1)]
la source
anyNA
équivalente àany(is.na(x))
Haskell,
6664 octetsExemple d'utilisation:
g [65,129,257,513,4097]
->4097
.Boucle dans toutes les sous-listes contiguës de longueur 5 de
F(N)
, conserve les éléments qui ne sont pas dans la liste d'entréex
et le modèle correspond à ceux de longueur 1 (->[s]
).Edit: @xnor a enregistré deux octets en supprimant la limite supérieure de la boucle externe. Comme une solution est garantie d'exister, la paresse de Haskell s'arrête au premier numéro trouvé.
la source
Perl,
6459 octetsComprend +2 pour
-an
Donnez une liste de saisie sur STDIN:
oddout.pl
:Si cela ne vous dérange pas d'espace variable autour du résultat, ce verset de 58 octets fonctionne:
Les deux versions bouclent pour toujours si l'entrée n'a pas de solution.
C'est un code très malade, mais je ne vois rien d'élégant ...
La façon dont je (ab) utilise
%a
est un nouveau tour de Perlgolf pour autant que je sache.la source
Python 2, 73 octets
Itère à travers des ensembles
d
de cinq éléments de séquence consécutifs jusqu'à ce qu'il en trouve un qui contient tous les éléments d'entrée sauf un, puis imprime la différence, qui est la sortie dans un ensemble singleton.Les ensembles
d
de cinq éléments consécutifs sont construits à partir de rien en ajoutant à plusieurs reprises un nouvel élémenti+1
et en supprimant tout ancien élémenti/32+1
qui précède la fenêtre actuelle de 5. Voici à quoi ressemble sa progression.Il y a un 1 errant au début de l'initialisation, mais il est inoffensif car il est immédiatement supprimé. Les ensembles plus petits, car ils contiennent jusqu'à 5 éléments, sont également inoffensifs.
la source
PHP,
877675 octetscourir avec
php -r '<code>' <value1> <value2> <value3> <value4> <value5>
la source
array_diff
. Mais je peux y sauvegarder un octet.end
au lieu demax
et votre note n'est plus importanteC #, 69 octets
int M(int[]a)=>a.Except(new int[30].Select((_,i)=>(1<<i+1)+1)).Sum();
la source
Java 7,85 octets
Non golfé
la source
l
31 est-il? Dans la question, je ne vois qu'un int-array en entrée, mais pas un int supplémentaire? : SPHP, 76 octets
implémenté l'idée Titus avec le mod 5
126 octets avant
la source
array_map(function($z){return 2**$z+1;},range($i,$i+4))
.$x[key($x)]
->end($x)
1-count($x=...)
à la condition vous débarrassera de la pause:for(;1-count($x=...););echo end($x);
(-13)Pyth, 18 octets
Formez la séquence, prenez des sous-listes de longueur 5, supprimez chaque sous-liste de Q, prenez le résultat le plus court, sortez son seul élément.
la source
[5, 9, 2, 17, 33]
Kotlin, 55 octets
fun f(a:IntArray)=a.find{it-1 !in(1..30).map{1 shl it}}
la source