Nie mamy wystarczającej liczby (pół-) łatwych wyzwań dla początkujących. Coraz więcej łatwych jest już zrobionych. Próbowałem więc wymyślić coś, co może być osiągnięte przez początkujących, ale to nie jest duplikat.
Wejście:
Pojedynczy ciąg oddzielony nową linią systemu operacyjnego (tj. \r\n
)
Lub tablica z wieloma ciągami.
Wyjście - Schody :
Usuń wszystkie symbole niealfabetyczne i nienumeryczne. Pozostało więc tylko [A-Za-z0-9]
. A potem „zbuduj schody”; w zasadzie zamawiając je na długości, najmniejsze u góry i najszersze u dołu.
Zasady konkursu:
- Gdy dwa ciągi są równej długości, łączymy je ze sobą jako jeden duży ciąg (kolejność nie ma znaczenia, więc może być od pierwszego do ostatniego lub od ostatniego do pierwszego, w zależności od tego, który wolisz).
- Powyższa reguła może się nakładać, gdy scalone ciągi znowu będą miały taką samą długość (patrz przypadek testowy 2).
Główne zasady:
- Dane wejściowe to STDIN i zawierają tylko znaki ASCII. Wyjście to STDOUT.
- Przypadek wyjścia musi być taki sam jak danych wejściowych.
Każde przesłanie musi być pełnym programem do kompilacji i uruchamiania, a więc nie tylko metodą / funkcją.EDYCJA: Jestem raczej nowy, więc być może lepiej jest teraz używać domyślnego , chociaż sam wolę pełny program. Przepraszamy za wszystkich, którzy opublikowali już pełny program. Możesz edytować, a następnym razem postaram się nie zmieniać postu w połowie wyzwania.- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach. Prawdopodobnie akceptuję najkrótszą odpowiedź za rok.
Nie pozwól, aby odpowiedzi na golfa zniechęcały Cię do publikowania golfowych języków innych niż codegolf, takich jak C # i podobne! Spróbuj znaleźć najkrótszą odpowiedź dla dowolnego języka programowania. - Używaj nowszych języków niż to pytanie.
Przypadki testowe:
Wejście 1:
This is a sample text,
that you will have to use to build stairs.
The wood may be of excellent quality,
or pretty crappy almost falling apart and filled with termites.
Bla bla bla - some more text
Ok, that will do
Wyjście 1:
Okthatwilldo
Thisisasampletext
Blablablasomemoretext
Thewoodmaybeofexcellentquality
thatyouwillhavetousetobuildstairs
orprettycrappyalmostfallingapartandfilledwithtermites
Wejście 2:
A
small
one
that
contains
equal
length
strings
for
the
special
rule
Wyjście 2:
A Or alternatively: A
length length
oneforthe theforone
smallequal equalsmall
stringsspecial specialstrings
thatrulecontains containsrulethat
Kroki wyjaśnione w 2:
Pierwsze zamówienie na długość:
A
one
for
the
that
rule
small
equal
length
strings
special
contains
Pierwsze połączenie:
A
oneforthe
thatrule
smallequal
length
stringsspecial
contains
Drugie zamówienie na długość:
A
length
thatrule
contains
oneforthe
smallequal
stringsspecial
Druga fuzja:
A
length
thatrulecontains
oneforthe
smallequal
stringsspecial
Trzecie zamówienie na długość:
A
length
oneforthe
smallequal
stringsspecial
thatrulecontains
Wejście 3:
Test,
test.
This
is
a
test.
Wyjście 3:
a Or alternatively: a
is is
TesttestThistest testThistestTest
Wejście 4:
a
bc
d!
123
Wyjście 4:
123 Or alternatively: 123
adbc dabc
contains
nie powinien znajdować się w wyjściu 2. Zostaje scalony zthatrule
Odpowiedzi:
Łuska , 11 bajtów
Wypróbuj online!
Łuska jest młodsza od tego wyzwania (co oficjalnie nie ma znaczenia, ale nadal).
Wyjaśnienie
źródło
mf□
, powinieneś być zazdrosny. Kiedy „grupuj według długości”ġL
, powinieneś się dziwić.Python 3, 264 bajtów
Nie jestem dobry w golfie kodowym, więc jestem pewien, że nie będzie to najlepsza odpowiedź na Python 3. Wykorzystuje rekurencję i uporządkowany dyktand ze wszystkimi słowami dla każdej długości.
Pobiera dane wejściowe ze standardowego wejścia jako listę, na przykład przetestuj je za pomocą tej listy:
Wyjdzie:
źródło
filter(str.isalnum, l)
zamiast"".join
częściRetina,
6963 bajtówWypróbuj online!
źródło
[^\w¶]|_
. Chociaż nadal nie jestem pewien, czy to jest optymalne.Oracle SQL 11.2, 346 bajtów
Linie w ciągu wejściowym są oddzielone przez „¤”. W ten sposób nie jest konieczne tworzenie tabeli, która będzie używana jako dane wejściowe.
Zapytanie:
Nie grał w golfa
źródło
[\W_]
0-9
z\d
. Być może reguły wyrażeń regularnych są różne w sql niż w python / php / javascript? (js jest nadal szczególnym przypadkiem ze względu na lookbehinds)Haskell, 129 bajtów
Akceptuje i drukuje tablicę ciągów. Jeśli wynik można zwrócić z funkcji (w przeciwieństwie do wypisywania na standardowe wyjście), możesz pominąć
print.
i zapisać 6 bajtów.Jak to działa (uwaga, używam
x
dla parametru wejściowego, który oczywiście nie pojawia się w powyższej wersji pointfree):źródło
Python 3,
184180 bajtówFunkcja, która pobiera dane wejściowe, jako argument, jako listę ciągów i wypisuje wynik do STDOUT. Wykonanie powoduje błąd (z powodu użycia operatora + przed instrukcją print), ale nie przed wydrukowaniem wyniku.
Jak to działa
Wypróbuj na Ideone
źródło
J , 48 bajtów
Wypróbuj online!
bez golfa
wyjaśnienie
(#~e.&AlphaNum_j_)&.>
usuń nie alfanum(#&> ,&.>//. ])
łączyć przedmioty o tej samej długości^:_
kombinuj, aż przestanie się zmieniać(/: #&>)
sortuj według długościźródło
JavaScript
198188186179 bajtówTo mój drugi najdłuższy program w javascript
Prawdopodobnie można dalej grać w golfa
źródło
t
zmiennej?.split()
możesz użyć[y]()
Perl 5 , 112 bajtów
Wypróbuj online!
źródło
Galareta , 17 bajtów
Wypróbuj online!
Nie pewny dlaczego
Ẏf¥€ØWṖ¤L€ĠịµÐLY
nie działa ...Wyjaśnienie:
źródło
Pyth, 22 bajty
Wypróbuj tutaj.
Wyjaśnienie:
źródło
Pyth, 39 bajtów
Wróć do gry w golfa!
Jest program:
Sprawdź to tutaj!
Objaśnienia
źródło
R
iL
zamiastm
Java 8, 268 bajtów
Pusta lambda akceptująca zmienną
List<String>
(tj. Implementujeadd
iremove
; npArrayList
.). Dane wyjściowe są drukowane do standardowego wyjścia, rozdzielane znakiem nowej linii, z końcowym znakiem nowej linii. Przesyłaj doConsumer<List<String>>
.Wypróbuj online
Skończyło się to znacznie dłużej, niż się spodziewałem. Jak zauważył Kevin, jest to bardziej skomplikowane niż się wydaje na pierwszy rzut oka.
Niegolfowana lambda
Najpierw redukuję wprowadzane dane do liter i cyfr. Następnie przetwarzam dane wejściowe w grupach według długości. Dołączam elementy do pierwszego na liście, aż do osiągnięcia następnej długości, usuwając je w miarę upływu czasu. Jeśli użyty zostanie tylko pierwszy element, będzie to jedyny ciąg o tej długości, więc zostanie wydrukowany. W przeciwnym razie połączony ciąg zostanie dodany do listy w celu kolejnej iteracji. Przed użyciem sortuję listę według długości każdej iteracji.
Zacząłem od cudownego rozwiązania, które wykorzystywało kolejkę priorytetową do śledzenia łańcuchów pośrednich. Niestety,
java.util.PriorityQueue<String>
jest dość długi (i używanie surowego typu było dłuższe), więc musiał iść.źródło
Japt v2.0a1
-h
, 11 bajtówWejście i wyjście jako tablice ciągów.
Spróbuj
źródło
[a-zA-Z0-9]
zamiast[a-zA-Z]
).JavaScript, 119 bajtów
Czuję, że powinno to być znacznie krótsze ...
Zawiera 2 wiodące znaki nowej linii w wydruku.
Wypróbuj online
źródło
g
do 118Perl 6 , 85 bajtów
Wypróbuj online!
Wejścia i wyjścia jako listy ciągów.
źródło
Pyth, 21 bajtów
Dane wejściowe to lista ciągów znaków. Wypróbuj online tutaj , lub sprawdzić wszystkie przypadki testowe tutaj .
źródło
05AB1E , 16 bajtów
Wprowadź jako listę ciągów.
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Mogło być 14 bajtów
εžKÃ}Δé.γg}J}»
jeśliΔ
działałby również z listą ciągów ..Wyjaśnienie:
źródło
PowerShell, Windows 10, 63 bajty
Więc wkład ...
i kod ...
Obejmuje wejście / wyjście 1, pracując na 2 i 3 ...
źródło