Défi:
Prenez un vecteur / une liste d’entiers comme entrée et indiquez le plus grand nombre adjacent à un zéro.
Caractéristiques:
- Comme toujours, formats d'entrée et de sortie optionnels
- Vous pouvez supposer qu'il y aura au moins un zéro et au moins un élément différent de zéro.
Cas de test:
1 4 3 6 0 3 7 0
7
9 4 9 0 9 0 9 15 -2
9
-4 -6 -2 0 -9
-2
-11 0 0 0 0 0 -12 10
0
0 20
20
Bonne chance et bon golf!
Réponses:
Gelée , 8 octets
Essayez-le en ligne!
la source
MATL , 10 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Prenons l'entrée
[-4 -6 -2 0 -9]
comme exemple.la source
x(~~(dec2bin(5)-48))
. Qui a eu l'idée de l'implémenter? Très intelligent et utile pour les tableaux logiques! :) Bonne réponse!dec2bin()-'0'
centaines de fois dans MATLAB, alors je savais qu'il fallait être dans MATL :-)05AB1E , 9 octets
Explication
Ne fonctionne pas dans l'interprète en ligne, mais fonctionne hors ligne.
la source
ü
été ajouté juste hier :)0
si la réponse réelle serait négative? Vous devez jeter les zéros, je pense.˜
parO
(somme).Haskell,
6343 octetsMerci à @MartinEnder pour 4 octets!
la source
a*b==0
place du||
.Pyth,
121110 octetsLes paires de formulaires, filtrées par un membre zéro, triées par la somme, retournent le plus grand nombre.
la source
,Vt
(impliciteQQ
) renvoie les mêmes paires que.:Q2
, mais avec les paires retournées. Devrait fonctionner, cependant.f}0T
est/#0
JavaScript (ES6),
595756 octetsEdit: sauvegardé 2 octets grâce à Huntro
Edit: sauvegardé 1 octet grâce aux ETHproductions
la source
==
place de===
l=>l.map((n,i)=>m=l[i-1]*l[i+1]==0&n>m?n:m,m=-1/0)|m
JavaScript (ES6), 53 octets
Parce que j'aime utiliser
reduce
. Solution alternative, également 53 octets:la source
Python, 49 octets
Les tests sont à l' idéone
Zip à travers les paires, somme celles contenant zéro, renvoie le maximum.
la source
Ruby, 51 octets
usage
la source
a+b
.-3 -2 0
Renvoie0
. Je pense que le remplacement...?0:...
par...?-1.0/0:...
devrait corriger, en ajoutant 5 octets.PHP,
776871 octets-3 octets d'anonymes,-4 et -2 de MartinEndercourir avec
php -r '<code>' '<space separated values>'
la source
\K
jusqu'à maintenant le match est plus court que de regarder derrière.\S+
pour faire correspondre un entier signé. Vous devrez probablement utiliser\b0,
afin de ne pas avoir à prévoir le,
.4 0 0 5
?\K
fonctionne pas avec des alternatives? Pour une raison inconnue, la deuxième option est renvoyée0 0
, de sorte qu'il ne reste plus aucune0
correspondance avant5
. Fixe, merci.Java 7,
118105106 octets13 octets sauvegardés grâce à @cliffroot en utilisant une approche arithmétique. 1 octet supplémentaire à @mrco après avoir découvert un bogue (le cas de test ajouté
2, 1, 0
reviendrait2
au lieu de1
).Ungolfed & code de test:
Essayez ici.
Sortie:
la source
int d(int[]a){int i,m=a[i=0],c;for(;++i<a.length;m=a[i]*a[i-1]==0&(c=a[i]+a[i-1])>m?c:m);return m;}
CJam , 16 octets
Essayez-le en ligne!(En tant que suite de tests.)
Explication
la source
MATLAB avec boîte à outils de traitement d'images, 32 octets
C'est une fonction anonyme. Exemple d'utilisation pour les cas de test:
la source
Dyalog APL , 14 octets
⌈/
le plus grand des∊
le aplati (" e nlisted"2(
...)/
par paire+
somme (zéro plus quelque chose est quelque chose)↑⍨
pris si0
zéro∊
est membre de,
la paire (lit. la concaténation du numéro de gauche et du numéro de droite)TryAPL en ligne!
la source
R,
4847 octetsEDIT: Correction d'une erreur grâce à @Vlo et l'a modifiée pour lire les entrées de stdins, sauvegardé d'un octet en assignant
w
et en sautant des parenthèses.Explication non imbriquée
v
prend les valeurs 0:w <- which(v == 0)
+-1
:w-1
etw+1
w-1
etw+1
Notez que si le dernier ou le premier élément
v
est un zéro,w+-1
un index situé en dehors de la longueur du vecteur sera effectivement récupéré, ce qui implique que le résultat estv[length(v)+1]
retournéNA
. Ce n’est généralement pas un problème, mais lesmax()
fonctions renvoient inopportunémentNA
s’il existe des occurrences dans le vecteur, à moins que l’on spécifie l’optionna.rm=T
. Ainsi, il est plus court de 2 octets pour trier et extraire que pour utilisermax()
, par exemple:la source
c(1, 4, 3, 6, 0, 10, 7, 0)
c((w<-which(v==0))-1,w+1)
sort((v<-scan())[c(w<-which(v==0)-1,w+1)],T)[1]
()
;). Mis à jour le code et assignév
une manipulation antérieure maintenant.Mathematica,
4643 octets3 octets enregistrés en raison de @MartinEnder .
Fonction anonyme. Prend une liste d'entiers en entrée et retourne un entier en sortie. Basé sur la solution Ruby.
la source
Perl, 42 octets
Comprend +1 pour
-p
Donnez les numéros en ligne sur STDIN
largest0.pl
:la source
Julia,
5655 octetsCréez des tuples pour les valeurs voisines, prenez les tuples contenant 0, additionnez les valeurs de tuple et trouvez le maximum
la source
Python 2, 74 octets
Parcourez chaque élément, s'il y en a un
0
à gauche ou à droite de l'élément actuel, incluez-le dans le générateur, puis exécutez-lemax
. Nous devons compléter la liste avec des non-0
numéros. Ça ne sera jamais inclus parce que la tranche[-1:2:2]
n'inclura rien.la source
T-SQL, 182 octets
Golfé:
Ungolfed:
Violon
la source
PowerShell v3 +, 62 octets
Un peu plus long que les autres réponses, mais une approche astucieuse.
Prend les entrées
$n
. Ensuite, parcourt les index0..$n.count
, utilise la méthodeWhere-Object
(|?{...}
) pour extraire les index où se trouve l’élément précédent ou suivant du tableau0
et les renvoie dans la tranche de tableau$n[...]
. Nous avons ensuite|sort
ces éléments, et prenons le plus grand[-1]
.Exemples
la source
q, 38 octets
la source
{}
pour en faire une fonction.J, 18 octets
Explication
la source
Perl 6 , 53 octets
Étendu:
la source
PHP, 66 octets
Assez simple. Itère sur l'entrée et lorsqu'un nombre est
0
, il définit$m
le nombre le plus élevé des 2 nombres adjacents et toute valeur précédente de$m
.Courez comme ceci (
-d
ajouté pour l'esthétique seulement):la source
C #
7674 octetsExplication:
Utilisez zip pour joindre le tableau à lui-même, en ignorant la première valeur de la deuxième référence afin que l'élément zéro soit joint au premier élément. Multipliez a fois b, si le résultat est zéro, l’un d’eux doit être zéro et produire a + b. Sinon, indiquez le nombre minimum possible dans la langue. En supposant que nous aurons toujours un zéro et un non-zéro, cette valeur minimale ne sera jamais sortie en tant que max.
Usage:
la source
int[]i) {
. De plus, je compte 75 octets dans votre code actuel (74 si vous supprimez l’espace).a?b?i.Min()).Max():a:b
using System.Linq;
, non?System.Linq;
fait partie du nouveau modèle de classe par défaut.using
déclaration dans votre nombre d'octetsR,
4854 octetsLit le vecteur à partir de l'entrée de la console, puis prend le maximum sur toutes les valeurs adjacentes à 0.
Edit: Captures produites à la limite, merci rturnbull!
la source
20 0
, en raison dess[w(s==0)+1]
rendementsNA
etmax
de traitement par défautNA
est de le renvoyer. Vous pouvez corriger en ajoutant l'argumentna.rm=T
, ou retravailler le code à utilisersort
(voir l'autre réponse R affichée ci-dessus).Raquette 183 octets
Version détaillée:
Essai:
Sortie:
la source
C 132 octets
Sorties utilisant le code de retour de main:
J'ai le sentiment que je devrais pouvoir économiser quelques octets en enregistrant l'un des appels atoi, mais je ne trouvais pas de moyen efficace. (
,t
plust=
plus,
plust
deux fois c'est trop long). De plus, cela utilise techniquement un comportement indéfini (définir _ [a] sur "1"), mais chaque compilateur que je connais le permet par défaut.Stratégie: complétez le début et la fin du tableau par 1, puis passez en boucle sur la section interne en vérifiant chaque voisin.
la source
PHP
6964 octetsQuelques octets de Jörg Hülsermann et Titus. =
(-5)
Nécessite register_globals activé. Usage:
http://localhost/notnull.php?i[]=9&i[]=-5i[]=...
Golfé:
la source
-d register_globals=1
(ou spécifiez une version où register_globals est activé par défaut)json_decode
c'est une bonne idée.?id[]=1&id[]=2&id[]=3
et$_GET["id"]
donne de nouveau un tableau. Pour cette raison, json_decode n'a aucun sens pour moi