Powiedz, że mam taki tekst (każde słowo w jednym wierszu, bez spacji)
Programming
Puzzles
&
Code
Golf
To nie ma sensu! Całkowicie przeciwstawia się prawom fizyki.
Twoim zadaniem jest zaradzenie tej niemożliwej sytuacji i zwinięcie tekstu w następujący sposób:
P
Prog
&uzz
Coderam
Golflesming
Aby pod postacią nie było pustej przestrzeni, ale postacie zachowują swój pionowy porządek.
Celem jest spełnienie wymagań, ale użycie jak najmniej bajtów kodu źródłowego.
Odpowiedzi:
Pyth, 10 bajtów
Wypróbuj online w Pyth Compiler / Executor .
Pomysł
Możemy osiągnąć pożądaną moc wyjściową, stosując cztery proste transformacje:
Odwróć kolejność linii:
Transponuj wiersze i kolumny:
Ten szczyt uzasadnia zwijanie oryginalnych kolumn.
Transponuj wiersze i kolumny:
Odwróć kolejność linii:
Kod
źródło
Haskell, 62 bajty
Jestem bardzo dojrzały
źródło
Python 2, 104 bajty
Iteracyjny algorytm jednoprzebiegowy. Przechodzimy kolejno przez każdą linię, aktualizując listę
l
linii do wydruku. Nowe słowo skutecznie przesuwa się z dołu, przesuwając wszystkie litery nad nim o jedną spację. Na przykład w przypadku testowympo tym, jak skończymy
Code
, mamya następnie dodając
Golf
wyniki wktóre możemy postrzegać jako połączenie dwóch elementów
gdzie przesunięto pierwszy kawałek
golf
. To przesunięcie wykonujemy za pomocązip
listy wyjściowej z elementem na końcu (lewa strona) i pierwszeństwem listy wyjściowej pustą linią (prawa strona), odcinając każdą część na długości nowego elementu.Zamiast tego iteracja wstecz może wydawać się bardziej naturalna, pozwalając nowym literom spadać z góry, ale moja próba okazała się dłuższa.
Dla porównania, oto podejście
zip
/filter
zmap(None,*x)
zastosowanym dlaiziplongest
(109 bajtów):źródło
CJam, 11 bajtów
Wypróbuj online w interpretatorze CJam .
Jak to działa
Pomysł jest taki sam jak w mojej odpowiedzi Pyth .
źródło
JavaScript (ES6), 146
(2 nowe wiersze w ciągach szablonów są znaczące i są liczone)
Pomysł @Dennis zaimplementowany w JavaScript. Długa funkcja S wykonuje transpozycję linia po linii i char przez char, pozostawiając wynik w
t
tablicy.Mniej golfa we fragmencie (spróbuj w Firefox)
źródło
S(t.reverse()),t.reverse().join
jeS(R=t.reverse()),R.join
.R, 223 bajty
To absurdalnie długi, naiwny sposób.
Nie golfowany:
Możesz spróbować online .
źródło
Matlab / Octave, 99 bajtów
Przykład :
Zdefiniuj ciąg wejściowy w zmiennej, powiedzmy
s
.10
jest znakiem nowego wiersza:Funkcja wywołania
f
z wejściems
:Lub wypróbuj online (dzięki @beaker za pomoc w tłumaczeniu online Octave)
źródło
JavaScript ES6, 119 bajtów
Tutaj jest bez golfa i w ES5 z komentarzami wyjaśniającymi, jak to działa:
źródło
APL (Dyalog Extended) ,
1311 bajtów SBCS-2 z moimi rozszerzeniami do Dyalog APL.
Anonimowa funkcja milcząca, przyjmująca i zwracająca macierz znaków.
Wypróbuj online!
~
wyjąć∘
z' '
przestrzeni⍤
z1
rzędów (Lit. 1D tablice podrzędne)⍢
podczas⍉
transpozycji⍢
gdy⊖
odwróconyźródło
R,
190178175 bajtówPrawdopodobnie jest jeszcze trochę miejsca na grę w golfa. Prawdopodobnie kilka niepotrzebnych operacji
Nie golfił i wyjaśnił
Testowe uruchomienie. Warto zauważyć, że ze względu na sposób działania skanowania całe zdanie można wprowadzać spacjami i nadal podawać wynik zgodnie ze specyfikacją.
źródło
STATA, 323 bajty
Pobiera dane wejściowe w pliku o nazwie ab Działa teraz tylko dla maksymalnie 24 znaków. Zaktualizuje później, aby działało z większą liczbą. Ponadto nie działa w kompilatorze online. Wymaga niewolnego kompilatora.
Edycja: przeniósł cicho (aby ukryć wyjście) do samej pętli z każdej instrukcji w pętli, oszczędzając 8 bajtów.
źródło
R 171 bajtów
Z nowymi liniami i wcięciami:
Stosowanie:
źródło
Galaretka , 6 bajtów (niekonkurencyjna)
Wypróbuj online!
Jak to działa
Pomysł jest taki sam jak w mojej odpowiedzi Pyth .
źródło
Turtlèd , 72 bajty, niekonkurujące
Dość pewien, że mógłbym zmienić podejście do zapisywania bajtów, ale później.
: p Esolang nie golfowy bije zwykłe języki: p
Dziwną rzeczą w Turtlèd jest to, że pierwotnie powstał po dyskusji na temat ascii art langs, ale tak naprawdę wydaje się być najlepszy w tego rodzaju wyzwaniach
Turtlèd nie może pobierać nowego wiersza, ale dla wielu danych wejściowych, a to wymaga tylko jednego wejścia: zakończ każde słowo spacją, w tym ostatnią.
Wypróbuj online!
Wyjaśnienie:
źródło
Perl, 133 bajty
To było jedno z tych wyzwań, które zmieniły się w mojej głowie ze zbyt trudnej, na łatwą, na o wiele więcej kodu, niż się spodziewałem ... Nie jestem szczególnie zadowolony z tego podejścia, jestem pewien, że o wiele lepszy sposób, aby zmniejszyć
print pop@F...
bit, używając-n
lub po prostu czystego wyrażenia regularnego, ale teraz nie mogę się tam dostać ... Początkowo używałemsay
, ale myślę, że musiałbym zdobyć wyższą (use 5.01
) z powodu$'
.Stosowanie
Zapisz jako
vertically-collapse-text.pl
.źródło
SmileBASIC, 90 bajtów
Stosuje grawitację do całego tekstu w konsoli. Nie jestem pewien, czy jest to poprawne, czy też muszę użyć tablicy ciągów.
źródło
Ruby,
9982 bajtówJak się tam dostać ...
Próba wyjaśnienia:
Uruchom tak:
źródło
K, 30
.
Wyjaśnienie
x@\:!|/#:'x
rozszerza każdy ciąg znaków, aby utworzyć kwadratową macierz znaków.+
transponuje to{(-#x)$x@&~^x}
usunie wszelkie spacje z łańcucha, a następnie wypełni łańcuch według oryginalnej długościZastosuj tę funkcję do każdego z transponowanych ciągów, a następnie odwróć dane wyjściowe, aby uzyskać wynik
źródło
{+{(-#x)$x@&~^x}'+(|/#:'x)$x}
na 29.pb - 310 bajtów
Co za katastrofa. Prawie nic nie pamiętam o tym, jak to działa.
Ze względu na sposób, w jaki działa wejście pb (pojedyncza linia naraz), musisz używać spacji zamiast nowych linii na wejściu. Jeśli interpreter nie był śmieciem i mógłbyś wstawić znaki nowego wiersza na wejściu, jedyną zmianą byłby
[B=32]
na początku[B=10]
.Pracuję nad aktualizacją pbi (interpretera), która wyczyści efekty wizualne, jeśli chcesz oglądać działanie programu. Nadal wymaga dużo pracy, ale w międzyczasie możesz obejrzeć ten program na YouTube .
źródło
J, 17 bajtów
Całkiem przyjemne rozwiązanie.
Wyjaśnienie:
Wyjaśnienie przypadku testowego
Przypadki testowe
źródło
;@;:&.(|:@|.)
za 13Tak właściwie 13 bajtów
Wykorzystuje algorytm opisany w odpowiedzi Jelly'ego na Jelly . Dane wejściowe i wyjściowe są listami ciągów. Niestety, wbudowana funkcja transpozycji nie działa zbyt dobrze, jeśli wewnętrzne listy lub ciągi nie są tej samej długości, co w pewnym sensie pokonałoby punkt zawalenia się w pionie. Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Ungolfing
źródło
Rakieta 312 bajtów
Nie golfowany:
Testowanie:
Wynik:
źródło
JavaScript (ES6), 103 bajty
Podzielona na CR, zewnętrzna mapa zapewnia, że zapętlamy wystarczająco dużo razy, aby pozwolić „grawitacji” na upuszczanie liter tak daleko, jak trzeba.
Wewnętrzna mapa najpierw sprawdza, czy jest następna linia, a jeśli tak, to jest krótsza, upuść przelew do następnej linii. tzn. jeśli pierwsza linia ma „ABCD”, a druga linia ma „FG”, upuść „CD” z pierwszej linii do drugiej, aby pierwsza linia zmieniła się na „AB”, a druga na „FGCD”.
Gdy robimy to tyle razy, ile jest linii, litery spadają tak daleko, jak powinny, pozostawiając nam pożądany rezultat.
źródło
Japt , 8 bajtów
Wypróbuj online!
Jak to działa
Jest też taki,
z
który obraca ciąg 2D o wielokrotność 90 stopni, ale w jakiś sposób skraca ciąg kiedyheight > length
.źródło
05AB1E ,
109 bajtówWypróbuj online.
lub z alternatywnym startem:
Wypróbuj online.
Podobne podejście jak @ Dennis ♦ 'Pyth answer .
-1 bajt dzięki zastąpieniu @Emigna
ðõ:
przezðм
.Wyjaśnienie:
Alternatywne wyjaśnienie:
źródło
R,
s8152 bajtyZinterpretowałem to pytanie i założyłem, że tekst jest reprezentowany w matrycy z jednym znakiem na komórkę, a zatem:
Więc x staje się:
Teraz używam
order
i[
do sortowania kolumn, aby najpierw były NA, a potem wszystkie inne wartości:Wydłuża się, jeśli wymagane jest, aby wynik zawierał słowa:
źródło
function(x)
należy je uwzględnić w liczbie bajtów.R
196189170 bajtówWersja czytelna dla człowieka:
Jak to działa:
(Innymi słowy, „zbędne” części upadają, dopóki nie spadnie wszystko, co może spaść).
Dane wejściowe: wektor znaków.
źródło
Julia 0.6 , 141 bajtów
Wypróbuj online!
Nadawanie za pomocą
g.([w], [d d])
pozwala mi pozbyć się każdej instrukcji mapy i oszczędza mi około 7 bajtów.źródło