Terinspirasi oleh meme yang saya lihat sebelumnya hari ini.
Deskripsi tantangan
Pertimbangkan kotak alfabet tak terbatas:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
...
Ambil satu kata ( CODEGOLF
dalam contoh ini) dan jadikan itu sebagai kisi-kisi, ganti huruf yang tidak terpakai dengan spasi dan hilangkan huruf di ujung kisi yang tak terbatas sama sekali:
C O
DE G O
L
F
Contohnya
STACKEXCHANGE
ST
A C K
E X
C H
A N
G
E
ZYXWVUTSRQPONMLKJIHGFEDCBA
Z
Y
X
W
V
U
T
S
R
Q
P
O
N
M
L
K
J
I
H
G
F
E
D
C
B
A
F
F
ANTIDISESTABLISHMENTARIANISM
A N T
I
D I S
E ST
AB L
I S
H M
E N T
A R
I
A N
I S
M
Catatan
- Ruang putih trailing diperbolehkan.
- Anda tidak perlu
mengisibaristerakhirdengan spasi. Misalnya, jika inputnya adalahABC
, Anda dapat menghasilkan hanyaABC
tanpa 23 spasi tambahan. - Anda mungkin menganggap input akan cocok dengan
[A-Z]+
regex. - Atau, Anda dapat menggunakan huruf kecil, di mana output kasus akan cocok
[a-z]+
. - Anda harus menggunakan baris baru (
\n
,\r\n
atau setara) untuk memisahkan baris, yaitu daftar string bukan format output yang tepat. - Ini adalah tantangan kode-golf , jadi buat kode Anda sesingkat mungkin!
BALLOON
(dua karakter yang berdekatan yang sama).Jawaban:
Sekam , 15 byte
Cobalah online!
Penjelasan
sumber
Java 10,
161159152 byte-2 byte berkat @Nevay .
-7 byte mencetak langsung alih-alih mengembalikan sebuah String, dan mengkonversi ke Java 10.
Penjelasan: "
Coba di sini.
Bagian pertama dari metode ini membagi kata input menjadi beberapa bagian dengan pembatas.
Misalnya:
CODEGOLF
→CO;DEGO;L;F
atauBALLOON
→B;AL;LO;O;N
.Bagian kedua loop atas bagian-bagian ini, dan menggunakan regex
[^...]
untuk mengganti semua yang tidak cocok dengan spasi.Misalnya
.replaceAll("[^CO]"," ")
meninggalkanC
, danO
, dan mengganti yang lainnya dengan spasi.sumber
B;AL;LO;O;N
?for(char c:s)x+=p<(p=c)?c:";"+c;
.C (gcc) , 69 byte
Cobalah online!
sumber
Perl 5 , 44 byte
40 byte kode + 4 untuk
-lF
.Cobalah online!
sumber
Python 2 , 92 byte
Cobalah online!
sumber
JavaScript (ES6), 79
Sunting Ketika baris baru diterima, saya dapat menyimpan 2 byte
Untuk 1 byte lebih, saya dapat menerima input huruf kecil atau besar:
Kurang golf
Uji
sumber
\n
dengan baris baru literal di dalam backticks untuk -1 byte.MATL ,
2423 byteMenggunakan huruf kecil.
Cobalah di MATL Online!
Penjelasan
sumber
Japt ,
1816 byte-2 byte terima kasih kepada @Shaggy
Input huruf besar saja.
Cobalah online!
Penjelasan
Beralih ke variabel alternatif, di mana
B
alfabet huruf besar.Pisahkan string input antara karakter di mana yang pertama lebih besar atau sama dengan (
¨
) yang kedua.Memetakan setiap partisi berdasarkan fungsi, di mana
X
partisi saat ini.Petakan setiap karakter dalam alfabet huruf besar dengan yang berikut, dengan
Z
menjadi huruf saat ini.Hapus semua huruf di partisi saat ini dari surat saat ini. Jika huruf saat ini terkandung dalam partisi saat ini, ini menghasilkan string kosong.
Jika itu benar (bukan string kosong), kembalikan spasi (
S
), jika tidak kembalikan surat saat ini.Gabungkan hasil dari baris sebelumnya dengan baris baru dan cetak hasilnya.
sumber
r"[^{Z}]"S
sepertinya agak konyol, tapi aku juga tidak bisa menemukan cara yang lebih baik ...kX
!kX ?S:Z
untukoX ªS
menyelamatkan dua bytePyth, 18 byte
Coba di sini.
Memimpin baris baru dalam output, alfabet huruf kecil.
sumber
Jelly , 19 byte
Cobalah online!
sumber
OI<1®;
->>2\0;
untuk menyimpan satu byte (sebenarnya saya lakukan>2\0;œṗµØAf€ȯ€⁶µ€Y
untuk 18 juga, yang menurut saya lebih mudah diurai)BALLOON
atau sesuatu.<2\1;¬
; Baiklah.C (gcc),
9163 byte-28 Terima kasih hanya untuk ASCII
Cobalah online!
Sebelumnya:
Ya, ada solusi yang lebih pendek, tetapi saya perhatikan setelah saya menulis yang ini ... Cobalah online!
sumber
Mathematica, 101 byte
Split
masukan ke dalam urutan surat yang meningkat secara ketat, membandingkan huruf yang berdekatan denganOrder
. JikaOrder[x,y] == 1
, makax
mendahuluiy
dalam alfabet dan dengan demikian dapat muncul pada baris yang sama.Untuk setiap urutan huruf, buat pola yang cocok dengan string
Except
untuk huruf-huruf itu;#|##
adalah singkatan untukAlternatives
. Ganti surat dariAlphabet
yang cocok dengan pola dengan spasi.Ilustrasi langkah menengah:
sumber
Golfscript,
2221 byteCobalah online!
-1 byte berkat redefining akhir yang cermat dari
n
built-in.Penjelasan (dengan versi yang sedikit berbeda):
sumber
Retina , 80 byte
Cobalah online!
Selalu ada persis satu baris baru terkemuka. Kode agak kikuk menambahkan kata dengan alfabet bersama dengan penanda (titik koma). Kemudian memindahkan penanda ke huruf pertama dari kata itu, sambil mengubah semua huruf lainnya masuk ke spasi. Itu juga menghapus huruf pertama dari kata itu. Itu mengulangi ini sampai huruf pertama kata tidak lagi setelah penanda. Kemudian menghapus penanda itu dan sisa alfabet, dan menggantinya dengan baris baru dan alfabet dengan penanda lagi. Itu terus mengulangi ini sampai kata input kosong, lalu itu membersihkan alfabet dan penanda terakhir, meninggalkan output yang diinginkan.
sumber
05AB1E , 18 byte
Cobalah online!
Mendapat masalah dengan 05AB1E
ć
(ekstrak 1) meninggalkan string / daftar kosong di tumpukan setelah elemen terakhir diekstraksi. Solusi ini akan lebih pendek 1-2 byte jika bukan karena itu.sumber
ð,
berarti "cetak spasi dan baris baru".Retina ,
130126 byteCobalah online! Sunting: Disimpan 4 byte dengan menggunakan alfabet generator @ MartinEnder. Penjelasan:
Tambahkan alfabet.
Sejajarkan huruf sebanyak mungkin dengan posisinya di alfabet.
Mulai baris baru sebelum huruf pertama yang tidak dapat disejajarkan.
Hapus alfabet, tetapi lakukan semuanya lagi sampai tidak ada huruf yang tidak selaras.
sumber
q / kdb + ,
4845 bytesLarutan:
Cobalah online!
Catatan: Tautan ke port K (oK) dari solusi ini karena tidak ada TIO untuk q / kdb +.
Contoh:
Penjelasan:
Q ditafsirkan dari kanan ke kiri. Solusinya dibagi menjadi dua bagian. Pertama-tama pisahkan string di mana karakter berikutnya kurang dari atau sama dengan saat ini:
"STACKEXCHANGE"
->"ST","ACK","EX","CH","AN","G","E"
Kemudian ambil 26 string kosong, dan terapkan input itu pada indeks di mana input muncul dalam alfabet, dan cetak ke stdout.
"__________________________"
->__________________ST______
Kerusakan:
Catatan:
sumber
Powershell,
7063 byte-7 byte terima kasih @Veskah
Cobalah online!
Penjelasan:
Untuk setiap karakter dalam argumen splatted:
$x
dan$x
nilai yang jelas (rv
alias untuk Remove-Variable ), jika kode karakter saat ini kurang atau setara (-le
) ke kode karakter sebelumnya.$x
, simpan ke$x
. Juga menyegarkan nilai karakter sebelumnya.Output terakhir
$x
.sumber
|% *ht
untuk menyimpan beberapa byte tetapi sepertinya itu impas.Jelly ,
2421 byte3 byte berkat Erik the Outgolfer.
Cobalah online!
sumber
SOGL V0.12 , 22 byte
Coba Di Sini!
sumber
JavaScript (ES6), 87 byte
Menerima input huruf besar atau kecil. Output cocok dengan kasus input.
Tes
Tampilkan cuplikan kode
sumber
Haskell,
81 7473 byteDisimpan 1 byte berkat Laikoni !
Cobalah online.
Optimalisasi Haskell Hugs
Interpreter Hugs memungkinkan saya untuk menyimpan satu byte lagi dengan melakukan
(!cycle$['A'..'Z']++"\n")
alih - alih :,(!cycle(['A'..'Z']++"\n"))
tetapi GHC tidak menyukai yang pertama . (Ini sekarang sudah usang; Laikoni sudah menulis ulang baris itu dengan cara yang menghemat 1 byte.)Rupanya, Hugs juga tidak memerlukan tanda kurung di sekitar pencocokan pola daftar, jadi saya bisa menghemat dua byte lagi dari:
q@(w:y)!(x:z)
keq@(w:y)!x:z
.sumber
a=['A'..'Z']++'\n':a;(!a)
. Menarik untuk sekarang bahwa Pelukan tampaknya memiliki aturan yang agak longgar.a=...:a
triknya. Terima kasih!Python 3 ,
8785 byteCobalah online!
sumber
J , 39 byte
Cobalah online!
sumber
Arang , 15 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
APL (Dyalog Classic) , 20 byte
Cobalah online!
sumber
K (ngn / k) ,
2928 byteCobalah online!
{
}
berfungsi dengan argumenx
>':x
untuk setiap karakter, apakah ini lebih besar dari karakter sebelumnya?~
meniadakan&
di mana (di mana indeks) kita benar(
)_x
potongx
pada indeks tersebut, kembalikan daftar string{
}'
untuk masing-masing string tersebutalfabet bahasa Inggris
x?
cari indeks kemunculan pertama setiap huruf dalamx
, gunakan0N
(nilai "null" khusus) jika tidak ditemukanx@
indeksx
dengan itu; pengindeksan dengan0N
pengembalian" "
, jadi kami mendapatkan string panjang-26 di mana huruf-huruf darix
berada pada posisi alfabet dan yang lainnya adalah spasisumber
R ,
129117 byteCobalah online!
Penjelasan (ungolfed):
sumber
R , 95 byte
Jalankan alfabet huruf besar berulang kali sambil memajukan penghitung dengan 1 jika Anda menjumpai huruf di posisi berlawanan kata dan mencetak huruf, spasi sebaliknya.
Cobalah online!
sumber
GolfScript , 37 byte
Cobalah online!
Saya membuat satu Golfscript dengan nama yang berbeda, tetapi hasilnya salah.
sumber