Tworzenie skrzyżowanego kwadratu
Musisz wprowadzić liczbę całkowitą jednego lub więcej i wyprowadzić kwadrat wykonany z dowolnego wybranego przez Ciebie znaku do wydrukowania z ukośnym krzyżem przez środek.
Ogólną ideą jest, aby wyjście było pustym kwadratem, który ma przekątną:
Input: 7
Output:
*******
*# #*
* # # *
* # *
* # # *
*# #*
*******
W powyższym przykładzie „*” oznaczają zewnętrzną ramkę, a „#” oznaczają przekątny krzyż.
Zauważ, że powyższy przykład używa dwóch różnych znaków, aby łatwiej było zobaczyć, jak wygląda wynik, twój program powinien używać tylko jednego znaku.
Wkład
Liczba całkowita równa 1 lub więcej, na pewno jest nieparzysta.
Wydajność
Kwadrat, na który składa się wybrana postać, z krzyżem pośrodku.
- Krzyż musi być ukośny
- Kwadrat może być wyprowadzany za pomocą funkcji lub zapisywany w wyniku
- Końcowe znaki nowej linii są w porządku
- Może również wyświetlać jako grafikę, diagram lub obraz
Przykłady
Input: 1
Output:
*
Input: 3
Output:
***
***
***
Input: 5
Output:
*****
** **
* * *
** **
*****
Input: 7
Output:
*******
** **
* * * *
* * *
* * * *
** **
*******
Okular
- Funkcje lub pełne programy są dozwolone
- Możesz uzyskać wkład w preferowany sposób
- Standardowe luki są niedozwolone
- Programy muszą działać bez żadnych dodatkowych instrukcji, tj.
using
WC#
, muszą być zawarte we wpisie - Możesz wyprowadzić dane z funkcji lub wydrukować wynik
To jest golf golfowy, więc wygrywa najkrótsze rozwiązanie.
0,1,2,3,...
?n
i wydrukować kwadrat wielkości2n+1
.*
ale dla niego będą to dane wejściowe 0?1
dadzą przykład3
.Odpowiedzi:
MATL ,
201917 bajtówMożesz spróbować eksperymentalnie w MATL online . Może być konieczne odświeżenie strony, jeśli nie działa.
Przykładowy przebieg:
Wersja ASCII: 19 bajtów
Wypróbuj online!
źródło
VBA Excel, 168 bajtów
Instrukcja:
Uważam, że Excel za pomocą VBA jest skutecznym i wystarczającym narzędziem do tego wyzwania. Ustaw arkusz roboczy programu Excel w następujący sposób
Tak, używamy małych, klasycznych kwadratowych pikseli jak za dawnych czasów, używając komórek w arkuszu jako pikseli. Ha ha...
Tutaj używam komórki A1 jako danych wejściowych i zmieniam kolor czcionki na czerwony. Dlaczego czerwony Ponieważ czerwony ma trzyliterowy kolor, więc pasuje do gry w golfa. Napisz i uruchom następujący kod w oknie natychmiastowym:
Ungolfed kod:
Objaśnienie krok po kroku:
Pętla po przekątnej komórek zakresu:
Cells(i, i).Interior.Color = vbRed
Ostatni krok i wynik:
Cells(i, N + 1 - i).Interior.Color = vbRed
źródło
Cells.RowHeight=48:set r=[A1]:r.Resize(r,r).Interior.Color=0:[B2].Resize(r-2,r-2).Clear:For i=1To[A1]:set r=Union(r,Cells(i,i),Cells(i,r-i+1)):Next:r.Interior.Color=0
JavaScript (ES6), 96 bajtów
źródło
Python 2, 65 bajtów
Wykorzystuje pomysł Jonathana Allana wyprowadzania liczb binarnych, takich jak:
Wiersze są tworzone za pomocą arytmetyki bitów i wyświetlane w postaci binarnej. Każda część to lub reszta. Części są wytwarzane przez moce 2
n
(ustalone) ii
(spadające) przez1
n
i
in/i
n-1
terminui==1
lubi==n
.W rzeczywistości, (1) i (4) są łączone przez wytwarzanie,
1
kiedy1<i<n
in-1
inaczej.źródło
Python,
114 110 9690 bajtówCałkowicie zmieniony:
Zwraca listę ciągów znaków, znaków używających
1
i0
.-6 bajtów dzięki TheBikingViking
Przetestuj to w ideone
Poprzedni Python 2 @ 110
Przetestuj na ideonie
źródło
lambda n:[bin(sum(2**p for p in[range(n),{0,n-1,r,n-1-r}][0<r<n-1]))[2:]for r in range(n)]
.Java 7,
131130128125124122 bajtów3 bajty zapisane dzięki @LeakyNun ;
1 bajt zapisany dzięki @ OliverGrégoire w mojej odpowiedzi na losowanie pustego kwadratu # przy danym wyzwaniu szerokości ;
2 bajty zapisane dzięki @cliffroot .
Kod niepoznany i testowy:
Wypróbuj tutaj.
Wydajność:
źródło
String c(int n){String r="";for(int i=-1,j;++i<n;r+="\n")for(j=0;j<n;r+=i<1|j<1|n-i<2|n-j<2|i==j|i==n-++j?"*":" ")return r;}
Zapisano 4 bajty;
wewnętrznej pętli for.i-->0
a zamiast 2 bajtówn-->0
można również użyći*j<1
i<1|j<1
Matlab,
68 66 6458 bajtówPonieważ dozwolone są również dane graficzne:
Które wyjścia np
Wersje tylko ascii to:
To używa indeksowania
0,1,2,3,...
Alternatywnie z indeksowaniem
1,3,7,...
:źródło
C #,
112101 bajtówDzięki TheLethalCoder za przypomnienie mi, że te anonimowe wyrażenia ani wyrażenie lambda są dozwolone w języku C #.
Kto powiedział, że C # nie jest fajnym językiem golfa?
źródło
Logo, 155 bajtów
Rozwiązanie graficzne, zaimplementowane jako funkcja
Zmodyfikowałem swoją odpowiedź dla Alphabet Triangle i nieco zmieniłem kąty. Tak jak poprzednio,
r
rysuje linię znaków. Tym razemb
funkcja rysuje ramkę, rysując jedną prostą krawędź i jedną ukośną, obracając i powtarzając cztery razy. Powoduje to, że przekątne są rysowane dwa razy (jeden na drugim), ale było mniej kodu niż osobne obchodzenie się z nim. Ta odpowiedź również poprawnie obsługuje liczby parzyste. Musiałem dodać specjalną obsługę dla danych wejściowych,1
aby zapobiec dalszemu rozwojowi.Zaimplementowałem go jako funkcję,
b
która przyjmuje wielkość jako argument:Wypróbuj to na interpreterze logo Calormen.com . Aby go wywołać, dodaj linię i zadzwoń
b
w następującym formacie:... lub wypróbuj talerz samplera, który pobiera cztery próbki w rozmiarach 5, 7, 9 i 11, obracając się o 90 stopni pomiędzy:
źródło
R, 102 bajty
Zauważ, że bardziej wydajne jest wyrażenie warunku przy użyciu% w% niż i == 1 | j == 1 | ...
źródło
n=scan();for(i in n:1){for(j in n:2){z=" ";if(i%in%c(1,n,n-j+1)|j%in%c(i,n))z="*";cat(z)};cat("*\n")}
Haskell,
102100969187 bajtówany
any
zelem
Wersja bez golfa:
Jestem pewien, że można to jeszcze poprawić, ale na to właśnie wpadłem.
Stara wersja:
źródło
[1..s]
dwa razy, myślę, że możesz to zdefiniowaćwhere
.c s=unlines$(\m->(m#)<$>z)<$>z where z=[1..s];m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' '
<$>[1..s]
do funkcji, prawda? Likec s=unlines$f(\m->f(m#))where m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' ';f=(<$>[1..s])
c s=unlines$f$f.(#)where f=(<$>[1..s]);m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' '
Java, 130 bajtów
Program testowy
źródło
int
przedtemj
iint i=0,j;
zamiast tego użyj . Można też wymienić wszystkie||
z|
i usuń nawiasy w potrójnym-check. Używasz takżes-1
cztery razy, więc umieściłbym to w zmiennej. Można także zmienić==0
się<1
. Więc w sumie staje sięs->{for(int i=0,j,x=s-1;i<s;i++)for(j=0;j<s;j++)System.out.print(x-i==j|i==j|i<1|j<1|i==x|j==x?j==x?"*\n":"*":" ");}
( 116 bajtów ) Dość trochę krótszy niż moja odpowiedź Java 7 , więc fajne podejście!C,
140121114 bajtów19 bajtów dzięki Quentin.
7 bajtów zapisanych przez przejście z podwójnie zagnieżdżonej pętli do jednej pętli.
Sugestie dotyczące gry w golfa mile widziane.
źródło
int i,j;for(i=0;
dofor(int i=0,j;
int i,j;
poscanf
!n+~i-j
itd.#include
całkowitym usunięciem .PowerShell (133)
Clunky, ale działa wystarczająco dobrze.
Sugestie dotyczące gry w golfa są mile widziane, minęło już dużo czasu, odkąd mam PowerShell'd.
źródło
SILOS , 212 bajtów
Wypróbuj online!
źródło
GNU sed,
117114 + 1 (flaga r) = 115 bajtówPonieważ sed nie ma natywnego wsparcia dla liczb, dane wejściowe są podawane w formie jedności w oparciu o ten konsensus . Druga połowa kwadratu to pierwsza połowa, która była przechowywana w odwrotnej kolejności w miejscu do przechowywania.
Biegać:
Wydajność:
źródło
Python, 89 bajtów
To był powrót! Użyłem modułu żółwia pytona.
Oto wynik, gdy n = 200:
źródło
Scala,
141137 bajtówBiegać:
$ scala cross.scala 10
Technicznie rzecz biorąc, mógłbym usunąć wydruk i przejść do czegoś podobnego
To sprawi, że będzie to 135 lub 121 bajtów w zależności od tego, czy policzysz składnię funkcji.
Wersja do odczytu:
źródło
Pyth,
2725 bajtówWypróbuj online!
Prawdopodobnie gra w golfa.
źródło
Python 2, 83 bajty
Zmienia listę znaków wiersza, tak aby umieściła a
*
na pierwszym, ostatnim, i-tym i i-tym do ostatniego miejsca. Pierwszy i ostatni rząd zaczynają się jak wszystkie*
, a reszta jak wszystkie spacje. Działa również na równi.lambda
Ekspresja prawdopodobnie mniejsza niż zmiany, ale jak to metody.źródło
Pyke,
282423 bajtówWypróbuj tutaj!
źródło
Mathematica, 81 bajtów
Tworzy układ współrzędnych z punktem początkowym w środku i oblicza, gdzie
*
powinien się znaleźć s. Zwraca tablicę ciągów, po jednym na wiersz.źródło
JavaScript (
289270 bajtów)Nie golfowany:
EDYCJA: Zaoszczędź 19 bajtów dzięki Philippowi Flenkerowi.
źródło
size==1
Perl, 83 +1 = 84 bajtów
Uruchom z
-n
flagą.Dosłowna nowa linia oszczędza 1 bajt nad
\n
lub$/
.Czytelny:
Kod drukuje górną linię i zapisuje ją
$c
, następnie drukuje wiązkę spacji z odpowiednimi szczelinami zamienionymi naa
s, a następnie drukuje ponownie górną linię.Przypisanie do
$\
zmiennej każe interpreterowi drukować zawartość (gwiazdka, nowa linia i kolejna gwiazdka) po każdymprint
, ale NIE następuje to posay
.źródło
SmileBASIC, 46 bajtów
(Nie, SB NIE używa grafiki 1-indeksowanej ...)
źródło
Węgiel drzewny, 8 bajtów (niekonkurencyjny; wyzwanie dotyczące postdatacji języka)
Wypróbuj online! Link jest do pełnej wersji kodu. Objaśnienie: Gdy zostanie użyty jako parametr
PolygonHollow
polecenia,+
rysuje ramkę, a następnie strzałki tworzą przekątne. Istnieje kilka innych znaków skrótu, ale oni muszą być na nowo może być przydatna npY
odpowiada↖↗↓
, ale jeśli to było eqivalent aby↗↓↖
potemY+
wystarczy.źródło
SHELL ( 135 bajtów ):
testy:
źródło
Kotlin ,
123116 bajtówzmień, jeśli za pomocą \ n, aby wydrukować
Wypróbuj online!
źródło