Wyzwanie
Wyzwanie jest proste: wydrukuj węża .
Otrzymasz długość węża jako dane wejściowe.
Wąż o długości 2 wygląda następująco:
==(:)-
Wąż o długości 7 wygląda następująco:
=======(:)-
Innymi słowy, długość węża to liczba znaków równości przed głową .
Stosowanie
Powiedzmy, że zrobiłem implementację C ++ i skompilowałem ją ./getsnake
.
Mógłbym to uruchomić tak:
$ ./getsnake 10
==========(:)-
Wyjaśnienia
- Standardowe luki są niedozwolone.
- Wejścia i wyjścia można uzyskać w dowolny dopuszczalny sposób.
- Możesz założyć, że wszystkie podane dane wejściowe są dodatnimi liczbami całkowitymi.
- Możesz napisać funkcję zamiast zwykłego programu.
code-golf
string
ascii-art
kolmogorov-complexity
InitializeSahib
źródło
źródło
Odpowiedzi:
Sześciokąt , 33 bajty
Nie wygra, ale nadal będzie fajny. Może być w stanie zdobyć więcej golfa.
Wypróbuj online!
Gra w golfa:
Sformatowany:
Kolorowe (Wykonane przy użyciu Sześciokątnego Colorera Timwi )
Wyjaśnienie:
Pętla, drukuj „=”, aż licznik osiągnie 0.
Drukuj ”(„
Drukuj „:”
Drukuj „)”
Powyższe wartości zostały wygenerowane przy użyciu prostego skryptu python. Jednak zabrakło mi miejsca na „-”. Musiałem więc skorzystać z bardziej zaawansowanych sztuczek.
Kiedy program wypisuje „)”, wartość komórki nie wynosi 41, to jest 1065. Sześciokąt modyfikuje tylko wartość podczas drukowania. Jak się okazuje, (1065 * 1000 + 4)% 256 = 44, tylko jeden od 45, wartość ascii dla „-”. Następnie po prostu zwiększam, drukuję i wstawiam gdzieś @ po wydrukowaniu.
źródło
Guma cynamonowa, 7 bajtów
Wypróbuj online.
Byłoby 6 bajtów przy starej
p
składni: /Wyjaśnienie
Dekompresuje do
p~=~(:)-
, ap
następnie etap po prostu odczytuje dane wejściowe i powtarza=
n razy.źródło
Brian & Chuck , 31 bajtów
Dane wejściowe w postaci wartości bajtowej , np. Dane wejściowe
!
dają węża o długości 33.Wypróbuj online!
Minęło trochę czasu...
Wyjaśnienie
Szybki podkład Brian & Chuck:
,
(dane wejściowe) i tylko Chuck może używać.
(dane wyjściowe). Oprócz<
i>
są{
i}
które przesuwają głowicę taśmy do następnej komórki zerowej (lub w przypadku{
lewego końca taśmy, jeśli po drodze nie ma komórki zerowej). Zamiast[...]
tego jedynym przepływem kontrolnym jest?
przełączenie sterowania na inne wystąpienie, jeśli bieżąca komórka jest niezerowa. Pierwsza wykonana instrukcja w drugiej komórce to ta po warunku. I na koniec,_
to tylko alias dla zerowych bajtów, dla wygody.Teraz kod. Brian zaczyna od tego:
Odczytuje dane wejściowe do pierwszej komórki Chucka, a następnie przesuwa głowicę taśmy w lewo za pomocą
{
(obecnie nic nie robi) i zmniejsza wartość wejściową-
przed przełączeniem kontroli dla Chucka, jeśli wartość jest wciąż niezerowa. To zaczyna główną pętlę. Następnie Chuck uruchamia ten bit:To przesuwa głowicę taśmy na Brianie do samego końca, przesuwa dwie komórki w lewo na
=
i drukuje ją przed głowicą taśmy do końca w lewo i przełącza sterowanie z powrotem na Briana. Tak zwykle działają pętle w B&C.Gdy wejście zostanie zredukowane do zera,
?
taśma Briana nic nie zrobi. Następnie Brian wykonuje tę część:Nie
):(=
ma operacji, więc rzeczywisty kod jest po prostu>}-?
. Przechodzimy od komórki zerowej za pomocą>
, przechodzimy do góry_
z}
, zmniejszamy ją, aby stała się niezerowa i przełączamy na Chucka za pomocą?
. Następnie uruchamiany jest ostatni bit na Chucku:To po prostu drukuje pięć znaków przed Chuckiem, tj
=(:)-
. Zauważ, że musimy wydrukować kolejną,=
ponieważ główna pętla jest wykonywana tylkoN-1
razy dla danych wejściowychN
.źródło
V , 8 bajtów
Wypróbuj online!
V używa kodowania „Latin1”.
Wyjaśnienie:
źródło
Siatkówka , 10 bajtów
Wypróbuj online!
Jest to proste podstawienie wyrażenia regularnego.
Dopasowuje,
.+
który pasuje do całego wejścia, a następnie zastępuje go$*=(;)-
.Jest
$*
to unikalna funkcja Retina: jest to specjalny operator powtarzania znaków.Na przykład
5$*x
stałby sięxxxxx
.W przypadku braku poprzedniego argumentu jako argument domyślny jest używane całe dopasowanie.
źródło
Python, 21 bajtów
Ideone to!
źródło
"="*input()+"(:)-"
Haskell, 25 bajtów
'='<$[1..n]
jest równoważne zreplicate n '='
.źródło
Java 8, 52 bajty
Zestaw testowy. (Kompiluj> Wykonaj)
Kredyty .
tradycyjny sposób,
615453 bajtów7 bajtów dzięki Kevin Cruijssen.
1 bajt dzięki Dom Hastings.
źródło
for(int i=0;i<n;i++)
można grać w golfafor(;n>0;n--)
, ponieważ i tak nie potrzebujesz wkładu do niczego innego niż for-loop.for(;n-->0;)
aby zapisać kolejny bajt!Galaretka , 9 bajtów
Wypróbuj online!
źródło
C, 38
Wypróbuj na ideone.
źródło
f(n){~-printf(n?"=":"=(:)-")||f(~-n);}
.f(n){for(;n;printf(n--?"=":"(:)-"));}
Za 1.05AB1E,
109 bajtówWyjaśnienie
Wypróbuj online
1 bajt zapisany dzięki Adnan.
źródło
'=×"ÿ(:)-
za 9 bajtów :). Używa interpolacji ciągów.ÿ
działa :)JavaScript, 23 bajty
źródło
n(3)
i otrzymałemUncaught ReferenceError: n is not defined
błąd ...x=n=>"=".repeat(n)+"(:)-"; x(7);
x=
i zmienionej na 25 znaków?C #, 28 bajtów
źródło
Python , 24 bajty.
input()
pobiera dane wejściowe od użytkownika*
, użyte w ciągach znaków i liczbach całkowitych, tworzy nowy ciąg znaków, który składa się z połączonych kopii oryginału. Na przykład:"hello "*3
wyjściahello hello hello
.Po pomnożeniu
=
iinput()
otrzymujesz ciąg o=
długości określonej przez użytkownika.Za pomocą
+
łączy dwa sznurki, w tym przypadku nasze ciało"=…="
z głową,"(:)-"
aby stworzyć węża.print
wyprowadza wynik.źródło
GolfScript,
1110 bajtówMnoży „=” przez dane wejściowe i dodaje nagłówek.
-1 dzięki Leaky Nun
źródło
Mathematica,
2120 bajtówFunkcja anonimowa. Pobiera liczbę n jako dane wejściowe i zwraca węża długości n jako dane wyjściowe.
"="~Table~#
generuje listę{"=", "=", ..., "="}
długości n ,<>"(:)-"
łączy elementy listy i dołącza"(:)-"
do powstałego ciągu.źródło
"="~Table~#<>"(:)-"&
R,
3227 bajtówTo rozwiązanie jest dość proste,
rep
funkcja powtarza pierwszy element ("="
)scan()
razy, co w rzeczywistości jest wkładem użytkownika.EDYCJA :
Nieco krótsza odpowiedź, przy użyciu
scan()
bezpośrednio.Alternatywnie,
dla niepociętego węża ( 34 bajty )
źródło
sep=""
tutaj jest potrzebna, inaczej wygląda snake jak ten, który przemierzał kolejowej:= = = (:)-
.sep
jako notatkę dodatkową;)Partia, 68 bajtów
źródło
CJam,
1311 bajtówSprawdź to tutaj.
-2 bajty dzięki quartata
źródło
'=*
zamiast{'=}*
.Perl 6 ,
16 1512 bajtówWyjaśnienie:
Stosowanie:
źródło
JAISBaL , 9 bajtów
Gadatliwy:
Testowane z JAISBaL-0.0.7 ( Skompilowany plik .jar został właśnie wypchnięty, ale źródło jest już dostępne na git)
źródło
#
przed nazwą języka, aby wyglądała jak nazwa każdego innego.PowerShell v2 +, 19 bajtów
Pełny program Pobiera dane wejściowe
$args[0]
, używa mnożenia struny do budowy ciała, a następnie konkatenacji struny w celu przyczepienia do głowy.źródło
"$("="*[int]$args[0])(:)-"
DO,
464543bajtyzapisane 2 bajty dzięki owacoder! zapisane 3 bajty dzięki rici!
Wypróbuj na Ideone!
źródło
-->
operator uderza ponownie.>0
i zapisać dwa bajty.f(n){while(4-printf("=\0(:)-"+2*!n--));}
Cheddar, 15 bajtów (niekonkurencyjny)
Prosta odpowiedź.
źródło
Sesos , 11 bajtów
Hexdump:
Wypróbuj online!
Monter:
źródło
K, 17 bajtów
Przykład;
Wyjaśnienie;
źródło
-1(
...);
?{(x#"="),"(:)-"}
Perl, 16 + 1 (
-p
flaga) = 17 bajtówPotrzebuje
-p
flagi, więc uruchom z:źródło
Minkolang 0,15 , 12 bajtów
Wypróbuj tutaj!
Wyjaśnienie
źródło
Befunge-98, 24 bajty
Pobiera dane liczbowe od użytkownika, a następnie drukuje węża.
źródło
Matlab / Octave, 22 bajty
To anonimowa funkcja.
Wypróbuj na Ideone .
Wyjaśnienie
Załóżmy
n= 5
.1:n
tworzy wektor wiersza[1 2 3 4 5]
.~(1:n)
neguje każdy wpis, więc daje[0 0 0 0 0]
....+61
dodaje61
do każdego wpisu, więc daje[61 61 61 61 61]
.61
to wartość ASCII znaku=
.[... '(:)-']
łączy to z łańcuchem'(:)-'
. To automatycznie konwertuje[61 61 61 61 61]
na ciąg'====='
przed konkatenacją.źródło