W tym wyzwaniu musisz wziąć wielowierszową grafikę ASCII jako dane wejściowe, takie jak:
OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO OO OOOOOOO
OO OO OO OO OO OO OO OO OO OO OO
OO OO OO OO OO OOOOO OO OOO OO OO OO OOOOO
OO OO OO OO OO OO OO OO OO OO OO OO
OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO OOOOOOO OO
I weźmiesz również liczbę całkowitą jako dane wejściowe. Musisz wyprowadzić grafikę ASCII powiększoną o liczbę określoną za pomocą liczby całkowitej. Na przykład, jeśli użyjesz drugiego argumentu 3
, wynikiem będzie
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
W szczególności, każda postać musi przerodzić się n
przez n
pole tego znaku, gdzie n
jest argument całkowitą. Na przykład wejście
ab
cd
a 3 spowoduje
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
Odpowiedzi:
APL, 7 znaków / bajtów *
Funkcja, która przyjmuje liczbę i łańcuch wejściowy jako parametry i zwraca wynik:
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL można zapisać we własnym (starszym) jednobajtowym zestawie znaków, który odwzorowuje symbole APL na górne 128 bajtów. Dlatego do celów oceniania program N znaków, który używa tylko znaków ASCII i symboli APL, może zostać uznany za N-bajtowy.
źródło
/
Funkcja (nie należy mylić z/
operatorem… tak, ten sam symbol ) powiela i / lub usuwa kolumny z macierzy zgodnie z argumentem po lewej stronie. Jeśli jest to skalar (liczba prosta), to jest replikowany dla wszystkich kolumn wejściowych. Dlatego2/m
macierz z podwójnymi kolumnami.⌿
Wariant robi to samo, ale dla wierszy (lub płaszczyzn pierwszej osi w przypadku ogólnym.)GolfScript, 20 znaków
Pobiera wszystkie dane wejściowe ze STDIN, pierwszy wiersz to współczynnik skalowania, a reszta to wejście wielowierszowe. Możesz spróbować przykład online .
Wejście
Wynik
Kod
źródło
1/
. Potrzebuję teżvalue function +
więcej.golfscript.rb
nie jest oznaczony jako wykonywalny lub że pierwsza linia ma niewłaściwą ścieżkę do tłumacza Rubiego dla twojego systemu. Och, i takecho
powinno byćcat
. Spróbujcat inputFile | ruby golfscript.rb scriptFile
(lub po prosturuby golfscript.rb scriptFile < inputFile
) i sprawdź, czy to działa.J,
2017 znakówDefiniuje czasownik,
f
który wykonuje to, co jest wymagane. Stosowanie:gdzie
a
jest ciąg wejściowy.W systemie Windows wymagany jest dodatkowy znak, aby usunąć
\r
:Objaśnienie :
];._2
tnie łańcuch wejściowy na kawałki na podstawie ostatniego znaku łańcucha, który w tym przypadku będzie oznaczony jako\n
. Windows ma\r\n
więc musimy użyć}:
do posiekać dodatkowy charakter off:}:;._2
. Wytnij dokumentację czasownikaReszta kodu (z wyjątkiem przypisania
f=.
) to rozwidlenie .Rozkłada się w następujący sposób:
[ #&.|: #
Jeśli
a
jest naszym ciągiem wejściowym, obliczenia będą3 # a
(nazwiemy ten wynikx
), a następnie3 [ a
(wywołamy ten wyniky
)y #&.|: x
.3 # a
wykonuje trzy kopie każdego członkaa
. Kopiuj dokumentację czasownikaOkazuje się
w
3 [ a
po prostu zwraca 3. Dokumentacja lewego czasownikaWreszcie kopia
y #&.|: x
jesty
transponowanax
. Te#
prace jak poprzednio, ale&.|:
mówi J transpozycji wejście, a następnie przenieść go z powrotem, gdy jest gotowy. Zgodnie z dokumentacją spójnik , transpozycji dokumentację czasownik .Transpozycja się zmienia
w
następnie kopia zmienia to na
a przeniesienie go z powrotem daje
źródło
[##"1
Nie jestem też pewien niepisanych zasad gry w golfa w J, ale powiedziałbym, że podział struny i przypisanie można pominąć, biorąc pod uwagę luźne wymagania pytania. Z pewnością zrobiłem to w mojej odpowiedzi APL. Przykład:2 ([##"1) 'abcde',:'fghij'
Haskell, 49 bajtów
Funkcja powiększania polega na tym
e
, że pobiera liczbę i ciąg znaków i zwraca ciąg znaków:źródło
APL, 11 znaków
@Gareth najpierw zrobił to samo, w J, więc ten wpis APL jest tylko na wystawę, a nie konkurencję - jest zwycięzcą.
Zastosowanie: powiększenie w lewym arg (⍺), grafika w postaci macierzy 2d znaków w prawym arg (⍵).
⍺ / ⍵ powiela elementy w każdym rzędzie wektora lub macierzy (2 / „OO” zmienia się w „OO OO”).
⍉⍺ / ⍉ transponuje to, replikuje elementy, transponuje to.
(Gdybyśmy dążyli do przejrzystości zamiast długości programu, kod mógłby być E ← {⍺ / [1] ⍺ / ⍵})
źródło
Skrypt Bash / sed, 48 znaków
Zapisz jako skrypt
chmod +x
i uruchom:Jak to działa?
Jego mięso jest w
sed
poleceniu. Na przykład, jeśli n = 3, to polecenie sed jest rozwijane do czegoś takiego:To złożone
sed
polecenie można podzielić na:s/./&&&/g
- to polecenie zastępujące pasuje do każdego znaku i zastępuje je znakiem powtarzanym 3 razyp
Komendy 3x - to tylko 3 razy drukuje całą przestrzeń wzoru (tj. Bieżącą linię)Przechodzimy
-n
do sed, aby powiedzieć mu, aby niczego nie drukował, chyba że jest to wyraźnie wskazane, więc mamy pełną kontrolę nad tym, co jest drukowane i ile razy.Nie mogłem wymyślić szybkiego sposobu generowania bezpośrednio ciągów o dowolnej długości
sed
, więcbash
zamiast tego użyłem kilku sztuczek:Spowoduje to wydrukowanie ciągu (nieokreślonego, tj. Pustego) z 3 wiodącymi spacjami i przypisanie wyniku do
bash
zmiennejr
.Następnie używamy interpretacji
bash
parametrów, aby przekształcić ten ciąg spacji w to, co musimy zastąpić wsed
wyrażeniu:Udało mi się usunąć cytaty wokół specyfikatora
printf
formatu ised
wyrażenia, ponieważ żaden z zawartych w nim znaków nie musi uciekać wbash
powłoce.Liczba znaków:
źródło
$1
i usuńn=3;
, a nawet zapiszesz 4 znaki i być może również{}
w printf.printf
argumentacja nie są konieczne, redukując go do 52 znaków:r=`printf %$1s`;sed -n "s/./${r// /&}/g${r// /;//p}"
.PERL,
41 39 2522 znakówPERL, prosty i skuteczny - stworzony specjalnie do tego zadania. Po wywołaniu za pomocą
-pi3
, gdzie3
jest parametrn
:Klasyczne rozwiązanie (39 znaków):
Klasyczne rozwiązanie wymaga tego, które
n
jest określone w pierwszym wierszu danych wejściowych, npDzięki @manatwork za
$&
sztuczkę.źródło
s/./$&x$n/ge
.Rubin:
6449 znakówWszystkie dane otrzymane na STDIN: najpierw wiersz współczynnik skalowania, następnie art ASCII.
Przykładowy przebieg:
Rubin:
4441 znakówZakładając, że każda linia wejściowa jest zakończona separatorem linii. Dzięki @Ventero.
Przykładowy przebieg:
źródło
n
:$.<2?n=$_.to_i: $><<$_.gsub(/./){$&*n}*n
(niestety, przestrzeń po dwukropku jest konieczna, w przeciwnym razie parser się myli). Uruchom zruby -n
.Python 3 - 84
Nie najkrótsza, ale inna odpowiedź. Ciekawy jednowarstwowy.
Najpierw wpisz liczbę, a następnie grafikę ASCII jako listę Pythona, np .:
źródło
GolfScript, 29 znaków
Definiuje blok
f
, który po wywołaniu wytworzy pożądany wynik. Zakłada, że argumenty znajdują się na stosie (ponieważ w ten sposób argumenty są przekazywane w GolfScript).Niegolfowany (czy to ma w ogóle sens?: P):
źródło
Golfscript, 23 znaki
Zdecydowałem się napisać cały program, ponieważ ma on mniejszy narzut niż nawet anonimowa funkcja:
~(:i;
- sprawdź dane wejściowe, a następnie zmniejsz mnożnik, zapisz go jakoi
i odrzuć.n/{...}%n*
- podzielone według nowych linii, zamapuj każdą linię, połącz przez nowe linie{...}:c%c
, - weź blok, zastosuj go na mapie - każdy element, a następnie zastosuj do całej linii.{.}i*
- zduplikuj ten elementi
razyDemo na żywo: http://golfscript.apphb.com/?c=OyciYWJjCmRlZiIzJwp%2BKDppO24ve3t7Ln1pKn06YyVjfSVuKg%3D%3D
Przykładowe użycie:
źródło
Python 3 -
10910793Najpierw wprowadź liczbę, a następnie ciąg. Powinno być zrozumiałe ...
Dzięki Waleed Khan za sugestię usunięcia[]
Dzięki Zmienności za zasugerowanie posiadania
a
listy.źródło
a
listę, zróba+=[''.join(c*n for c in s)]*n
, a potem zróbprint('\n'.join(a))
na końcu. To powinno działać.Java - 217
Najpierw spróbuj golfa. Wygląda na to, że Java nie jest językiem, w którym można to zrobić.
W systemie Windows należy zamienić „\ n” na „\ r \ n”.
źródło
aaabbb
i 3 wierszecccddd
).for
; 8 znaków przy użyciu zamiast x (a=a[1].split("\n")
i zmień wszystkie x za pomocą a).main
zajmuje więcej bajtów niż całe programy w innych językach, zawodnicy będą mieli bogeys.enum M{;public static void main(String[]a){int f=Integer.valueOf(a[0]),i=-1,j,k;a=a[1].split("\n");for(;++i<a.length*f;System.out.println())for(j=0;j<a[i/f].length();j++)for(k=0;k++<f;)System.out.print(a[i/f].charAt(j));}}
Integer.valueOf(a[0])
->new Integer(a[0])
(Edycja: To rozwiązanie jest teraz nieprawidłowe, ponieważ
銻
zmieniła się semantyka instrukcji. Nie zdawałem sobie sprawy, że już skorzystałem z instrukcji, gdy ją zmieniłem. Możesz jednak naprawić ten program, po prostu zmieniając go na nowsza instrukcja壹
).Sclipting , 19 znakówOczekuje, że dane wejściowe zostaną oddzielone
\n
(nie\r
), a pierwszy wiersz będzie zawierał mnożnik.Wyjaśnienie
Na końcu stos będzie wyglądał następująco:
Wszystko powyżej znaku jest automatycznie łączone i wyprowadzane, reszta jest odrzucana.źródło
i
jest wymawiany [iː], a nie [ɑi]; jak napisałbyś to teraz po chińsku?J, 7 znaków
Dokładnie to samo, co w odpowiedzi APL @ Tobia, ale w znakach ascii.
źródło
PowerShell (96)
Myślałem, że dam temu szansę w PS. Używanie potoków w foreach's (%), aby było tu krótko, ale
function
iToCharArray
sprawiają, że wymaga to zwięzłości.Aby go użyć, wywołujesz go z wiersza poleceń w następujący sposób:
Oto niezminimalizowana wersja:
źródło
function m($n,$s){-split$s|%{,(-join($_-split''|%{$_*$n}))*$n}}
dla 63 bajtówJulia, 74 znaki / bajty
7 mniej, jeśli tylko zwrócę ciąg.
julia>
to interaktywny monit.źródło
Płótno , 2 bajty
Wypróbuj tutaj!
źródło
PowerShell, 54 bajty
Skrypt testowy:
Wyjaśnienie:
$s-replace'.',('$0'*$n)
powtarza każdy symbol z wyjątkiem nowej linii.-split'``n'
dzieli szeroki ciąg na nową linię|%{,$_*$n}
powtarza każdą linię jako element tablicy i zwraca tablicęWynikiem jest tablica szerokich i powtarzających się ciągów.
źródło
R , 83/72 bajty
Alt podejście przy użyciu wyrażeń regularnych
Jeśli pozwolono nam na końcowy znak nowej linii, 72 bajty:
Wypróbuj online!
W przeciwnym razie 83 bajty:
Wypróbuj online!
źródło
K, 20
.....
źródło
Extended BrainFuck : 158
Okazuje się:
Brainfuck: 185
Wymaga interpretera, który ma 0 lub brak zmiany jako znacznik EOF.
beef
, dostępne z repozytoriów Ubuntu, działa pęczniejąc:Nieskluczony kod EBF:
źródło
Rebol -
8779Ładnie sformatowana wersja:
Przykład użycia:
NB. Ten kod działa obecnie tylko w Rebol 2 ( używana funkcja INPUT nie jest jeszcze w pełni zaimplementowana w Rebol 3).
źródło
R , 125 bajtów
Wypróbuj online!
Konwertuje ciąg znaków na UTF8, umieszcza w macierzy, której kolumny to wiersze tekstu (usuwając znaki nowej linii), a następnie powtarza każdy znak i wygenerowane linie przed drukowaniem oddzielnie od nowych linii.
źródło
R - 89
źródło
cat
do wydrukowania go jako standardowego? Dodatkowo każdy element sznurka powinien być nie tylko powtarzany n razy długości, ale powtarzany również w szerokości.<-
możesz=
,paste0
możesz ją tutaj zastąpić,paste
ponieważ i tak używasz argumentu zwinięcia, a argumenteach
można skróciće
. Zobacz tutaj kilka podstawowych pomysłów nastringr
MATLAB: 20 znaków
To rozwiązanie zakłada, że obraz jest przechowywany w pliku o nazwie
startup.m
i że podczas wywoływania Matlaba można podać liczbę replikacji, można to zrobić za pomocą:!matlab -r "n=3"&
MATLAB, wywołanie bez argumentu: 23 znaki
W przeciwieństwie do pierwszego rozwiązania, dwa ostatnie zakładają, że nie można oczekiwać liczby replikacji w wywołaniu. W przypadku tych rozwiązań oczekiwany jest oryginalny ciąg i numer w pliku wywoływanym
matlab.mat
w bieżącym katalogu.MATLAB, matematyczna alternatywa: 27 znaków
źródło
C # (177)
Oczekuje ciągu wejściowego „i” zawierającego nowe wiersze „\ n” jako separatora.
Sformatowany
źródło
CJam, 14 bajtów
CJam jest nowszy niż to wyzwanie (a główna funkcja, z której korzystam, jest bardzo nowa), więc ta odpowiedź nie kwalifikuje się do zaakceptowania - ale i tak nie pokonuje APL, więc ...
Sprawdź to tutaj.
Wyjaśnienie
Dzięki nowemu,
e*
który powtarza każdy znak w ciągu, jest to bardzo proste:źródło
{N/1$fe*e*N*}
RProgN 100 bajtów (Windows) Niekonkurencyjny
RProgN nie ma znaków ucieczki podczas pisania, co powoduje, że każda obsługa nowych linii wymaga fizycznej nowej linii. Jako taka, ta odpowiedź (i wszelkie dane wejściowe) musi używać CRLF, a nie tylko LF. :(
Ponadto funkcja „rep” została dodana dopiero po wydaniu tego wyzwania, dlatego nie jest konkurencyjna.
źródło
Vim, 39 naciśnięć klawiszy (bez wprowadzania danych, niekonkurowania)
gotcha i powodem, dla którego to nie konkuruje, jest to, że dane wejściowe należy wprowadzić dwukrotnie. Zamień oba
2
na własne dane wejściowe.Wyjaśnienie
qayl2phxl@aquu
rejestruje makro szarpiące postać, wklej ją i przejdź do następnego, a następnie odtwarza się. Następnie cofa zmiany. Ponieważ chcemy, aby pętla nie była nieskończona, nie usuwamy znaku, co oznacza, że musimy usunąć zewnętrzną, ale nadal kończymy ruchem, który kończy się niepowodzeniem na ostatnim znaku.:%norm @a<cr>
uruchamia makro w każdej liniigg0
wraca do samego początkuqbyy2P2jkddj@bq@b
używa tej samej techniki, co@a
przy kopiowaniu każdej linii, ale z rekurencyjnym makrem.Wiem, że można to bardziej pograć w golfa, np. Przechodząc wstecz do duplikacji linii, ale z powodu wymogu wielokrotnego wprowadzania danych, zatrzymam się tam i oznaczę tę odpowiedź jako niekonkurującą.
Poprzednia odpowiedź (32 naciśnięcia klawiszy, tylko dwukrotnie)
Wyjaśnienie
qaylpl@aqu
rejestruje makro szarpiące postać, wklej ją i przejdź do następnego, a następnie odtwarza się. Cofnij zmianę.:%norm @a<cr>
uruchamia makro w każdej linii:%s/.*/&\r&<cr>
podwaja każdą linięChciałem zrobić zagnieżdżone makro, ale wewnętrzny (znaki) zatrzymuje zewnętrzny (linie) ... Więc muszę uruchomić dwa polecenia, dodając całkiem sporo naciśnięć klawiszy do skądinąd prostego rozwiązania.
źródło