Diberikan string sebagai input menemukan yang paling berdekatan berdekatan substring yang tidak memiliki karakter dua kali atau lebih. Jika ada beberapa substring seperti itu Anda dapat menampilkan baik. Anda dapat berasumsi bahwa input berada pada kisaran ASCII yang dapat dicetak jika Anda mau.
Mencetak gol
Jawaban pertama-tama akan diberi peringkat berdasarkan panjang substring non-berulang terpanjang mereka sendiri, dan kemudian dengan total panjangnya. Skor yang lebih rendah akan lebih baik untuk kedua kriteria. Tergantung pada bahasanya ini mungkin akan terasa seperti tantangan kode-golf dengan pembatasan sumber.
Keremehan
Dalam beberapa bahasa mencapai skor 1, x (bahasa) atau 2, x (Brain-flak dan tarpit turing lainnya) cukup mudah, namun ada bahasa lain di mana meminimalkan substring non-berulang terpanjang adalah sebuah tantangan. Saya bersenang-senang mendapatkan skor 2 di Haskell, jadi saya mendorong Anda untuk mencari bahasa di mana tugas ini menyenangkan.
Uji kasus
"Good morning, Green orb!" -> "ing, Gre"
"fffffffffff" -> "f"
"oiiiiioiiii" -> "io", "oi"
"1234567890" -> "1234567890"
"11122324455" -> "324"
Pengiriman skor
Anda dapat menilai program Anda menggunakan cuplikan berikut:
sumber
11122324455
Jonathan Allan menyadari bahwa revisi pertama saya tidak menanganinya dengan benar.11122
terjadi setelahnya324
, tetapi dideduplikasi menjadi12
.Jawaban:
C, skor 2,
747720662 byteBekerja setidaknya pada MinGW 32-bit (dengan optimasi dinonaktifkan). Tidak menggunakan kata kunci tunggal.
Tampaknya bekerja di TIO dengan gcc dan dentang: Coba online! (Terima kasih @Dennis!)
Telepon dengan:
Keluaran:
Kode dengan pemformatan yang sedikit lebih mudah dibaca:
Dan ini dapat digunakan untuk menghasilkan spasi yang tepat untuk mendapatkan pemformatan dengan skor 2: Coba online!
C, skor 3, 309 byte
Cobalah online!
sumber
Haskell , skor 2,
492...307224212209207 byteCobalah online!
Bermain golf ratusan byte berkat WW dan Ørjan Johansen !
Penjelasan
Fungsi
(??)
mengambil karakterc
dan strings
dan mengembalikan awalan terpanjangs
yang tidak mengandungc
. Tidak disatukan dan tidak dioptimalkan untuk skor:Fungsi ini
ss
digunakan(??)
untuk menemukan awalan terpanjang dari karakter unik dari string yang diberikan:(##)
adalah fungsi yang mengambil dua string dan mengembalikan yang lebih panjang. Perbandingan panjang bekerja dengan mengulangi stringx
seseringx
panjang (x>>y
) dan sebagaimanay
panjang (y>>x
) dan memeriksa mana dari string yang dihasilkan secara leksikografis lebih besar.Akhirnya
ff
berulang pada string input, menghasilkan awalan terpanjang denganss
, secara rekursif menentukan substring non-berulang terpanjang dari ujung string dan mengembalikan yang lebih panjang dari keduanya dengan(##)
:sumber
@
trik sebenarnya biaya 2 byte lebih dari hanya membuat?
dua karakter: 207Lua, skor 3, 274 byte
Catatan: Lua 5.2 atau Lua 5.3 diperlukan
Pemakaian:
Gagasan utama: interleave semuanya dengan spasi, masukkan
" "
(dua spasi) untuk membagi pengidentifikasi panjangKode tidak dikunci:
Program aktual (setelah menghapus semua pasangan spasi):
BTW, cuplikan JS untuk menghitung skor gagal pada kode saya.
sumber
Retina 0.8.2 , 37 byte, skor 9
Cobalah online! Terjemahan langsung dari jawaban ini ke Retina 1 menghemat satu byte dengan menggunakan
N
alih-alihO#
. Namun, jika Anda bermain golf dengan Retina 1 dengan jawaban hingga 28 byte, nilainya sebenarnya naik menjadi 10! Penjelasan:Hasilkan semua sufiks input.
Untuk setiap akhiran, ambil awalan hingga karakter duplikat pertama.
Urutkan string yang tersisa dalam urutan terbalik panjang (yaitu terpanjang pertama).
Ambil yang terpanjang.
sumber
Jelly , skor 2, 14 byte
Terima kasih kepada @JonathanAllan untuk skor -1, +7 byte dan karena melihat bug.
Cobalah online!
Bagaimana itu bekerja
sumber
Bersih , skor
75, 276 byteCobalah online! Terima kasih kepada @ Οurous untuk menunjukkan kepada saya bahwa mungkin untuk memanggil kode mesin ABC langsung dari dalam Bersihkan. Ini memungkinkan untuk menyingkirkan leher botol sebelumnya
import
yang menetapkan skor minimal ke 7, tetapi membutuhkan kata kuncicode
yang menetapkan skor minimal 5 untuk pendekatan ini.Versi kode yang tidak dioptimalkan dan tidak dioptimalkan skor dapat ditemukan di sini: Coba online!
Versi sebelumnya dengan skor 7,
158154130 byteCobalah online!
Dengan
import
skor tidak dapat pergi di bawah 7. Tanpa impor orang perlu menerapkan kesetaraan pada string atau karakter tanpa fungsi perpustakaan yangmungkin tidakmungkin, seperti yang dapat dilihat pada versi baru di atas.sumber
A code block with raw ABC instructions, which can be used for primitive functions like integer addition, for linking with C, bypassing the type system... welcome down the rabbit hole!
( dari cloogle ) tentu saja terdengar mengundang. Saya akan memeriksanya besok, terima kasih untuk sarannya!-IL
bendera, karena tidak ada yang diimpor.Python 3 , skor 4, 155 byte
Ini mendefinisikan suatu fungsi
l
.Terima kasih kepada @xnor karena menunjukkan bahwa string dengan panjang 3 tidak meningkatkan skor, menghemat 32 byte.
Cobalah online!
sumber
Brachylog , skor 2, 19 byte
Cobalah online!
Hanya jawaban "ruang segalanya" yang membosankan. Setidaknya saya mengetahui bahwa metapredicate dapat ditempatkan jauh dari predikat dan masih berfungsi (dan subskrip dan superskrip (parametrik) tidak dapat).
s ᶠ
- temukan semua substring dari string yang diberikanl ᵒ
- pesan berdasarkan panjangnya (naik secara default)≠ ˢ
- pilih yang memiliki semua elemen berbedat
- dapatkan ekor (elemen terakhir) dari itu - yang memiliki panjang terbesarsumber
Pyth , 11 byte, skor 4
Skor -4 berkat Dennis
Cobalah online!
sumber
Sekam , skor 2, 10 byte
Cobalah online!
Penjelasan
Program ini setara dengan ini:
Built-in
Ë
mengevaluasi≠
pada semua pasangan yang berurutan dari argumennyax
, dan kembalilength(x)+1
jika setiap hasil benar, jika tidak0
. Ketika kami memaksimalkan ini, kami menemukan string terpanjang yang tidak memiliki karakter berulang.Dalam pengajuan, saya hanya menyisipkan fungsi identitas
I
antara masing-masing fungsi, dua kali. KarenaIË
sama denganË
,I≠
sama dengan≠
dan seterusnya, ini tidak mengubah semantik. Satu-satunya bahaya adalah bahwa fungsi urutan yang lebih tinggi dapat memutuskan untuk menggunakan salah satu dariI
argumennya, tetapi untungnya hal itu mengarah pada kesalahan ketik dalam program kami, jadi itu tidak terjadi.sumber
Clojure, skor 4
Oh man ini menyakitkan!
N
mengimplementasikannext
,R
isreduce
,C
iscount
,J
isconj
(hanya berfungsi untuk vektor) danI
isiterate
.apply str
apakah ada dua kali karena kalau tidak input "aaaa" tidak akan mengembalikan string tetapi vektor[\a]
. Untungnya saya harus menggunakanapply
danassoc
, saya tidak tahu Anda bisa membuat satu indeks di luar elemen terakhir vektor: osumber
Jelly , skor 5, 10 byte
Cobalah online!
sumber
ẆµQQ ⁼ µ Ðf µ Ṫ
(mungkin menambahkan terlalu banyak ruang sekarang, tapi itu hanya sebuah contoh. Saya akan membiarkan Anda mengoptimalkan byte-count versus spasi).Python 3 , skor 4, 317 byte
Cobalah online!
Kode belum dijawab:
lambda a
berisimbda
yang memiliki skor 5, dan kebutuhan fungsireturn
yang tampaknya tidak bisaexec
diedit (sehingga membutuhkan skor setidaknya 5 untuketurn
), sehingga program lengkap diperlukan. Mungkin saja untuk mengurangi ukuran kode yang belum pernah dilakukan sebelumnya, tetapi saya tidak dapat melihat peningkatan yang jelas dan cepat.sumber
Alice , 40 byte
(Mengikuti baris baru)
Cobalah online!
Penunjuk instruksi bergerak secara diagonal dalam mode ordinal, jadi hanya setiap karakter lain yang dieksekusi.
sumber
Perl 6 , skor:
15 108, panjang:46 5562 byteMenguji
Menguji
Menguji
Diperluas:
sumber
Java 8, skor
9 (384 B)7 (401 B)Versi awal. Akan turun dari sini. Skor adalah 9 karena"ubstring "
, jadisubstring
akan menjadi bagian pertama yang diganti." length"
, yang saya mungkin tidak akan dapat mengurangi lebih lanjut .. Saya ragu mungkin untuk menjatuhkan empat penggunaanlength
. Jika memungkinkan," eturn"
(6) mungkin menurunkan skor dengan 1 sebagai peningkatan akhir, tapi saya kira ini dia (kecuali mungkin pengurangan kecil dalam byte-count ..)Cobalah online.
sumber
Haskell , skor 7
-4 Terima kasih untuk Laikoni.
Cobalah online!
sumber
f s=snd$maximum[(0<$i,i)|i<-tails=<<inits s,nub i==i]
menghemat satu byte dan dua pada skor.Mathematica, skor
119Memotong beberapa byte dari string terpanjang yang tidak terulang dengan mengaburkan nama fungsi:
sumber
Kotlin , skor:
11109 byte, panjang:227246245 byteYang terpanjang adalah
ubstring
, yaitu 9 karakterDisebut seperti ini:
sumber
roupingBy
dan{
?roupingBy
(yaitu 9 karakter) tetapieachCount
(dengan spasi tambahan).roupingBy
memiliki ruang trailing (terlihat di markdown, tetapi penyaji sepertinya menghapusnya)Pyth , skor 3 (
1814 byte)Cobalah online!
Substring non-berulang terpanjang adalah
.:
.sumber
e f {I T .:
.05AB1E , 22 byte | Skor: 2
-1 skor + 7 byte berkat HeebyJeeby
Cobalah online!
05AB1E , 15 byte | Nilai: 3
Cobalah online!
05AB1E , 8 byte | Nilai: 8
Cobalah online!
05AB1E sebenarnya dapat melakukan sesuatu yang agak murah ... menambahkan spasi putih ke 05AB1E tidak melakukan apa-apa.
Jika ada aturan yang menentang ini, saya juga bisa menggunakan
´
dan menyukai 7 karakter lainnya.sumber