Koderzy zawsze starają się spłaszczyć tablice w nudne jednowymiarowe byty i to mnie zasmuca.
Twoim zadaniem jest rozpłaszczenie dowolnego ciągu znaków, tworząc piękny miejski krajobraz.
Rozważ ciąg: aaabbbbbccqrrssstttttttPPw
Wygląda znacznie lepiej:
tt
tt
bb tt
bb tt
aabb sstt
aabbcc rrssttPP
aabbccqqrrssttPPww
(Ok, tak, litery są duplikowane, aby wyglądały bardziej na panoramę miasta).
Weź ciąg wejściowy, powiel każdą podsekcję pasujących znaków (niekoniecznie liter alfabetu) i zbuduj mi miasto!
Najkrótszy bajt kodu wygrywa.
Myślałem, że mam określone wymagania, ale muszę odpowiedzieć na kilka pytań:
- musi leżeć na ziemi
- możesz mieć dodatkowe niebo, jeśli chcesz (wiodące puste linie, otaczające puste miejsce) - ale nie między budynkami
- litery mogą być ponownie użyte w ciągu (ta sama architektura, inna lokalizacja)
- zakłada się, że litery są ASCII, ale bardziej sprytne zostaną te, które obsługują dodatkowe kodowanie (UTF8 itp.)
aaabbbbaa
?Odpowiedzi:
05AB1E , 6 bajtów
Wypróbuj online!
W wersji nowszej niż wyzwanie
ζ
dodano jako zamiennik fo.Bø
05AB1E , 8 bajtów
Wyjaśnienie:
Wypróbuj online!
źródło
z⁶
dla.Bø
... ale takżeŒgx'2
dlaγ€D
> _>γ.BD)ø˜øR»
to, co miałem bez patrzenia,€D
jest o wiele lepsze; Wydaje mi się, że oboje brakuje nam 1-bajtowego rozwiązania do wbudowanego powielania.CJam , 23 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
Galaretka , 9 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
'
, było powtórzenie samych list, a nie elementów w nich zawartych , ale ogólnie rzecz biorąc, to dobrze. :)Python 3 ,
155136134132 bajtów-19 bajtów dzięki @LeakyNun
-2 bajtów dzięki @officialaimm
-1 bajtów dzięki @Wondercricket
Wypróbuj online!
źródło
Python 2 , 117 bajtów
Wypróbuj online!
źródło
Java 8,
412400330324312319 bajtów-6 bajtów dzięki VisualMelon
-12 bajtów dzięki Kevin Cruijssen,
ale +19 bajtów, ponieważ zapomniałem uwzględnić import w liczbie bajtów.
Wypróbuj online!
źródło
i=0
, lub lepieji=l
, i odliczaćfor(;i-->0;h=d>h?d:h)
(i wrzucaćh=
trochę tam). To samo liczenie wsteczne będzie działać również dla wewnętrznej pętli. Wewnętrzneif
również nie wymagają aparatów ortodontycznych{}
. I zawsze bądź zmęczony<=
lub>=
, możesz odwrócić trójskładnik za pomocą>
i uratować bajt.import java.util.*;
dlaMap
iHashMap
import są częścią bajtów-count, a -1, usuwając Kończący średnik, który nie jest część liczby bajtów).import java.util.*;x->{Map m=new HashMap(),n;int l=x.length(),i=l,v,y,h=0,d=1;char c,k;for(;i-->0;m.put(c,d=m.get(c)!=null?d+1:1),h=d>h?d:h)c=x.charAt(i);for(y=h;y>0;y--){n=new HashMap(m);for(i=0;i<l;i++)if(n.get(k=x.charAt(i))!=null){v=(int)m.get(k);System.out.print((y>v?" ":k+""+k)+(i==l-1?"\n":""));n.remove(k);}}}
HashMap<>
→HashMap
;Map n=
→,n
in=
;m.put(c,d=m.get(c)!=null?d+1:1);
wewnątrz pętli for, aby pozbyć się nawiasów;k=x.charAt(i)
w środku,if(n.get(k)!=null)
aby pozbyć się średników i wsporników pętli. Znowu witamy i świetna odpowiedź! +1 ode mnie Ponadto, jeśli jeszcze go nie widziałeś: Porady dotyczące gry w golfa w Javie i Porady dotyczące gry w golfa w <dowolnym języku> mogą być interesujące do przeczytania.Japt ,
1918151312 bajtówZawiera końcowe spacje w każdej linii.
Sprawdź to
Wyjaśnienie
źródło
Mathematica, 150 bajtów
źródło
R , 135 bajtów
Wypróbuj online!
czyta ze standardowego wejścia, zapisuje na standardowe wyjście (ze znakiem nowej linii).
Wyjaśnienie:
rle
znajduje długość pasm postaci, wysokość każdej wieży.sub
wyrażenie zastępuje każdy znak z jego double (więc nie trzeba syf o ustawienie sąsiadujące ze sobą indeksów)sapply
zwraca tablicę (w tym przypadku macierz):sum(e$l|1)
to liczba różnych znaków; idziemy od góry do dołuifelse( ... )
jest wektoryzacjąif...else
pozwalającą nam zbudować matrycę wież i podwójnych przestrzeniwrite
zapisuje na konsoli, z kilkoma opcjami formatowania.źródło
Pyth , 13 bajtów
Wypróbuj online!
źródło
PHP , 138 bajtów
Wypróbuj online!
źródło
MATL , 15 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Węgiel drzewny , 40 bajtów:
Wypróbuj online! Link jest do pełnej wersji kodu. Początkowo próbowałem prostej pętli nad ciągiem wejściowym, aby drukować podłużne za każdym razem, gdy zmieniała się litera, ale przełączyłem się na tę metodę budowania listy, ponieważ oszczędzała 5 bajtów. Objaśnienie: Zmienna
l
zawiera zagnieżdżoną listę liter wejściowych. Znaki pasujące do aktualnych ostatnich elementów listy są wypychane na ostatnią listę, w przeciwnym razie dla tej postaci tworzona jest nowa lista podrzędna. Następnie pozostaje połączyć litery w każdej podlistie, aby można je było dwukrotnie wydrukować pionowo.źródło
C,
259231 bajtówKod do gry w golfa
Pełny kod
Kompilowany z GCC, bez specjalnych flag
Edytować
Zaoszczędzono 28 bajtów dzięki Adelphusowi. Jego zmiana pozwoliła mi stworzyć definicję. I utworzyłem pętle while w pętlach for, aby zaoszczędzić 2 bajty, zmieniając układ pętli. Rozwiązałem również problem polegający na tym, że kod pękał, gdy ostatni wprowadzony znak nie był singletonem. Kod zawiedzie, jeśli jest tylko jedna unikalna litera, ale powinien działać we wszystkich innych przypadkach.
źródło
while (i < strlen(argv[1]))
można skrócić dowhile (argv[1][i])
pętli, aż znak nullPypeć , 22 bajty
21 bajtów kodu, +1 dla
-l
flagi.Wypróbuj online!
Wyjaśnienie
źródło
QuadS , 15 + 1 = 16 bajtów
+1 bajt dla
1
flagi.Wypróbuj online!
⊖⍵
post-proces przez odwrócenie do góry nogami(.)\1*
przebiegi identycznych znaków2/⍪⍵M
zduplikowane columnified M atch1
Flaga powoduje, że wyniki mają być połączone ze sobą.źródło
Haskell, 144 bajty
Jestem przekonany, że mogę to zrobić lepiej, ale na razie to najlepsze, co mogę wymyślić.
źródło
Data.List
które domyślnie nie są objęte zakresem. Musisz albo dodaćimport Data.List
do liczby bajtów, albo określić środowisko Haskell, które domyślnie je zawiera (np. Zmień język zHaskell
naHaskell (lambdabot)
. - Kilka wskazówek: a) użyj strażników wzorców do wiązania zmiennych zamiastlet
i / lub deklarowania funkcji pomocniczych bezpośrednio:l=length;f s|x<-groupBy(==)s,m<-... =concatMap
. b)map l x
jestl<$>x
, c)concatMap("++\n"
jestunlines
. d)groupBy(==)
jest sprawiedliwygroup
. e)concat
jestid=<<
. Używaszm
tylko raz, więc wstaw to()
okl y
,replicate ... ' '
imap ... x
. W sumie:import Data.List;l=length;f s|x<-group s=unlines$reverse$transpose$id=<<[[z,z]|z<-map(\y->y++replicate(maximum(l<$>x)-l y)' ')x]
.groupBy(==)
=group
, chociaż nie jestem pewien, czy jedno jest w Preludium, a drugie nie.concatMap
mogą być napisane>>=
imap
mogą być dodane jako<$>
, iconcat[[z,z]|z<-…]
mogą być(replicate 2)=<<…
lub(\z->[z,z])=<<…
(\z->[z,z])
is(:)<*>pure
, tj...transpose$(:)<*>pure=<<map(\y...)x
Ułożone , 42 bajty
Wypróbuj online!
źródło
Rubin , 116 bajtów
Wypróbuj online!
źródło
puts a.map{...}
można zastąpićp(a.map{})
p
wyświetli znaki cudzysłowu, więc nie pasuje tutajAPL (Dyalog) , 37 bajtów
Wypróbuj online!
źródło
q / kdb +, 53 bajty
Rozwiązanie:
Przykład:
Wyjaśnienie:
źródło
Perl 5 , 92 + 1 (-p) = 93 bajty
Wypróbuj online!
źródło