Twoim zadaniem jest generowanie pól przy użyciu dowolnego znaku ASCII w odniesieniu do podanych danych wejściowych.
Przypadki testowe
1 1 --> =====
= =
=====
1 2 --> =========
= = =
=========
2 1 --> =====
= =
=====
= =
=====
2 2 --> =========
= = =
=========
= = =
=========
2 5 --> =====================
= = = = = =
=====================
= = = = = =
=====================
Wejście
Dane wejściowe można pobrać z jednego z poniższych
stdin
- Argumenty wiersza polecenia
- Argumenty funkcyjne (2 argumenty, po jednym dla każdej liczby)
Dane wejściowe, jeśli zostaną pobrane z
stdin
argumentów lub wiersza poleceń, będą zawierać dwie dodatnie liczby całkowite, oddzielone spacją.- Dwie liczby oznaczają liczbę pól w każdej kolumnie i rzędzie
Wynik
- Pola muszą być wyprowadzane w
stdout
(lub najbliższym odpowiedniku) - Każde pudełko powinno mieć trzy poziome odstępy
Zasady
- Obie liczby będą większe niż 0, ale nie przekroczą 1000
- Do wyświetlania pól można użyć dowolnego widocznego znaku. (o ile nie są zbyt surowe dla oka!)
- Możesz napisać pełny program lub funkcję.
- Nie powinno być żadnych niepotrzebnych znaków oprócz opcjonalnego końcowego znaku nowej linii.
Punktacja
To jest golf golfowy , więc wygrywa najkrótsze przesłanie (w bajtach).
JavaScript ( ES6 ), 83
Funkcja z parametrami wierszy i kolumn. Za pomocą ciągów szablonów istnieją 2 osadzone znaki nowej linii, które są znaczące i zliczane.
Wyjście przez
alert
(popup). Jakoalert
użytku proporcjonalny czcionki, możemy uzyskać lepszy rezultat przy użyciu litery o szerokości podobna do przestrzeni zamiast=
.Przetestuj w Firefoksie za pomocą konsoli, aby uzyskać prawdziwe
alert
dane wyjściowe, lub uruchom poniższy fragment kodu.źródło
Test in Firefox
JavaScript (ES6),
7573Używając obfitych
repeat
wywołań, powtarzamy|
, a następnie powtarzamy|
z końcowymi spacjami i powtarzamy oba te powtórzenia, aby utworzyć wiersze:(Nowe linie są znaczące, zgodnie z sugestią edc65 użycia ciągów szablonów).
Skrawek:
Bez ciągów szablonów, bez ponownego użycia nazwy metody i z dodanymi białymi znakami:
(Korzystanie z zalecenia edc65 w celu
|
uzyskania lepszych odstępów wizualnych).źródło
Pip,
2924 = 23 + 1 bajtówWymaga
-n
flagi. Pobiera wysokość i szerokość jako argumenty wiersza poleceń i buduje pola1
s.Wyjaśnienie:
Ten program w dużym stopniu wykorzystuje fakt, że ciągi są liczbami, a liczby są ciągami w Pipie. (A trzy spacje w tych polach były w sam raz, aby skorzystać z wbudowanej
m
zmiennej!)Oto, w jaki sposób lista jest budowana przy użyciu danych wejściowych
2 3
:I końcowy wynik:
Więcej na Pip
źródło
Perl,
72635250 bajtówMoja najkrótsza wersja wykorzystuje jeszcze
$/
bardziej zwięźle znak nowej linii:Poprzednia aktualizacja umieszcza najczęściej puste linie w separatorze rekordów wyjściowych
$,
i drukuje listę linii ciągłych.Poprzednia wersja może być nieco jaśniejsza dla zwykłego czytelnika:
Pierwsza wersja użyta
@ARGV
zamiastpop
:źródło
Python 2,
5857 bajtówDość prosta implementacja.
Sprawdź to tutaj.
Dzięki Sp3000 za oszczędność jednego bajtu.
źródło
GNU sed -r, 160
Westch, myślałem, że będzie mniejszy, ale i tak jest. Niestety wyrażenia regularne sed nie mają żadnych możliwości wyszukiwania.
Przyjmowanie danych wejściowych jako jednostkowe z STDIN:
źródło
CJam, 25 bajtów
Wypróbuj online w interpretatorze CJam .
Jak to działa
źródło
Cudowny, 168 bajtów
Ta odpowiedź działa tylko do 255 x 255, a nie 1000 x 1000, ze względu na ograniczenia języka Marbelous. Pracuję nad biblioteką 32-bitową, ale nie będzie ona gotowa w najbliższym czasie.
Wejście jest dostarczane jako dwa parametry wiersza poleceń lub parametry funkcji na płycie głównej.
Pseudo kod:
źródło
CJam
52514641 bajtówDzięki Sp3000 za -5 znaków
Podziękowania dla Martina Büttnera ♦ za kolejne 5 znaków
Spróbuj
źródło
funkcja c, 81
Program testowy:
źródło
x;f(h,w){for(w=w*4+2;x<=w*h*2+w;x++)putchar(x%w?x/w%2?x%w%4!=1?32:61:61:10);}
PHP4.1,
767169 bajtówTo jest tak golfa, jak tylko mogę.
Oczekuje to, że klucz
H
będzie miał liczbę linii iV
liczbę pól w linii.Używam
-
i|
właśnie dlatego pudełka faktycznie wyglądają jak pudełka. W razie potrzeby mogę go zmienić na=
. Nie ma znaczenia zastosowany znak.Opuszczenie,
-
a|
także pomaga zrozumieć bałagan, który się dzieje.Stara metoda, 76 bajtów:
Przykład wyniku:
źródło
Julia, 59 bajtów
Tworzy to nienazwaną funkcję, która przyjmuje dwie liczby całkowite jako dane wejściowe i drukuje wynik do STDOUT. Aby to nazwać, nadaj mu nazwę, np
f=(n,m)->...
.Niegolfowane + wyjaśnienie:
Przykłady:
Wszelkie sugestie są mile widziane.
źródło
bash + coreutils, 57
Służy
dc
do drukowania liczb binarnych, które mają1
s dla krawędzi pola i0
s dla spacji.2 ^ (width * 4 + 1) - 1
, a następnie wypychana i drukowana10001...0001
liczba jest obliczana , a potem pchnąłX
* 8 / 15 + 1
height
razytr
Następnie konwertuje0
s do znaków spacji.Wynik
źródło
R,
8381Jako funkcja bez nazwy przyjmująca hi jako parametry. Konstruuje pierwszą i drugą linię w wektorze dla każdego wiersza i powiela go
h
razy. Dołącza wektor do dolnej linii icat
wysuwa wektor za pomocą,fill
aby ograniczyć długość linii. Teraz korzysta z dowolnej widocznej reguły postaci.Testowe uruchomienie
źródło
Python
32,160878579 bajtówWiem, że to może być golfed dużo więcej, chciałbym kilka wskazówek jak to jest moja pierwsza próba w golfa.
Dzięki wskazówkom @Cool Guy i @ Sp3000 zmniejszyłem rozmiar do nieco
powyżejpołowy.Np .: d (3,3)
Wypróbuj tutaj .
Przepraszam za końcowe białe znaki.
źródło
'='*(4*y+1)
w=4*y+1
oszczędza 3 bajty.KDB (Q), 37 bajtów
Wyjaśnienie
Test
źródło
JavaScript,
9285 bajtówMiałem nadzieję, że będzie to krótsza odpowiedź niż inna odpowiedź JS (dobra robota jak zawsze, edc65), ale no cóż. Mam przeczucie, że matematykę można pograć w golfa.
źródło
f=(r,c)=>(x=>{for(i=s='';(y=i++/x)<r-~r;)s+=i%x?' *'[-~y%2|!(-~i%4)]:'\n'})(4*c+2)||s
-> 852*r+1
=>r-~r
są dokładnie tym, co miałem na myśli, grając w matematykę, a ten konkretny jest genialny. :)Oktawa,
696564Dzięki DLosc za wskazanie problemów, które doprowadziły do -1
Pobiera dane wejściowe
[1 1]
i wyjściowe:Możesz także wpisać „1” i otrzymać 1x1. Jeśli dane wejściowe naprawdę muszą być
1 1
, rozmiar wzrasta do888584 :Uwaga: Matlab nie zezwala na tworzenie łańcuchów lub danych Octave (liczba całkowita), ale oto wersja Matlab ( 67 ):
źródło
C, 76 bajtów
Wywoływany jako funkcja z liczbą wierszy i kolumn jako argumentów. Na przykład:
źródło
CJam,
3029 bajtówNowa wersja z nadmiarowymi
+
na końcu usunięta (dzięki, Dennis):Wiem, że Dennis opublikował już rozwiązanie CJam, które pokonuje to o mile. Ale to moja pierwsza próba w CJam, więc to cud, że w ogóle działa. :)
Dość brutalna siła. Tworzy pierwszą linię ze
4 * H + 1
=
znaków, a następnie drugą linię z=
powtarzanychH
czasów, z kolejną=
dodaną. Następnie łączy dwie linie, powtarza całyV
czas, a następnie dodaje kolejną kopię pierwszej linii.Mam wrażenie, że mam zbyt wiele manipulacji na stosie, a nawet zapisałem pierwszą linię w zmiennej, ponieważ musiałem tasować rzeczy na stosie jeszcze bardziej.
Ogólnie niezbyt elegancki, ale musisz gdzieś zacząć ... a ja najpierw chciałem spróbować prostego problemu.
źródło
+
koniec nie potrzebujesz . CJam drukuje cały stos.CJam, 23
Wypróbuj online
Wyjaśnienie:
źródło
Dart, 57
Wypróbuj na: https://dartpad.dartlang.org/36ed632613395303ef51
źródło
Java, 181
Mam nadzieję, że według
jest zgodny z regułami, aby policzyć bajty funkcji , która w tym przypadku wynosi 181
źródło
for(r=R;r-->0;){x=y=e;for(c=C;c-->0;){x+=a;y+="= ";}s+=x+n+y+n;}
nafor(r=R;r-->0;s+=x+n+y+n){x=y=e;for(c=C;c-->0;y+="= "){x+=a;}}
C #,
153151150To naprawdę nie może konkurować, ale tutaj jest tylko dla zabawy:
Jak uruchomić:
Otwarty na ulepszenia.
źródło
int
poza pętlą może zaoszczędzić bajt.Python 2.7, 66 bajtów.
Wiem, że w Pythonie są już lepsze rozwiązania, ale to najlepsze, jakie wymyśliłem.
Przykład:
źródło
Ruby,
574845Stosowanie:
Dzięki manatwork za oszczędność 3 bajtów.
źródło
'='
→?=
i"<LF>"
→$/
.?=*(w*4+1)
→?=+?=*w*4
Java,
123119 bajtówNadużywanie parametrów wejściowych jako liczników znacznie pomogło w zmniejszeniu rozmiaru kodu.
Podziękowania dla Cool Guy za sugerowanie nadużywania składni.
źródło
for
pętli zamiastwhile
pętli.while(w-->0){d+=" =";b+="====";}
->for(;w-->0;b+="====")d+=" =";
który oszczędza trzy bajtySAS,
117119Przykład:
Wynik:
źródło
DNS_PROBE_FINISHED_NXDOMAIN