Podpisz to słowo 2!
Nie tak dawno temu opublikowałem wyzwanie o nazwie Podpisz to słowo! . W wyzwaniu musisz znaleźć podpis słowa, czyli uporządkowane litery (np. Podpis this
jest hist
). Teraz wyzwanie to poszło całkiem nieźle, ale była jedna kluczowa kwestia: było O WIELE zbyt łatwe (zobacz odpowiedź na temat GolfScript ). Postawiłem więc podobne wyzwanie, ale z większą ilością reguł, z których większość została zasugerowana przez użytkowników PPCG w komentarzach do poprzedniej układanki. Więc zaczynamy!
Zasady
- Twój program musi przyjąć dane wejściowe, a następnie wypisać podpis do STDOUT lub odpowiednika w dowolnym języku, którego używasz.
- Nie możesz używać wbudowanych funkcji sortowania, więc rzeczy takie jak
$
w GolfScript nie są dozwolone. - Obsługiwana jest obsługa wielu znaków - program musi grupować litery zarówno wielkich, jak i małych liter. Tak więc podpis nie
Hello
jest takieHllo
,Hello
jak w odpowiedzi na pytanie GolfScript w pierwszej wersji. - Musi istnieć bezpłatny interpreter / kompilator dla twojego programu, do którego powinieneś utworzyć link.
Punktacja
Twój wynik to liczba bajtów. Wygrywa najniższa liczba bajtów.
Tabela liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
ThHihs
czy możemy generować dane,hHhist
czy musimy generować danehhHist
lubHhhist
?Odpowiedzi:
Pyth, 10 bajtów
Wypróbuj online: demonstracja
Wyjaśnienie:
źródło
Haskell, 51
zip
Tworzy listę par znaków[('a','A'), ...('z','Z')]
. Ze względu na obcięcie drugi punkt końcowy nie musi być określony. Dla każdej pary na liście bierzemy litery w ciągu wejściowym,s
które są jednym z dwóch znaków w parze.źródło
Python 3,
7270 bajtówZakłada, że dane wejściowe obejmują tylko
[a-zA-Z]
.(-2 bajty dzięki @xnor)
źródło
"".join(c*b ...)
za"".join(c ... if b)
ten sam sposóbsum(n ... if b)
może byćsum(n*b ...)
.c=1 for d in(input()+'~')*26:print(d[ord(d)&32^c:],end='');c+=d>'z'
(67)GOTO ++, 531 bajtów
Strona projektu GOTO ++
Oto nieco bardziej czytelna i skomentowana wersja kodu (uwaga, która
GOTO
rozpoczyna komentarz w GOTO ++):źródło
function(arg)
ifunction() arg
oba są ważne. Poza tym nawiasy priorytetowe} {
nie są nudne( )
Pyth,
1514 bajtówDzięki za isaacg za usunięcie 1 bajtu.
Nie wiem jeszcze dużo o Pyth, więc może nie być dobrze golfa.
Wypróbuj tutaj.
źródło
s
jest taki sam jakjk
na liście strun.JavaScript (ES6), 71
74Ograniczone do A-Za-z (patrz komentarz @Matthieu M)
Edytuj Zbyt używane do komponowania pojedynczego wyrażenia przecinkami, aby uniknąć „powrotu”. Tutaj wymagane jest wyjście, więc mogę użyć prostego
for
i zapomnieć o przecinkach.Używając rozumienia tablicowego, liczba bajtów wynosi 73, ale to już nie jest poprawny EcmaScript 6Zwykła uwaga: przetestuj fragment kodu w dowolnej przeglądarce zgodnej z EcmaScript 6 (zwłaszcza Chrome nie MSIE. Testowałem na Firefoxie, Safari 9 mogłaby działać)
źródło
JavaScript,
112194 bajtówJest to dalekie od „golfa”, ale jestem teraz trochę zajęty, właśnie edytowałem, aby usunąć sort.
źródło
console.log(input.split('').sort((a,b)=>a.toLowerCase().localeCompare(b.toLowerCase())).join(''))
Python 3, 64
Niewielkie ulepszenie w odpowiedzi Sp3000 , która wykorzystuje ideę iteracji iteracji indeksów znaków, a dla każdej z nich iteracji przez dane wejściowe w celu dopasowania znaków pasujących do wielkości liter.
Wykorzystuje pojedynczą pętlę, zapętlając wejście 26 razy. Separator
~
służy do określenia, kiedy przejść do indeksu następnego znakuc
. Aby sprawdzić, czy znakd
dopasowuje wartośćc
do wielkości liter, ostatnie pięć bitów wartości bitud
jest zapisywane za pomocą xc
, przy czym 0 oznacza dopasowanie.Następnie znak
d
jest drukowany dokładnie wtedy, gdy jest wynik0
, w przeciwnym razie pusty ciąg znaków.źródło
Python 2.7,
114106 bajtówRejestruje obecność znaku w tablicy o długości 123 (obejmującej zarówno zakresy AZ, jak i az), a następnie iteruje go, aby uzyskać niezerowe wpisy.
Nieefektywne, ale bardziej wydajne niż brutalne zmuszanie go (ale dłużej :().
Testowanie
źródło
HelloWorldhi
, dostaję['d', 'e', 'H', 'h', 'i', 'lll', 'oo', 'r', 'W']
if l[j]
żadnego z nich.join
). -8 bajtów. Dzięki :)PHP,
275270 bajtówObjaśnienie:
Kod generuje tablicę z każdą literą w alfabecie, która ma swoją wartość ASCII jako klucz tablicy. Następnie kod generuje nową tablicę, która zawiera wartości ASCII wejścia. Następnie drukowana jest najniższa wartość i usuwana.
Użycie:
Wywołaj skrypt z argumentem:
php -d error_reporting=0 script.php Hello
Ungolfed Wersja:
Wszelkie porady są mile widziane.
źródło
Haskell,
8353 bajtyZastosowanie:
f "HelloWorldhi"
->"deHhillloorW"
.Jak to działa: niech
y
będzie ciągiem wejściowymEdycja: zapisano 30 bajtów, wyobraź sobie! Dzięki @Mauris.
źródło
import Data.Char;f y=[c|x<-[' '..],c<-y,toLower c==x]
(53 bajtów)? (To zajmie trochę czasu, aby zakończyć, ponieważlength [' '..] == 1114080
- ale to skończone.)Python 3, 61 bajtów
Nowa odpowiedź na inną technikę!
Stwierdzając, że
ord('a')&31==ord('A')&31
i żeord('z')&31==ord('Z')&31
, możemy po prostu utworzyć tablicę pustych łańcuchów i dla każdego znaku dodać go do indeksu tablicy jego wartości ASCII&31
. Po wydrukowaniu zostanie posortowane.Ograniczone do danych wejściowych
a-zA-Z
.źródło
Python 3,
9792 bajtówNajlepszym sposobem sortowania jest oczywiście wygenerowanie wszystkich permutacji, a następnie wybranie minimum, które akurat jest sortowane :)
Ciągi znaków są porównywane małymi literami przed porównaniem, aby zachować zgodność z regułami „rozróżniania wielkości liter”.
Ostrzeżenie: może być bardzo wolne z dużymi łańcuchami.
Tłumacz znajduje się tutaj .
źródło
Python 3, 118 bajtów
Wiem, że można grać w golfa znacznie krócej
źródło
if q not in i:
zif~-(q in i):
..remove()
funkcję.PowerShell, 164 bajtów
Jestem pewien, że jest na to lepszy sposób, ale nie mogłem wymyślić nic innego. Po prostu bierze dane wejściowe jako tablicę znaków, sortuje wstawianie i wypluwa dane wyjściowe. Przegrywa okropnie, nawet z innymi językami nie golfowymi.
Kod:
Stosowanie:
Rozszerzony i wyjaśniony:
źródło
Julia, 61 bajtów
Julia wyświetli go jako ciąg wyjściowy, jeśli wywołasz go w REPL. Jeśli musi wydrukować do STDOUT, potrzebuje 78 bajtów:
Tłumacz dla Julii można znaleźć tutaj . Jeszcze jeden, który ja już umieścić jakiś kod na, jest tutaj . Zauważ, że w przypadku drugiego z nich musisz uczynić terminal (na dole) widocznym, przeciągając granicę w górę. Kliknięcie „wykonaj” spowoduje, że uruchomi się ono w terminalu w normalnym wierszu poleceń (a zatem nie wyświetli wyniku, jeśli zostanie wywołany bez println). Możesz też po prostu wpisać
julia
sam terminal, a następnie obsłużyć wszystko w REPL, które się pojawi.A dla odrobiny dodatkowej zabawy, oto inne implementacje
Sortowanie gnomów (83 bajty):
Mój własny algorytm sortowania (84 bajtów):
źródło
Scala, 82 bajty
z linii poleceń:
prawdopodobnie można go nieco pograć w golfa ... wprowadzając sortowanie za pomocą fold.
źródło
kod maszynowy x86,
5142 bajtówSortowanie bąbelkowe, z pewnymi rejestrami ponownie wykorzystującymi sztuczki do golenia bajtów tu i tam; plik .COM przebiega w DOSBox, odbiera dane wejściowe z linii komend i drukuje wyjście na standardowe wyjście.
Skomentowany montaż:
źródło
Java (JDK 10) , 125 bajtów
Wypróbuj online!
Używając naiwnego rodzaju.
źródło
Perl, 88 bajtów
Po prostu prosty sortowanie bąbelkowe. Zadzwoń z opcją -n, aby przekazać tekst.
na przykład:
Wynik:
źródło
PHP, 106 bajtów
Kod:
W kodzie nie ma nic specjalnego;
count_chars()
tworzy tablicę indeksowaną kodami ASCII, która zawiera liczbę wystąpień dla każdego znaku ASCII. Reszta jest nudną iteracją tej tablicy.Przykład wykonania:
Dodatkowy bajt mogą być zapisywane za pomocą PHP 7 zamienić
$c[$i]
z($c=count_chars($argv[1]))[$i]
i usunąć przypisanie$c
od początku programu.źródło
Haskell, 74 bajty
Całkowicie różni się od mojej innej odpowiedzi . Tym razem jest to prosty rodzaj wstawiania.
źródło
Pip,
1814 bajtówRepozytorium GitHub dla Pip
Wydaje się, że nie ma konkurencji z Pyth, ale jest to dość szanowane.
Działa tylko na ciągach zawierających
a-zA-Z
. Dla każdej litery alfabetu używa operacji filtrowania, aby pobrać litery z ciągu wejściowego, które są równe tej literze bez rozróżniania wielkości liter:Dwie notatki:
AZO
byłaby skanowana jakoA ZO
zamiastAZ O
;x
na końcu kodu (drukując pusty ciąg po zakończeniu pętli).Przykładowy przebieg (przy użyciu
x
wariantu):źródło
Perl 5
-a
, 31 bajtówWypróbuj online!
źródło