Moje źródło jest w porządku, jest twoje?

14

Wyzwanie polega na napisaniu programu, funkcji itp., Które obliczą, czy przekazany ciąg znaków jest „w porządku”. Oznacza to, że znaki ciągu mają kody znaków w kolejności od najmniejszej do największej. Najmniejszy kod znakowy musi być pierwszy. Rozumiem przez to najniższe punkty kodowe Unicode do najwyższych. Nie ma znaczenia, jakiej strony kodowej używasz języka.

Musisz zwrócić jedną wartość, jeśli dane wejściowe są „w porządku”, a drugą, jeśli tak nie jest. Wartości muszą być różne, ale nie ma innych ograniczeń wartości wyjściowych. Na przykład możesz wydrukować / zwrócić / wydrukować truedla !1AQaq¡±(w kolejności) i falsedla aq!QA. Dwie odrębne wartości nie muszą być prawdą, fałszem ani czymkolwiek podobnym, tylko dwie odrębne wartości. Powtarzane ciągi (np. aa) Są w porządku.

Musisz tylko wesprzeć do unicode U+007E( ~) (ascii 126)

Jednak znaki twojego programu muszą być w porządku. Powodzenia i udanego !

programmer5000
źródło
Nie potrzebujesz wartości prawda / fałsz? działałyby dwa prawdy?
Rɪᴋᴇʀ
Ponadto, czy najmniejszy kod znaków jest zawsze przy pierwszym znaku? Czy można to odwrócić?
Rɪᴋᴇʀ
12
Code-golf naprawdę wydaje się złym warunkiem wygranej dla tej formy ograniczonego źródła. Kręgle kodu dla najbardziej unikalnych postaci byłyby bardziej interesujące.
fəˈnɛtɪk
1
@Pavel Pop cons nie działają dobrze w celu osiągnięcia określonego zadania w określony sposób.
Dennis
2
powtarzany jest ciąg w kolejności? na przykład czy jest "aa"w porządku?
tsh

Odpowiedzi:

14

Brachylog , 2 bajty

.o

Wypróbuj online!

Wyjaśnienie

.o
.   Assert that {the input} equals the output of the last command in the program
 o  Sort {the input}

Jako pełny program daje niepowodzenie asercji false., każde udane uruchomienie, które nie narusza żadnych asercjitrue.


źródło
9

Galaretka , 2 bajty

Ṣ⁼

Wypróbuj online!

Wyjaśnienie

Ṣ⁼
Ṣ    Sort {the input}
 ⁼   Compare that to {the input} for equality of the whole structure

⁼Ṣ ma również odpowiednią funkcjonalność („porównaj wejście z posortowanym wejściem”), więc wystarczyło uruchomić na sobie oba programy, aby dowiedzieć się, co jest w porządku (z pewnością nie mam punktów kodowych Unicode tej części dziwnego zestawu znaków Jelly zapamiętanego).


źródło
Twoje zgłoszenie jest nieprawidłowe w kodowaniu Jelly, musi to być ⁼Ṣzamiast tego. Można zobaczyć kodowej Jelly jest tutaj .
Erik the Outgolfer
@EriktheOutgolfer That łatwo naprawić; ⁼Ṣrobi dokładnie to samo co Ṣ⁼.
steenbergh 14.04.17
@steenbergh To zgłoszenie, tak jak jest teraz, jest nieprawidłowe. Chociaż poprawka jest łatwa, nie została jeszcze zastosowana i nie zaleca się edycji kodu przez innych.
Erik the Outgolfer
1
@EriktheOutgolfer Dyskusja na temat tej odpowiedzi dotyczy głównie tego, której strony kodowej użyć: wyzwanie odwołuje się do Unicode (choć wyraźnie nie mówi nam, aby go używać), a Jelly ma swoją własną stronę kodową. Niezależnie od wyniku ustalenie tej odpowiedzi jest banalne. Dlatego nie posunąłbym się nawet do nazwania tej odpowiedzi „nieważną” - nawet nie głosowałbym jej w obecnym stanie.
steenbergh 14.04.17
@steenbergh Ja też nie głosowałem, po prostu powiadomiłem ais523 :)
Erik the Outgolfer
9

MATL , 5 bajtów

GGS\a

