Karena keterbatasan teknis dari Stack Exchange, judul diberikan secara salah. The benar judul untuk tantangan ini adalah
Membuat
Word Icicle!
Word Icicle
Word cicle
ord cicle
ord icle
ord i le
or i le
or i l
or l
or
r
Tantangan hari ini adalah membuat es dari kata input. Dengan serangkaian ASCII yang sepenuhnya dapat dicetak , dan setidaknya 2 karakter tanpa spasi, lakukan langkah-langkah berikut:
Cetak status string saat ini.
Ganti karakter terkecil secara leksikal (selain spasi) dengan spasi. Jika ada dasi, ganti karakter paling kiri.
Ulangi pada garis yang berurutan sampai string hanya berisi 1 karakter non-spasi.
Ini menciptakan efek bahwa string input tampak seperti sedang meleleh ...
I'm Melting!!!
I'm Melting !!
I'm Melting !
I'm Melting
I m Melting
m Melting
m elting
m lting
m ltin
m lt n
m t n
t n
t
Aturan
Setelah beberapa iterasi, output Anda hampir pasti memiliki spasi tambahan di setiap baris. Jika Anda memilih untuk memotong ini, itu diperbolehkan.
Anda mungkin memiliki satu baris kosong yang tertinggal, tetapi tidak lebih.
Ingat bahwa input mungkin berisi beberapa spasi, tetapi ini semua dilewati secara efektif. Misalnya, input
a a
harus diberikana a a
Anda dapat mengambil input sebagai daftar string jika Anda mau. Untuk output, Anda dapat mengembalikan atau mencetak daftar string, string tunggal dengan baris baru, atau array char / matriks 2D. Secara umum, saya lebih suka format IO permisif, jadi format lain kemungkinan besar diperbolehkan selama mereka konsisten dan jelas sesuai dengan output yang tepat. Jika ragu, jangan ragu untuk bertanya. Seperti biasa, program atau fungsi penuh diizinkan.
Ingat, ini adalah kontes untuk membuat jawaban tersingkat dalam bahasa apa pun! Jika Anda memilih untuk menjawab dalam Java, coba buat jawaban Java terpendek (dalam byte) yang Anda bisa.
Uji kasus
Hello World! -->
Hello World!
Hello World
ello World
ello orld
ello orl
llo orl
lo orl
o orl
o or
or
r
AbCdEfGhIjKlMnOpQrStUvWxYz -->
AbCdEfGhIjKlMnOpQrStUvWxYz
bCdEfGhIjKlMnOpQrStUvWxYz
b dEfGhIjKlMnOpQrStUvWxYz
b d fGhIjKlMnOpQrStUvWxYz
b d f hIjKlMnOpQrStUvWxYz
b d f h jKlMnOpQrStUvWxYz
b d f h j lMnOpQrStUvWxYz
b d f h j l nOpQrStUvWxYz
b d f h j l n pQrStUvWxYz
b d f h j l n p rStUvWxYz
b d f h j l n p r tUvWxYz
b d f h j l n p r t vWxYz
b d f h j l n p r t v xYz
b d f h j l n p r t v x z
d f h j l n p r t v x z
f h j l n p r t v x z
h j l n p r t v x z
j l n p r t v x z
l n p r t v x z
n p r t v x z
p r t v x z
r t v x z
t v x z
v x z
x z
z
PPCG is da BEST -->
PPCG is da BEST
PPCG is da EST
PP G is da EST
PP G is da ST
PP is da ST
P is da ST
is da ST
is da T
is da
is d
is
s
({({})({}[()])}{}) -->
({({})({}[()])}{})
{({})({}[()])}{})
{ {})({}[()])}{})
{ {}) {}[()])}{})
{ {}) {}[ )])}{})
{ {} {}[ )])}{})
{ {} {}[ ])}{})
{ {} {}[ ] }{})
{ {} {}[ ] }{}
{ {} {} ] }{}
{ {} {} }{}
{} {} }{}
} {} }{}
} } }{}
} } } }
} } }
} }
}
Jawaban:
Python 2 ,
7170 byte-1 byte berkat ovs
Cobalah online!
sumber
Retina , 28 byte
Cobalah online! Penjelasan:
Ulangi sementara nilai input tidak kosong.
Cetak nilai saat ini.
Jalankan sisa skrip pada nilai. Kemudian, jalankan hasil skrip itu sebagai skrip pada nilai.
Urutkan karakter ke dalam urutan.
Pilih karakter nonblank pertama dan hasilkan program Retina yang menggantikan
$\
kemunculan literal pertama ( ) dari karakter tersebut ($&
) dengan spasi (spasi tambahan dalam kode asli).sumber
APL (Dyalog Unicode) ,
1811 byteCobalah online!
menggunakan
⎕io←1
; mengembalikan array string (vektor vektor karakter)sumber
∪
perlu?⍋∘⍋
:)05AB1E , 9 byte
Cobalah online!
Penjelasan
sumber
{ðKv=yð.;
adalah milikku, bagus.:
menggantikan semua karakter alih-alih.;
menggantikan yang pertama (yaitu melihat apa yang dilakukan oleh 7-byter Anda dengan!
di dalam test case). Juga, tantangannya secara eksplisit menyatakan tidak termasuk spasi, jadi 7-byter Anda tidak akan berfungsi untuk input dengan banyak spasi. PS: Jawaban yang bagus, Luis! +1 dari saya. :).;
. Saya benar-benar ingat berjuang dengan itu pada 1 Mei awal tahun ini sekarang setelah Anda menyebutkannya.Pyth,
171413 byteCoba di sini
sumber
sed
-rn
, 142143byteCobalah online!
(catatan: ada tab di program)
Karena sed tidak memiliki konsep urutan leksikografis, saya harus meng-hardcode set karakter ASCII yang dapat dicetak dan membutuhkan lebih dari setengah bytecount.
Menggunakan sed 4.2.2 akan mengurangi bytecount sebesar 2, karena itu memungkinkan untuk label yang tidak disebutkan namanya, Coba online!
-r
memungkinkan ekspresi reguler yang diperluas (golfier)-n
menonaktifkan pencetakan implisit dari ruang pola di akhir programRuang pola dimulai dengan input
:a
labela
, ini adalah loop program utamap
cetak spasi pola (nama mewah untuk buffer)sekarang kita menambahkan set karakter ASCII yang dapat dicetak (tidak termasuk spasi)
s/$/ ABCDEFGHIJKLMNOPQRSTUVWXYZ/
tambahkan tab, bertindak sebagai pembatas 1 byte, diikuti oleh huruf besars<tab>
pengganti (sed dapat mengambil karakter apa saja sebagai pembatas, dalam hal ini tab digunakan untuk menyimpan byte dari lolos dari/
)\w+$
alfabet huruf besar yang baru saja kita tambahkan<tab>
dengan!"#$%\&'()*+,-./0123456789:;<=>?@&[\\]^_\`\L&{|}~<tab>
sisa karakter, perhatikan bahwa itu\L&
adalah versi huruf kecil dari alfabet huruf besar:b
labelb
, hapus karakter dari set awal yang tidak ada dalam input/(.).* \1/!
jika karakter pertama dari set ASCII tidak ada dalam inputs/ ./ /
Singkirkantb
ulangib
sampai substitusi gagals/(.)(.*) \1.*/ \2/
ganti karakter pertama dalam set ASCII yang ada di input dengan spasi, dan hapus set ASCIIta
berulangsumber
sed
cukup bodoh untuk menyelamatkan setidaknya 4 byte: Cobalah secara online!Ruby ,
60585547 byteCobalah online!
sumber
a-b=[' ']
dana-b
untuk -2 byte cepatR ,
140100 byte-40 bytes Berkat Giuseppe!
Cobalah online!
Solusi menggunakan
outer
dan sihir Giuseppe untuk bekerja dengan benar lebih lama pada 104 byte. Terinspirasi oleh jawaban ini .Cobalah online!
sumber
rank
!Python 3 , 71 byte
Cobalah online!
-4 bytes terima kasih kepada ovs
sumber
*bool({*a}-{" "})
bukanif{*a}-{" "}else[a]
RecursionError
?if/else
pintasan tetapi*bool
tidak, jadi ya, recursionerror seperti ovs berkataPython 2 ,
70696664 byteCobalah online!
Thx untuk 2 byte dari Ovs menggunakan
S and f()
bukan menggunakanif S:f()
sumber
...If there is a tie, replace the leftmost character...
aturan, Anda dapat memperbaikinya denganreplace(min(...),' ',1)
Jelly , 8 byte
Cobalah online!
Ide
Ide dasarnya adalah membuat kolom dari output yang diinginkan secara langsung, alih-alih memanipulasi string dan mengembalikan semua hasil antara.
Kami mulai dengan menghitung karakter dari string input dengan urutan mereka akan dihapus. Untuk saat ini, kami akan berpura-pura spasi juga akan dihapus.
Sekarang, kita membangun kolom dengan mengulangi setiap karakter dengan indeksnya dalam enumerasi ini.
Yang tersisa adalah menghapus duplikat, untuk memperhitungkan spasi.
Kode
sumber
Perl 5
-n
,3734 byteTurun tiga byte dengan bantuan dari @TonHospel
Cobalah online!
sumber
\Q
olah untuk test case terakhir .... Saya juga melewatkan itu pertama kali!say&&s/\Q$a/ / while($a)=sort/\S/g
. Juga menangani dengan benar0
JavaScript,
676665 byteKarena saya belum pernah bermain golf dalam keadaan mabuk!
Cobalah online
Terima kasih kepada DanielIndie karena menunjukkan 4 byte berlebihan yang termasuk dalam bir!
sumber
K (ngn / k) ,
2624 byteCobalah online!
sumber
{@[x;y;:;" "]}
bisa saja@[;;:;" "]
. Versi k mana yang Anda gunakan? Saya tidak akrab dengan ini:_ci _ic _dv
.C # (Visual C # Interactive Compiler) , 129 byte
Cobalah online!
sumber
c!=32
bisac>32
;c==32
bisac<33
; dan(char)999
bisa'¡'
(atau karakter lain di atas rentang unicode ASCII yang dapat dicetak).while
kefor
dan menempatkanvar s=ReadLine()
dans=s.Remove(i,1).Insert(i," ")
di dalamnya (sehingga dua semi-titik dua tidak lagi diperlukan).Perl 5 dengan
-nlF/\s|/
, 39 byteIni mungkin mendorong batas-batas bendera Perl tidak dihitung, jika demikian saya akan kembali ke jawaban sebelumnya.
Cobalah online!
sumber
-n
bendera: codegolf.stackexchange.com/questions/162161/make-a-word-icicle/…Haskell , 67 byte
12 byte disimpan berkat Laikoni
Cobalah online!
Yang ini berakhir dengan kesalahan
Haskell ,
8379 byteCobalah online!
Yang ini berakhir dengan kesalahan
Haskell , 86 byte
Cobalah online!
Haskell ,
1009188 byteCobalah online!
sumber
f s|(a,_:b)<-span(/=minimum(id=<<words s))s=putStrLn s>>f(a++' ':b)
Cobalah online!id=<<
cukup pintarJavaScript (Node.js) ,
8065 byteCobalah online!
Tidak tahu
replace
mengambil string sebagai string, bukan regexpsumber
K4 ,
282018 byteLarutan:
Contoh:
Penjelasan:
Ini sama dengan ngn lakukan. Temukan indeks yang akan menghasilkan daftar naik, timpa satu per satu dengan
" "
, lalu ambil yang berbeda untuk menghapus garis duplikat apa pun:sumber
gcc 32-bit,
6665 byteTerima kasih untuk Jonathan Frech untuk -1 byte
sumber
*p==i?...:0;
mungkin bisa*p-i?0:...;
.*p-1||(...)
panjangnya sama)f(a)
mengkompilasi, seperti yanga
seharusnya dari tipechar*
, tapi saya berasumsi bahwa ada hubungannya dengan penggunaan gcc 32-bit Anda.char*p,i;f(long long a){for(i=31;++i;)for(p=a;*p;)*p==i?puts(a),*p=32:++p;}
di tio (64bit) dapat menjelaskan caraf(a)
kerjanyaMATLAB, 74 byte
Ini menggunakan bentuk 2-output dari fungsi max () untuk mengambil karakter terkecil dan indeksnya, setelah mengubah string ke nilai nol dalam spasi dan 256-nilai karakter untuk karakter yang dapat dicetak.
sumber
Common Lisp ,
240228224 byteCobalah online!
Ini adalah postingan pertama saya.
Saya sedang dalam proses belajar lisp jadi saya yakin seseorang dapat memikirkan sesuatu yang lebih pendek dari ini.
sumber
APL (Dyalog Unicode) , 39 byte SBCS
Cobalah online!
Dfn.
Bagaimana?
sumber
V , 27 byte
Cobalah online!
Hexdump:
sumber
PowerShell ,
10399 byteCobalah online!
Mengambil input sebagai string
$a
. Kami kemudian beralih dari2
ke$a.length
(yaitu, jumlah waktu vertikal yang sesuai yang diperlukan untuk menghapus semua kecuali satu karakter). Setiap iterasi, kami menampilkan string saat ini dan disimpan dengan mudah$x
pada saat yang sama. Kami kemudian membangun baru[regex]
objek,$p
attern terdiri dari karakter yang tersisa di$a
yang-n
ote
qual ruang,sort
ed, maka0
th satu daripadanya.Kami kemudian mengatur
$a
sama dengan string baru dari objek regex dengan.Replace
metode untuk menggantikan dalam string$x
,$p
attern, dengan spasi" "
, tetapi hanya1
pertandingan st. Ya, sintaksis ini aneh.String dibiarkan di atas pipa dan implisit
Write-Output
memberi kita garis baru di antara mereka secara gratis, ditambah satu baris baru.sumber
Java (JDK 10) , 140 byte
Cobalah online!
Secara teknis ada garis kosong, tetapi tidak kosong .
sumber
Stax , 9 byte
Jalankan dan debug itu
Ini adalah algoritma yang sama dengan solusi 05AB1E Luis
sumber
MATL ,
1716 byteCobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
Excel VBA, 167 byte
Fungsi jendela langsung VBE anonim yang mengambil input dari jarak
[A1]
dan keluaran ke jendela langsung VBE.Tidak Disatukan dan Dikomentari
sumber
Japt ,
3218 byteDisimpan 14 byte berkat Shaggy!
Cobalah online!
sumber