Étant donné une liste avec un nombre, affichez les plages comme ceci:
Entrée: [0, 5, 0]
deviendrait [0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
.
Il s'agit de mapper une plage à travers le tableau, nous devons donc d'abord créer la plage [0, 5]
, qui est [0, 1, 2, 3, 4, 5]
. Après cela, nous utilisons le 5
pour créer la gamme [5, 0]
. Annexé à notre gamme précédente, cela nous donne:
[0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
Observons un cas de test avec deux mêmes chiffres côte à côte:
[3, 5, 5, 3], ranges:
[3, 5] = 3, 4, 5
[5, 5] = 5 (actually [5, 5] due to overlapping)
[5, 3] = 5, 4, 3
Donc, cela nous donnerait [3, 4, 5, 5, 4, 3]
.
Quelques autres cas de test:
[1, 9] > [1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, -10] > [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10]
[3, 0, 0, -3] > [3, 2, 1, 0, 0, -1, -2, -3]
[1, 3, 5, 7, 5, 3, 1, -1, -3] > [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3]
L'entrée aura toujours au moins 2 entiers.
La réponse la plus courte gagne!
code-golf
array-manipulation
Lamaro
la source
la source
Réponses:
05AB1E, 1 octet
Essayez-le en ligne!
Comment ça fonctionne
C'est un intégré.
la source
Javascript,
999593 octets46 octets de réduction merci @Neil .la source
y<b?b-y:y-b||1
. Enregistrez un autre octet en utilisanty>b||y-b&&-1
.y<b?-1:y>b
c'est encore mieux.JavaScript (SpiderMonkey 30+),
8176 octetsTesté dans Firefox 44. Utilise les capacités impressionnantes de déstructuration d'arguments d'ES6 et les compréhensions de tableaux d'ES7 (qui ont malheureusement été supprimées de la spécification ES7).
la source
[3, 0, 0, -3]
. J'ai corrigé le RangeError et enregistré 10 octets mais cela ne fonctionne toujours pas:([n,...a],z=[n])=>z.concat([for(i of a)for(j of[...Array((r=n<i)?i-n-1:n-i-1),0])i=r?++n:--n])
([n,...a])=>[n].concat([for(i of a)for(j of[...Array((r=n<i)?i-n:n-i)])i=r?++n:--n])
bien sûr.JavaScript (ES6) 66
72Une fonction récursive qui ajoute à plusieurs reprises des valeurs à l'intérieur du tableau pour combler les écarts entre les nombres proches
Tester
la source
C, 120 + 12 = 132 octets
Exemple d'appel:
Testez en direct sur ideone .
la source
Python 2, 77 octets
Essayez-le en ligne
Merci à Neil, DenkerAffe et Erwan d'avoir signalé les améliorations que j'ai manquées
la source
+1
pas nécessaire?lambda n:n[0:1]+sum([range(x,y,[1,-1][y+1<x])[1:]+[y]for(x,y)in zip(n,n[1:])],[])
? enregistre quelques octets.[1,-1][y+1<x]
par2*(y>x)-1
(aussi je ne comprends pas pourquoi vous utilisezy<=x
et pas simplementy<x
)n[0:1]
est équivalent àn[:1]
.Perl, 47 octets
Comprend +3 pour
-p
(le code contient$'
donc de l'espace et-
compte aussi)Donnez la liste des numéros sur STDIN:
fluctuating.pl
:La variable temporaire et toutes ces parenthèses ne sont pas optimales ...
la source
$'
vous avez mentionné n'est pas dans le code ...Haskell,
6355 octetsExemple d'utilisation:
g [3,5,5,3]
->[3,4,5,5,4,3]
.C'est une modification de ma réponse à un défi connexe . Encore une fois, le travail principal se fait en concaténant la liste de
a
haut en basb-1
et dea
bas en hautb+1
(où une liste sera vide) et un appel récursif. Pour gérer lea==b
cas où les deux listes sont vides, nous ajoutons le préfixe[a|a==b]
qui évalue[a]
sia==b
et[]
sinon.la source
R,
868275 octetssauvé 4 octets en représentant pas rep.int (golf code non performance!) 7 autres octets sauvé en utilisant intégré une correspondance partielle lors de l' utilisation
$
(et l' effondrement définition de fonction à 1 lignela source
(y=...)
plutôt que ce qui(y<-...)
est également valable, et un octet de moins.Rubis,
11682 octetsMon tout premier golf.
Edit: Merci manatwork pour les suggestions impressionnantes.
la source
map
le bloc de code de » peut prendre la matrice sous forme de plusieurs paramètres:->n{o,*m=n;o=[o];m.zip(n).map{|t,u|o+=u==t ?[u]:(u<t ?[*u+1..t]:[*t..u-1].reverse)};o}
. Sinon beau premier golf.[[u],[*u+1..t],[*t..u-1].reverse][t<=>u]
.Japt , 12 octets
16 octets enregistrés grâce à @ETHproductions !
Testez-le en ligne
la source
Perl 6, 94 octets
Je ne suis pas super content de ça maintenant, je vais probablement prendre une autre photo plus tard
la source
PHP 5.4, 86 octets
Il est destiné à être utilisé en tant que fichier inclus, qui renvoie le résultat.
Les valeurs sont transmises en tant que paramètres de ligne de commande.
Pas exactement jolie ou quoi que ce soit, mais fait le travail.
la source
Python 3 , 76 octets
Première tentative de réponse Python. L'idée de base est d'identifier à plusieurs reprises les paires de la séquence où la différence est supérieure à une étape et d'insérer un (et un seul) élément supplémentaire pour terminer la séquence dans la bonne direction. Répétez jusqu'à ce que toutes les différences entre les éléments consécutifs soient comprises entre +1 et -1.
Essayez-le en ligne!
la source
Lua, 156 octets
Une fonction qui prend un tableau en paramètre et retourne le tableau étendu.
Non golfé et explications
Pour faciliter l'utilisation, vous pouvez utiliser la fonction suivante pour imprimer le tableau renvoyé par
f()
.Lorsque vous testez cette soumission, vous pouvez l'appeler comme:
la source
Mathcad, 62 "octets"
Comme Mathcad utilise un "tableau blanc" 2D et des opérateurs spéciaux (par exemple, opérateur de sommation, opérateur intégral) et enregistre au format XML, une feuille de calcul réelle peut contenir plusieurs centaines (ou plus) de caractères. Aux fins de Code Golf, j'ai pris un "nombre d'octets" Mathcad comme étant le nombre de caractères ou d'opérateurs que l'utilisateur doit entrer pour créer la feuille de calcul.
La conversion de la définition de fonction en un programme simple et le remplacement de la variable lst par un nom de caractère unique, donne un total de 62 "octets". Avec la fonction, en utilisant un seul caractère plutôt que le nom complet, cela augmente à 65 "octets" pour la définition et à 4 "octets" supplémentaires pour chaque appel (en supposant que la création de la liste elle-même n'est pas incluse dans l'octet global count (L'utilisation des tables intégrées de Mathcad est une autre façon de saisir la liste).
la source
PHP, 144 octets
Vue éclatée Appel d'entrée / fonction ProductionC'est désordonné et trapu, et je vais essayer de l'optimiser plus tard. Il crée un à
range()
partir de chaque paire de paires de valeurs adjacentes, puis les assemble ensemble (après avoirpop
supprimé la fin du cumulatif précédentArray
).la source
Perl6, 21
.join est l'abréviation de $ _. join
Test (rakudo)
Production
la source
Gelée , 10 octets
Essayez-le en ligne!
la source
R , 74 octets
Une autre solution R
Essayez-le en ligne!
la source