Vous devez écrire une fonction / un programme qui accepte les entrées via les stdin
arguments de ligne de commande / arguments de fonction, mélange les caractères dans une chaîne, puis affiche la chaîne finale via stdout
.
L'entrée contiendra d'abord une chaîne (non vide ou null
), un espace, puis un nombre pair de nombres non négatifs, tous séparés par des espaces. Si l'entrée est prise via des arguments de fonction, la chaîne sera l'un des arguments tandis que les entiers, séparés par un espace, seront l'autre. Vous devez permuter les caractères de la chaîne aux indices correspondant aux paires consécutives de nombres.
Par exemple:
Hello_world! 0 6
doit se traduire par
wello_Horld!
Hypothèses
- Vous pouvez choisir entre l'indexation basée sur 0 et celle basée sur 1, et pouvez supposer que les index donnés seront toujours dans la plage.
- La chaîne ne sera pas plus de 100 caractères et ne contenir que des caractères ASCII dans la gamme
!
de~
(codes de caractères 0x21 à 0x7E, inclus). Voir le tableau ASCII pour référence. - Les deux indices d'une paire peuvent être identiques (auquel cas, rien n'est échangé à cette étape).
Notation
Il s'agit du code golf, donc la soumission la plus courte (en octets) l'emporte.
Cas de test
Hello_world! 0 6 => wello_Horld!
First 1 2 1 0 0 4 => tFisr
(Second!$$) 8 7 10 1 => ()econd$!$S
~Third~ 0 0 6 6 0 6 6 0 => ~Third~
Réponses:
CJam, 11 octets
Comment ça fonctionne
Il s'agit d'une approche légèrement différente, dans laquelle je lance simplement une boucle do-while jusqu'à ce qu'il me reste des paires de nombres dans l'entrée.
Essayez-le en ligne ici
la source
Python 3,
8986 octetsDéballez toutes les choses. (3 octets enregistrés grâce à @potato)
la source
[*s],*L=input().split()
suit : vous pouvez ensuite retirer la ligne après. J'aime vraiment votre solution, elle est presque élégante même si elle est très golfée.CJam, 13 octets
Testez-le ici.
Explication
la source
C (137 b)
L'explication vient ...
Arguments
T = un mot de type char * .
V = un tableau d'un nombre pair d'éléments entiers.
L = longueur de V
Production
chaîne mixte
Comment ça marche ? :
balaie les nombres du tableau V vice versa, et place le nième élément de la chaîne après avoir suivi toute sa progression jusqu'au point réel. Exemple
input = T = "First", V = {1,2,1,0,0,4}
V inversé = {4,0,0,1,2,1}
Essayez-le ici
la source
int
n'est pas nécessaire (peut entraîner un comportement inattendu), et lesint
variables qui sont des paramètres n'ont pas besoin d'uneint
variable, au lieu de déclarer dans la boucle peuvent être déclarées à un endroit en dehors de la boucle, utilisez à laputchar
place deprintf
etcPython
3-161149Golfé plus en échangeant autour de certaines variables et en utilisant
;
comme dans le commentaire de Tim.Je m'attendais à ce qu'il sorte golfique, mais pas autant.
la source
while
pourwhile c<len(t):line1;line2;line3...
.c=c+2
va àc+=2
c
est en fait l'indexationt
(l'entrée) pour obtenir les positions que nous devons échanger. Mais puisquet[0]
c'est la chaîne que nous devons échangert[1]
ett[2]
maintenir la première paire de swaps.C,
109107102 octetsRemarque:
s
eta
doit être déclaré en tant que tableaux globaux.s
est la chaîne que vous souhaitez échanger eta
est un tableauint
contenant toutes les valeurs numériques.Si le code ci-dessus ne fonctionne pas, essayez d'utiliser
void f(){...}
au lieu def(){...}
Code non golfé:
Testez-le ici
la source
Python 3, 135
Explication:
la source
C, 70 octets
Étant donné que la chaîne d'entrée est au maximum de 100, j'ai décidé de faire de l'octet «NULL» indiquant la fin du tableau d'entiers univoque
0xFF
. Vraisemblablement, cela ne compte pas comme entrée supplémentaire, bien que pour un coût de(au plus) 73octets, il puisse être transformé en indexation basée sur 1 et utilisé'\0'
comme fin du tableau.À peu près, l'échange normal avec une variable tmp et utilise que l'opérateur de virgule introduit des points de séquence pour avoir un comportement défini (contrairement à certaines manifestations de swaps xor qui auraient un nombre de caractères inférieur mais conduiraient à un comportement non défini).
Edit: Comme demandé, vous pouvez le tester: http://rextester.com/OVOQ23313 .
la source
Fléchette - 123
Suppose que l'entrée sur la ligne de commande est automatiquement divisée en espaces. Sinon, il a besoin d'une initiale
x=x[0].split(' ');
pour diviser la chaîne en texte et en index.Avec plus d'espace:
Exécutez / testez ceci sur dartpad.dartlang.org .
la source
Rebol - 71
Non golfé:
la source
input
fonction ne pourra pas appeler STDIN à partir de là. La solution de contournement consiste à définir simplementinput
la valeur que vous souhaitez tester. Voici un exemple complet du premier test -input: "hello_World 1 7" s: take i: split input" "foreach[a b]i[swap at s do a at s do b]print s
et cliquez sur Do in Rebol 3 NB. Rebol utilise une indexation basée sur 1.C, 143 octets
Le programme ci-dessus prend les entrées des arguments de ligne de commande, copie la chaîne dans un tableau, échange les caractères correspondants, puis sort la chaîne modifiée.
Code non golfé:
la source
10
un des indices.JavaScript (ES6), 95
95 octets avec une seule entrée de chaîne (fonction f ci-dessous)
75 octets avec 2 paramètres, chaîne et tableau de nombres (fonction g ci-dessous)
(EcmaScript 6, Firefox uniquement)
la source