Tâche
Inverser des séries de nombres impairs dans une liste donnée de 2 à 2 15 entiers non négatifs.
Exemples
0 1
→ 0 1
1 3
→ 3 1
1 2 3
→ 1 2 3
1 3 2
→ 3 1 2
10 7 9 6 8 9
→ 10 9 7 6 8 9
23 12 32 23 25 27
→ 23 12 32 27 25 23
123 123 345 0 1 9
→ 345 123 123 0 9 1
Réponses:
Python 2,
756863 octets5 octets grâce à Dennis.
Et j'ai déjoué Dennis .
Crédits à Byeonggon Lee pour le cœur de l'algorithme.
Ideone it!
Ancienne version: 75 octets
la source
print
n'a pas besoin de parens. De plus, vous ne l'utiliseza
qu'une seule fois, il n'y a donc pas besoin de variable.Python 2,
797573 octetsIl s'agit d'une fonction qui modifie son argument en place. Le deuxième niveau d'indentation est un tabulateur.
Testez-le sur Ideone .
la source
APL,
2120 octetsEssayez-le || Tous les cas de test
Explication:
Edit: sauvé un
~
merci aux lois de De Morganla source
Haskell,
4644 octetsMerci à @xnor d'avoir reconnu un pli et d'avoir sauvé deux octets.
la source
(h*)
! Vous pouvez enregistrer un octet sur le cas de base en écrivant unf x=x
second pour correspondre à la liste vide, bien qu'il ressemble à unfoldr
est encore plus courth%p|(l,r)<-span(odd.(h*))p=l++h:r;foldr(%)[]
::foldr
après tout! Je vous remercie.Gelée , 10 octets
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça fonctionne
la source
Python 2,
7875 octetsSuper hacky :)
la source
k.i
?k.i=0
sur la dernière ligne. C'est juste une variable.k
etk.i
liés?k.i
est une variable persistante entre les appels dek
. Voyez-le comme un global de fortune sans avoir à utiliser leglobal
mot - clé.Python3, 96 octets
Beaucoup d'octets enregistrés grâce à Leaky Nun!
la source
C, 107 octets
la source
MATL , 20 octets
L'entrée est un tableau de colonnes, utilisant
;
comme séparateur.Essayez-le en ligne!
Explication
Prenons comme exemple le tableau d'entrée
[1;2;3;5;7;4;6;7;9]
. La première partie du codeTiodgv
,, convertit ce tableau en[1;1;1;0;0;1;0;1;0]
, où1
indique un changement de parité . (Plus précisément, le code obtient la parité de chaque entrée du tableau d'entrée, calcule des différences consécutives, convertit des valeurs différentes de zéro1
et ajoute un1
.)Ys
Calcule ensuite la somme cumulée , donnant[1;2;3;3;3;4;4;5;5]
. Chacun de ces numéros sera utilisé comme une étiquette , sur la base de laquelle les éléments de l'entrée seront regroupés . Cela se fait parG8XQ!
, qui divise le tableau d'entrée en un tableau de cellules contenant les groupes. Dans ce cas, cela donne{[1] [2] [3;5;7] [4;6] [7;9]}
.Le reste du code itère (
"
) sur le tableau de cellules. Chaque tableau numérique constituant est poussé avec@g
.to
fait une copie et calcule sa parité . Si (?
) le résultat est vrai, c'est-à-dire que le contenu du tableau est impair, le tableau est retourné (P
).La pile est implicitement affichée à la fin. Chaque tableau vertical numérique est affiché, donnant une liste de nombres séparés par des retours à la ligne.
la source
Pyth, 14 octets
Cas de test
la source
J ,
333130 octetsUsage
la source
C #,
179178177 octetsJ'utilise un lambda C #. Vous pouvez l'essayer sur .NETFiddle .
Le code moins réduit:
Félicitations à Byeonggon Lee pour l'algorithme d'origine.
la source
foreach(var
et changerif(n%2==1)
pourif(n%2>0)
enregistrer 2 octets (ou en fait 1, car votre réponse actuelle est de 179 octets au lieu de 178).Pyth,
2928 octetsSuite de tests.
Traduction directe de ma réponse python (quand la traduction de python en pyth est-elle devenue une bonne idée?)
la source
TSQL 118 octets
Violon
la source
Clojure, 86 octets
Voici la version non golfée
Fondamentalement, il passe par la séquence d'entrée et s'il rencontre un nombre pair, il ajoute le nombre et le vecteur vide sinon, s'il s'agit d'un nombre impair, il remplace le dernier élément par ce numéro plus ce qui était dans le dernier élément.
Par exemple, pour cette séquence,
2 4 6 1 3 7 2
cela se passe comme suit:[]<=2
[2 []]<=4
[2 [] 4 []]<=6
[2 [] 4 [] 6 []]<=1
[2 [] 4 [] 6 [1 []]]<=3
[2 [] 4 [] 6 [3 [1 []]]]<=7
[2 [] 4 [] 6 [7 [3 [1 []]]]]<=2
[2 [] 4 [] 6 [7 [3 [1 []]]] 2 []]
Et puis aplatir ce vecteur donne la sortie correcte. Vous pouvez le voir en ligne ici: https://ideone.com/d2LLEC
la source
JavaScript (ES6)
7066Modifier 4 octets enregistrés thx @Neil
la source
:r=r.concat(o,x,o=[]),
vous fait économiser quelques octets. Je pense que vous pouvez continuer à sauver deux autres comme ceci:a=>[...a,[]].map(x=>x&1?o=[x,...o]:r=r.concat(o,x,o=[]),r=o=[])&&r
....o
?Stax ,
1510 octets CP437Essayez-le en ligne!
Gelée attachée! Tellement triste que l'emballage n'ait économisé qu'un octet.
Version non compressée avec 11 octets:
Explication
{|e_^*}
est un bloc qui mappe tous les nombres pairsn
àn+1
, et tous les nombres impairsn
à0
.la source
Husk , 7 octets
Essayez-le en ligne!
Explication
la source
Rubis , 51 octets
Essayez-le en ligne!
Quelques légères variations:
la source
Perl 5 avec
-p
, 42 octetsEssayez-le en ligne!
la source