Wysyła, 0jeśli dane wejściowe są w porządku, w 1przeciwnym razie.

Wypróbuj online!

Wyjaśnienie

To oblicza moduł (punkty kodowe) każdego znaku z wejścia z tym samym indeksem w posortowanym wejściu. Dane wejściowe są w porządku wtedy i tylko wtedy, gdy wszystkie wyniki są 0.

Na przykład rozważ łańcuch wejściowy BCD!. Sortowanie daje '!BCD. Tablice punktów kodowych to odpowiednio [66 67 68 33]i [33 66 67 68]. Obliczanie modułów daje [0 1 1 33], więc dane wejściowe nie są w porządku. Zauważ, że niektóre wyniki mogą być 0nawet, jeśli wartości nie były takie same (tutaj dzieje się to na pierwszej pozycji), ale nie może się to zdarzyć we wszystkich wpisach, chyba że dane wejściowe są w porządku.

G     % Push input string
GS    % Push input string and sort it
\     % Modulus, element-wise. This gives all zeros iff the input was in order
a     % Any: gives 1 if any entry is non-zero. Implicitly display
Luis Mendo
źródło
8

05AB1E , 3 2 bajty

Dzięki Kevinowi za wycięcie 33% mojego kodu źródłowego!

Wypróbuj online!

Wyjaśnienie:

      There used to be a D here for 'Duplicate stack' 
      but we now use the same input twice implicitly
 {    Sort the copy
  å   Check if the sorted copy is a substring of the original
      This will only return 1 if the original input is sorted, 0 otherwise.
Steenbergh
źródło
D{Qdziała również ...
Neil A.
1
@ NeilA.Może to zrobić tak samo, ale znaki nie są w porządku. Wymagane jest, aby kod źródłowy przeszedł ten sam test co dane. To powinno dać 1 .
steenbergh
1
DMożna usunąć przez około 1 używając tylko wejście ukryte dwukrotnie.
Kevin Cruijssen
5

2sable , 2 bajty

Wypróbuj online!

Wyjaśnienie

{    # sorted input
 Ê   # not equals (implicit input)

Zwraca 0, jeśli jest to kolejność, w przeciwnym razie 1 .

Emigna
źródło
1
@steenbergh: Ach, przegapiłem tę część wyzwania.
Emigna
1
@steenbergh: Naprawiono! Na szczęście mogliśmy wyprowadzić dowolne wyraźne wartości :)
Emigna
2

Pyth, 2 bajty

<S

Falseoznacza posortowane, Trueoznacza nieposortowane.

Zestaw testowy

Wymyślenie tego było dość nietrywialne. Najbardziej oczywistym rozwiązaniem tego problemu, bez ograniczonego źródła, jest SIniezmienne sortowanie. Ale to nie jest posortowane. Potem pomyślałem o tym qS, który domyślnie używa zmiennej wejściowej dwa razy, sprawdzając, czy jest ona równa posortowanej wartości. Ale jednocześnie q < s, q > Swięc to też nie działało. Ale <pojawia się wcześniej S, a jedynym sposobem, aby posortowana wersja nie mogła być mniejsza niż oryginał, jest posortowanie oryginału, ponieważ posortowana wersja jest leksykograficznie minimalną kombinacją elementów.

isaacg
źródło
1

CGL (CGL Golfing Language) , 4 bajty (niekonkurujące)

-:Sc

Wyjaśnienie:

- Decrement the stack counter so the current stack is where input is put
: Split the first element of the current stack (input) into an array of single strings, make that the next stack, and increment the stack counter
S Sort the current stack
c Compare the current stack and the one before, push that to the next stack and increment the stack counter
(implicit) Output the first element of the current stack, true if in order, false if not.

Nie konkuruje, ponieważ :, Si czostały wdrożone po stworzeniu tego wyzwania.

programmer5000
źródło
Czy istnieje dowód, że ten język został stworzony przed tym wyzwaniem?
user41805
@KritixiLithos tak, i jest to technicznie poprawny język, ale sprawię, że ten nie będzie konkurował, ponieważ funkcje niezbędne do jego ukończenia zostały wprowadzone po tym wyzwaniu. CGL jest wciąż w toku i używam wyzwań, aby pokazać mi, jakie nowe funkcje powinny zostać dodane.
programator5000