Zadanie:
Istnieje wiele odpowiedzi na tej stronie, które są ułożone w sztukę ascii, taką jak ta . Zazwyczaj aranżacja odbywa się ręcznie, ale czy program nie pomógłby w tym? :)
Twój program pobierze 3 dane wejściowe:
- Kod jako jedna linia
- Liczba linii we wzorze (można pominąć, jeśli nie jest to konieczne)
- Sam wzór, jako
*
s lub inny znak
Zasady:
- Musisz napisać program (nie funkcję), który czyta ze standardowego wejścia
- Tekst jest umieszczany od lewej do prawej w wierszu
- Jeśli nie ma wystarczającej ilości tekstu do wypełnienia wzoru, wstaw
.
s w pozostałych spacjach - Jeśli jest zbyt dużo tekstu, aby wypełnić wzór, wydrukuj go po wydruku
- code-golf , czyli wygrywa najkrótszy kod w bajtach
Przykładowe przebiegi:
Dane wejściowe (test dokładnego dopasowania) :
qwertyuiopasdfghjklzxcvbnm
4
***** * ***
* * * *
* * * *
***** * ***
Wyjście :
qwert y uio
p a s d
f g h j
klzxc v bnm
Dane wejściowe (test dodatkowych znaków) :
qwertyuiopasdfghjklzxcvbnm12345
4
***** * ***
* * * *
* * * *
***** * ***
Wyjście :
qwert y uio
p a s d
f g h j
klzxc v bnm
12345
Dane wejściowe (test niewystarczających znaków) :
qwertyuiopasdfg
4
***** * ***
* * * *
* * * *
***** * ***
Wyjście :
qwert y uio
p a s d
f g . .
..... . ...
X
es dla naszego program do pracy?Odpowiedzi:
GolfScript, 30 znaków
Uruchom online .
Przykłady:
źródło
Perl 6:
60 znakówEDYCJA : 38 punktów (patrz poniżej)Jeśli nie doceniasz moich okropnych umiejętności plastycznych, oto golf:
Ten robi dziwne rzeczy z czasami oceny.
Po pierwsze,
BEGIN
słowo kluczowe wymusza[get.comb, "." xx *]
ocenę w pierwszej kolejności, umieszczając w tablicy listę znaków tworzących „kod”, a następnie nieskończoną liczbę"."
s.Następnie
get
ocenia się koniec na podstawie liczby wierszy szablonu sztuki ASCII.xx
Operator powtarza pierwszej części programu to wiele razy. Ma to większy sens, gdy uświadomisz sobie, żecode() xx count()
jest to w zasadzie cukiercode() for 1..count()
:count()
należy go najpierw ocenić.Wreszcie
get
na początku programu pobierana jest linia szablonu sztuki ASCII i podstawia każdy"*"
wartością przesuniętą od początku tablicy, którą utworzyliśmy przed wszystkim innym ({shift BEGIN …}
).EDYTOWAĆ:
Grał w golfa do 37 znaków plus jeden dla przełącznika wiersza poleceń:
Jest to ta sama koncepcja, co oryginał,
-p
przełącznik iteruje po każdej linii (poBEGIN
przeczytaniu „kodu”) i zastępuje wszystkie*
s kolejną literą z „kodu” przed wydrukowaniem. Format wejściowy tego nie powinien zawierać liczby wierszy formatu.źródło
Ruby 2.0,
5352 znakiZgodnie ze specyfikacją nie używa parametru „liczba linii”.
Przykładowy przebieg:
Wynik:
źródło
./ascii.rb: line 2: syntax error near unexpected token `(' ./ascii.rb: line 2: `puts gets($n).gsub(?*){c.slice!(0)||?.},c'
puts
z$><<
i zmieniając,
na koniec do+
PowerShell ,
63868382 bajtów+20 bajtów dzięki @Weskah
Wypróbuj online!
Mniej golfa:
źródło
Japt , 18 bajtów
Spróbuj
źródło
sVl)iVr-@t°J1 ª'.
pracuje dla 17T-SQL, 142 bajty
Wypróbuj online
źródło
Perl 5
-plF
, 51 bajtówWypróbuj online!
źródło
JavaScript - 199
Wypisuje dodatkowe znaki podczas wprowadzania tekstu, jeśli nie są używane we wzorcu, używa dopełnienia „.” jeśli nie ma wystarczającej ilości.
EDYCJA: zmodyfikowana, aby była funkcją akceptującą tekst i wzór
źródło
function p(a,c){x=c.split(s='*').length-1;for(i=x-a.length;i--;)a+='.';for(;i++<x;)c=c.replace(s,a[i]);console.log(c+'\n'+a.substring(x))}
JavaScript (ES6) -
9687Uwaga: Jak sugeruje OP , używam funkcji. Ale jeśli wymagane jest posiadanie programu, oto rozwiązanie 93 znaków .
EDYCJA 1: Poważna zmiana, nie wiem, dlaczego nie zdałem sobie z tego sprawy po raz pierwszy: P Zapisałem 40 znaków.
Zastosowanie :
Wejście testowe : (bez zbędnego opcjonalnego numeru zgodnie ze specyfikacją)
Wyjście :
Nieskluczony kod :
Byłoby bardzo miło usłyszeć o sugestiach użytkowników :)
źródło
Perl, 70 znaków
Lub bez kontroli granicy 56 znaków
Uwaga: ten kod nie używa drugiej linii jak w specyfikacji i może zostać skrócony o trzy znaki
<>;
źródło
Grzmotnąć,
166 156 111106Odczytuje ze standardowego wejścia, nie pobiera liczby wierszy. Pierwszy wiersz wprowadzania to kod, który chcesz umieścić w sztuce ascii, wszystkie kolejne wiersze to sztuka ascii, składająca się ze
@
znaku. Dane wejściowe mają maksymalną długość 999 znaków i nie mogą zawierać ukośników . (Nie zdecydowałem się używać*
lub#
ponieważ mają one specjalne znaczenie w Bash).OSTRZEŻENIE: Ten program używa pliku o nazwie
p
. Po uruchomieniu programu, usuńp
- pomyli program przy drugim uruchomieniu.Większość pracy tutaj wykonuje
Pierwszy wiersz zastępuje pierwszy
@
w tej dziedzinie pierwszym znakiem kodu. Drugi wiersz usuwa pierwszy znak kodu.Jeśli nie ma wystarczającej ilości kodu, aby wypełnić kształt, nowa linia jest drukowana po głównym wydruku ascii art
echo $i
.źródło
C,
98, 91 znakówTutaj całkiem proste rozwiązanie C w mniej niż 100 znaków. Nie korzysta z danych wejściowych licznika linii. (W przeciwnym razie potrzebna byłaby druga niepotrzebna metoda get ()).
bez golfa:
źródło
puts(s)
zamiastprintf("%s",s)
zapisać 7 bajtów.\n
problem stanowi problem.Python 2.7,
165155150138119 znakówDobra, właściwie, ale myślę, że to najmniejszy sposób na zrobienie tego z Pythonem.
Edycja: nowa funkcjonalna wersja 1.0.1 z jeszcze mniejszą liczbą używanych bajtów:
Edycja2:
map(r,['']*input())
zamiast[r()for _ in[1]*input()]
i usunięto nieużywany importEdycja3:
'>'*input()
zamiast['']*input()
zapisywać jeden znak i dodawać znak zachęty do wzorca :)źródło
(['.']+l).pop(0)
zamiast(len(l)and l.pop(0)or'.')
zapisać 9 bajtów. Iinput()
zamiastint(r())
zaoszczędzić 1 bajt.input
! Niestety twoja pierwsza rada nie działa, ponieważ wyświetla kropki o długości łańcucha> 0.(l+['.']).pop(0)
zamiast tego, ale jeśli to nie zadziała, nadal możesz zapisać 4 bajty, używającl and
zamiastlen(l)and
.(l+['.']).pop(0)
nie usuwa elementów z,l
więc drukowany jest tylko pierwszy znak, alel
warunek działa :)C # (interaktywny kompilator Visual C #) , 122 bajty
Wypróbuj online!
źródło
"\n"+
05AB1E ,
181715 bajtówPobiera kod jako pierwsze wejście, wzorzec jako drugie (
0
zamiast zamiast#
).Wypróbuj online lub sprawdź wszystkie przypadki testowe .
1815 bajtów alternatywnych, przyjmując dane wejściowe w odwrotnej kolejności:Wypróbuj online .
Wyjaśnienie:
źródło