Écrivez un programme ou une fonction qui accepte une chaîne de ligne unique non vide. La chaîne sera soit zéro ou plusieurs espaces suivis d'une période (une particule ), comme .
ou .
, ou la chaîne sera une séquence d'une ou plusieurs barres obliques avant et arrière (une vague ) qui pourraient commencer par l'une ou l'autre, telle comme \
ou /\/
ou \/\/\/\/\/\/
.
Dans les deux cas, propagez la particule / l'onde vers la droite d'une unité.
Plus précisément, dans le cas des particules, insérez un espace avant le .
, en le déplaçant d'un endroit vers la droite, puis sortez la chaîne résultante. Par exemple:
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ → .
Dans le cas de la vague, ajoutez soit /
ou de \
manière appropriée afin que la vague continue à alterner et que sa longueur augmente d'une unité, puis sortez la chaîne résultante. Par exemple:
/
→ /\
\
→ \/
/\
→ /\/
\/
→ \/\
/\/
→ /\/\
\/\
→ \/\/
/\/\
→ /\/\/
\/\/
→ →\/\/\
Dans les deux cas, la sortie peut ne pas avoir d'espaces de fin, mais une nouvelle ligne de fin facultative est autorisée.
Le code le plus court en octets gagne.
Réponses:
C, 69 octets
Cela nécessite une machine peu endienne et une sortie vers un terminal qui prend en charge les codes d'échappement ASCII.
p=s[strlen(s)-1]^46
saisit le dernier code ASCII de la chaîne d'entrée et le XOR avec le code ASCII d'un point.p^=p?93:3022856
provoquerap
êtrep^93
si le code ASCII n'est pas une barre oblique (arrière), oùp^46^93 == p^115
, ce qui permet de basculer entre le dos et barre oblique. Sip
est un point, il le sera à la place3022856
, ce qui est petit-endien pour"\b ."
.printf("%s%s",s,&p);
affiche la chaîne d'entrée suivie de l'entierp
, interprété comme une chaîne d'octets petit-boutien.la source
3022856
par'. \b'
un littéral de caractères multi-octets. Réponse géniale!Gelée ,
1714 octetsEssayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça marche
la source
CJam, 16 octets
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça marche
la source
Python, 41 octets
Traitement des dossiers. Utilise l'ordre trié
' ', '.', '/', '\'
. Pour les espaces et la période, ajoute un espace. Sinon, ajoute une barre oblique ou une barre oblique noire opposée au dernier caractère.la source
Python,
4442 octetsRemplace le dernier caractère par l'ensemble correspondant de deux caractères. lien idéone
(-2 octets grâce à la fonction de mappage plus courte de @ xsot)
la source
-ord(s[-1])&3
donne également 3 indices différents.&
!Langue de Game Maker, 107 octets
la source
Vim,
2723 frappesPremière réponse de vim jamais utilisée, je n'ai jamais vraiment utilisé vim.
Comment ça marche: Il ajoute un
/
à la fin de la ligne, des sous//
pour/\
, des sous./
pour.
la source
/
s si vous utilisez un délimiteur différent, par exemples#//#/\\
.MATL , 19 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
CJam,
352625 octets9 octets enregistrés grâce à Dennis
Enregistré 1 octet de plus, également grâce à Dennis
Essayez-le en ligne!
Probablement mal joué, mais je ne connais pas trop CJam. Il y a probablement une meilleure façon de vérifier si un élément est dans un tableau, mais je n'ai trouvé aucun opérateur pour cela.
Explication:
la source
W
est initialement-1
et?
fonctionne à la fois avec des blocs et d'autres éléments de la pile, vous pouvez donc réduire votre code àq:I'.#)SI+IW='/=I'\+I'/+??
&
.05AB1E,
1715 octetsExplication
Essayez-le en ligne
la source
C, 85 octets
Ideone
Je n'ai pas dormi depuis environ 20 heures, mon code peut probablement être joué beaucoup.
la source
Brachylog , 35 octets
Suite de tests. (Légèrement modifié.)
la source
Matlab,
74716257 octetsIl calcule les deux derniers caractères sur la base du
s(1)
(premier caractère) - pour déterminer si nous avons affaire à la\/
casse, et le dernier caractères(end)
pour créer le tuple correct pour les\/
caractères.la source
Rétine, 19 octets
^H
représente l'octet BS. Essayez-le en ligne!la source
/
deviendrait/\/
.> <> , 47 octets
Essayez-le en ligne!
La première ligne est une boucle d'entrée standard> <>. La deuxième ligne choisit le caractère approprié de
/ \
à ajouter à la chaîne, en fonction du dernier caractère entré. De plus, si le dernier caractère saisi était a.
, les deux premiers éléments sont commutés. Enfin, le contenu de la pile est imprimé à l'envers.la source
JavaScript,
79706558 octetsla source
b.charAt(i+1)
parb[i+1]
pour enregistrer quelques octets. En outre, cela ne fonctionne pas pour tous les cas de test.\/
donne `/ \`, par exemple.b
eti
as params avec une valeur par défaut:(a,b=...,i=...)=>
à éviterreturn
{ }
pour cette raison.C # - 46 octets
s=>s[0]<47?' '+s:s+(s.EndsWith("/")?'\\':'/')
Essayez-le ici.
la source
Haskell,
464544 octetsProfite du fait que
<
.
</
<0
<\
dans la table ASCII pour enregistrer deux octetsla source
Python 2, 72 octets
Toute aide au golf serait grandement appréciée!
Cela prend le dernier caractère de l'entrée et le convertit en son code ASCII pour obtenir l'index correspondant dans la liste de deux caractères. Ces deux caractères sont ajoutés à tous les caractères de l'entrée jusqu'au dernier.
la source
SQF, 91
Utilisation du format de fonction en tant que fichier:
Appelez en tant que
"STRING" call NAME_OF_COMPILED_FUNCTION
la source
Perl, 30 + 1 (
-p
) = 31 octetsBesoins
-p
et-M5.010
ou-E
pour fonctionner:Mise en œuvre simple du défi. (Notez que les
||
entre les deux dernières expressions régulières sontor
, comme cela peut être difficile à lire, donc les trois expressions régulières sont:,s/\./ ./
ets|/$|/\\|
, ets|\\$|\\/|
)la source
C #, 54 octets
la source
PowerShell v2 +,
59585251 octetsPrend l'entrée
$n
, la vide une opération d'index de tableau. Nous sélectionnons l'élément du tableau en fonction de l'indice -à-['.\/'.IndexOf($n[-1])
dire, sur la base du dernier caractère de l'entrée -$n
cela entraînera,0
,1
ou2
. Cela correspond à la chaîne appropriée du tableau. Dans tous les cas, la chaîne résultante est laissée sur le pipeline et l'impression est implicite.Cas de test
la source
C #,
8063 octetsla source
s=>{var c=s[s.Length-1];return c<'/'?" "+s:c>'/'?s+"/":s+"\\";}
63 dotnetfiddle.net/8x79azs=>{var c=s[s.Length-1];return c<47?' '+s:s+(c>47?'/':'\\');}
61 dotnetfiddle.net/ykKIL1Code machine ARM sous Linux, 50 octets
Vidage hexadécimal:
Premier post ici, j'espère que je fais ça correctement. Il s'agit d'un assemblage ARM 32 bits, en particulier le Thumb-2. La chaîne d'entrée est une chaîne terminée par NUL prise par r0, la sortie est imprimée sur la sortie standard. En syntaxe C, le prototype de la fonction serait void func_name (char * string). C'est une plainte AAPCS (convention d'appel ARM), si ce n'était pas le cas, 2 octets pourraient être rasés.
Voici l'assemblage équivalent, avec des commentaires expliquant ce qui se passe:
la source
ECMAScript 6/2015 (JavaScript), 41 octets
Bonne prise Neil.
la source
+(s+1)
?s<'/'
.R, 119 octets
Non golfé:
la source
SED,
41 3627sauvé 7 grâce à charlie
utilise 3 substitutions:
s/\./ ./
ajoute un espace s'il y a une.
s|/$|/\\|
,s|$|/|
ajoute la barre oblique appropriée aux extrémités desutilisations au
|
lieu de/
comme séparateurt
branches à la fin si la deuxième expression régulière correspond de sorte qu'il n'ajoute pas l'autre barre obliquela source
s/\./ ./;s./$./\\.;t;s.$./.
- c'est 27 octets. La 3ème substitution est simplifiée et sur mon système la-re
n'est pas nécessaire. Aussi, j'utilise.
au lieu de#
pour rester visuellement dans l'espace d'entrée. ; o)Turtlèd , 32 octets (non concurrentiel)
Explication:
la source
Java 7, 76 octets
Assez simple.
Code non testé et testé:
Essayez-le ici.
Sortie:
la source