( Inspiriert von dieser Herausforderung .)
Nehmen wir an, wir haben eine Zeichenfolge ABBCBA
. Wir können sagen , dass es einen Anstieg zwischen A
und B
zum B
folgt A
; wir können sagen, dass es einen Lauf zwischen B
und gibt B
, denn nichts ändert sich; und schließlich können wir sagen, dass es einen Abfall zwischen C
und gibt B
. Wir können eine Grafik wie diese zeichnen:
A B B C B A
Rising: o o
Continuing: o
Falling: o o
Ohne die Beschriftungen und Minimieren von Leerzeichen:
o o
o
oo
Dies ist die erwartete Ausgabe für die Eingabe ABBCBA
.
Sie können ein beliebiges Nicht-Leerzeichen verwenden, um es o
in der Ausgabe zu ersetzen . Ferner kann jede Spalte optional einen zusätzlichen Abstand zwischen sich haben, wie z.
o o
o
o o
Die Eingabe besteht aus mindestens drei Zeichen. Die Zeichenfolge besteht ausschließlich aus Großbuchstaben. Sie können jedoch auch Kleinbuchstaben verwenden.
Testfälle
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 ein Leerzeichen sein oder muss die Ausgabe kompakt sein?Antworten:
Jelly , 11 Bytes
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Mathematica,
93836864 Bytes(verwendet
0
, nichtO
)Erläuterung
Ruft die Position der einzelnen Zeichen der Eingabe im Alphabet ab.
Nimmt den Unterschied zwischen aufeinanderfolgenden Elementen und nimmt das Vorzeichen (
-1
für negativ / fallend,0
für 0 / anhaltend,1
für positiv / steigend)Fügt a
0
in eine Liste von zweiNull
s ein, an der ersten Position, wenn es steigt, in der Mitte, wenn es weitergeht, und an der dritten Position, wenn es fällt.Formatiert die Ausgabe.
Wenn die Ausgabe anders aussehen könnte als in der Frage, könnte der obige Code auf 41 Byte verkürzt werden:
... was so etwas schafft (für "ABBCBA"):
quelle
MATL ,
15, 14 BytesProbieren Sie es online!
Erläuterung:
Sie sagen, ein Bild sagt mehr als tausend Worte. Hier ist ein Beta-Online-Interpreter , der Ihnen den Wert auf dem Stapel live anzeigt, wenn er aktualisiert wird. Beachten Sie, dass es sich noch in der Beta-Phase befindet, sodass Sie möglicherweise mehrmals auf Ausführen klicken müssen.
Also rufen wir zuerst an
dZS
.d
gibt uns den Unterschied zwischen jedem aufeinanderfolgenden Element undZS
das Vorzeichen (-1, 0 oder 1) jedes Elements. Also mit 'HELLOWORLD' als Eingabe haben wir nach dem ersten Schritt:Jetzt
q
dekrementieren wir dies einfach und erhalten:Und dann duplizieren wir zweimal den oberen Teil des Stapels und erhöhen das Array (
tQ
). Danach haben wirJetzt wollen wir in allen Nullen ein Zeichen ausgeben. Also fügen wir diese drei Arrays zu einer Matrix zusammen (
v
) und negieren sie logisch (~
). Dann multiplizieren wir jeden Wert in der Matrix mit dem ASCII-Wert von 'O' (79*
) und zeigen ihn als Zeichenfolge mit anc
.quelle
Haskell, 63 Bytes
Gibt eine Liste mit drei Zeichenfolgen zurück, die die Ausgabezeilen darstellen. Enthält keine unterschwelligen Botschaften.
dianne sparte drei bytes mit
do
notation undmax
anstelle eines listenverständnisses undlast
.quelle
['o'|b e y]
..CJam , 19 Bytes
Verwendet
0
anstelle vono
.Probieren Sie es online!
Erläuterung
quelle
Python 2,
7671 BytesVielen Dank an @xnor für die Benachrichtigung, dass das Zurückgeben einer Liste von Zeichenfolgen zulässig ist.
Teste es auf Ideone .
quelle
lambda
.JavaScript (ES6),
9695898782 Byte2 Bytes gespart durch Verwendung von
0
anstelle vono
, wie von Conor O'Brien vorgeschlagen,26 Bytes gespart dank ETHproductionsquelle
'o'
durch ein0
anderes?s=>[1,0,-1].map(k=>[...s].map(c=>(r=p?(c>p)-(c<p)-k&&' ':'',p=c,r),p=0).join``).join`\n`
würde funktionieren und 2 Bytes sparen.s=>[1,0,-1].map(k=>[...s].map((c,i)=>(p=s[i-1])?(c>p)-(c<p)-k&&' ':'').join``).join`\n`
.s.replace
spart Ihnen auch mehrere Bytes[...s].map().join()
.Perl, 47 Bytes
Beinhaltet +1 für
-p
Geben Sie Input auf STDIN:
bumpy.pl
:quelle
MATL,
1614 BytesProbieren Sie es online!
Dies ergab sich aus einer Diskussion über die Antwort von DJMCMahem . Obwohl diese Antwort
2 Zeichen länger undgleich lang ist, ist die Methode etwas anders, sodass sie von unabhängigem Interesse sein kann.Danke an Luis Mendo für den Vorschlag, 2 Bytes zu sparen (siehe Kommentare)
Erläuterung:
'dZS' erhält einen Vektor, in dem jeder Eintrag das Vorzeichen der Unterschiede zwischen aufeinanderfolgenden Zeichen ist. Dann dekrementiert 'qq_' jeden Eintrag um zwei und kippt das Vorzeichen um 1, wenn das Zeichen erhöht wird, bleibt es also gleich 2. und wenn es sinkt 3. Zum Beispiel,
Als nächstes erstellt 't' eine Kopie des vorherigen Vektors auf dem Stapel, und 'n:' platziert den Vektor [1,2,3,4, ...] ebenfalls auf dem Stapel. Dann setzt '79' den Wert 79 auf den Stapel. Der Wert 79 wird gewählt, da dies die Nummer für das Unicode-Zeichen 'o' ist, das später von uns ausgegeben wird. (Danke an Luis Mendo für die Idee, den Wert 79 hier anstatt später zu setzen)
Zu diesem Zeitpunkt haben wir genau die Zeilenindizes, Spaltenindizes und den Wert ungleich Null einer dünnen Matrix, die den Wert 79 hat, wo immer wir das Ausgabezeichen wollen, und 0, wo immer wir das Leerzeichen ausgeben wollen. Wir nehmen diese drei Elemente vom Stapel und erstellen diese Sparse-Matrix mit MATLs Sparse-Matrix-Befehl 'Z?'. Das ist,
Jetzt müssen Sie nur noch die Matrix von Zahlen in Unicode-Zeichen konvertieren, und zwar mit dem Befehl 'c'. Die 79er werden zu 'o' und die 0er werden zu Leerzeichen:
Die resultierende Zeichenmatrix wird dann implizit angezeigt.
quelle
PHP, 95 Bytes
1.Erstellen Sie ein String-Array mit der Alternative Index -1 bis 1
$b=array_fill(-1,3," ");
2.Füllen Sie die vom Raumschiff-Operator und der Position der Eingabe abhängigen Zeichenfolgen aus
3.Ausgabe verbinden Sie das Array mit einer neuen Zeile
Erster Weg 111 Bytes
Verwenden Sie den Raumschiff-Operator
<=>
Raumschiff-Operatorquelle
~õ
ist dies eine praktische Abkürzung für"\n"
. Nein im Ernst!" "
, was sein kann~ß
. Beispiel. Sie möchten Ihre Browserkodierung auf Latin-1 einstellen, wenn Sie diese anzeigen.JavaScript (ES6), 81 Byte
Es wurde von Grund auf neu geschrieben, obwohl es stark von der Antwort von @ Arnauld inspiriert war . Verwendet die Rekursion, um den Inhalt jeder Zeile zu berechnen.
quelle
Ruby,
6664 BytesSehen Sie es auf eval.in: https://eval.in/649503
quelle
Java 7,
158156 Bytes2 Bytes gespart dank @Frozn .
Ungolfed & Testfälle:
Probieren Sie es hier aus.
Ausgabe:
quelle
a,b,c=b=a=""
würde aber kürzer sein.Clora (20 Bytes)
<IN?o ;=IN?o ;>IN?o
Erläuterung:
Es gibt 3 Clora-Programme, eines für jede Ausgabezeile.
Erstes Programm,
<IN?o
Überprüfen Sie, ob das aktuelle Eingangszeichen angezeigt wird
I
kleiner<
als das nächste Zeichen istN
. Speichern Sie das Ergebnis in einem globalen Flag. Überprüfen Sie das Ergebnis des Flags?
und geben Sie, falls es wahr isto
, ein Leerzeichen aus (ja, es gibt dort ein Leerzeichen).Alle anderen Programme folgen der gleichen Regel und werden durch getrennt
;
, jedes Programm wird ausgeführt und erhält die Eingabe als Argument.Sie können es selbst testen, einschließlich clora.js, und es mit ausführen
quelle
Pyth, 21 Bytes
Ein Programm, das die Eingabe eines nicht zitierten Strings in STDIN akzeptiert und das Ergebnis ausgibt.
Dies basiert auf einer ähnlichen Idee wie die Antwort von @ MartinEnder auf CJam .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
PHP 7,
818077 BytesHinweis: Verwendet die Windows-1252-Codierung
Laufen Sie wie folgt:
Erläuterung
Iteriert über Leitungen (numeriert
1
,0
,-1
). Anschließend wird die Eingabezeichenfolge für jede Zeile durchlaufen. Wenn das Ergebnis des Raumschiffvergleichs der Zeilennummer entsprichto
, geben Sie andernfalls ein Leerzeichen aus. Drucken Sie nach jeder Zeile eine neue Zeile.Optimierungen
$x
ist-1
, was wir durch binäre Negation finden können0
) finden können. Speichert ein Byte im Vergleich zum Addieren1
(oder 2 mit Vorinkrementierung).$argn
quelle
-d error_reporting=30709
, Ihre Byteanzahl zu erhöhen.2>/dev/null
, aber das wird ALLE Fehler beseitigen, einschließlich fatalIf you get warnings, set the default value with ...
. Bitte entschuldigen Sie meine Pedanterie; Diesen Wert habe ich nicht dekodiert.Lua
326303 Bytes tl = 0 s = io.read () o1, o2, o3 = "", "", "" t = {} für i = 1, # s do t [i] = s: sub (i , i) tl = tl + 1 ende für v = 1, tl-1 tue, wenn t [v] t [v + 1], dann ist o1 = o1 .. o2 = o2 .. o3 = o3 .. o "Ende Ende Drucken (o1 .." \ n ".. o2 .." \ n ".. o3)Eine ungolfed Version
quelle
t1 = 0
? zut1=0
? Und ähnliche Orte.R, 114 Bytes
Eine nicht konkurrierende R-Antwort.
Erläuterung
#
wenn die Unterschiede sind>0
,==0
oder<0
.quelle