Zrobiłem to już w Pythonie, ale wydaje się, że można to znacznie skrócić:
txt = input("Type something.. ")
c = "#"
b = " "
print(c * (len(txt) + 4))
print(c, b * len(txt), c)
print(c, txt, c)
print(c, b * len(txt), c)
print(c * (len(txt) + 4))
Więc jeśli użytkownik wpisze:
Hello World
Program drukuje:
###############
# #
# Hello World #
# #
###############
Wygrywa najmniej bajtów - i oczywiście odpowiedź można napisać w dowolnym języku.
Odpowiedzi:
CJam,
2220 bajtówSprawdź to tutaj.
Wyjaśnienie
Jak owinąć siatkę znaków 2D w jedną warstwę spacji (lub dowolną inną postać)? Prawidłowo: czterokrotnie dodajesz spację do każdej linii, a następnie obracasz siatkę o 90 stopni. Właśnie to robię tutaj z ośmioma rotacjami: cztery dla spacji, cztery dla
#
:źródło
vim,
2827 naciśnięć klawiszyZakłada, że dane wejściowe są podawane jako pojedynczy wiersz tekstu w aktualnie otwartym pliku.
Wyjaśnienie:
Można to również uruchomić jako „program”:
Co jest nieco skomplikowane, ale działa.
źródło
pb - 89 bajtów
Jest to rodzaj wyzwania, dla którego stworzono pb! Nie dlatego, że jest konkurencyjny dla tego rodzaju wyzwań lub czegokolwiek. To wciąż okropny język golfa. Jednak takie wyzwania są o wiele mniej uciążliwe do rozwiązania w PB niż inne. Ponieważ pb traktuje swoje dane wyjściowe jako płótno 2D i jest w stanie pisać na dowolnych współrzędnych, wszystko, co obejmuje pozycjonowanie tekstu / rysowanie wokół tekstu (tj. To wyzwanie) jest obsługiwane dość intuicyjnie.
Zobacz, jak działa:
ta wizualizacja została stworzona przy użyciu opracowanej wersji pbi, interpretera pb. Linia z niebieskim tłem to miejsce
Y=-1
, w którym dane wejściowe są zapisywane po uruchomieniu programu. Prostokąt z czerwonym tłem to bieżąca lokalizacja pędzla. Prostokąty z żółtym tłem są wszędzie tam, gdzie znak ascii 32 (spacja) jest wyraźnie zapisany na płótnie. Wszelkie puste spacje bez tego tła faktycznie mają wartość0
, która jest konwertowana na spację.Oto kod z komentarzami, których użyłem podczas pisania, z niektórymi tematycznie nagłówkami sekcji;)
źródło
Not that it's competitive... It's still a horrible golf language.
Mówię to, ale teraz jestem przywiązany tylko do końca. Spodziewałem się, że będę ostatni. : Dbrainfuck - 156 bajtów
Jest to prawdopodobnie gra w golfa. Jest kilka miejsc, w których nie wiedziałem, czy lepiej byłoby przechowywać gdzieś wartość do ponownego użycia lub ją przerobić / zdobyć ją z innego miejsca na taśmie. Zamiast tego, żeby to rozgryźć, nie zrobiłem tego. :RE
Z komentarzami:
źródło
K, 21 bajtów
Zapisz łańcuch, dodaj spację do wszystkich czterech boków łańcucha, a następnie dodaj oktorę do każdej strony łańcucha. W akcji:
Działa w ok, Kona i k5.
Istnieje kilka odmian w obrębie jednego znaku długości, które usuwają nadmiarowość w powyższym, ale wydaje się, że żadna z nich nie ulega przerwaniu, nawet jeśli musimy tylko dwukrotnie wykonać operację „zawijania”:
źródło
Pyth, 31 bajtów
Dzięki ludziom w komentarzach, którzy udzielają wskazówek, jak dalej grać w golfa, tak naprawdę nie znam dobrze języka, jak można (prawdopodobnie) powiedzieć.
źródło
"#"
jest równa\#
. Jeśli musisz połączyć wiele obiektów, lepiej użyć ich,j""[
a następnie listy obiektów, która jest równajk[
.s[
jest równyjk[
dla tablic ciągów. Możesz także przypisywaćK
na bieżąco,jk[K\#
po prostu upuścić początkowe przypisanie. Przypisanielz
doJ
nie pomaga, jeśli jest używane tylko dwa razy, więc zachowajJ
coś innego. Tutaj, jeśli zamieniszZ
naJ
można usunąć=
. Na koniec możesz przypisaćJ
na bieżąco. Kod wygląda następująco:_Js[K\#*d+2lzKb*K+4lz)jd[KzK)J
Python 3, 88 bajtów
Dzięki @WorldSEnder
Przykład I / O:
źródło
s=" "
myślę, że na początku oszczędzam 1 bajt.;
zamiast nowych linii BTW? Oba powinny być jednobajtowe, prawda?Perl,
4376 bajtówPrzekształć każdy wiersz wprowadzania tekstu, jak określono:
Na przykład:
Oto jak zobaczyć, co tak naprawdę robi:
Coś więcej takiego:
źródło
e
modyfikator ... ale jeśli to zrobisz, równie dobrze można po prostu upuść podstawienie sumie:$x="#"x(4+($z=y!!!c));$y="#".$"x(2+$z)."#\n";$_="$x\n$y# $_ #\n$y$x"
. Zamiast tego użyj rzeczywistych znaków nowej linii,\n
a to tylko 65 bajtów plus 2 dla-lp
.JavaScript (ES6), 73
Mocno przy użyciu ciągu szablonu, 2 znaki nowej linii są znaczące i są liczone.
Przetestuj poniższy fragment kodu w dowolnej przeglądarce zgodnej z EcmaScript 6 (FireFox i najnowszy Chrome, może Safari).
Jest to o wiele krótsza niż moja pierwsza próba, wywodząca się z tego innego wyzwania :
źródło
z
jako efekt uboczny?)Python 2, 74
Pobiera dane wejściowe w cudzysłowie jak
"Hello World"
.# _ #
.b
mają# #
odpowiednią liczbę spacji, otoczoną znakami nowej linii po obu stronach, aby zająć się wszystkimi czterema liniami.#
mnożone przez długość wejściaLinie są łączone i drukowane.
źródło
MATLAB,
9391 bajtówNie najładniejszy, ale wykonuje zadanie.
Objaśnienie kodu
Krok 1
Przeczytaj ciąg STDIN i umieść w nim wiodącą i końcową pojedynczą spację. 32 jest kodem ASCII dla spacji, a odczyt na wejściu, gdy ciąg znaków łączy 32s w spacje.
Krok 2
Zadeklaruj tablicę znaków zawierającą 5 znaków skrótu w wektorze kolumny.
Krok 3
Utwórz 2-wierszową matrycę znaków, która będzie najpierw wypełniona znakami skrótu, a następnie spacją. Liczba znaków to długość ciągu wejściowego plus 2, dzięki czemu możemy uwzględnić miejsce przed i po ciągu.
Krok 4
Wszystko poskładamy. Umieszczamy pierwszą kolumnę z 5 skrótami, następnie środkową część, a następnie kolejną kolumnę z 5 skrótami. Część środkowa składa się z 2-wierszowej matrycy znaków utworzonej w kroku # 3, samego łańcucha wejściowego, który ma spację końcową i wiodącą, a następnie 2-wierszowej matrycy znaków, ale odwróconej.
Przykład działa
źródło
Perl 5.14+,
5756 bajtów54 bajty + 2 bajty na
-lp
(jeśli dane wejściowe nie kończą się nowym wierszem,-l
można je upuścić, aby zapisać jeden bajt).Akceptuje dane wejściowe STDIN:
Jak to działa
Trzon programu stanowi wycinek listy:
Zapewnia to kompaktowy sposób przechowywania trzech unikalnych wierszy danych wyjściowych (pierwsze dwa wiersze ramki granicznej są takie same jak dwa ostatnie, tylko dublowane). W przypadku ciągu wejściowego
foo
wyniki wycinka będą następujące:Połączenie tych wartości
#\n#
daje nam nasze pudełko.Zauważ, że Perl 5.14+ jest wymagany, aby użyć nieniszczącego
r
modyfikatora operatora transliteracjiy///
.źródło
PHP,
9593 bajtówNiezupełnie genialne lub coś podobnego, ale tak naprawdę było fajnie!
Niezupełnie ładne czy coś, ale działa świetnie!
Dzięki @Titus za zapisanie 2 bajtów.
źródło
$argv
zamiast$_GET
i-r
.C ++, 198 bajtów
Moje pierwsze dźgnięcie w codegolf i chociaż nauczyłem się C ++ prawdopodobnie nie jest najlepszym językiem do gry w golfa, poczułem, że zrobiłem to przyzwoicie (?) Podczas mojej pierwszej próby.
Bez golfa
n, o i t reprezentują odpowiednio linie w pełni zaszyfrowane, dane wejściowe (z skrótami na każdym końcu) i linie między liniami wejściowymi i hashowanymi.
źródło
> <> ,
106104 bajtówMam wrażenie, że> <> może nie być najlepszym językiem do tego, ale zaszedłem za daleko, aby się poddać i nie opublikować tego.
*
Na koniec linii 4 ma być przestrzenią. Nie podoba ci się, jak niesamowicie groteskowy jest ten kod? Wypróbuj online .Oto wersja bez zmieniaczy kierunku, aby dać wyobrażenie o tym, jak porusza się wskaźnik (zwróć uwagę, że pominąłem instrukcje „teleportacji”
.
).Kierunek przepływu:
Wyjaśnienie
Moja wizualizacja stosu będzie oparta na danych wejściowych
input
. > <> jest językiem dwuwymiarowym, więc zwróć uwagę na to, gdzie wskaźnik przesuwa się między liniami, ponieważ wykonuje kod pod nim (w tym kodzie<>v^
służą głównie do zmiany kierunku). Zacznę wyjaśnienia od miejsca, w którym zaczyna się wskaźnik. Zauważ, że powtórzą się dwie linie, gdy wskaźnik przesunie się do tyłu po piątej linii.To, co zawsze uważam za fajne w> <>, to możliwość modyfikowania własnego kodu źródłowego i korzystam z niego w tym programie. Linie 3 i 4 są ponownie używane do drukowania ostatnich dwóch wierszy poprzez modyfikację znaku w każdym z nich.
Wiersz 1: Pętla wejściowa
Stos:
[-1,t,u,p,n,i]
Wiersz 2: generuje trzeci wiersz wyniku
Stos:
[9,9,9,9,#, ,t,u,p,n,i, ,#]
Wiersz 3: drukuje pierwszy wiersz wyniku
Stos:
[0,9,9,9,#, ,t,u,p,n,i, ,#]
Wydajność:
Wiersz 4: drukuje drugi wiersz wyniku
Stos:
[0,9,9,#, ,t,u,p,n,i, ,#]
Dane wyjściowe (
*
reprezentuje spację):Wiersz 5: drukuje trzeci wiersz wyniku
Stos:
[9,9,0]
Wydajność:
Wiersz 6: Ustawia się do drukowania czwartego i piątego wiersza wydruku
Stos:
[0,9,9,0]
Wiersz 4: wydrukuj czwarty wiersz wyniku
Stos:
[0,9,0]
Dane wyjściowe (
*
reprezentuje spację):Wiersz 3: wydrukuj ostatni wiersz wyniku
Stos:
[0,0]
Wydajność:
źródło
PHP,
9391 bajtówPobiera dane wejściowe z argumentu wiersza poleceń; użyj spacji lub użyj pojedynczych cudzysłowów. Uruchom z
-r
.źródło
Pyke (niekonkurencyjny), 6 bajtów
Wypróbuj tutaj!
Pyke został napisany po konkursie i dlatego jest niekonkurencyjny.
.X
pobiera ciąg znaków i stały ciąg znaków arg i otacza ciąg znaków tą grupą znaków. Stały argument może mieć do 8 znaków i mieć różny wpływ na otoczenie łańcucha.źródło
05AB1E,
26 bajtów, nie konkurujeWypróbuj online!
EDYCJA: Woah! Nie zauważyłem, że to stare wyzwanie! Przepraszam!
źródło
C # - 142 bajty (treść metody to 104)
Nie golfowany:
źródło
PowerShell,
8482 bajtówźródło
Lua, 90 bajtów
źródło
Rubinowy, 83 bajty
Myślę, że można by dalej grać w golfa, ale ponieważ nie ma jeszcze odpowiedzi Ruby, oto ona:
źródło
Rakieta 172 bajtów
Nie golfowany:
Testowanie:
Wydajność:
źródło
C #,
116110 bajtówNie golfowany:
Początkowa wersja:
Pełny program z przypadkami testowymi:
źródło
var
zamiaststring
.var
słowo kluczowe dopuszcza tylko jedną deklarację.C (gcc) 165 bajtów
Wersja bez golfa
źródło
SmileBASIC, 73 bajty
źródło