Muszę przestać myśleć o pieprzonych nazwiskach
Twoim zadaniem jest utworzenie jak największej liczby urywków (programów z wbudowanymi wejściami i wyjściami), funkcji lub pełnych programów, które sortują w rosnącej kolejności w dowolnej wersji językowej tablic liczb całkowitych, ale dla każdego programu dozwolone są tylko używać znaków w ASCII (lub stronie kodowej twojego języka, jeśli jest to bezpośrednio określone jako nie ASCII), które nie były używane w poprzednich programach.
Oto przykładowa odpowiedź (osobne programy oddzielone znakiem nowej linii):
Derp
ASdFGHJKLAAA
qwEEERtyRty
W tym języku (fikcyjnej), moja pierwsza odpowiedź brzmi Derp
, co zużyte D
, e
, r
i p
. W drugim programie nie mogę ponownie użyć tej postaci, ale mogę ponownie użyć dowolnej liczby znaków. To samo z trzecim programem i tak dalej.
Każdy program musi przyjmować tablicę liczb całkowitych, więc coś takiego: (patrz przykłady wejść / wyjść dla prawidłowych stylów wejścia / wyjścia):
[3 4 -2 5 7 196 -44 -2]
I musi wyprowadzać elementy w tablicy jako tablicę, w porządku rosnącym:
[-44 -2 -2 3 4 5 7 196]
Twój wynik będzie całkowitą liczbą zgłoszeń. W przypadku remisu wygrywa najniższa liczba bajtów (najmniejsza liczba bajtów w kodzie)!
Zasady dla programów:
- Wszystkie zgłoszenia muszą działać poprawnie w jednej wersji językowej (tak
Python 2 != Python 3
). - Twoje zgłoszenia mogą być fragmentami, funkcjami lub pełnymi programami. Możesz nawet mieszać i dopasowywać je - musisz jednak powiedzieć, który jest, i podać linki do działających zgłoszeń.
- Jeśli to możliwe, podaj linki online do wszystkich rozwiązań.
- Wszystkie zgłoszenia muszą przyjmować tablicę (lub ciąg rozdzielony dowolnym znakiem) jako dane wejściowe i wysyłać tablicę posortowaną (w formie tablic w języku użytkownika lub jako
{any character}
ciąg -delimitowany. - Nie wolno używać żadnych znaków poza ASCII (lub stroną kodową Twojego języka).
Na przykład są to prawidłowe wejścia / wyjścia:
[1 2 3 4] (Clojure style arrays)
[1, 2, 3, 4] (Python style arrays)
1 2 3 4 5 (Space-delimited - separated by spaces)
1#2#3#4#5 ("#"-delimited - separated by "#" characters)
1\n2\n3\n4\n (newline-delimited)
Dane wejściowe:
- Masz gwarancję, że tablica zawiera tylko liczby całkowite. Mogą jednak występować liczby ujemne i liczby mogą się powtarzać w nieskończoność.
źródło
Odpowiedzi:
Galaretka , 10 programów, 65 bajtów
Nieuniknione nakładanie się odpowiedzi Jelly na @ Lynn . Kredyty za pomysł Bogosort idą do niej.
Wypróbuj online! lub zweryfikuj niepowtarzalność .
Jak oni pracują
źródło
Galaretka, 8 programów
Ostatni program jest naprawdę denerwujący…
Jeśli mogę usunąć
œṡ
z<;0œṡ0⁸ṁjµ/
, istnieje również to dziwne jeden:²SNr²ZFœ&
. Pomoc jest doceniana.źródło
Roots → polynomial, polynomial → roots
jest geniuszem!U
jest za darmo05AB1E , wynik = 6
05AB1E wykorzystuje kodowanie CP-1252 .
Podziękowania dla Kevina Cruijssena za program 4.
Dziękujemy Riley za inspirację do programu 6.
Program 1
Wypróbuj online!
Program 2
Wypróbuj online!
Program 3
Wypróbuj online!
Program 4
Wypróbuj online!
Program 5
Wypróbuj online!
Program 6
Wypróbuj online!
źródło
ϧ
Może być wykorzystany do uzyskania dodatkowego wyniku. Wypróbuj tutaj.œ
rozwiązania, ale nawet nie wiedziałem oß
:)€Ý逤
działałoby, gdyby¤
zamiast tego pojawiła się wartość, gdyby tylko ją otrzymała.Brachylog , wynik =
45Program 1 - Sortowanie losowe
Przetasujemy i sprawdzamy, czy rewers listy nie rośnie. Jeśli nie, próbujemy rekurencyjnie.
Program 2 - Sortowanie permutacyjne
Wyprowadza pierwszą permutację, która nie maleje.
Program 3 - Wbudowany
Zamówienie.
Program 4 - Wbudowany
Zamów przez etykietowanie. Ponieważ liczby całkowite na liście są już ustalone, działa to tak samo jak
o
.Program 5 - Min. Drukowanie
Oto wyjaśnienie tej potworności Natury:
źródło
RecursionError: maximum call stack size exceeded
JavaScript, wynik
12Podwoił wynik dzięki @ETHproductions, który przypomniał mi o ucieczkach z łańcucha
Snippet 1 (21 bajtów, znaki
\ ,-.=>289`Facehilnorstux
)Snippet 2 (9117 bajtów, znaki
(+)[!]
)Możesz przetestować obie wersje w konsoli przeglądarki. Pierwsza wersja to tylko funkcja, druga wersja to fragment, który wymaga dodania nawiasów i argumentów.
Przykłady
W jaki sposób?
Pierwszy fragment wywołuje metodę sortowania w tablicy, którą przekazujesz. Domyślnie metoda sortowania sortuje leksykograficzne, co jest złe dla liczb całkowitych (szczególnie wielocyfrowych liczb ujemnych). W związku z tym musimy przekazać mu wywołanie zwrotne w postaci funkcji strzałki, która pobiera dwa elementy i odejmuje ten drugi od poprzedniego. W zależności od wartości wynikowej dwa elementy są przestawiane: jeśli jest mniejsza niż 0,
a
pojawi się wcześniejb
, jeśli jest większa niż 0,a
pojawi się późniejb
, a jeśli jest 0, oba elementy kończą się obok siebie.Drugi fragment jest niczym więcej niż zakodowaną wersją pierwszego fragmentu i wykorzystuje fakt, że w JavaScript
object.function()
jest równyobject["function"]()
. Wykorzystuje również puste tablice,!
operatory i rzutowanie liczb do generowania wszelkiego rodzaju ciągów znaków, w których można znaleźć potrzebne znaki dla nazwy funkcji. Następnie nawiasy są używane ponownie, aby uzyskać znak o określonym indeksie w ciągu, a wszystkie te znaki są łączone, co powoduje następujący kod JavaScript:[]["fill"]
równa[].fill
, którego["constructor"]
jestFunction
przedmiotem. Następnie wywołujemy to za pomocą ciągu znaków (który ma być oceniany przy wywołaniu funkcji), co jest pierwszą funkcją, ale zauważmy, że argument został zastąpiony przezthis
. Aby ustawić wartośćthis
argumentu, musimy wywołać funkcję w tej funkcji, a mianowicie["call"]
. W tradycyjnym JavaScript napisałbyś to jako:źródło
Function`return a=>a.sort\x28\x28a,b\x29=>a-b\x29`
na przykład, ale bez używania znaków, których już'
i wykonując np.'('
Zamiast tego, co JSF generuje ten znak. (także, użyjf
it
jako vars zamiasta
ib
,b
dosłownie kosztuje około 3000 znaków)V , wynik
3, 4To było naprawdę zabawne wyzwanie! Na szczęście vim ma wbudowaną funkcję „sortowania”, w przeciwnym razie byłoby to w zasadzie niemożliwe. Niestety, ponieważ V / vim są oparte na łańcuchach, potrzebuje argumentu do sortowania według wartości liczbowych. Więc dzwonię
Sortuj według wartości liczbowej
n
,Sortuj według wartości szesnastkowej
x
iSortuj według wartości zmiennoprzecinkowych
f
Mała uwaga: kiedy piszę coś w stylu
<esc>
lub<C-r>
, jest to właściwie jeden bajt. Reprezentuje znaki niedrukowalne, a ponieważ V niestety w dużej mierze opiera się na znakach niedrukowalnych, ta metoda ułatwia wszystko. Łącza TIO mają-v
flagę, dzięki czemu interpreter V odczytuje je tak, jakby były znakami, które reprezentują.Program 1, 2 bajty
Wypróbuj online!
To wywołuje funkcję sortowania specyficzną dla V.
Program 2, 10 bajtów
To po prostu wywołuje „sortowanie” bezpośrednio. Jedyną interesującą rzeczą jest to, że robimy to z
ex
trybu, który jest dziwnym trybem, który emuluje edytor tekstu „ex”, prapradziadek V.vi
jest skrótem dovisual
polecenia służącego do opuszczania trybu ex. Wymaga to końca nowej linii.Wypróbuj online!
Program 3, 14 bajtów
Wypróbuj online!
Dobra, tutaj wyjaśnienia stają się trochę dziwne. Jeśli możemy zbudować tekst
sor x
, możemy go usunąć i wstawić do bieżącego polecenia za pomocą<C-r><register-name>
. Więc wprowadzimy to wielkimi literami.Program 4, 19 bajtów
Wypróbuj online!
I tutaj wyjaśnienia stają się bardzo dziwne. Podobnie jak ostatnim razem, zbudujemy polecenie w trybie normalnym, abyśmy mogli używać różnych klawiszy.
źródło
CJam, wynik 4
Program 1: Wbudowany
Program 2: Wbudowany moduł Eval'ed
36 to wartość ASCII dla
$
.Program 3: Sortowanie permutacyjne
Program 4: Min. Wartości
Wyjaśnienie tej nieziemskiej potworności:
źródło
(+
zamiast tego,1m<
jeśli chcesz.<
tego fragmentu, więc prawdopodobnie lepiej trzymać się tego1m<
Japt , wynik = 4
Program 1
Wypróbuj online!
Program 2
Wypróbuj online!
Program 3
Wypróbuj online!
Program 4
Wypróbuj online!
źródło
s)$.sort(...
, nie jestem pewien, czy to jest przydatne.O
i$
zostały użyte. Jestem otwarty na sugestie, jeśli możesz wymyślić inne sposoby sortowania! :)Oktawa, 2 punkty
Trudno konkurować z esolangami, ale oto:
Jestem pod wrażeniem, jeśli ktoś to pokona.
unique
można użyć do sortowania wartości, ale usunie duplikaty. Aby wstawić duplikaty, potrzebujesz nawiasów i są one często używane w sortowaniu bąbelkowym. Ty też będziesz potrzebować@
, który również jest używany.Numer 1:
Ta jest dość prosta: Utwórz anonimową funkcję przypisaną do zmiennej
ans
.Nazwijmy to w ten sposób:
ans([-5, 3, 0, -2, 100])
. Nie działa w trybie Tio, ale działa w trybie oktawa-online .Numer 2:
Jest to po prostu implementacja sortowania bąbelkowego, bez użycia znaków
@sort
. Nie możemy uczynić tej funkcji z tego powoduo
i nie możemy jej używać zinput
powodut
. Dlatego utknęliśmy zeval
.eval(['a=inpu',116,'("");']);
ocenia na:,a=input("");
że możemy użyć, aby wprowadzić nasz wektor wejściowy. Reszta to sortowanie bąbelkowe bez użyciafor
lubmod
. Pamiętaj, że należy to zapisać w skrypcie i wywołać z GUI / CLI. Nie możesz go skopiować i wkleić z powoduinput("")
(wykorzysta resztę kodu jako dane wejściowe, a zatem nie powiedzie się źle).źródło
Haskell (lambdabot), 3 funkcje
Używam środowiska lambdabot, aby uniknąć wielu
import
instrukcji. Nawetsort
potrzebujeimport Data.List
. lambdabot domyślnie importuje wiązkę modułów. Oprócz brakującegoimports
, to standardowy kod Haskell zgodnie z naszymi zasadami.Wypróbuj online!.
Funkcja 1
Funkcja biblioteki z
Data.List
. Nie ma tu nic do powiedzenia.Funkcja 2
Funkcjonować
v
implementuje sortowanie wstawek.Używam osłon wzorców, aby unikać
()
parametrów. Porównaćvv v|vvv:vvvv<-v=...
zvv(vvv:vvvv)=...
.Pierwszy wiersz, funkcja
vv
jest funkcją pomocniczą do utworzenia pustej listy. Dzięki temu nie muszę[]
pisać dosłownie pustych list. Bardziej czytelny:(==:)
jest wstawianie, które wstawia element do posortowanej listy, dzięki czemu lista wynikowa jest nadal posortowana. Bardziej czytelny:(=:)
jest redukcja. Bardziej czytelny:I wreszcie,
v
co zmniejsza listę danych wejściowych za pomocą[]
:Funkcja 3
sort
z funkcją 1 sprawia, że większość funkcji list-spacerowych (fold
,scan
,until
) niedostępne. Potrzeby rekurencyjne,=
które są używane w Funkcji 2. Jedyną opcją, która pozostała, jest użycie kombinacji punktów stałychfix
. Zacząłem odktóry jest sortowaniem według wyboru. Przekształcenie go w tryb bez punktów (nie mogę używać lambda
\f x ->...
, ponieważ-
gurady wzorcowe w Funkcji 2) dają:Tworzenie list singletonów z wartości za pomocą
return
jest zabronione (to samo dlapure
), więc muszę zbudować własną funkcję:\x -> map (\y -> x+0*y) [1]
lub bez punktówflip map[1].(.(0*)).(+)
. Zamianareturn
plonówźródło
MATL , 3 programy
Program 1
To po prostu korzysta z wbudowanej funkcji, z niejawnym wprowadzaniem i wyświetlaniem.
Wypróbuj w MATL online .
Program 2
Powoduje to generowanie losowych permutacji danych wejściowych, dopóki wszystkie kolejne różnice wyniku nie będą ujemne (to jest bogosort , jak zauważył @cz ). Czas działania jest niedeterministyczny, a jego średnia wartość rośnie bardzo szybko wraz z rozmiarem wejściowym (mianowicie 𝒪 ( n! ) Dla rozmiaru n tablicy rozmiar z różnymi wpisami).
Wypróbuj w MATL Online .
Program 3
Jest to pętla, która oblicza minimum tablicy, usuwa wszystkie elementy równe tej wartości i postępuje z resztą. Odbywa się to tyle razy, ile rozmiar wejściowy. Jeśli nie wszystkie wpisy na wejściu są różne, niektóre iteracje będą bezużyteczne (ale nieszkodliwe), ponieważ tablica zostanie już opróżniona.
Wypróbuj w MATL online .
źródło
Pip , 4 programy
Program 1 - wbudowany
Skrawek; zakłada listę w
x
.(
SN
dla Sort Numeric)Program 2 - permutacje filtrów
Skrawek; zakłada listę w
y
. Bardzo wolny dla wejść dłuższych niż około 7 pozycji.Program 3 - ewaluacyjny
Skrawek; zakłada listę w
z
.Program 4 - MergeSort
Funkcja anonimowa; wywołanie z listą jako argumentem (jak
({...} [1 2])
lubf:{...} (f [1 2])
.Nie golfowany:
źródło
PowerShell , 2
Wypróbuj online!
Jest to fragment, który działa w (np.) Odpowiedniku REPL programu PowerShell. Łącze TIO pokazuje użycie.
sort
Jest aliasem dlaSort-Object
cmdlet.Wypróbuj online!
Polecenia programu PowerShell nie rozróżniają wielkości liter, więc możemy używać
sort
jednego iSORT
drugiego. Pobiera tablicę wejściową, sortuje ją w miejscu, a następnie wysyła.źródło
Ruby, 2 programy
Po pierwsze - proste:
Po drugie - trudna część:
źródło
jot
Program pierwszy: 3 bajty
jak w
/:~ 3,1,2,1
wyjściach1 1 2 3
Wypróbuj online!
UWAGA w J, liczby ujemne poprzedza _ nie - możesz więc wypróbować 4, _10,56, _333 itd.
Program drugi: 5 bajtów
źródło
Try it online
sprawa linki do strony internetowej, na tio połączyć stronę w odpowiedzi można to zrobić:[displayed text](link)
.:
i~
występują w obu z nich.PHP 7, 2 programy
Oba programy można bardziej grać w golfa.
Program 1, 254 bajty, znaki
! "$&+.01:;=>?[]adeginoprtv
Sortowanie bąbelkowe. Wykorzystuje
goto
tworzenie pętli zgodnie z wymaganiami wbudowanych pętli()
.Program 2, 155 bajtów, znaki
#%'(),-67ACEFINORTUYZ^_{|}~
IF(...){}
unika używania;
. Główny kod jest zakodowany za pomocą XOR, ponieważ$
był już używany w poprzednim programie. Kod:źródło