( Inspiré par ce défi .)
Disons que nous avons une chaîne ABBCBA
. On peut dire qu'il y a une montée entre A
et B
, pour ce qui B
suit A
; on peut dire qu'il y a une course entre B
et B
, pour rien ne change; et enfin nous pouvons dire qu'il y a une chute entre C
et B
. Nous pouvons dessiner un graphique comme celui-ci:
A B B C B A
Rising: o o
Continuing: o
Falling: o o
Sans les étiquettes et en minimisant les espaces blancs:
o o
o
oo
Il s'agit de la sortie attendue pour l'entrée ABBCBA
.
Vous pouvez utiliser n'importe quel caractère non blanc pour remplacer o
dans la sortie. De plus, chaque colonne peut éventuellement avoir un espace supplémentaire entre elles, comme ceci:
o o
o
o o
L'entrée comprendra au moins trois caractères. La chaîne sera entièrement composée de lettres majuscules, mais vous pouvez utiliser à la place des lettres minuscules.
Cas de test
TEST CASE
LINE 1
LINE 2
LINE 3
HELLOWORLD
o oo o
o
o o oo
TESTCASE
oo o
o oo o
EXAMINATION
o o o o o
o o o o o
ZSILENTYOUTH
o ooo o
oo o o oo
ABC
oo
ABCBA
oo
oo
o
s consécutif , ou la sortie doit-elle être compacte?Réponses:
Gelée , 11 octets
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça marche
la source
Mathematica,
93836864 octets(utilise
0
, pasO
)Explication
Obtient la position dans l'alphabet de chaque caractère de l'entrée.
Prend la différence entre chaque élément consécutif et prend le signe (
-1
pour négatif / descendant,0
pour 0 / continu,1
pour positif / montant)Insère un
0
dans une liste de deuxNull
s, dans la première position si elle augmente, au milieu si elle continue et la troisième position si elle baisse.Formate la sortie.
Si la sortie pouvait sembler différente de celle de la question, le code ci-dessus pourrait être raccourci à 41 octets:
... qui crée quelque chose comme ça (pour "ABBCBA"):
la source
MATL ,
15, 14 octetsEssayez-le en ligne!
Explication:
Ils disent qu'une image vaut mille mots, alors voici un interprète en ligne bêta qui vous montre la valeur en haut de la pile en direct lors de sa mise à jour. Notez qu'il est toujours en version bêta, vous devrez donc peut-être exécuter plusieurs fois.
Alors d'abord, nous appelons
dZS
.d
nous donne la différence entre chaque élément consécutif etZS
nous donne le signe (-1, 0 ou 1) de chaque élément. Donc, avec «HELLOWORLD» en entrée, après la première étape, nous aurons:Maintenant, nous utilisons juste
q
pour décrémenter cela et obtenir:Et puis deux fois, nous dupliquons le haut de la pile et incrémentons le tableau (
tQ
) Après cela, nous auronsMaintenant, tous les «0» sont là où nous voulons sortir un caractère. Donc, nous joignons ces trois tableaux en une matrice (
v
), et la nions logiquement (~
). Ensuite, nous multiplions chaque valeur de la matrice par la valeur ASCII de «O», (79*
) et l'affichages sous forme de chaîne avecc
.la source
Haskell, 63 octets
Renvoie une liste de trois chaînes, représentant les lignes de sortie. Ne contient aucun message subliminal.
dianne a économisé trois octets en utilisant la
do
notation etmax
au lieu d'une compréhension de liste etlast
.la source
['o'|b e y]
..CJam , 19 octets
Utilise
0
au lieu deo
.Essayez-le en ligne!
Explication
la source
Python 2,
7671 octetsMerci à @xnor de m'avoir informé que le retour d'une liste de chaînes est autorisé.
Testez-le sur Ideone .
la source
lambda
.JavaScript (ES6),
9695898782 octets2 octets enregistrés en utilisant
0
au lieu deo
, comme suggéré par Conor O'Brien26 octets enregistrés grâce à ETHproductionsla source
'o'
par une0
aide est-il utile?s=>[1,0,-1].map(k=>[...s].map(c=>(r=p?(c>p)-(c<p)-k&&' ':'',p=c,r),p=0).join``).join`\n`
cela fonctionnerait, économisant 2 octets.s=>[1,0,-1].map(k=>[...s].map((c,i)=>(p=s[i-1])?(c>p)-(c<p)-k&&' ':'').join``).join`\n`
.s.replace
vous fera également économiser plusieurs octets[...s].map().join()
.Perl, 47 octets
Comprend +1 pour
-p
Donnez votre avis sur STDIN:
bumpy.pl
:la source
MATL,
1614 octetsEssayez-le en ligne!
Cela est né d'une discussion sur la réponse de DJMCMahem . Même si cette réponse fait
2 caractères de plus surla même longueur, la méthode est quelque peu différente et peut donc être d'un intérêt indépendant.Merci à Luis Mendo pour une suggestion économisant 2 octets (voir commentaires)
Explication:
'dZS' obtient un vecteur où chaque entrée est le signe des différences entre les caractères successifs, puis 'qq_' décrémente chaque entrée de deux et retourne le signe, alors maintenant si le caractère augmente il est 1, s'il reste le même 2, et si elle diminue 3. Par exemple,
Ensuite, 't' fait une copie du vecteur précédent sur la pile, puis 'n:' place également le vecteur [1,2,3,4, ...] sur la pile. Ensuite, «79» place la valeur 79 sur la pile. La valeur 79 est choisie car c'est le numéro du caractère unicode «o», qui sera notre sortie plus tard. (Merci à Luis Mendo pour l'idée de mettre la valeur 79 ici plutôt que plus tard)
À ce stade, nous avons précisément les indices de ligne, les indices de colonne et la valeur non nulle d'une matrice clairsemée qui a la valeur 79 partout où nous voulons le caractère de sortie, et 0 partout où nous voulons sortir des espaces. Nous retirons ces trois éléments de la pile et créons cette matrice clairsemée avec la commande de matrice clairsemée de MATL 'Z?'. C'est,
Il ne reste plus qu'à convertir la matrice des nombres en caractères unicode, ce qui est fait par la commande 'c'. Les 79 deviennent des «o» et les 0 deviennent des espaces:
La matrice résultante de caractères est alors implicitement affichée.
la source
PHP, 95 octets
1.Créez un tableau de chaînes avec l'index -1 à 1 alternatif
$b=array_fill(-1,3," ");
Remplissez les chaînes en fonction de l'opérateur du vaisseau spatial et de la position de l'entrée
3.Output rejoindre le tableau avec une nouvelle ligne
Première voie 111 octets
Utilisez l'opérateur de vaisseau spatial opérateur de
<=>
vaisseau spatialla source
~õ
est un raccourci pratique pour"\n"
. Non sérieusement!" "
, qui peut l'être~ß
. Exemple. Vous souhaitez définir le codage de votre navigateur sur Latin-1 lorsque vous les visualisez.JavaScript (ES6), 81 octets
Écrit à partir de zéro, mais il a été fortement inspiré par la réponse de @ Arnauld . Utilise la récursivité pour calculer le contenu de chaque ligne.
la source
Rubis,
6664 octetsVoir sur eval.in: https://eval.in/649503
la source
Java 7,
158156 octets2 octets enregistrés grâce à @Frozn .
Cas non testés et testés:
Essayez-le ici.
Sortie:
la source
a,b,c=b=a=""
serait plus court.Clora (20 octets)
<IN?o ;=IN?o ;>IN?o
Explication:
Il existe 3 programmes Clora, un pour chaque ligne de sortie.
Premier programme,
<IN?o
Vérifiez si le caractère d'entrée actuel
I
est plus petit<
que le caractère suivantN
. Enregistrez le résultat dans un indicateur global. Vérifiez le résultat de l'indicateur?
et si c'est vrai, affichezo
, sinon un espace vide (oui, il y a un espace vide là-bas.Tous les autres programmes suivent la même règle et sont séparés par
;
, chaque programme est exécuté et reçoit l'entrée en argument.Vous pouvez le tester vous-même, y compris clora.js et l'exécuter avec
la source
Pyth, 21 octets
Un programme qui prend l'entrée d'une chaîne non cotée sur STDIN et imprime le résultat.
Cela utilise une idée similaire à la réponse CJam de @ MartinEnder .
Essayez-le en ligne ou vérifiez tous les cas de test .
Comment ça marche
la source
PHP 7,
818077 octetsRemarque: utilise le codage Windows-1252
Courez comme ceci:
Explication
Une itération sur les lignes (numérotées
1
,0
,-1
). Puis itère sur la chaîne d'entrée pour chaque ligne. Lorsque le résultat de la comparaison du vaisseau spatial est égal au numéro de ligne, affichez uno
, sinon, affichez un espace. Après chaque ligne, imprimez une nouvelle ligne.Tweaks
$x
est-1
, que nous pouvons trouver par négation binaire (résultat0
). Enregistre un octet par rapport à l'ajout1
(ou 2 avec pré-incrémentation).$argn
la source
-d error_reporting=30709
à votre nombre d'octets.2>/dev/null
, mais cela supprimera TOUTES les erreurs, y compris fatalesIf you get warnings, set the default value with ...
. Veuillez excuser mon pédanterie; Je n'ai pas décodé cette valeur.Lua
326303 octets tl = 0 s = io.read () o1, o2, o3 = "", "", "" t = {} for i = 1, # s do t [i] = s: sub (i , i) tl = tl + 1 extrémité pour v = 1, tl-1 si t [v] t [v + 1] alors o1 = o1 .. "" o2 = o2 .. "" o3 = o3 .. " o "end end print (o1 .." \ n ".. o2 .." \ n ".. o3)Une version non golfée
la source
t1 = 0
,? àt1=0
? Et des endroits similaires.R, 114 octets
Une réponse R non concurrente.
Explication
#
si les différences sont>0
,==0
ou<0
.la source