Dając dowolny ciąg, wydrukuj go w postaci trójkąta, w którym tekst biegnie w górę i w dół wzdłuż każdej przekątnej. Na przykład wejście "Hello World"
powinno wypisać:
d
l
r d
o l
W r d
o l
o W r d
l o l
l o W r d
e l o l
H l o W r d
e l o l
l o W r d
l o l
o W r d
o l
W r d
o l
r d
l
d
Odstęp między każdym znakiem w rzędzie musi wynosić co najmniej 1, aby zachować odpowiedni format.
code-golf
string
ascii-art
code-golf
string
abstract-algebra
code-golf
ascii-art
binary
fractal
code-golf
array-manipulation
sorting
permutations
code-golf
code-generation
code-golf
sequence
binary
code-golf
date
code-golf
array-manipulation
restricted-source
decision-problem
primes
code-golf
multi-threading
code-golf
array-manipulation
code-challenge
decision-problem
natural-language
test-battery
code-golf
array-manipulation
code-golf
array-manipulation
code-golf
code-golf
graph-theory
machiavelli
źródło
źródło
H l o W r d
jest to prawidłowy środkowy wiersz? Pytanie, ponieważ w twoim przykładzie każdy wiersz ma 3 spacje między każdą postacią.Odpowiedzi:
Węgiel drzewny ,
107 bajtówWypróbuj online!Wypróbuj online! Linki są do pełnej wersji kodu. Wyjaśnienie:Pierwszy raz muszę użyćUE
polecenia.źródło
UE
...UE
..05AB1E ,
1087 bajtówDzięki Emigna za uratowanie 2 bajtów!
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
źródło
¶«
. (również zweryfikował ważność przy pomocy OP)â
wðâ
zamiastSð«
!Python 2 , 75 bajtów
Wypróbuj online!
Ruud zapisał 3 bajty.
źródło
C,
86787370 znakówWypróbuj online!
Wyjaśnienie
Naiwna implementacja: dwa cykle, wypełnianie od góry do dołu, od lewej do prawej (99 bajtów):
Tutaj puts () po prostu drukuje \ n na wyjściu. Połączmy deklaracje zmiennych i połączmy j ++ z czymś (94 bajty):
Dobry. Zmienna j ma zakres 0 ... 2n; niech będzie w zakresie -n ... n, dzięki temu matematyka jest prostsza. Zauważ, że wyrażenie logiczne po prawej stronie && ma zawsze wartość 0 lub 1. Oznacza to, że możemy zastąpić && przez &. 91 bajtów:
A teraz zdaliśmy sobie sprawę, że drukujemy dodatkową przestrzeń. I tak, nie potrzebujemy printf (), aby wydrukować tylko jeden symbol. 86 bajtów:
Nawet lepiej. Zauważ, że warunek i * i> = j * j jest taki sam jak i> = abs (j), ale krótszy. Przejdźmy puts () do wyrażenia zwiększającego pętlę. I zgadnij co? W rzeczywistości nie potrzebujemy nawiasów klamrowych wokół i + j. 78 bajtów:
Czy wiesz, że putchar () zwraca wydrukowany znak? Użyjmy XOR do przetestowania liczb pod kątem równoważności. Zastąpmy spację jego kodem ASCII, 32. Pamiętaj, że kod znaku końca linii to 13. I wreszcie: czy wiesz, że GCC / Clang obsługują https://en.wikipedia.org/wiki/Elvis_operator ? 73 bajty:
Wreszcie, zgadnij co? Nie potrzebujemy dwóch na pętle. Możemy zastąpić brzydkie ~ i + j tylko ij. 70 bajtów:
Przyszłe prace: zmienić kierunek pętli? Może to zaoszczędzić niektóre bajty, jeśli zostanie to wykonane poprawnie.
źródło
SOGL V0.12 ,
13109 bajtówKorzysta z funkcji, którą właśnie dodałem , ale została ona wcześniej udokumentowana .
Wypróbuj tutaj!
Link ten
,
jest dodawany, ponieważ oczekuje danych wejściowych na stosie i{
dodawany, ponieważ w przeciwnym razie,
byłby wykonywany za każdym razem w pętliźródło
Haskell , 73 bajty
Wypróbuj online!
źródło
Gaia , 16 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Python 2 ,
8683 bajtów-3 dzięki oficjalnemu
Wypróbuj online!
źródło
Galaretka , 15 bajtów
Wypróbuj online!
źródło
Oktawa,
59635857 bajtówWypróbuj online!
źródło
99
: dobry pomysł :-)Java, 292 bajtów (przepraszam)
źródło
boolean a=1<0,o=L%2>0;
.. 2. W przypadku nie trzebai
używać tej pętli:for(i=0;i++<n;)
. 3. Możesz pozbyć sięo
:j%2<L%2
wtedyj%2>L%2
. 4. Używanied
jako klapki zajmuje tak wiele znaków: po prostu zróbj<(x<0?-x:x)
. 5. Masz o wiele więcej zmiennych niż potrzeba. 6. Nie potrzebujesz pełnego programu: wystarczy lambda lub metoda. - Jeśli chcesz przykład Java z golfem, sprawdź moją odpowiedź .Haskell , 81 bajtów
Wypróbuj online!
źródło
Java (OpenJDK 8) , 116 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
C ++, 135 bajtów
Okej, oto mój strzał z C ++:
Wypróbuj online (ideone)!
źródło
Haskell ,
140137 bajtówWypróbuj online!
Zapisano 3 bajty thanls w Challenger5
Nie sądzę, żeby to było optymalne ...
f
tworzy jedną z linii (m
= 0 lub 1 to modulo numeru linii,n
jest numerem linii)g
interkaluje linie „nieparzyste” i „parzyste” i dodaje do wyniku zwierciadło siebie.źródło
f
jako funkcję(m#n)s=...
przedrostka (jak w ) zamiast funkcji przedrostka.Pyth , 25 bajtów
Wypróbuj tutaj.
źródło
Galaretka , 18 bajtów
Wypróbuj online!
źródło
Mathematica 105 bajtów
Może mógłbym wygolić kolejny bajt lub dwa, ale liczba znaków związana z obsługą ciągów znaków w Mathematica sprawia, że takie proste wyzwania są niekonkurencyjne.
źródło
J, 54 bajty
Wypróbuj online!(zwróć uwagę, że wyjście w TIO ma nowy wiersz i trzy spacje, ale to nie pochodzi z wywołania funkcji - prawdopodobnie jest to dokładnie to, co interpreter J robi automatycznie).
Myślę, że ogólny pomysł na rozwiązanie tego problemu jest słuszny, ale są pewne rzeczy, które prawdopodobnie robię nieoptymalnie, które zwiększają liczbę bajtów.
Poprzednie warianty
55 bajtów
56 bajtów
Wyjaśnienie
Zostanie to podzielone na kilka funkcji. Ponadto nie byłem tak dokładny w ostatnich częściach wyjaśnienia, więc daj mi znać, jeśli chcesz lepszego wyjaśnienia dla określonej części, a ja mogę to edytować.
dup
duplikuje każdy znak tyle razy, ile jego indeks (plus jeden) w ciąguspace
wstawia spacje między każdym znakiempad
wypełnia znaki odpowiednią ilością spacjitrans
transponuje uzyskaną macierzPrzykładowe połączenie:
Dup
Wyniki są umieszczane w ramkach, aby zapobiec dopełnianiu przez J spacji na końcach (ponieważ mają one nierówną długość).
Przykładowe połączenie:
Przestrzeń
Przykładowe połączenie:
Podkładka
Zasadniczo wypełnij pierwszy element długością - 1 spacje, drugi długością - 2 itd. Usuwa również boks.
Przykładowe połączenie:
Transponować
To tylko wbudowana funkcja,
|:
która przejmuje transpozycję macierzy.źródło
|:@(-@i.@-@#|."0 1((,@,.~' '#~#)@$"0~1+i.@#))
. z pewnością można by dalej grać w golfa. ta część-@i.@-@#
to pewnie nisko wiszący owoc, najprawdopodobniejf=. <some tacit expression>
a następnie5!:2 <'f'
daje wizualizację w pudełku i5!:4 <'f'
wizualizację drzewa. w moim przypadku spróbuj$"0~1+i.@#
najpierw uruchomić jakiś ciąg znaków, a następnie uruchom wszystko po prawej stronie|."0 1
, a następnie zrozum, że|."0 1
wszystko po lewej stronie, z wyjątkiem ostatniej transpozycji, wykonuje tylko niezbędne obroty.#
pomocy tutaj, 26 bajtów z|:@((-#)|."_1(1j1##)"0)~#\
JavaScript (ECMAScript 6), 161 bajtów
Wypróbuj online!
źródło
Perl 5 , 86 + 2 (-F) = 88 bajtów
Wykorzystałem sugestie @ Dom i kilka moich własnych poprawek, aby obniżyć liczbę bajtów.
Wypróbuj online!
źródło
-aF
aby wstawić wszystkie litery@F
i kilka drobnych poprawek (-F
liczy się jako 3, ponieważ wymaga spacji po): Wypróbuj online!perl -e'code...'
iperl -eF 'code...'
.-a
Jest również niepotrzebny podczas używania-F
, aby można było wyciąć bajt.-F
Przyjmuje więc argument, ale nie chcemy go przekazywać (-F
pozwala nam kontrolować, co-a
dzieli, bez argumentów, dzielenie każdego znaku osobno), więc jest to różnica międzyperl -ae '...'
iperl -aF -e '...'
. Domyślnie-a
dzieli się na/\s+/
. Mam nadzieję, że to pomoże wyjaśnić!$#F
! Zawsze o tym zapomnij!q / kdb +, 55 bajtów
Rozwiązanie:
Przykład:
Wyjaśnienie:
DO ZROBIENIA. wersja bez golfa ma 66 bajtów:
Premia:
Aby uzyskać takie same dane wyjściowe jak w przykładzie (74 bajty):
źródło