Étant donné un entier positif, nous pouvons former un nouveau nombre qui est décrit par ses chiffres pris deux à deux (avec un 0 en tête ajouté pour les nombres avec un nombre impair de chiffres).
Par exemple:
1234 peut être lu comme un 2, trois 4 - ainsi, la sortie pour 1234 est 2444.
643 a un nombre impair de chiffres, donc un zéro de tête est ajouté pour le rendre pair. Ensuite, 0643 peut être lu comme: zéro 6s, quatre 3s, d'où la sortie serait 3333.
(Il s'agit d' OEIS A056967 ).
Tâche: étant donné un tableau d'entiers positifs, triez-les par leur valeur de paire de chiffres, dans l'ordre croissant. L'ordre n'a pas d'importance entre les numéros d'entrée qui mènent à la même valeur.
Entrée : un tableau / liste / ensemble d'entiers positifs. Les zéros de tête dans l'entrée ne sont pas autorisés et saisis sous forme de chaînes / listes de chiffres / etc. ne sont pas autorisés - les entrées doivent être aussi proches d'un type entier / numérique que votre langue est capable d'utiliser.
Sortie : le tableau trié de la manière mentionnée ci-dessus, retourné de l'une des façons habituelles (valeur de retour de la fonction / STDOUT / criant dans le vide / etc.). Vous pouvez les imprimer individuellement, les renvoyer sous forme de nombres, de chaînes ou de listes de chiffres.
Cas de test
Input
Output
[19, 91, 2345, 2023]
[19, 2023, 2345, 91]
[25257, 725, 91, 5219, 146125, 14620512]
[725, 5219, 14620512, 91, 146125, 25257]
[123130415 3335 91 111111111 528 88]
[528, 111111111, 123130415, 3335, 88, 91]
[1 21 33 4 5]
[1 4 5 21 33]
[3725, 10, 2537, 1, 1225, 2512]
[10, 1, 1225, 2512, 2537, 3725]
[125, 26, 1115, 1024]
[1115, 1024, 125, 26]
(Dans le 4ème cas de test, 1, 4 et 5 sont tous évalués à 0 et peuvent donc être triés entre eux dans n'importe quel ordre. De même dans le cinquième cas de test, 10 et 1 sont tous les deux évalués à 0 et peuvent donc être triés dans soit l'ordre.)
(Connexes: dites ce que vous voyez , un 1, deux 1, un 2 un 1
Merci à Kevin Cruijssen d'avoir aidé à clarifier la question dans le bac à sable.
strtoi
renvoie un entier - correct? Si oui, ça va, c'est légal comme ça.Réponses:
APL (Dyalog) , 26 octets
Merci ngn pour avoir sauvé 1 octet :)
Essayez-le en ligne!
Inspiration tirée de dzaima & ngn
la source
100⊥⍣¯1⊢⍵
->⍵⊤⍨⍵/100
fonctionne pour 26.100⊥⍣¯1⊢⍵
->⍵⊤⍨⍴⍨100
{⍵[⍋⌽↑,⍨⌿⍴⌿⊃⊥⍣¯1/10 100⍵]}
R , 141 octets
Essayez-le en ligne!
Réponse plutôt laborieuse - mais elle fonctionne sur tous les cas de test. Construit la sortie de paire de chiffres et trie l'entrée en fonction de cela.
la source
v
de la variable de vos autres réponses - Je n'ai jamais utilisév
auparavant. Et bonne utilisation deintToUtf8
!R , 120 octets
Essayez-le en ligne!
Code non golfé avec explication:
la source
[!1:0]
astuce est vraiment sympa - jamais vue auparavant.[!1:0]
gars cachaient quelque chose de bien. Je jouais avec cela et les conseils sur le golf R, en essayant d'obtenir le nombre à partir des chiffres de manière arithmétique (sansas.double
), mais je n'ai trouvé qu'une version de 132 octets: TIOPyth , 14 octets
Essayez-le ici! | Suite de tests! | 12 octets avec liste des chiffres d'E / S
Comment ça fonctionne?
la source
Gelée , 10 octets
Essayez-le en ligne!
Découvrez une suite de tests!
Comment ça fonctionne
la source
2537
et3725
ne représentent pas le même nombre.[2537, 3725]
. Je n'ai jamais douté que ce soit une coïncidence, donc j'ai inclus cette note à la réponsePerl 6 , 53 octets
Essayez-le en ligne!
Anonyme Quel que soit lambda qui prend une liste de valeurs et la trie selon la description des paires de nombres.
Dans ce cas, j'inverse le nombre, puis
rotor
j'inclus la liste par deux pour obtenir chaque paire de nombres. Cela exclura le premier chiffre pour les nombres de longueur impaire, mais comme cela se traduit par le0
nombre de fois, ce n'est pas grave. De plus, il aligne les valeurs à utiliser[x]
correctement.la source
Python 2 ,
8074 octetsEssayez-le en ligne!
la source
Haskell ,
8988 octetsUn octet enregistré grâce aux ovs
La dernière ligne définit une fonction anonyme qui peut être utilisée comme ceci:
La fonctionnalité de base est fournie par l'opérateur infixe
(?)
qui garde la trace d'un multiplicateurm
et de l'entrée RLE restanten
.(?)
soustrait continuellement 10 den
tandis qu'il y a un chiffre de dizaines à soustraire, et ce faisant, il pousse une autre copie du dernier chiffre à l'avant de la sortie (via le multiplicateurm
, qui est augmenté de 10 à chaque fois). Lorsque la place des dizaines est épuisée, les deux derniers chiffres sont ignorés et le processus se répète jusqu'à ce que le nombre soit réduit à 0. Enfin, nous utilisons l'opérateur (avec un multiplicateur initial de 1) comme clé de tri.la source
m?n|n<1=0|n%100<10=m?div n 100|w<-n-10=m*10?w+m*n%10
est un octet plus court.Husk , 10 octets
Essayez-le en ligne!
Explication
la source
Dyalog APL,
41393635313029 octetsEssayez-le en ligne!
-2 grâce à Cows quack
-4 (plus -4 pour l'idée de conversion de base) grâce à ngn
-2 merci donc H.PWiz
la source
⊃,/
peut devenir∊
{⍺⍴⍨⍎⍵}
->⍴⍨∘⍎
{⍵[⍋F ⍵]}
as⊂⌷¨⍨∘⍋F
C (gcc) (systèmes 32 bits),
188177176 octetsEssayez-le en ligne!
sur
amd64
ajouter un indicateur-m32
pour la compilation.Utilisation :
s(x,n);
oùx
pointe vers un tableau d'entiers à trier etn
est la longueur de ce tableau.Le deuxième cas de test donne un résultat incorrect car la conversion
25257
donne2222277777
qui déborde d'un entier 32 bits - a ajouté un 5ème cas de test sans ce nombre.Explication:
la source
d()
est longue à cause des chaînes et des fonctions qui leur sont liées, vous pouvez enregistrer de nombreux octets simplement en lisant les 2 derniers chiffres et en construisant la sortie comme ceci:o;u;i;d(x){for(u=1,o=0;x;x/=100)for(i=0;i++<x%100/10;o+=x%10*u,u*=10);x=o;}m(int*a,int*b){u=d(*a)-d(*b);}s(l,c){qsort(l,c,4,m);}
vous économiserez également des octets en évitant de déclarer et d'initialiserchar
s.b-~sprintf(b+1,"%d",x)%2
place deb+!(sprintf(b+1,"%d",x)&1)
x/10%10
place dex%100/10
Python 2 ,
10210197101 octetsEssayez-le en ligne!
la source
Brachylog , 18 octets
Essayez-le en ligne!
Explication
Beaucoup de petites choses nécessaires pour tenir compte des trois cas différents: nombre impair de chiffres, paire de 0 fois un nombre et paires normales.
la source
|Ȯt
n'est pas nécessaire, et en fait, il rend le tri incorrect: c'est équivalent à un remplissage avec un 1 au lieu d'un 0, donc étant donné [125, 26, 1], le trie comme [1, 26, 125] au lieu de [1 , 125, 26].Perl 5 , 76 octets
Une fonction au lieu d'une doublure pour une fois.
Assez simple:
g
trie les entrées numériquement, en utilisanth
pour convertir les nombres.h
le fait en utilisant l'expression régulières/(.)(.)/$2x$1/gre
(qui est probablement suffisamment lisible). Et le0
remplissage à gauche se fait avec0 x("@_"=~y///c%2)."@_"
(oùy///c
est un moyen d'écriture raccourcilength
,x
est l'opérateur de répétition et.
la concaténation).Essayez-le en ligne!
Je m'attends à voir des réponses Perl plus courtes!
la source
Rétine , 44 octets
Essayez-le en ligne! La génération de la clé de tri au début de la ligne est plus difficile, mais la courte étape de tri entraîne une économie globale de 3 octets. Explication:
Appliquer les deux premières étapes sur chaque ligne individuellement.
Faites correspondre et copiez un nombre pair de chiffres de fin.
Remplacez chaque paire de chiffres par leur valeur décrite. La
\G\d
provoque l'arrêt de la correspondance dans l'espace.Trier numériquement.
Supprimez les clés de tri.
la source
05AB1E ,
2019 octetsBug corrigé pour +1 octet, puis joué par -2 octets grâce à @sundar .
Essayez-le en ligne ou vérifiez tous les cas de test .
Peut certainement être joué au golf .. Pas trop content à ce sujet ..
Explication:
la source
Attaché , 50 octets
Essayez-le en ligne!
Explication
la source
JavaScript (ES8),
7270 octetsEssayez-le en ligne!
la source
Japt, 13 octets
Essayez-le ou exécutez tous les cas de test
Explication
la source
Gelée , 14 octets
Essayez-le en ligne!
la source
Rubis , 71 octets
Essayez-le en ligne!
la source
Java 11,
204189 octetsPrend une liste de Longs comme paramètre et trie cette liste d'entrée (sans retourner une nouvelle liste).
Essayez-le en ligne (REMARQUE:
String.repeat(int)
est émulérepeat(String,int)
car Java 11 n'est pas encore sur TIO. Le nombre d'octets reste le même.)Explication:
la source
+""
pour convertir le nombre en chaîne. Devrait être corrigé maintenant. :)