Coders selalu mencoba untuk meratakan array menjadi entitas 1-dimensi yang membosankan dan itu membuat saya sedih.
Tugas Anda adalah untuk menghapus serangkaian karakter yang berubah-ubah, menghasilkan skyscape kota yang indah.
Pertimbangkan string: aaabbbbbccqrrssstttttttPPw
Terlihat jauh lebih baik seperti ini:
tt
tt
bb tt
bb tt
aabb sstt
aabbcc rrssttPP
aabbccqqrrssttPPww
(Ok, ya, surat-surat itu digandakan agar terlihat lebih seperti kota-langit).
Ambil string input, duplikat setiap subbagian karakter yang cocok (tidak harus huruf alfabet) dan bangunkan saya kota!
Byte kode terpendek menang.
Saya benar-benar berpikir saya memiliki persyaratan dipaku, tetapi untuk menjawab beberapa pertanyaan:
- itu harus di tanah
- Anda dapat memiliki langit tambahan jika diinginkan (memimpin garis kosong, mengelilingi ruang kosong) - tetapi tidak di antara bangunan
- huruf dapat digunakan kembali di dalam string (arsitektur yang sama, lokasi berbeda)
- surat-surat itu dianggap ASCII, tetapi lebih banyak bakat akan diberikan kepada mereka yang mendukung penyandian tambahan (UTF8, dll)
aaabbbbaa
?Jawaban:
05AB1E , 6 byte
Cobalah online!
Dalam versi yang lebih baru daripada tantangan,
ζ
telah ditambahkan sebagai pengganti.Bø
05AB1E , 8 byte
Penjelasan:
Cobalah online!
sumber
z⁶
untuk.Bø
... tetapi juga memilikiŒgx'2
untukγ€D
> _>γ.BD)ø˜øR»
adalah apa yang saya miliki tanpa melihat,€D
jauh lebih baik; Saya merasa seperti kita berdua kehilangan solusi 1-byte untuk duplikasi inline.CJam , 23 byte
Cobalah online!
Penjelasan:
sumber
Jelly , 9 byte
Cobalah online!
Penjelasan:
sumber
'
, yaitu mengulang daftar sendiri dan bukan item di dalamnya, tapi secara keseluruhan itu bagus. :)Python 3 ,
155136134132 byte-19 byte berkat @LeakyNun
-2 byte berkat @officialaimm
-1 byte berkat @Wondercricket
Cobalah online!
sumber
Python 2 , 117 byte
Cobalah online!
sumber
Java 8,
412400330324312319 byte-6 byte terima kasih kepada VisualMelon
-12 byte terima kasih kepada Kevin Cruijssen
tetapi +19 byte karena saya lupa memasukkan impor dalam hitungan byte.
Cobalah online!
sumber
i=0
, atau lebih baiki=l
,, dan menghitung mundurfor(;i-->0;h=d>h?d:h)
(dan memasukkanh=
sedikit di sana). Penghitungan mundur yang sama juga akan bekerja untuk loop dalam. Bagian dalamif
juga tidak membutuhkan kawat gigi{}
. Dan selalu bosan<=
atau>=
, Anda dapat membalikkan terner dengan>
dan menyimpan byte.import java.util.*;
untukMap
danHashMap
, impor adalah bagian dari byte-count; dan -1 dengan menghapus trailing semi-colon, yang tidak bagian dari byte-count).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
dann=
;m.put(c,d=m.get(c)!=null?d+1:1);
di dalam for-loop untuk menyingkirkan tanda kurung;k=x.charAt(i)
di dalamif(n.get(k)!=null)
untuk menyingkirkan tanda kurung semi-kolon dan for-loop. Sekali lagi, selamat datang dan jawaban yang bagus! +1 dari saya. Juga, jika Anda belum melihatnya: Tips untuk bermain golf di Jawa dan Tips untuk bermain golf di <bahasa apa pun> mungkin menarik untuk dibaca.Japt ,
1918151312 byteTermasuk spasi tambahan di setiap baris.
Menguji
Penjelasan
sumber
Mathematica, 150 byte
sumber
R , 135 byte
Cobalah online!
membaca dari stdin, menulis ke stdout (dengan trailing newline).
Penjelasan:
rle
menemukan panjang garis-garis karakter, ketinggian masing-masing menara.sub
ekspresi menggantikan masing-masing karakter dengan yang ganda (jadi saya tidak perlu bergelandangan dengan pengaturan indeks yang berdekatan bersama-sama)sapply
mengembalikan array (dalam hal ini sebuah matriks):sum(e$l|1)
adalah jumlah karakter yang berbeda; kita pergi dari atas ke bawahifelse( ... )
adalah vektor yangif...else
memungkinkan kita untuk membangun matriks menara dan ruang gandawrite
menulis ke konsol, dengan beberapa opsi untuk memformat.sumber
Pyth , 13 byte
Cobalah online!
sumber
PHP , 138 byte
Cobalah online!
sumber
MATL , 15 byte
Cobalah online!
Penjelasan
sumber
Arang , 40 byte:
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Saya awalnya mencoba loop sederhana pada string input untuk mencetak lonjong setiap kali surat itu berubah, tapi saya beralih ke metode pembuatan daftar ini karena menghemat 5 byte. Penjelasan: Variabel
l
berisi daftar bersarang dari huruf input. Karakter yang cocok dengan elemen daftar terakhir saat ini didorong ke daftar terakhir jika tidak, sublist baru dibuat untuk karakter tersebut. Kemudian tetap bergabung dengan huruf-huruf di setiap sublist sehingga mereka dapat dicetak dua kali secara vertikal.sumber
C,
259231 BytesKode Golf
Kode Verbose
Disusun dengan GCC, tidak ada Bendera khusus
Edit
Disimpan 28 byte berkat adelphus. Perubahannya memungkinkan saya untuk membuat definisi. Dan saya membuat loop sementara untuk loop untuk menyimpan masing-masing 2 byte dengan mengatur ulang loop. Saya juga memperbaiki masalah di mana kode akan terputus ketika karakter terakhir dalam input tidak tunggal. Kode akan gagal jika hanya ada satu huruf unik tetapi harus berfungsi dalam semua kasus lainnya.
sumber
while (i < strlen(argv[1]))
can be shortened towhile (argv[1][i])
- loop until null characterPip, 22 bytes
21 bytes of code, +1 for
-l
flag.Try it online!
Explanation
sumber
QuadS, 15 + 1 = 16 bytes
+1 byte for the
1
flag.Try it online!
⊖⍵
post-process by flipping upside down(.)\1*
runs of identical characters2/⍪⍵M
duplicate the columnified MatchThe
1
flag causes the results to be merged together.sumber
Haskell, 144 bytes
I'm pretty confident I can do better than this, but this is the best I can come up with for the time being.
sumber
Data.List
which is not in scope by default. You have to either add theimport Data.List
to the byte count or specify a Haskell environment which does include it by default (e.g. change the language fromHaskell
toHaskell (lambdabot)
. -- Some tips: a) use pattern guards to bind variables instead oflet
and/or declare helper functions directly:l=length;f s|x<-groupBy(==)s,m<-... =concatMap
. b)map l x
isl<$>x
, c)concatMap("++\n"
isunlines
. d)groupBy(==)
is justgroup
. e)concat
isid=<<
. You usem
only once, so inline it()
aroundl y
,replicate ... ' '
andmap ... x
. All in all: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
, altough I'm not sure whether one is in Prelude and the other isn't.concatMap
can be written>>=
, andmap
can be infixed as<$>
, andconcat[[z,z]|z<-…]
might be(replicate 2)=<<…
or(\z->[z,z])=<<…
(\z->[z,z])
is(:)<*>pure
, i.e....transpose$(:)<*>pure=<<map(\y...)x
Stacked, 42 bytes
Try it online!
sumber
Ruby, 116 bytes
Try it online!
sumber
puts a.map{...}
can be replaced withp(a.map{})
p
will output quote characters, so it's not fit hereAPL (Dyalog), 37 bytes
Try it online!
sumber
q/kdb+, 53 bytes
Solution:
Example:
Explanation:
sumber
Perl 5, 92 + 1 (-p) = 93 bytes
Try it online!
sumber