( Zainspirowany tym wyzwaniem .)
Powiedzmy, że mamy ciąg ABBCBA
. Możemy powiedzieć, że istnieje wzrost pomiędzy A
i B
, dla B
następujących A
; możemy powiedzieć, że istnieje bieg pomiędzy B
i B
, ponieważ nic się nie zmienia; i na koniec możemy powiedzieć, że jest spadek między C
a B
. Możemy narysować taki wykres:
A B B C B A
Rising: o o
Continuing: o
Falling: o o
Bez etykiet i minimalizowanie białych znaków:
o o
o
oo
Jest to oczekiwany wynik dla danych wejściowych ABBCBA
.
Możesz użyć dowolnego znaku spacji, aby zastąpić o
wynik. Co więcej, każda kolumna może opcjonalnie mieć między sobą dodatkową przestrzeń, na przykład:
o o
o
o o
Dane wejściowe będą się składały z co najmniej trzech znaków. Ciąg będzie składał się wyłącznie z wielkich liter, ale zamiast tego możesz użyć małych liter.
Przypadki testowe
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, czy też wyjście musi być zwarte?Odpowiedzi:
Galaretka , 11 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Mathematica,
93836864 bajtów(używa
0
, nieO
)Wyjaśnienie
Pobiera pozycję w alfabecie każdego znaku wejścia.
Pobiera różnicę między każdym kolejnym elementem i przyjmuje znak (
-1
dla negatywu / spadku,0
dla 0 / kontynuacji,1
dla pozytywu / wzrostu)Wstawia a
0
na liście dwóchNull
s, w pierwszej pozycji, gdy rośnie, środkowej, jeśli kontynuuje, i trzeciej pozycji, jeśli spada.Formatuje dane wyjściowe.
Jeśli dane wyjściowe mogą wyglądać inaczej niż w pytaniu, powyższy kod można skrócić do 41 bajtów:
... który tworzy coś takiego (dla „ABBCBA”):
źródło
MATL ,
15, 14 bajtówWypróbuj online!
Wyjaśnienie:
Mówią, że obraz jest wart tysiąca słów, więc tutaj jest internetowy tłumacz w wersji beta, który pokazuje wartość na szczycie stosu na żywo podczas aktualizacji. Pamiętaj, że wciąż jest w fazie beta, więc może być konieczne kilkukrotne naciśnięcie przycisku Uruchom.
Najpierw dzwonimy
dZS
.d
daje nam różnicę między każdym kolejnym elementem iZS
daje nam znak (-1, 0 lub 1) każdego elementu. Więc z 'HELLOWORLD' jako wejściem, po pierwszym kroku będziemy mieli:Teraz po prostu
q
zmniejszamy to i otrzymujemy:A następnie dwa razy duplikujemy górę stosu i zwiększamy tablicę (
tQ
) Po tym będziemy mieliTeraz wszystkie „0” są tam, gdzie chcemy wypisać znak. Łączymy te trzy tablice w macierz (
v
) i logicznie negujemy (~
). Następnie mnożymy każdą wartość w macierzy przez wartość ASCII „O”, (79*
) i wyświetlamy ją jako ciąg znakówc
.źródło
Haskell, 63 bajty
Zwraca listę trzech ciągów znaków reprezentujących linie wyjściowe. Nie zawiera żadnych podprogowych wiadomości.
dianne zapisał trzy bajty, używając
do
notacji imax
zamiast rozumienia listy ilast
.źródło
['o'|b e y]
..CJam , 19 bajtów
Używa
0
zamiasto
.Wypróbuj online!
Wyjaśnienie
źródło
Python 2,
7671 bajtówDzięki @xnor za powiadomienie mnie, że dozwolone jest zwracanie listy ciągów.
Przetestuj na Ideone .
źródło
lambda
.JavaScript (ES6),
9695898782 bajtów2 bajty zapisane przy użyciu
0
zamiasto
, jak sugeruje Conor O'Brien26 bajtów zaoszczędzonych dzięki produktom ETHźródło
'o'
z0
pomocą ma jakąkolwiek?s=>[1,0,-1].map(k=>[...s].map(c=>(r=p?(c>p)-(c<p)-k&&' ':'',p=c,r),p=0).join``).join`\n`
będzie działać, oszczędzając 2 bajty.s=>[1,0,-1].map(k=>[...s].map((c,i)=>(p=s[i-1])?(c>p)-(c<p)-k&&' ':'').join``).join`\n`
.s.replace
zaoszczędzi ci także kilka bajtów[...s].map().join()
.Perl, 47 bajtów
Obejmuje +1 dla
-p
Podaj dane wejściowe STDIN:
bumpy.pl
:źródło
MATL,
1614 bajtówWypróbuj online!
Wynikało to z dyskusji na temat odpowiedzi DJMCMahem . Mimo że ta odpowiedź ma
2 znaki dłuższe otej samej długości, metoda jest nieco inna, więc może być niezależna.Podziękowania dla Luisa Mendo za sugestię oszczędzającą 2 bajty (patrz komentarze)
Wyjaśnienie:
„dZS” otrzymuje wektor, w którym każdy wpis jest znakiem różnic między kolejnymi znakami, a następnie „qq_” zmniejsza każdy wpis o dwa i odwraca znak, więc teraz, jeśli znak się zwiększy, wynosi 1, jeśli pozostaje taki sam 2, a jeśli spadnie 3. Na przykład
Następnie „t” tworzy kopię poprzedniego wektora na stosie, a następnie „n:” umieszcza również wektor [1,2,3,4, ...] na stosie. Następnie „79” umieszcza wartość 79 na stosie. Wartość 79 została wybrana, ponieważ jest to liczba znaku Unicode „o”, który zostanie później otrzymany. (Podziękowania dla Luisa Mendo za pomysł umieszczenia tutaj wartości 79 zamiast później)
W tym momencie mamy dokładnie indeksy wierszy, indeksy kolumn i niezerową wartość macierzy rzadkiej, która ma wartość 79 wszędzie tam, gdzie chcemy znaku wyjściowego, i 0 wszędzie tam, gdzie chcemy wyprowadzać białe spacje. Zdejmujemy te trzy elementy ze stosu i tworzymy tę rzadką macierz za pomocą polecenia MATL rzadkiej macierzy „Z?”. To jest,
Pozostaje tylko przekonwertować macierz z liczb na znaki Unicode, co odbywa się za pomocą polecenia „c”. 79 to „o”, a 0 to spacje:
Wynikowa macierz znaków jest następnie domyślnie wyświetlana.
źródło
PHP, 95 bajtów
1. Utwórz tablicę ciągów z indeksem od -1 do 1 alternatywy
$b=array_fill(-1,3," ");
2. Wypełnij ciągi zależne od operatora statku kosmicznego i pozycji wejścia
3. Wyjście dołącz do tablicy z nową linią
Pierwszy sposób 111 bajtów
Użyj operatora
<=>
statku kosmicznegoźródło
~õ
jest to przydatny skrót do"\n"
. Niepoważnie!" "
, co może być~ß
. Przykład. Chcesz ustawić kodowanie przeglądarki na Latin-1 podczas ich przeglądania.JavaScript (ES6), 81 bajtów
Napisany od zera, choć w dużej mierze zainspirowany odpowiedzią @ Arnauld . Wykorzystuje rekurencję do obliczania zawartości każdego wiersza.
źródło
Rubin,
6664 bajtówZobacz na eval.in: https://eval.in/649503
źródło
Java 7,
158156 bajtów2 bajty zapisane dzięki @Frozn .
Przypadki bez golfa i testy:
Wypróbuj tutaj.
Wydajność:
źródło
a,b,c=b=a=""
byłoby krótsze.Clora (20 bajtów)
<IN?o ;=IN?o ;>IN?o
Wyjaśnienie:
Istnieją 3 programy Clora, po jednym dla każdej linii wyjściowej.
Pierwszy program,
<IN?o
Sprawdź, czy obecny znak wejściowy
I
jest mniejszy<
niż następny znakN
. Zapisz wynik w globalnej fladze. Sprawdź wynik flagi?
i jeśli jest prawdą, wypiszo
, w przeciwnym razie puste miejsce (tak, jest tam puste miejsce).Wszystkie inne programy działają zgodnie z tą samą regułą i są oddzielone
;
, każdy program jest wykonywany i otrzymuje dane wejściowe jako argument.Możesz go przetestować samodzielnie, w tym clora.js i wykonać go
źródło
Pyth, 21 bajtów
Program, który pobiera niecytowany ciąg znaków na STDIN i wypisuje wynik.
Wykorzystuje to podobny pomysł do odpowiedzi CJam @ MartinEnder .
Wypróbuj online lub Zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
PHP 7,
818077 bajtówUwaga: używa kodowania Windows-1252
Uruchom tak:
Wyjaśnienie
Iteracje nad liniami (numerowane
1
,0
,-1
). Następnie iteruje ciąg wejściowy dla każdej linii. Kiedy wynik porównania statku kosmicznego jest równy numerowi linii, wypisz lubo
, w przeciwnym razie, wypuść spację. Po każdej linii wydrukuj nowy wiersz.Poprawki
$x
jest-1
, co możemy znaleźć poprzez negację binarną (wynik0
). Zapisuje bajt w porównaniu do dodawania1
(lub 2 z przyrostem wstępnym).$argn
źródło
-d error_reporting=30709
do swojej liczby bajtów.2>/dev/null
, ale pozwoli to pozbyć się WSZYSTKICH błędów, w tym krytycznychIf you get warnings, set the default value with ...
. Proszę wybaczyć moją pedanterię; Nie zdekodowałem tej wartości.Lua
326303 bajtów tl = 0 s = io.read () o1, o2, o3 = "", "", "" t = {} dla i = 1, # s do t [i] = s: sub (i , i) tl = tl + 1 koniec dla v = 1, tl-1 zrobić, jeśli t [v] t [v + 1], to o1 = o1 .. "" o2 = o2 .. "" o3 = o3 .. " o "koniec końca wydruku (o1 .." \ n ".. o2 .." \ n ".. o3)Wersja bez golfa
źródło
t1 = 0
? dot1=0
? I podobne miejsca.R, 114 bajtów
Niekonkurencyjna odpowiedź R.
Wyjaśnienie
#
jeśli różnice są>0
,==0
lub<0
.źródło