Nic nie wiesz Rzeczy, które robię dla „ Chaosu to drabina ” to niezapomniany wiersz z serialu Gra o tron .
Celem tego wyzwania jest zbudowanie drabiny z chaosu w sztuce ASCII.
Wyzwanie
Wejście
- Szerokość drabiny,
W >= 3
(liczba całkowita) - Wysokość
H >= 2
stopnia (liczba całkowita) - Liczba szczebli
N >= 2
(liczba całkowita).
Wynik
Drabina z poziomymi szczeblami i pionowymi szynami , wszystkie o szerokości 1 znaku. Szerokość drabiny ( W
) obejmuje dwie szyny, a wysokość stopnia ( H
) obejmuje odpowiedni szczebel.
Wszystkie szczeble, w tym najwyższy i najniższy, będą miały kawałek pionowej szyny o długości H-1
bezpośrednio powyżej i poniżej. Przykład uczyni to bardziej zrozumiałym.
Drabina będzie się składać z drukowalnych znaków ASCII , które nie są białymi znakami , tzn. Zawiera zakres od !
(punkt kodowy 33
) do ~
(punkt kodowy 126
). Rzeczywiste znaki zostaną wybrane losowo . Biorąc pod uwagę dane wejściowe, każdy losowy wybór znaków musi mieć niezerowe prawdopodobieństwo. Poza tym rozkład prawdopodobieństwa jest dowolny.
Dozwolone są wiodące lub końcowe białe znaki , poziome lub pionowe.
Przykład
Biorąc pod uwagę W=5, H=3, N=2
, jeden z możliwych wyników jest następujący.
x :
g h
q$UO{
t T
6 <
bUZXP
8 T
5 g
Należy pamiętać, że całkowita wysokość jest H*(N+1)-1
, ponieważ istnieją N
szczeble i N+1
sekcje pionowe.
Zasady dodatkowe
Środki wprowadzania i format są jak zwykle elastyczne . Na przykład możesz wprowadzić trzy liczby w dowolnej kolejności lub tablicę je zawierającą.
Dane wyjściowe mogą być przekazywane przez STDOUT lub argument zwracany przez funkcję. W tym przypadku może to być ciąg znaków z nowymi liniami, tablica znaków 2D lub tablica ciągów.
Można zapewnić program lub funkcję .
Standardowe luki są zabronione.
Najkrótszy kod w bajtach wygrywa.
Przypadki testowe
Dla każdego W, H, N
z nich wyświetlana jest możliwa wydajność.
W=5, H=3, N=2:
\ ~
: K
ke:[E
5 u
0 _
8Fr.D
# r
7 X
W=3, H=2, N=2:
$ X
Mb)
0 ]
(T}
j 9
W=12, H=4, N=5:
d Y
P `
5 3
p$t$Ow7~kcNX
D x
` O
* H
LB|QX1'.[:[F
p p
x (
2 ^
ic%KL^z:KI"^
C p
( 7
7 h
TSj^E!tI&TN8
| [
< >
= Q
ffl`^,tBHk?~
O +
p e
n j
W=20, H=5, N=3:
G %
o y
% 3
- 7
U'F?Vml&rVch7{).fLDF
o }
U I
h y
a g
;W.58bl'.iHm\8v?bIn&
, U
N S
4 c
5 r
F3(R|<BP}C'$=}xK$F]^
' h
h u
x $
6 5
Odpowiedzi:
Galaretka ,
24 2322 bajtówPełen program, biorąc trzy argumenty
W
,H
,N
i drukowanie wyników.Wypróbuj online!
W jaki sposób?
Tworzy maskę tablicy 2d pojedynczego szczebla i jego pionowych sekcji poniżej, powtarza go
N+1
razy i usuwa górny szczebel, a następnie umieszcza losowe znaki lub spacje w zależności od wartości maski.źródło
Operacyjny język skryptowy Flashpoint ,
643624 bajtówŚmiesznie długo, ponieważ nie ma możliwości stworzenia znaków z kodów znaków.
Zadzwoń z:
Wynik:
Drabina jest wyjątkowo chaotyczna, ponieważ czcionka nie jest monospacowana.
Rozwinięty:
źródło
"\n"
działa,"\xa3"
aby uzyskać coś takiego£
nie działa? jeśli możesz użyć znaków ucieczki unicode, możesz być w stanie przyciąć tę tablicę.\n
jest jedyną rozpoznawaną ucieczką. (""
Wewnątrz cytaty stanowią jeden"
)05AB1E , 29 bajtów
Dane wejściowe są pobierane w kolejności
N, H, W
Wypróbuj online!
Wyjaśnienie
źródło
C, 95 bajtów
źródło
R ,
1381291119893 bajtów-13 bajtów dzięki Nealowi Fultzowi!
-1 bajt dzięki Robin Ryder
Wypróbuj online!
Funkcja anonimowa; zwraca wynik jako macierz.
Dzięki temu pytaniu Word Grids dużo więcej niż zwykle myślałem o matrycach. Zauważyłem, że szczeble znajdują się w tych rzędach macierzy, które są wielokrotnością wysokości stopnia
H
(R ma indeks 1), i że szyny są pierwszą i ostatnią kolumną,1
iW
. Więc tworzę macierz losowych znaków ASCII i zastępuję te litery, które nie pasują do tych kryteriów, spacjami, i zwracam macierz. Łącze TIO ładnie to drukuje.Neal Fultz zasugerował inne indeksowanie znaków spacji
[-H*(1:N),3:W-1]
, które zastępuje wszystkie znaki oprócz tych w rzędach wielokrotnościH
:-H*(1:N)
a nie na krawędzi,3:W-1
<==>2:(W-1)
.R , 121 bajtów
Wypróbuj online!
Ulepszenie w stosunku do pierwotnego podejścia opartego na matrycy, od którego zacząłem; to ten sam algorytm, ale
for
pętle są krótsze niż konstruowanie i drukowanie matrycy (ale nie, jeśli jej nie wydrukuję!)źródło
m[-H*(1:N),3:W-1]=" "
Wygląda trochę krótszy - zawsze można zastąpić testowaniarow
icol
z 2-d plaster.sample(33:126,...)
w32+sample(94,...)
.Perl 5 , 81 bajtów
Kod 80 bajtów + 1 dla
-p
.Wypróbuj online!
źródło
Węgiel drzewny ,
3432 bajtyWypróbuj online! Pobiera dane wejściowe w przybliżeniu N, H, W. Pełne przybliżenie (
Plus(InputNumber(), 1)
obecnie jest przerwane w TIO). Wyjaśnienie:Mapa w zasięgu
1..H*(N+1)
. Oznacza to, że szczeble pojawiają się, gdyi
jest wielokrotnościąH
.Dołącz do wyniku:
mapowanie w zakresie domyślnym
0..W
:jeśli kolumna nie jest
0
lubW-1
wiersz nie jest wielokrotnością,H
wówczas wypisuje spację;w przeciwnym razie weź predefiniowaną zmienną znakową ASCII, odwróć ją (umieszczając spację na 94. miejscu) i wydrukuj losowy znak z tego, co jest teraz pierwszą 94. (Ponieważ
Slice
jest do bani).Dołącz używając pustego ciągu. Ostateczny wynik jest domyślnie wydrukowany.
źródło
NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θ¿EKA§⮌γ‽⁹⁴«
? Cóż,a0a6316
podzieliłem się na dwie części i popełniłem je.Map
miejscu, w którym był używany,not is_command
gdy miał na myśliis_command
. Więc miałeś napisać,NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θUMKA§⮌γ‽⁹⁴
gdyby nie ten błąd.C (gcc) ,
141131114109107 bajtówPowinieneś być w stanie zagrać w golfa trochę ...
Wypróbuj online!
źródło
i=1
w deklaracji globalnej?Perl 6 ,
7673 bajtówWypróbuj online!
Bierze (h, n, w) jako argumenty. Zwraca listę ciągów.
Wyjaśnienie:
źródło
xx
i++$
zamiastmap
. Może znajdziesz miejsce do gry w golfa?PowerShell ,
132124 bajtyWypróbuj online!
Budujemy drabiny składający się z tylko
#
pierwszy ( przykład ), a następnie pętli|%{...}
przez każdego znaku iif
jest to-eq
seksualnego do35
, możemy wyciągnąć nowąRandom
postać z odpowiednim zakresie. W przeciwnym razie wypisujemy (tj. Spację lub znak nowej linii).źródło
JavaScript (ES6),
117115 bajtówFunkcja rekurencyjna budująca wynik po znaku.
„Spójrz Ma, nie dosłowny wiersz!”
Próbny
Pokaż fragment kodu
źródło
String.fromCharCode
, ponieważ nie mogłem szczerze powiedzieć, że sam to wymyślę po zobaczeniu. Daj mi znać, jeśli uważasz, że moje jest teraz zbyt podobne do twojego.Python 2 , 142 bajty
Wypróbuj online!
Zaoszczędzone bajty dzięki ovs!
źródło
1
z przodu> _>Pyth, 33 bajty
Wypróbuj online: Demonstracja
źródło
Python 2 , 114 bajtów
Wypróbuj online!
źródło
SOGL V0.12 ,
3231 bajtówWypróbuj tutaj!
Wprowadź dane w kolejności N, W, H.
Wyjaśnienie:
18 bajtów bez losowych znaków: /
źródło
Java 8,
203188168133132130128126 bajtówWypróbuj online!
źródło
W->H->N->{for(int i=0,j;i++<H*N+H-1;){char c=10;for(j=W;j-->0;c=i%H<1|j>W-2|j<2?(char)(Math.random()*94+33):32)System.out.print(c);}}
W-1
, wewnętrzna pętla musi wykonać dodatkową iterację (>=0
+1 bajt).W->H->N->{for(int i=0,j;i++<H*N+H-1;){char c=10;for(j=W;j-->=0;c=i%H*j<1|j>W-2?(char)(Math.random()*94+33):32)System.out.print(c);}}
;++i<H*N+H;
: -2 bajty.Haskell ,
226220211190 bajtówWypróbuj online!
Zaoszczędzono 9 bajtów dzięki Laikoni
Zaoszczędzono 21 bajtów dzięki wchargin
Powinny być grywalne (
b$(s w)<$[2..h]
ib$((s w)<$[2..h])++[r w]
). Nie czuję się dobrze z IO i golfem.źródło
t w h n= ...
:(w#h)n= ...
.pure
można użyć zamiastreturn
. Możesz upuścić nawiasy wokół(d ' ')<$
i(s w)<$
.c=randomRIO('!','~')
, co również pozwoli Ci wstawićd=return
. PonadtomapM id
jest o jeden bajt krótszy niżsequence
.JavaScript (ES6), 144 bajty
Tworzy drabinę z
#
postaci, a następnie zamienia każdą z nich na losowy znak ASCII.Test Snippet
Pokaż fragment kodu
źródło
String.fromCharCode
iMath.random
w jednym rozwiązaniu - dlaczego JavaScript nas nienawidzi ?! Wymyśliłem to dla 137 bajtów, co jest bardzo podobne do twojego, tylko bez tablicy. Zastanawiam się teraz, czy rekurencyjne rozwiązanie może być jeszcze krótsze; zbada później.JavaScript (ES6),
129117 bajtówNiestety, kiedy grałem w golfa, Arnauld pobił mnie do podobnego, ale krótszego rozwiązania . Łącząc nasze 2 rozwiązania, może to być 113 bajtów
Zawiera końcowy znak nowej linii.
Spróbuj
źródło
Japt
-R
,42414037342825 bajtówPobiera dane wejściowe w kolejności
H,W,N
.Spróbuj
źródło
QBIC , 76 bajtów
Wyjaśnienie
Przykładowy przebieg
źródło
MATL ,
6350 bajtów-13 bajtów dzięki Luisowi Mendo
Wypróbuj online!
Nadal jestem nowy w golfie w MATL (i nie jestem zbyt dobry w MATLAB pod tym względem), więc wiem, że prawdopodobnie nie jest to optymalne. Wskazówki są mile widziane. Porządkuje dane wejściowe w kolejności
N,H,W
.No to ruszamy:
Mamy teraz macierz losowego char.
Teraz istnieje również logiczna matryca dla szyn.
Teraz na stosie mamy 3 macierze:
Więc wykonujemy następujące czynności:
źródło
X"
jest3$
domyślnie.6Y2
może być przydatny zamiast13:106
...20+
.~~
jestg
.J3G&Ol5LZ(
można użyć zamiast1F3G2-Y"h1hJT3$X"
X"
. W tej ostatniej wskazówce5L
jest,[1 0]
ale nie jestem pewien, jak to jest używane w połączeniu zZ(
- Rozumiem, że przypisuje1
do pierwszej i ostatniej kolumny, ale nie rozumiem, jak to się robi5LZ(
. Pewnie później będę cię pingować w MATL CHATL, więc nie przejmuj się tym na razie.0
jest takie samo jak „koniec”.Z(
przypisuje do kolumn. Oczywiście, możesz pingować mnie na czacie!PowerShell, 102 bajty
Skrypt testu mniej golfowego:
Wynik:
źródło
Rubinowy , 71 bajtów
EDYCJA: Ups Myślałem, że to nowe wyzwanie ze względu na ostatnią edycję, aby naprawić literówkę. Nadal jednak to zostawiam, ponieważ nie ma jeszcze na to odpowiedzi Ruby.
Wypróbuj online!
źródło