Napisz program lub funkcję, która pobiera niepusty łańcuch jednowierszowy. Możesz założyć, że zawiera on tylko ASCII do wydruku, z wyłączeniem spacji.
Wydrukuj lub zwróć kształt rombu ASCII podobny do cytryny lub limonki wykonanych z prefiksów sznurka.
Załóżmy, że ciąg wejściowy ma długość n liter. Następnie taki kształt składa się ze zszytych 2n - 1 kolumn sztuki ASCII, z których każda składa się z 2n - 1 linii. Licząc od 1, k-ta kolumna ma szerokość f (k) = min (k, 2n - k) i zawiera f (k) kopie pierwszych znaków f (k) znaków wejściowych, wyśrodkowanych pionowo, z pojedynczym pustym miejscem linie oddzielające kopie.
Na przykład, jeśli dane wejściowe to Lemon
, dane wyjściowe powinny być:
Lemon
Lemo Lemo
Lem Lemon Lem
Le Lemo Lemo Le
L Lem Lemon Lem L
Le Lemo Lemo Le
Lem Lemon Lem
Lemo Lemo
Lemon
Jeśli wejście jest lime
wyjściem powinno być:
lime
lim lim
li lime li
l lim lim l
li lime li
lim lim
lime
Ten sam wzorzec obowiązuje dla innych danych wejściowych:
a
a
Be
Be
B B
Be
/\
/\
/ /
/\
cat
cat
ca ca
c cat c
ca ca
cat
|||
|||
|| ||
| ||| |
|| ||
|||
.__.
.__.
.__ .__
._ .__. ._
. .__ .__ .
._ .__. ._
.__ .__
.__.
$tring
$tring
$trin $trin
$tri $tring $tri
$tr $trin $trin $tr
$t $tri $tring $tri $t
$ $tr $trin $trin $tr $
$t $tri $tring $tri $t
$tr $trin $trin $tr
$tri $tring $tri
$trin $trin
$tring
Linie na wyjściu mogą mieć końcowe spacje i może istnieć jedna opcjonalna nowa linia końcowa.
Najkrótszy kod w bajtach wygrywa.
Odpowiedzi:
Matlab,
140 136 128124 bajtówZasadniczo najpierw zaczyna się od środkowej sekcji, a następnie krok po kroku dołącza / dołącza skrócone / zmodyfikowane wersje.
Dzięki za 8 bajtów @LuisMendo!
Np.
MATLAB
Otrzymujemy:źródło
flip
: /Python 2,
121110 bajtów116 bajtów, jeśli używasz
raw_input
. Program zasadniczo wykonuje maskę na podstawie odległości L1 / Manhattan od centrum, a także parzystości tej odległości w porównaniu z parzystością długości wejściowej.(Dzięki @Lynn za -9 bajtów i torując drogę dla 2 kolejnych)
źródło
s
jest używany na końcu długiej linii, więc niestety nie jest to możliweR
.R
sprawia, że kod jest o wiele ładniejszy!MATL , 44 bajty
Czerpałem inspirację z odpowiedzi @ flawr (chociaż algorytm nie jest taki sam)
Dane wejściowe to ciąg z pojedynczymi cudzysłowami.
Wypróbuj online!
źródło
JavaScript (ES6), 132 bajty
Test
źródło
Pyth, 32 bajty
Demonstracja
źródło
Galareta,
3226 bajtówWypróbuj online!
EDYCJA: Dennis zapisał 6 bajtów. Dzięki!
źródło
JavaScript,
187178 bajtówPodejście bitowe. Funkcja
m
definiuje maskę, rozpoczynając od2 ** length
, np.00100
Binarnie, i definiującm(n) = m(n-1) << 1 | m(n-1) >> 1
dla pierwszej połowy. Co ciekawe, drugą połowę można zdefiniować jakom(n) = m(n-1) << 1 & m(n-1) >> 1
. (chociaż program zamiast tego decyduje się na zdefiniowaniem(n) = m(2 * length - 1)
dla drugiej połowy) Stąd te maski można użyć do ustalenia, czy słowo lub spacja powinny się pojawić, sprawdzając2 ** column & m(row)
. Oczywiście w JavaScript, pisanie za2 ** something
pomocą1 << something
...Uwaga: napisany zmęczony.
MajPrawie na pewno ma błędy.źródło
Haskell, 109 bajtów
źródło
Brachylog , 46 bajtów
Wypróbuj online!
Straszna liczba bajtów i prawdopodobnie gorsze podejście (nie wspominając, że Brachylog nie jest specjalnie zaprojektowany dla sztuki ASCII), ale i tak zmarnowałem wystarczająco dużo czasu, aby go opublikować.
Prawie jedyną sprytną częścią tego wszystkiego jest użycie
a₁
generowania spacji pionowych od największej do pierwszej, podczas gdya₀
generowanie prefiksów słowa od najmniejszej do pierwszej, orazzz
do powiększania pojedynczych spacji w bloki przestrzeni pasujące do szerokości prefiksów.źródło
TSQL, 259 bajtów
Gra w golfa:
Nie golfowany:
Skrzypce
źródło
C, 167 bajtów
Ten program oczekuje, że tekst wejściowy zostanie przekazany jako pierwszy parametr do programu (za pośrednictwem wiersza poleceń lub w inny sposób) i zapisze dane wyjściowe na standardowe wyjście.
To jest moja pierwsza próba gry w golfa kodu, ponieważ wydawało się to rozsądnym wyzwaniem, więc prawdopodobnie można grać w golfa bardziej niż byłem w stanie, ponieważ to zrobiłem.
Wyjaśnienie
Jest wystarczająco istotne, aby odnotować użycie
(n < m) ? n : (m * 2) - n
w programie co najmniej dwa razy, aby uzyskać odwróconą odległość od pozycji środkowejm
w zakresiem * 2
wraz z wejściemn
. Jeśli istnieje krótszy sposób, aby to zrobić, można by go łatwiej rozegrać w golfa, ponieważ ten algorytm jest ważny dla działania tego programu.źródło
C, 137 bajtów
Awaria:
Rysuje to każdy element siatki 2n-1 x 2n-1, a funkcja maski decyduje, czy bieżącym elementem powinna być pusta spacja czy słowo wejściowe (maska sprawdza kształt rombu i wzór szachownicy).
źródło