Wyzwanie
Biorąc pod uwagę ciąg, wyślij tekst w kształcie kwadratu.
Możesz założyć, że tekst zawsze będzie pasował do kwadratu i że nigdy nie będzie pusty ciąg.
Możesz również założyć, że nigdy nie będzie miał nowych linii.
Przykład
Input:
Hi, world
Output:
Hi,
wo
rld
Przypadki testowe
Input:
Hi, world! Hello
Output:
Hi,
worl
d! H
ello
Input:
Lorem ipsum dolor sit amt
Output:
Lorem
ipsu
m dol
or si
t amt
Input:
H
Output:
H
Zasady
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach! Tiebreaker jest najbardziej pozytywną odpowiedzią.
- Standardowe luki są zabronione.
Odpowiedzi:
Vim,
59, 57, 48 bajtów / naciśnięć klawiszyPonieważ V jest wstecznie kompatybilny, możesz wypróbować online!
Losowo otrzymałem opinię o tej odpowiedzi, więc ponownie ją przejrzałem. Moje umiejętności gry w vim-golfa znacznie wzrosły w ciągu ostatnich 7 miesięcy, więc zobaczyłem, że ta odpowiedź była bardzo słaba. Ten jest znacznie lepszy.
źródło
Brainfuck ,
116112 bajtówWypróbuj online!
Bezpieczny w smakach BF, który nie maskuje komórek
256
, nie obsługuje bajtów zerowych.Usuń początkowe strzałki w prawo, jeśli smak obsługuje pamięć ujemną dla 4 zapisanych bajtów.
Wyjaśnienie
Program podzielony jest na 3 etapy:
Scena 1
Na tym etapie umieszczamy wszystkie postacie na taśmie, jednocześnie licząc liczbę znaków.
Oto taśma wejściowa
abcdefghi
po tej taśmie:To
009
jest liczba.Dla każdej postaci przesuwamy pierwsze zero po lewej stronie,
[<]
a następnie dodajemy jeden do liczby<<+>>>
, a następnie przesuwamy do skrajnego prawego zera,[>]
aby przygotować się do następnego znaku.Etap 2
Ten etap wykonuje pierwiastek kwadratowy z długości przechowywanej w drugiej komórce.
Odejmuje od,
1, 3, 5, 7, ...
aż liczba osiągnie zero, jednocześnie sprawdzając liczbę iteracji.Działa, ponieważ liczby kwadratowe można wyrazić jako
1 + 3 + 5 + ...
.Etap 3
Oznacz pierwiastek kwadratowy długości znalezionej powyżej jako
n
.Ten etap wypisuje
n
znaki na raz, a następnie wypisuje nowy wiersz, aż taśma zostanie wyczyszczona.źródło
Python 2, 55 bajtów
źródło
05AB1E , 5 bajtów
Wypróbuj online!
źródło
»
jest widzieć stare odpowiedzi 05AB1E, gdzie są teraz nowe linie.MATL , 6 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Galaretka,
87 bajtówZapisano bajt dzięki @ Dennis .
Wypróbuj online.
Wyjaśnienie
źródło
œs
is
zrób to samo tutaj.½
nie działa zamiastƽ
?s
iœs
tak rzucili do int.JavaScript (ES7), 49 bajtów
Tylko 44 bajty w Firefoksie Nightly 43-46 (
**
wprowadzono jakiś czas między Firefox Nightly 42 a 43 ig
jako oddzielny parametr usunięto jakiś czas pomiędzy Firefox Nightly 46 i 47):źródło
+
ins.length*+.5
*+
składni. Czy ktoś mógłby to wyjaśnić?**
.J, 9 bajtów
To monadyczny hak na łańcuch wejściowy:
Właściwy ząb to seria kompozycji:
Lewy to czasownik kształtujący, przełączony tak, że działa w formacie haka.
Oto kilka wyników pośrednich:
W słowach:
źródło
$~,~@
przypomina emotikon, ale@
wydaje się dziwny dla ucha, ale&
pasuje lepiej lub$~,~&
$~2#%:@#
wynosi 8. Lewa część widelca może być stała.C, 64 bajty
Zadzwoń
f()
za pomocą ciągu na kwadrat.Wypróbuj na ideone .
źródło
int
argumentem zamiastchar*
?int*
ponieważ podczas dodawania źle się skaluje.s+=write(puts(""),s,m));
zamiasts+=m)printf("%.*s\n",m,s);
Perl, 23 + 4 (
-pF
flagi) = 27 bajtów-2 bajty dzięki @DomHastings
-1 bajtów dzięki @DomHastings
Wypróbuj online!
Objaśnienia : oblicza pierwiastek kwadratowy (nazwijmy to
S
wyjaśnieniem) wielkości danych wejściowych (zawsze będzie to liczba całkowita) (@F
jest używany w kontekście skalarnym, zwracając w ten sposób swój rozmiar), a następnie dodaje nowy wiersz po każdym blokuS
postacie.źródło
$@
;;) Możesz zapisać bajt używający///c
zamiast długości i myślę, że możesz również użyć dosłownie nowej linii. Chciałem zrobić coś z ustawianiem$,
i dopasowywaniem, ale myślę, że jest to znacznie krótsze!$@
! Dzięki zay///c
, zwykle zapominam, że istnieje.$=
zamiast$@
, co pozwala nie używać-l
flagi.-pF
zsh, 36 bajtów
Pobiera dane wejściowe jako argument wiersza poleceń, wysyła do STDOUT.
źródło
05AB1E ,
86 bajtówDzięki @quartata za poinformowanie mnie o funkcji pierwiastka kwadratowego
Wypróbuj online!
Wyjaśnienie
źródło
«
skrótem od dołączania do nowych linii :).«
Python,
9475716563 bajtówStara wersja:
źródło
input()
domyślnie możesz używać do wprowadzania danych w cudzysłowie, chyba że chcesz specjalnie usunąć tę opcję.CJam , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Pyth, 8 bajtów
Wypróbuj online
Jak to działa
źródło
Dyalog APL, 10 bajtów
Wyjaśnienie:
Testy:
źródło
Cheddar, 27 bajtów (niekonkurencyjny)
Dodałem tę
.chunk
funkcję jakiś czas temu, ale usunąłem ją w przejściu do nowego formatu stdlib i zapomniałem ponownie ją dodać. Cheddar ma dedykowanegosqrt
operatora, ale**.5
jest krótszyWypróbuj online!
Wyjaśnienie
źródło
Narzędzia Bash + GNU, 25
Nie różni się tak bardzo od odpowiedzi @ Doorknob , ale
dc
jest krótszym sposobem uzyskania pierwiastka kwadratowego.źródło
𝔼𝕊𝕄𝕚𝕟, 11 znaków / 14 bajtów
Try it here (ES6 browsers only).
Wygenerowano przy użyciu tego kodu (uruchom w konsoli przeglądarki tłumacza):
źródło
Brainfuck, 83 bajty
Wypróbuj online!
Wykorzystuje to ten sam pomysł, co Dziurawej Zakonnicy odpowiedzi . Poprosił o grę w golfa na czacie, a następnie zasugerował, żebym dodał to jako nową odpowiedź. (Właściwie to, co napisałem na czacie, było 84-bajtowym rozwiązaniem bardzo podobnym do tego.)
Dla porównania, dodatek
>
na początku potrzebna jest implementacja „pieprzenia mózgu”, która nie pozwala na ujemne adresy pamięci.Zgodnie z oczekiwaniami, znajdzie to długość danych wejściowych, następnie pierwiastek kwadratowy, a następnie odpowiednio wydrukuje linie. Wykorzystuje idealne kwadraty będące częściowymi sumami
1 + 3 + 5 ...
.źródło
Brain-Flak ,
11096 bajtówWypróbuj online!
Drugie rozwiązanie, 96 bajtów
Wypróbuj online!
Wyjaśnienie
Tutaj wyjaśniam pierwsze rozwiązanie, oba mają tę samą długość, ale podoba mi się pierwsze, ponieważ jest fajniejsze i wykorzystuje kilka fajnych sztuczek.
Najważniejszą częścią kodu jest zmodyfikowana funkcja pierwiastka kwadratowego, którą napisałem jakiś czas temu. Pierwotna wersja była
I to działa, ale tak naprawdę chcemy dwóch kopii ujemnego pierwiastka kwadratowego. Czemu? Potrzebujemy dwóch kopii, ponieważ zapętlamy ciąg znaków na dwóch poziomach, jeden do tworzenia linii, a drugi do zliczania liczby linii. Chcemy, aby była ujemna, ponieważ pętla z negatywami jest tańsza.
Aby uczynić to negatywnym, poruszamy się
[...]
tak, aby wyglądało takAby wykonać dwie kopie, zmieniamy się, gdy pojawiają się trzaski
Teraz, gdy mamy ten bit, możemy go połączyć z wysokością stosu, aby uzyskać pierwszą potrzebną część kodu.
Przechodzimy do offstacka, ponieważ nasza funkcja pierwiastka kwadratowego potrzebuje dwóch wolnych zer do obliczeń i ponieważ sprawia, że rzeczy są nieco tańsze w przyszłości pod względem przełączania stosu.
Teraz konstruujemy główną pętlę
Jest to całkiem proste, za każdym razem n razy zapętlamy n przedmiotów i zamykamy je nową linią (ASCII 10).
Po zakończeniu pętli musimy odwrócić kolejność naszych wyników, więc po prostu wybieramy standardową konstrukcję odwróconą.
źródło
PHP, 51 bajtów
źródło
Perl 6 , 38 bajtów
Wyjaśnienie:
źródło
Cheddar, 57 bajtów
Ponieważ zmienne są zepsute, musiałbym przekazywać zmienne poprzez aplikację lambda.
Okazuje się również, że nawet gdyby zmienne działały, użycie aplikacji lambda byłoby jeszcze krótsze.
Stosowanie
źródło
Pyke, 5 bajtów
Wypróbuj tutaj!
źródło
Java 1.7, 110 bajtów
Spróbuj! (Ideone)
Wypróbowałem inne podejście z funkcją zwracającą wynik jako ciąg znaków, ale po prostu muszę zadeklarować ciąg, a instrukcja return jest już droższa (liczenie bajtów) niż instrukcja print.
Uwielbiam gadatliwość Javy ... :)
źródło
i=0
,i<k
is.substring(i*k,i++*k+k)
zamiasti=-1
,++i<k
,s.substring(i*k,i*k+k)
. Ponadto zwykle używamy tylkoJava 7
zamiastJava 1.7
, ale dobrze, że go dodałeś, wiele osób zapomina o tym.R ,
5954 bajtówWypróbuj online!
Drukuje z końcowym znakiem nowej linii. Zaskakująco krótki, biorąc pod uwagę, jak źle R radzi sobie z łańcuchami.
źródło
PowerShell, 56
5861bajtówźródło
Rubin
-p
,403330 bajtów-7 bajtów od @Jordan.
Wypróbuj online!
źródło
Wypukły , 7 bajtów
Wypróbuj online!
Śmieszny fakt:
_,mQ/\*
działa również na TIO ze względu na to, jak to działa.Jak zapomniałem zrobić 1-znakowy pierwiastek kwadratowy?
źródło