Tâche
Étant donné un tableau non vide de 0
et 1
, divisez par deux la longueur des séries de 0
.
Contribution
Un tableau de 0
et 1
. Format acceptable:
- Vrai tableau dans votre langue
- Chaîne séparée par des sauts de ligne
0
et1
- Chaîne contiguë de
0
et1
- Tout autre format raisonnable
Par exemple, les trois entrées suivantes sont toutes acceptables:
[1, 0, 0, 1]
"1\n0\n0\n1"
(où\n
est un saut de ligne U + 000A)"1001"
Vous pouvez supposer que les séries de 0
seront de même longueur .
Production
Un tableau de 0
et 1
, dans les formats acceptables ci-dessus.
Cas de test
input ↦ output
[1,0,0,1,0,0,1] ↦ [1,0,1,0,1]
[1,1,0,0,1,1,0,0,1] ↦ [1,1,0,1,1,0,1]
[1,1,0,0,1,1,1,0,0,1,1] ↦ [1,1,0,1,1,1,0,1,1]
[1,1,1] ↦ [1,1,1]
[0,0,1] ↦ [0,1]
[0,0] ↦ [0]
[1,1,1,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0] ↦ [1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0]
Notation
C'est du code-golf . La réponse la plus courte en octets l'emporte.
Des échappatoires standard s'appliquent.
code-golf
array-manipulation
Leaky Nun
la source
la source
true
etfalse
au lieu de1
et0
?0
la vérité.Réponses:
Rétine , 4 octets
Essayez-le en ligne!
la source
05AB1E , 5 octets
Essayez-le en ligne!
Explication
la source
00
est un comportement bizarre ...11
onze et non1,1
. Un effet secondaire de cela est que00
devient00
au lieu de0,0
:)0
ou à la0 0
place, mais peu importe.Haskell , 33 octets
Essayez-le en ligne! Utilisation:
f[1,1,0,0,1,1,0,0,1]
. Itère sur la liste et remplace deux zéros consécutifs par un zéro.la source
C (gcc) , 35 octets
48 est le code ascii de '0'
meilleure version 43 octets comme suggéré par Neil
un autre 40 octets cette fois (encore une fois comme suggéré par Neil & VisualMelon) :)
puis 35 octets grâce à Khaled.K
Essayez-le en ligne!
la source
s+=2-*s%2
marcherait?for(;*s;s+=2-*s%2)putchar(*s);
enregistre un autre octet.s+=50-*s
? Pas fait C depuis des lustres et je ne veux pas m'embarrasser en invoquant un comportement indéfini (venant de C # où il n'y en a pas)putchar
documents, pouvez-vous fairef(char*s){for(;*s;s+=50-putchar(*s));}
?f(char*s){*s&&f(s+50-putchar(*s));}
sed , 8 octets
Essayez-le en ligne!
la source
0
s par0
.Octave, 22 octets
Vérifiez tous les cas de test ici.
Il s'agit d'une fonction anonyme qui prend une chaîne sur le format
'1001000011'
en entrée et remplace deux zéros consécutifs par un seul zéro.la source
Java, 50 octets
Essayez en ligne
la source
s->s.replaceAll("00","0")
.replace
plutôt que d'replaceAll
économiser 3 octetsreplace
ne remplacera que la première occurrenceHaskell , 28 octets
Essayez-le en ligne!
Prend récursivement le premier élément, laissant tomber le second si le premier est nul, jusqu'à la liste des vides. Si la première entrée est
h
, alors les premières1-h
sont supprimées du reste.la source
Japt ,
7 65 octetsEssayez-le en ligne!
Remplace simplement chaque série de deux zéros dans l'entrée par un zéro. Utilise une entrée de chaîne (c.
"1001001"
-à-d.).la source
'
je pense"00"
par'0²
:-)PHP, 26
remplacez tout simplement
00
par0
.la source
Alice , 13 octets
Essayez-le en ligne!
Explication
Il s'agit d'un modèle simple pour les programmes linéaires qui fonctionnent entièrement en mode Ordinal. L'initiale
/
reflète l'IP pour se déplacer vers le sud-est, puis elle rebondit en diagonale de haut en bas à travers le code jusqu'à ce que les miroirs à la fin. Ceux-ci compensent simplement la position d'un pour qu'au retour l'IP traverse les cellules restantes. En lisant le code de cette manière en zigzag, cela devient:Il s'agit d'une simple substitution de chaîne:
Il existe quelques autres façons de pousser les deux chaînes, par exemple
'00'0
oue000t
, mais je n'ai rien trouvé qui bat 5 octets (et je devrais raser deux octets pour pouvoir raccourcir le programme).la source
Prolog (SWI) , 42 octets
Essayez-le en ligne!
la source
*
opérateur.Java ,
131123 octetsEssayez-le en ligne!
la source
JavaScript (ES6),
2621 octetsPrend l'entrée sous forme de chaîne et renvoie une chaîne.
Essayez-le
la source
Lua, 33 octets
Prend une chaîne via l'entrée et condense les doubles zéros. Facile.
la source
Gelée , 8 octets
Essayez-le en ligne!
D'autres réponses dans des langues sans
.replace()
ou similaire pourraient éventuellement utiliser cette astuce.Explication
la source
Alice ,
1210 octets2 octets économisés grâce à Martin Ender
Essayez-le en ligne!
Explication
Il s'agit d'un code 1-D fonctionnant en mode cardinal, il est donc facile de suivre son flux:
la source
i.h%...
Python (liste des E / S), 36 octets
Essayez-le en ligne!
Prend récursivement le premier élément, puis supprime celui qui reste si le premier était nul.
38 octets:
Essayez-le en ligne Cela prend une liste Python et génère une liste Python en remplaçant sa représentation sous forme de chaîne. Les E / S de chaîne permettraient une solution plus directe et plus courte, telle que
pour le
'1001'
format.la source
lambda s:s.replace('00','0')
devrait être bien.APL (Dyalog) , 9 octets
Essayez-le en ligne!
la source
Perl 5, 7 + 1 (indicateur -p) = 8 octets
Prend les entrées sous forme de nombres séparés par des sauts de ligne. Saute la ligne suivante s'il voit un zéro.
la source
V , 4 octets
Essayez-le en ligne!
la source
MATL , 5 octets
Essayez-le en ligne!
Explication
Ceci est similaire à la réponse Octave de Stewie Griffin :
8 octets
Cela évite le remplacement de chaîne / tableau intégré.
Essayez-le en ligne!
Explication
Considérez la saisie
[1,0,0,1,0,0,1]
comme exemple:la source
Brachylog , 10 octets
Essayez-le en ligne!
Pas sûr que ce soit encore optimal…
Explication
Cela exploite le bogue qui,
c
sur une liste d'entiers comportant des zéros non significatifs, échouera.la source
[0,0,4,2]
en42
. Les zéros non significatifs le font échouer en ce moment car il est ici pour empêcher les zéros non significatifs lorsque l'entrée est une variable, mais ici l'entrée est entièrement mise à la terre de sorte que la limitation ne devrait pas exister.C #, 191 octets
Essayez-le en ligne!
Ce n'est ni propre ni court, mais ça marche.
Prend les entrées sous forme de chaîne de caractères contigus, les sorties dans le même format
Explication:
Remarque
Oui, je sais que cela pourrait simplement être fait en utilisant
s.Replace("00","0")
, mon objectif était d'éviter d'utiliser la solution évidente. Après tout, l'intérêt de PPCG est de s'amuser, non? ;)la source
Replace
intégré.J'utilise C #, donc je ne me fais aucune illusion pour obtenir le code le plus court possible, en particulier avec des langages comme Jelly, donc pourrait aussi bien s'amuser un peu Dans le processus.string a(string s){var r="";for(int i=0;i<s.Length;i+=50-s[i])r+=s[i];return r;}
(on dirait que c'est fondamentalement la réponse C)Pyth, 8 octets
Lien d'essai.
Explication:
la source
Awk - 18 octets
Essayez d'abord de faire quoi que ce soit avec Awk afin qu'il soit possible de le jouer davantage.
Usage:
echo "1001001" | awk '{gsub(00,0);print}'
la source
Lot, 24 octets
Prend entrée sur STDIN. Un peu compétitif pour une fois.
la source
Lisp commun, SBCL,
4832 octets-16 octets grâce à Julian Wolf
contribution:
production:
Explication
Nous lisons la liste des entrées. La liste est utilisée dans la
format
fonction. Nous le parcourons en sortie1
si l'élément est1
et en sortie0
et en sautant l'élément suivant de la liste pour0
.la source
~[
plutôt que~:[
vous permet d'indexer directement avec 0 et 1, ce qui devrait vous faire économiser un tas d'octetsMathematica, 24 octets
Une fonction qui attend une chaîne de
"0"
s et de"1"
s et renvoie une chaîne similaire. Syntaxe explicite. Mathematica possède de nombreux modules de transformation; la clé est d'en utiliser une qui transforme chaque sous-expression pertinente (contrairement à/.
) mais ne passe par l'expression qu'une seule fois (contrairement//.
).la source
Gelée , 10 octets
Essayez-le en ligne!
Explication
la source