Une suite à cette question .
Tâche
Étant donné un tableau d'entiers positifs, trouvez le plus grand élément k pour lequel:
Il existe une distance entière positive n , de sorte que l'élément du tableau situé n se situe à gauche ou à droite de k est égal à n .
Le tableau est garanti pour contenir au moins un élément remplissant cette condition.
Le code le plus court (en octets) gagne. Vous pouvez choisir le format d'E / S que vous souhaitez.
Exemple
Compte tenu de l'entrée
[4, 6, 7, 9, 3, 6, 5, 7, 2]
Les valeurs éligibles sont:
- Le
4
, car il y a7
7 positions situées à sa droite - Le premier
6
, car il y a3
3 positions situées à sa droite - Le
3
, car il y a un4
4 positions situées à sa gauche - Le
5
, car il y a un2
2 positions situées à sa droite - Le second
7
, car il y a3
3 positions situées à sa gauche.
De ces valeurs, la plus grande est 7
.
Cas de test
[1, 13] → 13
[2, 9, 8, 3, 72, 2] → 8
[5, 28, 14, 5, 6, 3, 4, 7] → 14
[1, 3, 5, 15, 4, 1, 2, 6, 7, 7] → 7
[5, 1, 3, 5, 2, 5, 5, 8, 5, 1, 5, 1, 2, 3] → 5
[5, 12, 2, 5, 4, 7, 3, 3, 6, 2, 10, 5, 5, 5, 4, 1, 8, 5] → 10
Réponses:
Gelée , 9 octets
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça marche
la source
05AB1E , 21 octets
Explication
Essayez-le en ligne!
la source
Haskell,
615755 octetsExemple d'utilisation:
(f.zip[0..]) [5,28,14,5,6,3,4,7]
->14
.(Plus ou moins) une implémentation directe de la définition: pour chaque index
n
de la liste d'entréex
gardera := x!!n
s'il y a un indexi
oùb := x!!i
est égalabs(n-i)
. Trouvez le maximum.Modifier: @xnor a enregistré deux octets. Merci!
la source
x
, il devrait être plus court de définir une fonction dansz
et de composer danszip[0..]
.Gelée , 10 octets
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça marche
la source
Python 3,
858072 octetsEdit: -8 octets grâce à @Dennis
la source
EXCEL:
3230 octets=MAX(IF(A:A-ROW(A:A)<0,A:A,0))
Je n'arrive toujours pas à croire que je sois si court ...
Comment utiliser:
collez-le dans N'IMPORTE QUELLE cellule SAUF les cellules de la colonne A. Après avoir collé, tout en modifiant, appuyez sur
control
+shift
+enter
pour le saisir correctement.mettez vos valeurs dans la colonne A, 1 valeur par cellule (selon l'entrée CSV).
Si vous voulez savoir comment cela fonctionne, j'ai publié un conseil supplémentaire dans ma question Conseils pour jouer au golf dans Excel .
la source
JavaScript (ES6), 61 octets
la source
Perl, 45 octets
Comprend +2 pour
-ap
Donnez des chiffres sur une ligne sur STDIN:
largest.pl
:Un octet de plus peut être obtenu en remplaçant
^P
par le caractère de contrôle littéral, mais cela conduit à un avertissement sur STDERR sur les dernières perls.Suppose
largest number + array length < 2^32
la source
Pyth,
1917 octetsMerci à @ Pietu1998 pour -2 octets
Un programme qui prend l'entrée d'une liste sur STDIN et imprime le résultat.
Essayez-le en ligne
Comment ça marche
la source
}#
est le même que@
. De plus, si vous réorganisez le dernier bit,,-kb+bk
vous pouvez supprimer le dernierk
car Pyth l'insère automatiquement.MATL, 13 octets
L'entrée doit être un vecteur de colonne. C'est-à-dire, l'entrée est séparée par des points-virgules comme [1; 2; 3], ou séparée par des virgules avec une coche de transposition à la fin comme [1,2,3] '.
Essayez-le en ligne!
Tous les cas de test: (A) , (B) , (C) , (D) , (E) , (F)
Merci à Suever pour les suggestions dans le salon MATL pour enregistrer 2 caractères.
Explication:
La stratégie globale est la même que ma réponse Octave / MATLAB, où le concept de base est expliqué: https://codegolf.stackexchange.com/a/94161/42247
Le code spécifique dans cette réponse MATL est construit comme suit:
Le cœur de la méthode est la construction de la matrice de Toeplitz dont la jième entrée est abs (ij). Nous construisons d'abord la matrice de Toeplitz avec les entrées abs (i-1) +1 avec la commande toeplitz YT de MATL comme suit:
Pour voir comment cela fonctionne, appelons le vecteur d'entrée à cet extrait de code «v». Le «n» trouve la longueur de v, puis «:» construit le vecteur 1: longueur (v). Ensuite, le «t» fait une autre copie de 1: longueur (v) sur la pile; cette copie supplémentaire est nécessaire en raison d'un bogue bien connu dans la fonction YT dans MATL (l'équivalent MATL de toeplitz ()), dans lequel il attend deux copies de l'entrée au lieu de 1. Ensuite, YT prend les deux copies de ce vecteur 1 : longueur (v) de la pile, et en fait la matrice abs (ij) +1 de Toeplitz.
Maintenant, nous devons soustraire 1 de cette matrice pour obtenir la matrice de Toeplitz avec les entrées abs (ij), et trouver les emplacements ij où cette matrice de abs (ij) Toeplitz est égale à la matrice de tous les vecteurs de colonne contenant des copies de colonne de l'entrée vector v. Cela se fait comme suit:
Le premier «t» crée une copie supplémentaire de l'entrée et la stocke sur la pile. Le 'n: tYT' crée la matrice de toeplitz comme décrit précédemment et la renvoie dans la pile. Ensuite, 'q' soustrait 1 de la matrice de Toeplitz et '=' fait la comparaison d'égalité par élément entre la matrice abs (ij) et le vecteur dont les colonnes sont des copies de l'entrée. Notez qu'en comparant un vecteur de colonne à une matrice, nous profitons implicitement des règles de diffusion d'opérateur de MATLAB / MATL (le vecteur de colonne dans la comparaison est copié pour créer une matrice sans émettre de commande).
Enfin, nous devons trouver les indices de ligne i où il y a une colonne j telle que la iième entrée dans la différence de matrice construite ci-dessus soit égale à 1, puis obtenir la valeur du vecteur d'entrée correspondant à ces indices, puis prendre le maximum. Ceci dans les trois étapes suivantes:
1) Trouvez les indices pour toute ligne contenant un non nul:
2) Extraire les éléments du vecteur d'entrée correspondant à ces indices:
3) Trouvez et retournez l'élément maximum:
la source
YT
a changé dans la version 20.2.2 . Maintenant, il utilise 1 entrée par défaut (ce qui est plus utile en général). Bien que cela vous fasse économiser 1 octet ici (supprimert
avantYT
), il ne peut pas être exploité car le changement de langue est postérieur au défi. Mais cela a pour effet que votre réponse n'est plus valable dans la nouvelle version, qui est maintenant en direct dans TIOn:
parf
Rubis, 66 octets
la source
Octave / MATLAB, 40 octets
L'entrée doit être un vecteur de colonne.
Merci à Luis Mendo pour les suggestions économisant 3 octets (voir commentaire)
Merci à Suever pour les suggestions permettant d'économiser 4 octets supplémentaires (en remplaçant ~~ (sum ()) par any ())
Explication:
Étant donné un vecteur d'entrée v, ce problème équivaut à trouver toutes les solutions i, j de l'équation discrète suivante,
où abs () est la fonction de valeur absolue. Chaque v (i) pour lequel cette équation est résolue est l'une des solutions candidates sur lesquelles nous pouvons maximiser.
En tant que fonction discrète de i et j, toutes les possibilités pour le côté gauche peuvent être arrangées dans la matrice de toeplitz qui ressemble à ceci:
Et comme le côté droit ne dépend pas de i, toutes les possibilités peuvent être arrangées dans une matrice où les colonnes sont toutes des copies de l'entrée,
Pour trouver toutes les solutions à l'équation, nous soustrayons ces deux matrices et trouvons les emplacements où il y a un zéro. Les lignes où il y a un zéro correspondent aux indices désirés i où il y a aj tels que abs (ij) = v (i).
Autres astuces:
la source
v
comme vecteur de colonne, indiquez-le simplement dans la réponse. En outre, vous remplacezfind
par~~
pour enregistrer deux octets supplémentairestoeplitz
(YT
), il utilise deux entrées (pas une) par défautMathematica, 69 octets
Fonction anonyme. Prend une liste d'entiers en entrée et renvoie un entier en sortie. Ignorez tous les messages générés.
la source
Scala, 94 octets
la source
PHP, 128 octets
la source
Java 7,
125123 octets2 octets enregistrés grâce à @mrco .
Code non testé (en quelque sorte) et de test:
Essayez-le ici.
Sortie:
la source
,y
. Et je suis en effet arrivé à la même conclusion concernant le ternaire unique si. Bien sûr, c'est possible, mais vous ferez le contrôle deux fois, ce qui le rend beaucoup plus long.Java, 118 octets
la source
Python, 58 octets
Sur la base de la réponse Ruby Tony S. . Cette réponse fonctionne en Python 2 et 3. Les suggestions de golf sont les bienvenues.
Ungolfing
la source
Ruby 56 octets
Ma plus petite solution de rubis.
Assez facile à tester dans la console des rails
Cela a commencé à 63 octets, merci pour les suggestions pour aider à le réduire!
la source
.map
place de.each
(x) if (y)
peut également être remplacé par(y)&&(x)
a<<b
place dea+=[b]
En fait , 17 octets
Cette réponse est en fait un portage de ma réponse Python . Suggestions de golf bienvenues. Essayez-le en ligne!
Ungolfing
la source
T-SQL (sqlserver 2016), 132 octets
Golfé:
Non golfé:
Violon
la source
JavaScript (ES6),
5654 octetsla source
Clojure, 68 octets
Par exemple,
(map-indexed (juxt - +) [3 4 1 2])
est([-3 3] [-3 5] [1 3] [1 5])
(indexe+/-
sa valeur), ceux-ci sont utilisés pour rechercher des valeurs à partir du vecteur d'origine (par défaut hors plage0
) et la valeur maximale est trouvée. Se sent toujours un peu bavard mais au moins j'ai pu utiliserjuxt
:)la source