Wyzwanie polega na wydrukowaniu serii rosnących strzałek ASCII. Opiszę wzór w słowach, ale może być łatwiej spojrzeć na to, jak wygląda początek tej serii:
>
<
->
<-
-->
<--
--->
<---
---->
<----
----->
<-----
------>
<------
...
Strzała o długości n zawiera grot strzałki ( <
lub >
) i n-1
myślniki ( -
). Strzałka skierowana w prawo ma najpierw myślniki, a następnie >
. Strzałka skierowana w lewo zaczyna się od <
, a po niej następuje myślnik. Seria składa się z długości n
strzałki skierowanej w prawo, a następnie długości n strzałki skierowanej w lewo, od n od 1 do nieskończoności.
Aby ukończyć wyzwanie, napisz program lub funkcję, która pobiera jedno wejście, liczbę całkowitą i >= 1
i wyprowadza pierwsze i
strzałki. Strzały są indywidualne, a nie w parach prawy-lewy, dlatego i=3
powinieneś wypisać:
>
<
->
Możesz zwrócić listę ciągów lub wydrukować je jeden po drugim. Podczas drukowania strzałki muszą być rozdzielane pewnym spójnym separatorem, który nie musi być znakiem nowej linii, jak w przykładzie.
To jest golf golfowy , więc wygrywa najmniej bajtów.
Odpowiedzi:
Płótno , 10 bajtów
Wypróbuj tutaj!
źródło
↔
tak to wygląda!↔
jest wbudowanym „odwróceniem w poziomie” (także zamianą>
i<
), niestety nie ma wbudowanych strzałek: pR , 69 bajtów
Wypróbuj online!
źródło
strrep
zmusza swój drugi argument dointeger
, abyś mógł użyć/
zamiast%/%
a
całkowicie pozbyć , indeksując0...(n-1)
zamiast tego: Wypróbuj online!Java (JDK) , 81 bajtów
Wypróbuj online!
Objaśnienia
źródło
import java.util.function.*;
liczy?Haskell,
4140 bajtówWypróbuj online!
Zwykła stara rekurencja: zacznij od string
p
=">"
, zbierzp
, a<
przed wszystkimi znakami oprócz ostatniego charp
i rekurencyjne wywołanie z jednym-
wstawionym przedp
. Weź pierwszen
elementy z tej listy.Edycja: -1 bajt dzięki @xnor.
źródło
Commodore BASIC V2 (C64), 94 bajty
Nie do końca pewny co do liczby bajtów, jest to oparte na reprezentacji tekstu do wpisania poprawnego programu. Na dysku jest nieco krótszy (91 bajtów), ponieważ BASIC V2 używa „tokenizowanej” reprezentacji programów.
Demo online
Nieznacznie „bez golfa”:
źródło
Samo-modyfikujący Brainfuck , 55 bajtów
Wprowadź dane jako kod znakowy.
Obsługuje tylko dane wejściowe do 255.
Do oddzielenia wierszy użyj znaku null.
Przypadkowo wszystkie znaki rysujące strzałki są używane jako polecenia BF. Niestety nie zapisuje żadnych bajtów (obecnie).
Wypróbuj online!
Wyjaśnienie
źródło
Python 2 , 54 bajty
dzięki i Jo King za naprawienie błędu.
Wypróbuj online!
źródło
Pyth, 17 bajtów
Dane wyjściowe to lista ciągów znaków. Wypróbuj online tutaj .
źródło
PowerShell ,
625650 bajtówWypróbuj online!
Pętle od
0
do wejścia$n
, każda iteracja tworzy dwa ciągi strzałek. Są one następnie indeksowane,0..--$n
aby wyciągnąć prawidłową liczbę elementów.Zaoszczędzono 6 bajtów dzięki KGlasier.
źródło
param($n)(0..$n|%{($j='-'*$_++)+'>';"<$j"})[0..--$n]
. Więc teraz nie musisz pisać$x
dwa razy.++
w($j='-'*$_++)
jak nie używasz$_
nigdzie indziej.Python 3, 53 bajty
Moja pierwsza odpowiedź codegolfa.
-10 bajtów dzięki Jo King
źródło
Haskell ,
5144 bajtów-7 bajtów dzięki xnor (użycie
iterate
ponad listy)!Wypróbuj online!
Wyjaśnienie / Niegolfowany
Użycie
do
-notacji pozwala nam zaoszczędzić aconcat
, a użycie notacji infiksowej pozwala na bezfunkcyjną funkcję ztake
, cofnięcie ich dałoby:źródło
Japt
-m
,16151312 bajtówZaoszczędził 1 bajt dzięki Kudłatemu
Przetestuj online
Wyjaśnienie:
źródło
Galaretka , 15 bajtów
Wypróbuj online!
źródło
MathGolf ,
1715 bajtówZaoszczędzono 2 bajty dzięki Jo King i Kevin Cruijssen
Wypróbuj online!
Wyjaśnienie
Podejście 15-bajtowe różni się od mojego oryginalnego rozwiązania, nie mogę przypisać sobie żadnego uznania za wdrożenie.
źródło
if/else
działa MathGolf? Wiem, jak działają instrukcje if-without-else i else-without-if, ale jak utworzyć if {...} else {...} w MathGolf¿
? (Może powinienem opublikować to na czacie zamiast tutaj .. Ale może mógłbym zaoszczędzić 1 bajt, jeśli mogę naprawić if-else.)¿12
popchnie 1, jeśli prawda, w przeciwnym razie 2,¿Å3*Å1+
doda jeden, jeśli prawda, potroi kolejny element¿{"foo"}{"bar"}
lub¿1{2}
.Japt
-m
, 14 bajtówWypróbuj online!
Zaktualizowany o całkowicie nową metodę.
Wyjaśnienie:
źródło
ç
automatyczne rzutowanie pierwszego parametru na ciąg, dzięki czemu można upuścić'
.u
metody dzięki zawijaniu indeksu, więc może to być 14 bajtów.C (gcc) ,
8077767471 bajtówWypróbuj online!
-3 bajty z pomysłem tylko z ASCII .
-1 z
\0
zamiast\n
-5 przestawianie części
Dane wyjściowe obejmują końcowe
\0
.źródło
!n--
w pierwszym bloku koduJavaScript (ES6), 58 bajtów
Zwraca ciąg rozdzielony spacjami.
Wypróbuj online!
źródło
SNOBOL4 (CSNOBOL4) ,
123122118 bajtówWypróbuj online!
źródło
V , 22 bajtów
Wypróbuj online!
źródło
Węgiel drzewny , 16 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Miałem trzy 17-bajtowe rozwiązania, zanim w końcu natknąłem się na to. Wyjaśnienie:
Wejście
n
.n
Czasy powtórzeń , indeksowane 0.Narysuj linię
-
s o długości połowy wskaźnika (obciętą).Narysuj grot strzałki i przejdź do następnej linii.
Odzwierciedlaj wszystko, obracając groty strzał.
Powyższa pętla ma
n
odbicia, ale potrzebujemy parzystej liczby odbić, więc wykonaj kolejnen
odbicia.źródło
Czysty ,
7673 bajtówWypróbuj online!
Korzysta ze zgrabnego faktu, który
['-','-'..]
jest taki sam, jak['--'..]
trochę zaoszczędzić.źródło
JavaScript, 49 bajtów
Wypróbuj online!
źródło
10000
, tymczasem moje rozwiązanie ES6 nadal działa: D W każdym razie twoje rozwiązanie jest bardzo fajne)PowerShell, 51 bajtów
źródło
Kod maszynowy 6502 (C64), 49 bajtów
Nadal jest nieco krótszy niż BASIC ;) Ten ma zakres liczbowy tylko do tego,
255
ponieważ naturalna liczba całkowita maszyny ma tylko 8 bitów.Demo online
Zastosowanie:
SYS49152,[n]
(np.SYS49152,3
Na przykład z wyzwania)Skomentowany demontaż :
źródło
Perl 6 , 39 bajtów
Wypróbuj online!
Anonimowy blok kodu, który zwraca listę wierszy.
źródło
K (ngn / k) ,
3129 bajtówWypróbuj online!
najpierw generujemy listy z 0 zamiast
"<"
, 1 zamiast"-"
i 2 zamiast">"
:{
}
funkcja z argumentemx
x{
...}\0
zastosujx
czasy funkcji wewnętrznych , zaczynając od wartości początkowej0
i zachowując wyniki pośrednie|x
rewers2-
zamień 0 na 2 i odwrotnie, zachowaj 1s takimi, jakie są1,
przygotuj 1(1=*x)_
jest pierwszyx
równy 1? jeśli tak, upuść jeden element, w przeciwnym razie upuść 0 elementów (nic nie rób)2,
wstaw 2 dla początkowej">"
strzałkix#
mamy trochę za dużo list, więc weź tylko pierwsząx
z nich"<->"
użyj elementów list (0/1/2) jako wskaźników w tym ciąguźródło
05AB1E ,
2320 bajtówWypróbuj online!
Po raz pierwszy skorzystaj z 05AB1E lub innego języka golfowego. Wszelkie pomysły są mile widziane.
-3 od Kevina Cruijssena
źródło
"><"
może być„><
zapisać bajt. Istnieje builtins ciągów 1, 2 i 3 Char jest'
,„
i…
odpowiednio. Oto 18-bajtowa alternatywa, którą wymyśliłem, ale być może mogłaby być nieco bardziej golfa. Jeśli jeszcze tego nie widziałeś, mamy wskazówki dotyczące gry w golfa na stronie 05AB1E , a także możesz prosić o cokolwiek na czacie .C # (.NET Core) , 90 bajtów
Wypróbuj online!
Używa delegata akcji, aby pobrać dane wejściowe i nie wymaga powrotu.
Nie golfowany:
źródło
ES6,
96827970 bajtówWypróbuj online!(Dzięki @Oliver)
źródło
i=>
ustawić tę funkcję (po prostu przykleić przed kodem!), albo z argumentu wiersza poleceń, STDIN lub czegoś takiego.Czerwony ,
109108 bajtów-1 bajt dzięki NK1406
Wypróbuj online!
źródło