Inspiré par cette question SO
En entrée, vous recevrez une liste d'entiers non vide, dans laquelle la première valeur est garantie différente de zéro. Pour construire la sortie, parcourez le début de la liste en indiquant chaque valeur différente de zéro. Lorsque vous rencontrez un zéro, répétez la valeur que vous avez récemment ajoutée à la sortie.
Vous pouvez écrire un programme ou une fonction et faire en sorte que les entrées / sorties prennent tout format approprié qui ne code pas d’informations supplémentaires, tant qu’il s’agit toujours d’une séquence ordonnée d’entiers. Si vous sortez d'un programme, vous pouvez imprimer une nouvelle ligne. Excepté cette fin de ligne, votre sortie doit être une entrée acceptable pour votre soumission.
Le code le plus court en octets gagne.
Cas de test
[1, 0, 2, 0, 7, 7, 7, 0, 5, 0, 0, 0, 9] -> [1, 1, 2, 2, 7, 7, 7, 7, 5, 5, 5, 5, 9]
[1, 0, 0, 0, 0, 0] -> [1, 1, 1, 1, 1, 1]
[-1, 0, 5, 0, 0, -7] -> [-1, -1, 5, 5, 5, -7]
[23, 0, 0, -42, 0, 0, 0] -> [23, 23, 23, -42, -42, -42, -42]
[1, 2, 3, 4] -> [1, 2, 3, 4]
[-1234] -> [-1234]
la source
[0,0]
?[1,01]
? À l'aide de la réponse Pyth d'Issac, comparez ceci et cela .01
n'est pas un entier valide en entrée Pyth, donc isaac n'a pas à en tenir compte. D'autres réponses peuvent accepter une entrée comme celle-ci si elles le souhaitent, du moment qu'elles sont cohérentes (la réponse d'Réponses:
Pyth, 6 octets
Manifestation
m ... Q
signifie que cela mappe une fonction sur l'entrée. La fonction en cours de mappage estJ|dJ
. Cela signifieJ = d or J
en Python, puisqueJ
implicity est affecté à la valeur suivante lors de la première utilisation. Contrairement à Python, les expressions d’affectation renvoient la valeur affectée dans Pyth. La carte renvoie donc chaque valeur successive deJ
, comme souhaité.la source
Gelée , non en compétition
3 octets Cette réponse est sans concurrence, car elle utilise des fonctionnalités postérieures au défi.
Essayez-le en ligne!
Comment ça marche
la source
Ruby, 25 octets
Ceci est en réalité vraiment mauvais.
Plus précisément, l'extrait de code
x==0 ? a : (a=x)
.Si j'avais utilisé un autre nom de variable pour
a
(la valeur différente de zéro précédente)y
- disons - je devrais la déclarer en dehors demap
(cary=x
seule l'étendue serait à l'intérieur de cette seulemap
itération). Cela utiliserait quatre caractères plus (y=0;
).Mais si j'utilise le nom de la variable
a
... oui, vous l'avez deviné. En fait, je réassigne l'argument que nous avons obtenu en entrée (le tableau d'origine).map
s'en moque, car il ne s'intéresse qu'à la valeur initiale de la chose sur laquelle il est appelé, donc cela fonctionne réellement.la source
Haskell, 21 octets
La fonction (anonyme) que nous faisons est dans la dernière ligne. Les deux premières lignes définissent une fonction d'assistance.
La fonction binaire
%
génère le deuxième argument, à moins que ce ne soit le cas0
, auquel cas elle renvoie le premier argument.scanl1
itère cette fonction sur la liste d'entrée, en affichant le résultat à chaque étape.la source
J, 8 octets
C'est une fonction unaire, invoquée comme suit.
Explication
la source
{:@(#~|)\
donc un octet de plus.Sed, 8
/^0$/
correspond à un zéro sur une ligne - si c'est le cas,g
copie l'espace de maintien dans l'espace du motifh
copie le motif dans l'espace de caleLes entiers sont séparés par une nouvelle ligne. par exemple:
la source
Javascript ES6, 19 octets
Solution simple, boucle à travers l' entrée, assigner
p
à l' élément actueli
oup
sii
est0
et la sortie elle.Exemple d'exécution (attribution d'une fonction anonyme à
f
):la source
Retina , 15 octets
Essayez-le en ligne.
Remplace de manière répétée un nombre suivi d'un zéro par deux fois ce nombre jusqu'à ce que la chaîne cesse de changer.
la source
Dyalog APL,
12109 octetsInspiré par la réponse J de @ Zgarb.
Essayez ici .
la source
Pyth, 8 octets
Utilisations
.u
(réduction cumulative) de|
(Pythonor
), avec le cas de base 0.la source
.u
c'est plus long même siJ
etK
sont ligotés. Est-ce jamais optimal?Python 2, 29 octets
Prend les entrées sous forme de nombres, un par ligne, et les sorties dans le même format. Se termine avec une erreur après avoir terminé.
En utilisant la nature de court-circuitage de
or
, la variablex
est mise à jour vers l'entrée, sauf si cette entrée est 0 (qui est Falsey), auquel cas elle reste sa valeur actuelle. Ensuite,x
est imprimé. Notez que, comme la première valeur de la liste est différente de zéro,x
n’est pas évaluée dans le côté droit avant son affectation.la source
#\nJ|EJ
Mathematica 38 octets
La correspondance de modèle remplace de manière répétée
...a,0,...
par...a,a...
la source
Matlab, 41 ans
46octetsCeci est inspiré de ma réponse originale , avec les différences suivantes:
nonzeros
.0
.Merci à Tom Carpenter pour le point 4 et pour sa suggestion d’utiliser un programme au lieu d’une fonction; ensemble, ils ont permis une réduction de 5 octets.
Exemple:
la source
x=input('')
plutôt que la déclaration de fonction etdisp(u(t)
ley=
bit. En outre, vous pouvez économiser quatre octets supplémentaires en éliminant lat
variable, ce qui donnex=input('');u=x(~~x);disp(u(cumsum(~~x)))
41 octets .@(x)x(~~x)(cumsum(~~x))
travaille dans Octave.Gol> <> , 8 octets
L'entrée et la sortie sont des nombres séparés par une nouvelle ligne.
Explication:
Essayez-le en ligne ici.
la source
Japt,
87 octetsAssez simple. Prend les entrées séparées par des virgules.Essayez-le en ligne!
Ungolfed et explication
Version non concurrente de 4 octets : (
å
commande et!
-auto-function ajoutés après le challenge)Explication:
Essayez-le en ligne!
la source
ª
est OR, plutôt queº
? Est-ce queº
AND est par hasard?º
c'est((
. Ils ont été affectés par la valeur Unicode comme je l' ai trouvé la nécessité pour eux: Pª
e etº
r est le génie si, je pourrais l' utiliser pour Japt 2.0 ...Java, 78
Ici, nous ne faisons que garder une trace du dernier non nul et le fourrer là où il convient. Cela semble être le moyen évident de le faire.
la source
Prolog (SWI) , 54 octets
Essayez-le en ligne!
Explication
Je suis vraiment content de cette réponse.
On dit d'abord que la liste vide est la solution de la liste vide:
Ensuite, nous disons que
[X,X|Y]
c'est la solution de[X,0|T]
, si en supprimant la deuxième entrée de chacune des solutions restantes.Enfin, nous disons que tout ce qui reste est valable s’il commence par la même valeur et que le reste des deux listes se correspondent.
Si cette explication ne vous convient pas, le code traduit en Haskell:
Essayez-le en ligne!
la source
GolfScript, 10 octets
Ce programme prend les entrées de stdin, sous la forme d'un littéral de tableau GolfScript (par exemple
[1 0 2 0]
), et écrit sa sortie sur stdout dans le même format (par exemple[1 1 2 2]
).Essayez-le en ligne.
Une fonction (prendre et renvoyer un tableau GolfScript) aurait trois octets de plus, en raison de la nécessité de l'envelopper dans un bloc et de l'attribuer à un symbole:
Bien sûr, si seul le corps de la fonction (c'est-à-dire
[{1$or}*]
) est compté, je peux réellement économiser un octet par rapport au programme autonome.la source
Minkolang 0,14 ,
1210 octetsEssayez ici.Les entrées peuvent être données comme dans la question, mais sans crochets .
Explication
Minkolang est toroïdal, donc cela tourne en boucle jusqu'au début et continue jusqu'à ce qu'il atteigne
.
et s'arrête.la source
, 7 caractères / 12 octets
Try it here (Firefox only).
Explication
la source
O , 31 octets
Cela prend une entrée séparée par
,
et affiche la même liste dans[]
.Explication:
17 octets
Prend la saisie comme une liste de nombres séparés par des espaces en utilisant la notation postfixe et ne peut gérer que des nombres hexadécimaux à un chiffre. Les négatifs sont postfixés avec
_
.Explication:
la source
I~]{n.{:V}{;V}?}d
. Je me demande sid
devrait simplement mettre la valeur sur la pile au lieu den
...-42
, mais elle ajoute des crochets autour de la sortie.R,
393733 octetsC'est une fonction non nommée qui accepte un vecteur et renvoie un vecteur. Le
zoo
paquet doit être installé. Notez qu'il n'est pas nécessairezoo
d'être attaché à l'espace de noms puisque nous le référençons directement.Le nom de cette opération dans le monde des statistiques est l'imputation LOCF, où LOCF signifie «Dernière observation reportée». Pour ce faire dans R, nous pouvons utiliser
na.locf
lezoo
package, qui remplace lesNA
valeurs par la dernière non-NA
valeur connue . Il suffit de remplacer les zéros dans l’entrée parNA
s en premier.Pour ce faire, nous utilisons
x|NA
ce qui seraTRUE
quandx != 0
etNA
autrement. Si nous multiplions ce nombre parx
, lesTRUE
éléments sont remplacés par les éléments correspondants dex
et leNA
resteNA
, remplaçant ainsi tous les zéros. Ceci est ensuite passé àzoo::na.locf
qui nous donne exactement ce que nous voulons.Sauvegardé 4 octets grâce à flodel!
la source
Rouille, 100 octets
Je suis tombé sur ce défi, je pensais l'essayer dans ma langue préférée. Essayé d'utiliser
[T]::windows_mut()
au début, avant de découvrir que ça n'existe pas . Et cela aurait pu être plus long que ça. Quoi qu’il en soit, il s’avère que Rust, jouée au golf, est très laide et très peu compétitive (surtout avec tous ces ésotériques bien connus!) 1La nouvelle ligne n'est pas incluse dans le décompte; c'est seulement là pour que vous n'ayez pas à faire défiler latéralement. Cela ne change pas la signification du code.
Ungolfed:
[1] Au moins, ce n'est pas aussi grave que Java.
la source
public static void main
partout…Voie lactée 1.2.1 , 33 octets
Cela suppose que la liste des entiers est uniquement sur la pile.
Explication
la source
Julia, 33 octets
C'est une fonction
g
qui accepte un tableau et retourne un tableau. Nous commençons une variable temporairea
à 0. Pour chaque élémenti
de l'entrée, s'ili
ne s'agit pas de 0, nous affectonsa
ài
. Sii
est égal à 0,a
ne change pas à cette itération. Nous utilisonsa
comme valeur dans cette position dans le tableau de sortie.la source
Perl 6 , 21 octets
usage:
la source
R, 36 octets
Voyons comment cela fonctionne en utilisant
x=
par exemple. Ici,
!!x
sera le vecteur logique (True / False):En outre,
seq(a=x)
donne un vecteur d'indices pour autant quex
:On multiplie les deux en donnant:
Nous prenons le maximum cumulatif:
Enfin, nous utilisons ce dernier vecteur comme index à extraire de
x
:la source
CJam, 11 octets
Essayez-le en ligne.
Comment ça marche
la source
Powershell, 32 octets
$x|%{...}
le script bloque-t-il chaque élément de$x
.($_,$t)
est un tableau d'éléments courants et$t
, et[!$_]
signifie que nous utilisons!$_
pour indexer dans le tableau. L'indice sera0
(false) pour les éléments non nuls et1
(true) lorsque l'élément en cours est égal à zéro, il$t
s'agira donc de l'élément en cours ou$t
. Les parenthèses entourent l'expression d'affectation pour que sa valeur soit émise. Sans parenthèses, il s'agirait simplement d'une tâche "discrète"$t
.la source
param($x)
ce qui transforme cela en un programme. La sortie est une collection d’entiers que vous pouvez soumettre en tant que paramètre au programme, par exemple$a = .\program.ps1 1,2,3,4,0,0,5
, puis qui.\program.ps1 $a
fonctionne comme prévu.$args|%{($p=($_,$p)[!$_])}
- 26 octets utilisant $ args.Japt , 3 octets
L'essayer
la source