Dobry wieczór golfistów!
Twoim wyzwaniem jest całkowite posortowanie szeregu liczb.
Wejście
Dokładnie 100 liczb całkowitych zostanie podanych do twojego programu. Twój program może zaakceptować dane wejściowe jako plik lub przez stdin. Każda liczba całkowita będzie oddzielona znakiem nowej linii.
Te 100 liczb całkowitych będzie mieścić się w zakresie od minimalnej do maksymalnej wartości liczby całkowitej ze znakiem w wybranym języku.
Nie będzie zduplikowanych wartości. Wartości mogą być uporządkowane, nieuporządkowane lub częściowo uporządkowane - Twój program powinien być w stanie obsłużyć każdą sprawę.
Wynik
Wyjściem musi być każda ze 100 liczb całkowitych, całkowicie nieposortowanych, każda oddzielona znakiem nowej linii. Dane wyjściowe mogą być przesyłane przez stdout lub do pliku.
Całkowicie nieposortowane oznacza, że żadna wartość nie sąsiaduje z żadną wartością, do której byłaby przyległa, gdyby lista została całkowicie posortowana w uporządkowanej kolejności.
Wynik
1 punkt na postać, a najniższy wynik wygrywa. Istnieje premia w wysokości -100 za każde rozwiązanie, które nie korzysta z żadnych wbudowanych funkcji ani funkcji sortowania bibliotek. Istnieje premia w wysokości -20 za dowolne rozwiązania, które nie wykorzystują wbudowanych funkcji liczb losowych.
Próbowałem zdefiniować to pytanie tak dokładnie, jak to możliwe. Jeśli masz jakieś pytania, zapytaj. Jeśli masz jakieś uwagi na temat tego, jak mógłbym lepiej zrobić następnym razem, daj mi znać.
Dziobowy!
źródło
Odpowiedzi:
GolfScript (wynik 27-120 = -93)
Uwaga:
$
dotyczy elementu na stosie. Istnieje sortowanie, ale odbywa się to za pomocą ręcznie kodowanego sortowania bąbelkowego.Dzięki Howard za -90 => -92; i Ilmari, który zainspirował -92 => -93.
źródło
$
- dlatego wspomniałem, że$
w programie nie ma sortowania (zależy od kontekstu). Większość programu (28 z 42 znaków) określa funkcję^
; pierwsza wersja, wykorzystująca wbudowane sortowanie, miała tylko 14 znaków.2/{~p}%n*
.2/zip~+n*
a.);\+2%n*
także wykonać lewę dla tej samej liczby znaków, co wersja @ Howarda. Niestety, nie udało mi się znaleźć czegoś krótszego.Python -26
(94–120): Nowe, surowe podejście. Przechowuj najniższe elementy na nowej liście, aby posortować elementy, a następnie iteruj:
Python -13
(107-120): Pierwsze podejście: Usuwa cztery najniższe elementy jednocześnie, a następnie drukuje te cztery w innej kolejności:
źródło
t=l=[]
iexec't+=[input()];'*100
uratowałbym ci kilka znakówexec
instrukcji dla więcej niż jednej pętli.t=l=[]
zt i l wskazują na ten sam obiekt i to nie działa. Pomijanie nawiasówexec
jest jednak miłe.t=t+[input()];
, za każdym razem tworzy to nowy obiekt. I można nawet zrobić pętlę drukowania w exec:';i+=1;print l[i*3%100]'*100
.%3
i unikanie powtarzania100
.C: 11 (131–120)
Program odczytuje ze standardowego wejścia i wykonuje prosty rodzaj wstawiania, po czym drukuje n-ty razem z th n + 50-tą liczbą, jak wiele innych rozwiązań.
źródło
Mathematica
-56 44 4(95-120) = -25Edytuj :
Ta wersja nie opiera się ani na wbudowanych funkcjach sortowania list, ani na funkcjach losowych.
źródło
Sort
nie jest wbudowana funkcja sortowania?J, -63 (57-120) znaków
Ponieważ wszyscy idą własną drogą sortowania ...
Nie używa funkcji liczb losowych ani żadnego wbudowanego sortowania.
Używa prostego sortowania rekurencyjnego do sortowania danych wejściowych.
źródło
Ruby 1.9, -59
(61-120)
Rekurencja! W rzeczywistości ten, w przeciwieństwie do moich poprzednich prób Ruby, nie sortuje listy bez względu na ich pierwotną kolejność.
Poprzednie próby
Śliczny jednowarstwowy, teraz wykorzystujący wbudowane sortowanie do poprawnego działania:
Pierwszy - niekoniecznie posortował ostatnie 4 wartości:
źródło
Python 2: 90 znaków
leniwa próba, ale tylko na początek
źródło
Python 48 = (148-100)
Nie przetestowałem tego, ponieważ nie jest gwarantowane (lub prawdopodobne), że będzie działać w rozsądnym czasie, ale powinno działać teoretycznie, biorąc pod uwagę nieskończony czas.
źródło
x=map(input,['']*100)
[]
liter, tylko jednego ciągu znaków.Python 27 (147 - 100-20)
Uwaga: wcześniejsze spacje
if L[i]>...
powinny być tabulatorami, ale najwyraźniej powinny pojawiać się jako spacje w bloku kodu.źródło
R=range
możesz zapisać 5 znaków.a=map(input,['']*100)
Perl 5: 95 - 120 = -25 znaków
Liczenie następującego wiersza poleceń:
źródło
Rubin: -50 (70 znaków - 120)
Zrobiłem to samo, co wiele innych odpowiedzi: iteracyjnie usuwam max i min z listy danych wejściowych i dołączam je do wyniku. Jednak zdałem sobie sprawę, że jeśli 2 liczby po obu stronach mediany same są kolejne, wynik będzie niepoprawny (ponieważ te 2 kolejne liczby pojawią się razem na końcu wyniku). Aby to naprawić, obracam listę „nieposortowane” o 1 element:
Lub, aby pracować z dowolnie wieloma wejściami (używając tylko 4 dodatkowych znaków):
Uwaga: Niektóre Ruby odpowiedzi o mniejszej liczbie znaków zostały już opublikowane, ale te rozwiązania nie rozwiązały problemu mediany (i / lub przyjęły posortowaną listę danych wejściowych).
źródło
J 37-100 = -63
Nie używa sortowania (chociaż używa rangi). Używa liczb losowych.
Wyjaśnienie:
źródło
Brachylog , 22 bajty - 120 = -98
Wypróbuj online!
Łącze TIO ma tylko osiem liczb całkowitych zamiast stu, ponieważ jest tak strasznie powolne, że nie jest w stanie obsłużyć więcej w 60 sekund. Powodem tego jest, między innymi, że zamiast wdrożyć prosty, ale normalny algorytm sortowania dla obowiązkowej premii, dla zwięzłości zastosowałem to, co stanowi deterministyczny bogosort: cofa się
p≤₁
przez każdą permutację danych wejściowych, aż znajdzie jedną który nie zmniejsza się. Chociaż większym powodem byłby prawdopodobnie fakt, że wykorzystuje on podobny stopień brutalnej siły do znalezienia wyniku i że za każdym razem przelicza posortowaną wersję ... Próbowałem go przetestować na rzeczywistym wejściu o wielkości 100, ale jestem nie jestem pewien, ile dni to zajmie.Ogólnie lepsza wersja:
Brachylog , 14 bajtów - 20 = -6
Wypróbuj online!
Ignoruje to przestarzałe wymagania wejścia / wyjścia dla zwięzłości i zaniedbuje wzięcie bonusu -100, aby można go było przetestować bez superkomputera (chociaż w chwili pisania tego tekstu działałem tylko na 20 elementach przez kilka minut i to wciąż nic mi nie dał).
źródło
Dalej (gforth) , 79-120 = -21 bajtów
Wypróbuj online!
Zignoruj przestarzałe wymagania dotyczące wprowadzania i pobiera dane jako adres w pamięci, w której przechowywane są liczby.
Wyjaśnienie
Pętle przechodzą przez wszystkie liczby od 0 do 99. Dla każdej liczby (n):
W przeciwnym razie (n jest parzyste):
Wyjście nowego wiersza
Objaśnienie kodu
źródło