Według mnie tornado wygląda następująco:
########
#######
######
#####
####
###
##
#
To tornado zaczyna się od szerokości n
i w każdym następnym wierszu znak jest usuwany z lewej lub prawej strony, w zależności od danych wejściowych.
Wkład
Dane wejściowe będą listą dowolnych dwóch dowolnych wartości (ciąg dwóch unikalnych znaków również działa) i opcjonalną dodatnią liczbą całkowitą wskazującą szerokość początkową. Jeśli nie zostanie wybrana opcjonalna liczba całkowita, szerokość początkowa jest o 1 większa niż długość listy. Niech szerokość początkowa będzie n
.
Jak zrobić tornado
W moim przykładzie wybieram moją listę, aby zawierała 1
s i 0
s, chociaż możesz wybrać dowolne dwie różne stałe wartości lub ciąg dowolnych dwóch różnych stałych znaków.
Pierwszy wiersz będzie się składał z n
innych niż białe znaki (możesz wybrać dowolny spójny znak; wybrałem #
na przykład).
Następnie, dla każdego numeru na liście, jeśli jest nim 0
, usuń lewy znak i utwórz nowy wiersz; jeśli to 1
, usuń odpowiedni znak i utwórz nowy wiersz.
Tak więc powyższe tornado jest wyjściem dla 8, [1, 0, 0, 0, 1, 0, 0]
.
Wydajność
Dane wyjściowe mogą być listą ciągów, listą znaków lub łańcuchem wielowierszowym. Końcowe białe znaki w każdej linii są dozwolone, a końcowy nowy wiersz na końcu jest dozwolony.
Przypadki testowe
Te przypadki testowe obejmują szerokość początkową i listy zastosowań 1, 0
.
5, [1,0,0,1]
#####
####
###
##
#
10, [1,0,0,1,0,1,0,0,1]
##########
#########
########
#######
######
#####
####
###
##
#
7, [1,1,1,1,1,1]
#######
######
#####
####
###
##
#
100,
[1,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1]
Zasady
- Obowiązują standardowe luki
- Najkrótszy kod w bajtach wygrywa! golf-golf
- Tło nie musi być spacją (zapomniałem podać to wcześniej).
- Twój język musi obsługiwać tylko liczby (szerokości), które może obsłużyć, ale jeśli Twój tłumacz został przepisany z większym rozmiarem liczb, musi teoretycznie działać.
Odpowiedzi:
V ,
15, 12 bajtówWypróbuj online!
l
na prawo (ma sens, prawda?) i>
na lewo.źródło
Python 2 ,
6659 bajtów-7 bajtów dzięki Arnoldowi Palmerowi
Wypróbuj online!
0
usunąć z prawej strony,1
aby usunąć z lewej stronyźródło
len(z)+1
zex
jeśli „opcjonalnych dodatnia” oznacza, że nie trzeba go używać. Brzmienie pytania sprawia, że brzmi to tak, jak to jest dozwolone, ponieważ mówi „Jeśli nie zostanie wybrana opcjonalna liczba całkowita” w porównaniu z „Jeśli nie podano opcjonalnej liczby całkowitej”.vim,
8582 bajtów<ESC>
to 0x1B,<CR>
to0x0D
,<C-v>
to 0x16. I<ESC>OH
jest sekwencją wielobajtową reprezentującą klucz HOME.Dane wejściowe są używane
a
jako wartość „usuń z lewej” ib
jako wartość „usuń z prawej”.Niestety nie ma linku do TIO. Nie mogłem sprawić, by działał pod V. Test, kopiując kod do tornado.vim (zastępując
<ESC>
itp. Ich rzeczywistymi bajtami) i uruchamiając w następujący sposób:-3 bajty z powodu sugestii Neila.
źródło
^
zamiast␛OH
?^
przechodzi do pierwszego niepustego znaku.␛OH
idzie do pierwszej postaci.0
...05AB1E ,
119 bajtów-2 bajty dzięki Erikowi Outgolfer
Usuń od lewej:
1
Usuń od prawej:
0
Wypróbuj online!
źródło
0×ηsηO
ma tak duży potencjał, ale nie potrafię tego rozgryźć poniżej 11 bajtów.ðy×ì
zyú
o-2.Siatkówka ,
3028 bajtówWypróbuj online! Pobiera tylko ciąg zer i jedynek i oblicza szerokość na podstawie ciągu. Objaśnienie: Pierwszy etap pobiera ciąg wejściowy i kopiuje go jeden raz dla każdego punktu granicznego, wstawiając
#
w tym punkcie. Drugi etap następnie zmienia wszystkie cyfry po#
kolejnych#
s, tworząc trójkąt. Trzeci stange następnie usuwa wszystkie pozostałe i zmienia zera na spacje, co powoduje „kołysanie” torndao.źródło
J, 32 bajty
bez golfa
Wypróbuj online!
źródło
' #'#~0(,.#\.)@,+/\
, w których dane wejściowe są odwrócone od próbki, ponieważ wyzwanie pozwala wybrać dwie różne wartości.Perl, 43 bajty
Kod 42 bajtów + 1 dla
-l
.Wypróbuj online!
źródło
R ,
8582 bajtów3 bajty zapisane dzięki Giuseppe
Wypróbuj online!
Wyjaśnienie:
źródło
{}
i użyłem dosłownie nowego wiersza zamiast'\n'
Haskell, 50 bajtów
Wypróbuj online!
Jeśli lista wejściowa może być listą nazw funkcji, możemy zapisać bajt
Haskell, 49 bajtów
Przykład użycia:
h 5 [g,f,f,g]
.Wypróbuj online!
Jak to działa:
źródło
Python 2,
5857 bajtówedycja: zapisano 1 bajt dzięki xnor
Wypróbuj online!
1, aby usunąć z lewej strony, 0, aby usunąć z prawej strony.
źródło
s=" "*i+s[:-1]
pomocą zamiany lewej i prawej.R ,
116109102 bajtów-5 bajtów dzięki user2390246 (i kolejne 2 uratowałem siebie)
Outgolfed by user2390246
Wypróbuj online!
Zwraca anonimową funkcję, która bierze
n
i wektorl
z0
do usuwania z lewej i1
do usuwania z prawej, i drukuje wynik na konsoli z odpowiednim formatowaniem.źródło
#
s będzie n-i + 1: Wypróbuj online! Chociaż jest nieco lepsze podejście, jeśli drukujesz wiersz po wierszu zamiast konstruować matrycę: codegolf.stackexchange.com/a/133720/66252Japt ,
1413 bajtów-1 bajt dzięki @ETH
Dane wejściowe to tablica, a następnie rozmiar. Wartościami tablic są
""
lub" "
, które reprezentują usuwanie odpowiednio z prawej lub lewej strony. Używa"
zamiast#
i zwraca jako tablicę ciągów.Chodziło o to, aby najpierw utworzyć tablicę lewego wypełnienia dla każdej linii, stąd ciągi wejściowe. Następnie do każdego wiersza
"
dodaje się s, wykorzystując fakt, że ilość"
s zmniejsza się za każdym razem o 1.Wypróbuj online!
Wszystkie używają
-R
flagi do sformatowania wyniku, łącząc go z znakami nowej linii.Wyjaśnienie
Implikowany:
U
= tablica wejściowa,V
= numer wejściowy.Łącznie zmniejsz tablicę wejściową (
å
) za pomocą funkcji konkatenacji ciągów (+
). Daje to tablicę każdej wartości pośredniej redukcji. Następnie dodaj do tablicyu
pusty ciąg (P
).Odwzoruj
£
każdą wartość na siebie (X
) połączoną z ...Cudzysłów (
Q
) powtórzył (p
)V--
(V´
) razy. To również zmniejsza się zaV
każdym razem.źródło
YnV
naV´
++
lub--
w Japt.ArnoldC , 3132 bajtów
ArnoldC nie ma konkatenacji łańcuchów, więc to buduje tornado ze
8
s i używa1
s, aby je rozdzielić . ArnoldC obsługuje również tylko 16-bitowe liczby całkowite, więc przepełnia się wejściem dłuższym niż 7 cyfr. (Czyli będzie to tylko mini-tornada)1
jest pozostała, każda inna cyfra ma rację (chociaż nie polecałabym0
, ponieważ nie można zacząć od tego).Wkład:
1221122
Wydajność:
Kod do gry w golfa:
Wypróbuj online!
Nieskluczony kod (5178 bajtów):
źródło
Haskell ,
6764 bajtówDane wejściowe są odwrócone:
0
oznacza usuń w prawo i1
usuń w lewo:Wypróbuj online!
„Niegolfowany”
źródło
Java (OpenJDK 8) ,
138133 bajtówWypróbuj online!
źródło
C,
6863 bajtówWykorzystuje to dynamiczną specyfikację szerokości pola w ciągu
printf()
formatu. Funkcja nazywa się tak:źródło
int s=0;
i umieszczającs;
przedf(w,i)
. Tak toJavaScript (ES6), 64 bajty
Anonimowa funkcja pobierająca parametry w składni curry (a) (b). W tablicy b pusty ciąg reprezentuje usuwanie z prawej strony, a spacja oznacza usuwanie z lewej strony.
Używając 1 i 0 jak w przykładach, wynik wynosi 70
Test
źródło
PowerShell , 53 bajty
Wypróbuj online!
Pobiera dane wejściowe
$a
jako opcjonalną liczbę całkowitą oraz$b
tablicę1
i0
s. (Zauważ, że moja tablica1
i0
jest przerzucana z wyzwania.) Konstruuje linię początkową#
i pozostawia ją w potoku. Następnie pętle od0
do$a
. Każdej iteracji generujemy możliwie zwiększoną liczbę spacji, a następnie wstępnie zmniejszoną liczbę spacji#
. Tak, to wypluje pusty końcowy znak nowej linii na końcu, ponieważ zapętlamy w górę do$a
liczby elementów na liście zamiast do niej.Wszystkie pojedyncze ciągi znaków są pozostawione w potoku, a dane wyjściowe z separatorem nowej linii między nimi są niejawne po zakończeniu programu.
źródło
C #, 181 bajtów
Wypróbuj online!
Pełna / sformatowana wersja:
źródło
Węgiel drzewny , 17 bajtów
Wypróbuj online! Link do najbliższej pełnej wersji kodu. Wyjaśnienie:
Pierwsze wejście podaje liczbę iteracji pętli.
Ponieważ indeksy pętli są domyślnie indeksowane na zero, dodajemy tutaj jeden, aby uzyskać prawidłową liczbę
#
s.Zaczynając od dolnej części tornada i praca w górę oszczędza bajt, ale następnie musimy odwrócić drugie wejście, abyśmy mogli zindeksować bieżącą cyfrę.
Jeśli bieżącą cyfrą jest a
1
, przejdź w górę. To sprawia, że poprzedni wiersz ma dodatkowy#
na końcu.Jeśli bieżąca cyfra to a
0
, przesuń w górę i w lewo. To sprawia, że poprzedni wiersz ma dodatkowy#
na początku.źródło
C # , 159 bajtów
Wyjaśnienie
Wypróbuj online!
źródło
PHP, 136 bajtów
Zapisz w pliku php i przetestuj za pomocą
php file.php 8 '1,0,0,0,1,0,0'
. Wydajność:Niestety, przygotowanie danych wejściowych to połowa zadania.
Kolejna wersja (158 bajtów) wykorzystująca
str_repeat
zamiastprintf
i ...goto
wszystkich rzeczy:źródło