Ce challenge est inspiré de cette très belle réponse de TidB.
Dans la réponse de TidB, tous les huit caractères sont dans le bon ordre: gnilwoB edoC
(en Code Bowling
arrière). Les autres cordes sont cependant dans un étrange ordre aléatoire.
Votre défi est de résoudre ce problème.
Prenez une chaîne (non vide) et un entier positif n
en entrée. La chaîne contiendra des caractères ASCII dans la plage: 32-126 (espace pour tilde).
Vous devez trier la chaîne dans l' ordre croissant (vu de gauche, en fonction de la valeur du code ASCII), mais ignorer chaque n
caractère sur th, en commençant par la fin de la chaîne. À titre d'exemple, prenons la chaîne abcdABC123
en entrée n=4
, puis nous obtiendrons:
abcdABC123 <- Input string. (n=4)
_b___B___3 <- These will not be sorted (every 4th starting from the end)
1_2AC_acd_ <- The remaining characters, sorted
1b2ACBacd3 <- The final string (the output)
Un autre exemple:
9876543210 <- Input string (n=2)
_8_6_4_2_0 <- These will not be sorted
1_3_5_7_9_ <- The remaining characters, sorted
1836547290 <- The final string (the output)
La chaîne d'entrée peut être prise dans un format optionnel (chaîne, liste de caractères, liste de chaînes de caractères uniques ...). L'entier d'entrée peut également être pris dans un format facultatif.
Cas de test:
Le format sera n=__
, suivi de la chaîne d'entrée sur la ligne suivante. La sortie est sur la ligne ci-dessous.
n=1 (All elements will stay in place)
nafgaksa1252#"%#
nafgaksa1252#"%#
n=214 (The last character will stay in place. All other are sorted.
&/lpfAVD
&/AVflpD
n=8
g7L9T E^n I{><#ki XSj!uhl y= N+|wA}Y~Gm&o?'cZPD2Ba,RFJs% V5U.W;1e 0_zM/d$bH`@vKoQ 43Oq*C
g n !#$%&'i*+,./01l234579;w<=>?@ADoEFGHIJKBLMNOPQR STUVWXYeZ^_`abcdhjkmqsuovyz{|}~C
PHP, 101 octets
les index de chaîne négatifs (PHP 7.1) économisent 21 octets - et éventuellement le jour:
Courez avec
php -nr '<code>' '<string>' <N>
.panne
la source
$i-=1
et non$i--
?$i--
ne marche pas si$i
c'est le casNULL
.--$i
, dont j'aurais besoin n'a pas non plus. ;)Octave ,
6554 octetsEssayez-le en ligne!
Utilise l'indexation logique pour créer un tableau de caractères «fixes» et «triés». Explication:
La façon dont j'ai créé
l
exige que ces
soit différent de zéro, ce qui, je pense, est une exigence raisonnable, car de nombreuses langues utilisent\0
comme délimiteur de fin de chaîne.la source
l
et utilisez directement un vecteur de numéros d'indexPython 2, 191 octets
Ouais, je suis sûr que c'est une terrible solution.
Essayez-le en ligne
Je ne vais pas m'embêter à l'expliquer. Tout allait bien jusqu'à ce que je réalise qu'il doit être indexé depuis la fin. Maintenant c'est un monstre. À ce stade, je suis juste content que cela fonctionne.
la source
JavaScript (ES6),
10093 octetsPrend une entrée dans la syntaxe de curry
(s)(n)
.Formaté et commenté
Cas de test
Afficher l'extrait de code
la source
Perl 5 , 94 octets
88 octets de code +
-F -pl
drapeaux.Essayez-le en ligne!
C'est beaucoup trop long à mon avis, mais déjà pas si moche que ça ... J'essaye quand même de continuer à jouer au golf.
la source
Gelée ,
1413 octetsProgramme complet qui imprime la chaîne en sortie STD *.
Essayez-le en ligne!
Comment?
Je ne peux pas m'empêcher de penserqu'il existe un moyen d'utiliser le fait queḢ
modifie son entrée* pour une fonction, on voudrait aplatir la sortie en une seule liste avec
F
.Par exemple, une entrée de
"abcdABC123"
,4
donne:[[['1'],['b']],[['2','A','C'],['B']],[['a','c',',d'],['3']]]
plutôt que:
['1','b','2','A','C','B','a','c',',d','3']
la source
Python + numpy ,
115114 bytesPrend une liste Python régulière en entrée (je ne savais pas si prendre un tableau serait considéré comme casher); renvoie un tableau NumPy contenant le résultat.
Fonctionne en masquant les indices pertinents et en triant le reste.
la source
Python 2,
119113 octetsConstruit une liste de tous les caractères à trier, les trie et les fusionne pour l'impression, tout en évitant une partie de l'inversion via une indexation négative.
la source
print"".join(sorted(l[~a]for a in i if a%n)[-a+a/n]if a%n else l[~a]for a in i)[::-1]
enregistre 5 octetsRuby, 64 octets
Utilise l'expression régulière pour saisir tous les caractères non pertinents, à la fois pour le remplacement et pour le tri.
Essayez-le en ligne
la source