Aidez-moi! Il me semble que certains de mes tableaux contiennent un écho gênant et j'aimerais bien m'en débarrasser. Lorsque cela se produit, le tableau d'origine se répète quelque part au milieu, ce qui entraîne l'ajout des valeurs.
Par exemple, le tableau [ 422, 375, 527, 375, 859, 451, 754, 451 ]
contient un écho de lui-même, comme ceci:
[ 422, 375, 527, 375, 859, 451, 754, 451 ] <-- array with echo (input)
[ 422, 375, 105, 0, 754, 451 ] <-- original array (output)
[ 422, 375, 105, 0, 754, 451 ] <-- echo of original array
Exemple 2:
[ 321, 526, 1072, 899, 6563, 798, 7038, 3302, 3032, 3478, 1806, 601 ] <-- input
[ 321, 526, 751, 373, 5812, 425, 1226, 2877, 1806, 601 ] <-- output
[ 321, 526, 751, 373, 5812, 425, 1226, 2877, 1806, 601 ]
Il est également possible qu'il n'y ait pas d'écho dans le tableau. Dans ce cas, renvoyez le tableau d'origine:
Exemple 3:
[ 623, 533, 494, 382 ] <-- input
[ 623, 533, 494, 382 ] <-- output
Défi:
Étant donné qu'un tableau peut contenir un écho, supprimez-le et renvoyez le tableau sans écho.
Contribution:
- Un tableau, une liste, une chaîne délimitée, des cartes perforées ou votre équivalent adapté à la plate-forme, contenant au moins trois entiers, dans la plage de avec au moins un élément .
- L'écho ne peut pas commencer au premier ou après le dernier élément.
- L'écho ne se produira qu'une fois ou pas du tout dans l'entrée.
Sortie:
- Un tableau, une liste, etc., d'entiers , l'écho étant supprimé.
- S'il n'y a pas d'écho, retournez le tableau d'origine.
Règles et notation:
- C'est du code-golf , donc la réponse la plus courte en octets pour chaque langue gagne.
- Les règles standard et les règles d' entrée / sortie par défaut s'appliquent.
- Les échappatoires sont interdites (bien sûr).
- Veuillez fournir un lien avec un test pour votre code ( TIO.run , etc.).
- Une explication claire de votre réponse est fortement recommandée.
Cas de test:
Avec écho:
[ 422, 375, 527, 375, 859, 451, 754, 451 ]
[ 422, 375, 105, 0, 754, 451 ]
[ 321, 526, 1072, 899, 6563, 798, 7038, 3302, 3032, 3478, 1806, 601 ]
[ 321, 526, 751, 373, 5812, 425, 1226, 2877, 1806, 601 ]
[ 4330, 3748, 363, 135, 2758, 3299, 1674, 1336, 4834, 2486, 4087, 1099, 4098, 4942, 2159, 460, 4400, 4106, 1216, 3257, 1638, 2848, 3616, 3554, 1605, 490, 1308, 2773, 3322, 3284, 4037, 7109, 4171, 5349, 2675, 3056, 4702, 4229, 1726, 5423, 6039, 8076, 6047, 7088, 9437, 4894, 1946, 7501, 5331, 3625, 5810, 6289, 2858, 6610, 4063, 5565, 2200, 3493, 4573, 4906, 3585, 4147, 3748, 3488, 5625, 6173, 3842, 5671, 2555, 390, 589, 3553, 3989, 4948, 2990, 4495, 2735, 1486, 3101, 1225, 2409, 2553, 4651, 10, 2994, 509, 3960, 1710, 2185, 1800, 1584, 301, 110, 969, 3065, 639, 3633, 3544, 4268 ]
[ 4330, 3748, 363, 135, 2758, 3299, 1674, 1336, 4834, 2486, 4087, 1099, 4098, 4942, 2159, 460, 4400, 4106, 1216, 3257, 1638, 2848, 3616, 3554, 1605, 490, 1308, 2773, 3322, 3284, 4037, 2779, 423, 4986, 2540, 298, 1403, 2555, 390, 589, 3553, 3989, 4948, 2990, 4495, 2735, 1486, 3101, 1225, 2409, 2553, 4651, 10, 2994, 509, 3960, 1710, 2185, 1800, 1584, 301, 110, 969, 3065, 639, 3633, 3544, 4268 ]
[ 24, 12, 52, 125, 154, 3, 567, 198, 49, 382, 53, 911, 166, 18, 635, 213, 113, 718, 56, 811, 67, 94, 80, 241, 343, 548, 68, 481, 96, 79, 12, 226, 255, 200, 13, 456, 41 ]
[ 24, 12, 52, 125, 154, 3, 567, 198, 25, 370, 1, 786, 12, 15, 68, 15, 88, 348, 55, 25, 55, 79, 12, 226, 255, 200, 13, 456, 41 ]
[ 1, 3, 2 ]
[ 1, 2 ]
[ 0, 1, 3, 2, 0 ]
[ 0, 1, 2, 0 ]
Sans écho:
[ 623, 533, 494, 382 ]
[ 623, 533, 494, 382 ]
[ 1141, 1198, 3106, 538, 3442, 4597, 4380, 3653, 1370, 3987, 1964, 4615, 1844, 5035, 2463, 6345, 4964, 4111, 5192, 8555, 5331, 3331, 4875, 6586, 5728, 4532, 5972, 2305, 3491, 6317, 2256, 2415, 5788, 4873, 6480, 2080, 5319, 4551, 6527, 5267, 4315, 2178, 2615, 5735, 5950, 6220, 7114, 6259, 5000, 4183, 6822, 6927, 7150, 8003, 5603, 3154, 8231, 5005, 5743, 6779, 4530, 4029, 5336, 6105, 4777, 6183, 6838, 5725, 6819, 8584, 3142, 3840, 3291, 4284, 2933, 4859, 2906, 5176, 2853, 2110, 2048, 4389, 4501, 2267, 2704, 431, 1495, 2712, 3008, 187, 3487, 630 ]
[ 1141, 1198, 3106, 538, 3442, 4597, 4380, 3653, 1370, 3987, 1964, 4615, 1844, 5035, 2463, 6345, 4964, 4111, 5192, 8555, 5331, 3331, 4875, 6586, 5728, 4532, 5972, 2305, 3491, 6317, 2256, 2415, 5788, 4873, 6480, 2080, 5319, 4551, 6527, 5267, 4315, 2178, 2615, 5735, 5950, 6220, 7114, 6259, 5000, 4183, 6822, 6927, 7150, 8003, 5603, 3154, 8231, 5005, 5743, 6779, 4530, 4029, 5336, 6105, 4777, 6183, 6838, 5725, 6819, 8584, 3142, 3840, 3291, 4284, 2933, 4859, 2906, 5176, 2853, 2110, 2048, 4389, 4501, 2267, 2704, 431, 1495, 2712, 3008, 187, 3487, 630 ]
[ 4791, 1647, 480, 3994, 1507, 99, 61, 3245, 2932, 8358, 6618, 1083, 5391, 3498, 4865, 1441, 3729, 5322, 5371, 6271, 2392, 1649, 5553, 9126, 3945, 2179, 3672, 2201, 4433, 5473, 4924, 6585, 6407, 3862, 6505, 1530, 5293, 4792, 6419, 6739, 3258, 3839, 3891, 7599, 2576, 5969, 5659, 6077, 5189, 1325, 4490, 5694, 6567, 6367, 5724, 5756, 6450, 5863, 4360, 2697, 3100, 3779, 4040, 4653, 1755, 3109, 2741, 3269 ]
[ 4791, 1647, 480, 3994, 1507, 99, 61, 3245, 2932, 8358, 6618, 1083, 5391, 3498, 4865, 1441, 3729, 5322, 5371, 6271, 2392, 1649, 5553, 9126, 3945, 2179, 3672, 2201, 4433, 5473, 4924, 6585, 6407, 3862, 6505, 1530, 5293, 4792, 6419, 6739, 3258, 3839, 3891, 7599, 2576, 5969, 5659, 6077, 5189, 1325, 4490, 5694, 6567, 6367, 5724, 5756, 6450, 5863, 4360, 2697, 3100, 3779, 4040, 4653, 1755, 3109, 2741, 3269 ]
[ 235, 121, 52, 1249, 154, 26, 5672, 1975, 482, 3817, 532, 9104, 1661, 171, 6347, 2124, 1122, 7175, 558, 8101, 667, 934, 798, 2404, 3424, 5479, 672, 4808, 956, 789, 123, 2255, 2549, 200, 126, 4562, 41 ]
[ 235, 121, 52, 1249, 154, 26, 5672, 1975, 482, 3817, 532, 9104, 1661, 171, 6347, 2124, 1122, 7175, 558, 8101, 667, 934, 798, 2404, 3424, 5479, 672, 4808, 956, 789, 123, 2255, 2549, 200, 126, 4562, 41 ]
[ 1, 1, 1, 1, 1 ]
[ 1, 1, 1, 1, 1 ]
[1, 2, 2, 2, 1]
; Sortie:[1, 1, 1, 1]
contre[1, 2, 1]
[1, 2, 3, 1, 2, 3]
,[1, 2, 3, 0, 1, 2, 3]
,[0, 1, 3, 2, 0]
? Les réponses actuelles ne concordent pas avec toutes ces entrées.[1, 1, 1, 1]
vs.[1, 2, 1]
) est acceptable. J'avais à l'origine une règle sur laquelle choisir, mais je l'ai retirée dans un bac à sable car elle semblait ne s'appliquer qu'à un petit nombre de cas marginaux.[0, 1, 3, 2, 0]
devrait être[0, 1, 2, 0]
- j'ai ajouté aux cas de test. Une réponse attendue sur les deux autres pourrait être[1, 2, 3]
bien que je ne considère pas ces cas de test valides puisque conformément aux règlesthe original array repeats itself somewhere in the middle
.[0,0,0]
(ou tout0
tableau de la taille de tous ) représente un écho de quoi que ce soit ou si[0,0,0]
(sans écho) serait également une réponse valable pour ce cas particulier, car il n’ya tout simplement pas assez d’informations pour déterminer laquelle. c'est. Je mettrai à jour les règles pour empêcher que cela ne soit une entrée valide, car cela n'invalidera ni ne modifiera les réponses existantes.Réponses:
MATL , 16 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Division polynomiale pour la victoire!
la source
Haskell , 167 octets
Tout d'abord, il est important de noter que s'il y a un écho présent, le tableau en entrée est une convolution d'un autre tableau avec un tableau de la forme
[1,1],[1,0,1],[1,0,0,1],...
.Cela signifie que nous devons juste vérifier ceci pour tous ces tableaux. Mais la déconvolution / déconvolution discrète est identique à la multiplication / division longue polynomiale. Il ne s'agit donc que d'une implémentation utilisant des polynômes, renvoyant à chaque fois le quotient si possible.
Une astuce qui a un peu raccourci le tout est venue s'ajouter aux tableaux ci-dessus, qui servaient également de
[1]
base, car si aucun autre tableau ne fonctionne, la déconvolution avec[1]
fonctionnera et retournera le polynôme d'origine.Essayez-le en ligne!
la source
JavaScript ,
211171145 octetsEssayez-le en ligne
40 octets de Kevin Cruijssen
Un autre 26 octets d' Arnauld
Ma première réponse au code de golf invalide les compensations potentielles et renvoie le tableau d'origine ou le nouveau en fonction de ce qu'il trouve. Si quelqu'un sait comment le rendre plus court, faites-le-moi savoir, semble être un jeu amusant.
la source
++
, en changeant&&
à&
la première vérification, changeant à la fois.toString()
à+''
, etc.) Je suis votre code jusqu'à 181 octets . Si vous ne les avez pas encore vues, il est peut-être intéressant de lire des astuces pour le golf en JavaScript et des astuces pour le golf dans toutes les langues . :)function q(s)
peut êtres=>
): 171 octets . Profitez de votre séjour! :)Haskell,
112111110 octetsEssayez-le en ligne!
la source
Wolfram Language (Mathematica) ,
13112912011910298979695 octetsEssayez-le en ligne!
−1 octet grâce à attinat : on peut écrire
L=Tr[1^#]
au lieu deL=Length@#
quand l’argument est une liste de nombres.Explication de code: Parcourez le retrait
d
(différence entre les longueurs d'entrée et de sortie). Pour chaque longueur de liste en sortie, construisez une liste d'inconnuesv={x[1],x[2],...,x[L-d]}
et ajoutez-la à elle-même, complétée à gauche et à droite, à lengthL
(PadLeft[v,L]+PadRight[v,L]
), puis définissez cette somme sur la liste d'entrée et résolvez les inconnuesx[1]...x[L-d]
. Choisissez la solution la plus courte, qui est la dernière générée: continuez à écraser la variablew
chaque fois qu'une solution est trouvée.Version non-golfée:
la source
Tr[1^#]
au lieu deLength@#
Gelée ,
25 à24 octetsEssayez-le en ligne!
Un lien monadique qui prend et retourne une liste d'entiers. Techniquement, les résultats obtenus sont imbriqués dans deux listes supplémentaires, mais lorsqu'ils sont exécutés en tant que programme complet, la sortie implicite sur stdout ignore les listes redondantes.
la source
Python 2 ,
113123128127 127123122 octetsEssayez-le en ligne!
1 octet à TFeld ; et 1 octet à Sebastian Kreft .
À chaque appel à
f
, nous construisons un écho potentiel de longueurlen(a)-i
. La première partie n'est que les premiersi
octets de a; le reste est calculé de manière à ce que la "somme d'écho" soit correcte pour la section "superposée" de la somme d'écho (c'est-à-dire que la somme d'écho est correcte jusqu'àa[:-i]
).Ensuite, la comparaison très courte, sans jeu, donne:
la source
e+=[v-e[-i]]
peut êtree+=v-e[-i],
i<=len(a)/2
Wolfram Language (Mathematica) , 93 octets
Essayez-le en ligne!
Retourne l'écho le plus court présent dans la liste.
la source
{1,1,1}
et encore{1,0,1}
.{1,1,1}
il n'y a pas d'écho, vous devez donc retourner le tableau d'origine. Pour que{1,0,1}
je dirais que l'écho est{1}
mais avouez qu'il est un peu difficile de ce que sont les règles.PHP , 124 octets
Essayez-le en ligne!
Explication:
la source
Python 3 , 111 octets
Essayez-le en ligne!
La solution prend quelques idées de la solution de @Chas Brown telles que la structure récursive et la construction du tableau de sortie. Dans le même temps, il modifie également les critères de jugement et place la boucle for dans une expression génératrice afin de permettre une solution à une ligne. La version non-lisée est illustrée ci-dessous. Ici, le tableau
out
est calculé jusqu’à la fin du tableau d’entrée, puis nous vérifions si les derniersl
éléments sont nuls. Si tel est le cas, les premierslen(arr)-l
éléments sont renvoyés en tant que réponse si tous ne sont pas négatifs.Version non golfée, non récursive
Essayez-le en ligne!
la source
Charbon de bois , 62 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
Supposons qu'il n'y ait pas d'écho.
Essayez tous les points de départ possibles de l'écho. Remarque: j'ai peut-être mal interprété la question et je n'ai peut-être pas essayé suffisamment d'écho, auquel cas
⊘
cela ne serait pas nécessaire.Commencez avec un tableau de zéros de la même taille que le point de départ de l'écho.
Pour chaque élément du tableau d'origine, soustrayez-le cycliquement de l'élément. Chaque élément de la matrice d'écho constitue ainsi la somme alternée des éléments distants.
Si toutes les sommes alternées sont égales à zéro, sauvegardez-les comme point de départ possible. (Donc, s'il y a plus d'une possibilité, le point de départ le plus grand possible est utilisé.)
Construisez le tableau en écho en soustrayant les éléments après le point de départ de l'élément calculé précédemment.
Transformation en chaîne pour une sortie implicite sur des lignes séparées.
la source