Kami mengatakan string tidak membedakan jika masing-masing karakter string muncul jumlah yang sama dan setidaknya dua kali.
Contohnya
"aa!1 1 !a !1"
adalah non-diskriminatif karena masing-masing karakter!
,a
dan1
muncul tiga kali."abbaabb"
adalah tidak non-diskriminatif karenab
muncul lebih sering daripadaa
."abc"
juga tidak non-diskriminatif karena karakter tidak muncul setidaknya dua kali.
Tugas
Tulis program atau fungsi non-diskriminatif yang mengembalikan nilai kebenaran jika string yang diberikan tidak diskriminatif , dan nilai palsu sebaliknya.
Yaitu, program yang dijalankan dengan kode sumbernya sendiri harus mengembalikan nilai kebenaran.
Setiap kiriman harus dapat menangani string non-kosong yang berisi ASCII yang dapat dicetak , serta semua karakter yang muncul dalam kode sumber kiriman.
Uji Kasus
Benar:
<your program's source code>
"aaaa"
"aa!1 1 !a !1"
"aabbccddeeffgg"
"1Q!V_fSiA6Bri{|}tkDM]VjNJ=^_4(a&=?5oYa,1wh|R4YKU #9c!#Q T&f`:sm$@Xv-ugW<P)l}WP>F'jl3xmd'9Ie$MN;TrCBC/tZIL*G27byEn.g0kKhbR%>G-.5pHcL0)JZ`s:*[x2Sz68%v^Ho8+[e,{OAqn?3E<OFwX(;@yu]+z7/pdqUD"
Falsy:
"a"
"abbaabb"
"abc"
"bQf6ScA5d:4_aJ)D]2*^Mv(E}Kb7o@]krevW?eT0FW;I|J:ix %9!3Fwm;*UZGH`8tV>gy1xX<S/OA7NtB'}c u'V$L,YlYp{#[..j&gTk8jp-6RlGUL#_<^0CCZKPQfD2%s)he-BMRu1n?qdi/!5q=wn$ora+X,POzzHNh=(4{m`39I|s[+E@&y>"
Jawaban:
Brachylog , 10 byte
Cobalah online!
Penjelasan
sumber
Java 8,
198192186174168165160 byte (char-count65)Cobalah online.
Kode digunakan untuk memverifikasi kemunculan karakter , yang merupakan jawaban saya untuk tantangan ini .
-5 byte terima kasih kepada @ OlivierGrégoire lagi dengan menyingkirkan komentar dan membuat kekacauan. ;)
Jawaban lama 168 byte (char-count 6) :
Cobalah online.
Kode digunakan untuk memverifikasi kemunculan karakter yang tidak termasuk komentar , yang merupakan jawaban saya untuk tantangan ini .
-6 byte berkat @ OliverGrégoire menghapus
<
dengan menukar cek ke>
.Penjelasan program dasar golf (98 byte):
Cobalah secara online.
Beberapa hal yang saya lakukan untuk mengurangi jumlah karakter yang digunakan:
o
,w
,u
,f
,r
, dane
dipilih dengan tujuan untuk digunakan kembali karakter kita sudah punya (tapi tidak melebihi 6).2222
digunakan sebagai ganti256
.e>0&u!=e|u<2
ke!(e<2|u==e)|u<2
untuk menghapus 6x&
.f
, dan kami mengembalikan apakah masih 0 pada akhirnya (ini berarti saya dapat menghapus 6xby
daribyte
sekarang yang hanya kami gunakann
dalamint
6 kali, bukan 8).e<2
danu<2
diubah menjadi2>e
dan2>u
untuk menghapus 6x<
.Apa yang saya lakukan untuk mengurangi char-count 6 hingga 5:
int
untukbyte
jadi jumlahn
yang digunakan adalah 4 bukan 6.x[0]
alih-alih variabel baruf=0
sehingga jumlah yang=
digunakan adalah 5, bukan 6.2222
ke3333
sehingga jumlah2
digunakan adalah 2 bukan 6.f
danr
lagi sehingga mereka tidak lagi 6.Apa yang dilakukan @ OlivierGrégoire untuk menghilangkan komentar, dan karenanya 5x
/
:,i,fe,fi,w;
.s:w:no0r3sswwyyy:
.|2>2
{}
sekitar for-loop dan ifs, dan menambahkan{}
-block yang tidak digunakan .!
menjadi!!!
.|
menjadi||
.333
untuk+333-3|2
menyingkirkan sisa operator aritmatika+-|
dan2
.!(x[0]>0)
menjadi!!(0>--x[0])
.sumber
<
menjadi>
.Jelly ,
18161210 byteCobalah online!
Bagaimana itu bekerja
sumber
Brachylog ,
1412 byteCobalah online!
Penjelasan
Solusi 12-byte alternatif yang menggunakan kembali
t
alih-alihᵐ
:sumber
T-SQL, 320 byte (masing-masing 32 karakter x 10)
Input melalui tabel yang sudah ada sebelumnya
FILL
dengan bidang varcharSTEW
, sesuai standar IO kami .Saya tidak pernah lebih senang, namun ngeri, dengan sepotong kode.
Harus dijalankan di server atau basis data yang diatur ke pemeriksaan case-sensitive. Ada 10 masing-masing 32 karakter yang berbeda, termasuk huruf besar dan kecil
E
(perintah SQL tidak peka huruf besar-kecil, sehingga membalik beberapa sesuai kebutuhan), spasi dan tab (tab ditampilkan sebagai jeda baris dalam kode di atas, agar mudah dibaca).Saya menemukan cara untuk memasukkan 10 masing-masing simbol lain
+ = ,
dalam kode, tetapi sayangnya tidak dapat menemukan cara untuk melakukannya<
, jadi saya harus menambahkan karakter komentar-
.Berikut adalah kode yang diformat sebelum saya menjejali semua pengisi ekstra:
Baris teratas adalah CTE rekursif yang menghasilkan tabel angka
b
, yang kita gabungkan ke string sumber untuk dipisahkan oleh karakter. Karakter-karakter tersebut dikelompokkan dan dihitung, danIIF
pernyataan mengembalikan 0 atau 1 tergantung pada apakah string input tidak diskriminatif.sumber
C (gcc) ,
333168 byteTerima kasih kepada @Kevin Cruijssen karena telah menghemat 9 byte dan terima kasih kepada @Laikoni karena telah menghemat 45 byte!
Cobalah online!
C, 333 byte
Bahkan bytecount tidak diskriminatif!
Cobalah online!
sumber
128
hingga222
sehingga8
dapat dijatuhkan.i
,v
,S
,s
danL
untuk karakter yang sudah muncul dalam kata kuncichar
,for
danreturn
: Cobalah secara online!05AB1E ,
20181614 byteCobalah online!
Program ini pada dasarnya dibagi menjadi 2 bagian di mana tujuan dari bagian pertama adalah untuk melakukan tugas yang sebenarnya dan tujuan dari bagian kedua adalah menggunakan fungsi yang sama seperti bagian pertama tanpa mengubah hasilnya.
Penjelasan (bagian pertama)
Penjelasan (bagian kedua)
sumber
{γ€gDË*P≠qq{γ€gDË*P≠
lain untuk 20;).¢
... ide bagus, juga aku senang melihat≠
itu berguna seperti yang kupikir mungkin haha!Sekam , 14 byte
Cobalah online!
Penjelasan
Dua baris pendek adalah no-ops, karena fungsi utama tidak pernah memanggil mereka.
sumber
m
juga terjadi dua kali: di baris pertama dan di baris kedua. Penjelasan tidak termasuk dua garis pendek karena mereka tidak mempengaruhi perilaku program.Python 2 ,
7569 byteOutput adalah melalui ada atau tidak adanya kesalahan. Kesalahannya adalah ValueError (satu atau lebih karakter muncul hanya sekali) atau NameError (jumlah karakter tidak sama).
Cobalah online!
sumber
{{e.dil:-tu,r.dil:-tu,}}
Tuan yang baik apa itu?a
dan semuanya pecah. Bisakah Anda jelaskan lebih lanjut?or
. Saya akan menambahkan penjelasan ketika saya di depan komputer.Brachylog v2, 8 byte (dalam rangkaian karakter Brachylog)
Cobalah online!
Sepertinya sudah ada perang golf yang terjadi pada pertanyaan ini di Brachylog, jadi saya pikir saya akan bergabung, menghemat beberapa byte untuk jawaban terbaik berikutnya.
Ini adalah program lengkap yang mengambil input sebagai daftar kode karakter. (Ini sebagian karena Brachylog tampaknya memiliki beberapa bug yang sangat aneh terkait dengan garis miring terbalik di string, dan sebagian karena
\
perintah tidak bekerja pada daftar string.)Penjelasan
Pada
koḅ
akhirnya tidak relevan;k
akan selalu memiliki elemen untuk ditindaklanjuti dano
danḅ
tidak dapat gagal jika diberi daftar sebagai input.Alasan untuk memulai
oḅ
harus jelas; itu mempartisi daftar input berdasarkan nilai, misalnya[1,2,1,2,4,1]
akan menjadi[[1,1,1],[2,2],[4]]
. Agar setiap karakter muncul jumlah kali yang sama, masing-masing daftar ini harus memiliki panjang yang sama, yaitu daftar yang dihasilkan adalah persegi panjang. Kita dapat menegaskan penggunaan segi empat ini\
, yang juga mentransposisi baris dan kolom sebagai efek samping.Kami sekarang memiliki nilai saat ini yang terdiri dari beberapa salinan dari rangkaian karakter, misalnya jika inputnya adalah
[4,2,1,2,4,1]
nilai saat ini[[1,2,4],[1,2,4]]
. Jika kita menghapus salinan, matriks yang dihasilkan masih berbentuk persegi panjang, jadi kita bisa mengubahnya kembali menggunakan\
. Namun, jika alasan matriks adalah persegi panjang adalah bahwa semua input karakter yang berbeda, matriks yang dihasilkan akan memiliki elemen yang tersisa, dan\
tidak tidak memperlakukan "0 × 0" matriks sebagai persegi panjang (lebih tepatnya, gagal). Jadioḅ\k\
secara efektif menegaskan bahwa setiap karakter yang muncul dalam input muncul jumlah kali yang sama, dan jumlah kali itu bukan 1.Itulah seluruh fungsionalitas program kami (sebagai program penuh, kami dapatkan
true
jika tidak ada kegagalan pernyataan,false
jika beberapa terjadi). Kita harus mematuhi batasan tata letak sumber, jadi saya menambahkan tambahankoḅ
yang tidak memiliki tujuan tetapi tidak dapat gagal (tidak seperti\
,o
danḅ
senang untuk bertindak pada daftar kosong).sumber
Python 2 ,
8480 byteCobalah online!
sumber
JavaScript (Node.js) ,
144...10096 byteCobalah online!
24 karakter berbeda * 6 kali masing-masing28 karakter berbeda * 5 kali masing-masing27 karakter berbeda * 5 kali masing-masing27 karakter berbeda * masing-masing 4 kali26 karakter berbeda * masing-masing 4 kali25 karakter berbeda * masing-masing 4 kali24 karakter berbeda * masing-masing 4 kali
Penjelasan
sumber
PowerShell , 104 byte
Cobalah online!
Ini sangat menyenangkan untuk bermain golf. Batasannya adalah
$
, yang kita butuhkan minimal empat (satu untuk input$args
, satu untuk menetapkan hasil perhitungan$qe
, satu untuk memeriksa karakter terakhir$qe[-1]
dan satu untuk memeriksa karakter pertama$qe[0]
, sehingga itu adalah jumlah karakter maksimum yang bekerja.Dari sana, itu masalah golf (dan bukan-golf, seperti memiliki nama variabel dua huruf) untuk membuat program dibagi dengan baik oleh empat. Perhatikan bahwa kami memiliki komentar kecil (semuanya mengikuti
#
) untuk menjelaskan beberapa elemen yang hilang, tetapi saya mencoba menjaga komentar sekecil mungkin.sumber
Haskell,
907572 byteSetiap karakter muncul 6 kali. String input diambil sebagai daftar tunggal .
Cobalah online!
Untuk referensi, versi lama:
75 byte, masing-masing karakter 5 kali
Cobalah online!
90 byte, masing-masing karakter 3 kali:
Cobalah online!
sumber
Python 2 ,
1081049288 byte-12 byte terima kasih kepada Rod
-4 byte terima kasih kepada Kevin Cruijssen
Cobalah online!
sumber
s=input();c=s.count;print[all(c(s[[]>[1]])>=c(o)>1. for o in s)];aaafffillpprrtuu=1.>1.;
88 byte dengan menyingkirkan komentar.aaabb
tampaknya menghasilkanTrue
MATL , 12 byte
Inputnya adalah string yang dilampirkan dalam tanda kutip tunggal. Kutipan tunggal dalam string diloloskan dengan duplikasi.
Output adalah matriks non-kosong, yang truthy jika tidak mengandung nol, dan falsy jika mengandung setidaknya nol.
Cobalah online! Atau verifikasi semua kasus uji , termasuk uji kebenaran / kepalsuan standar untuk kenyamanan.
Bagaimana itu bekerja
Pernyataan yang ditandai
(*)
tidak diperlukan atau berbahaya, dan telah dimasukkan hanya untuk membuat kode sumber tidak diskriminatif.sumber
Perl 5 ,
-p
57 byteSetiap karakter muncul 3 kali. Hanya satu yang
1
tidak melakukan apapun12 byte ditambahkan ke solusi 45 karakter dasar untuk membuat non-diskriminatif
Cobalah online!
sumber
R , 90 byte
Cobalah online!
Output
TRUE
untuk string yang tidak diskriminatif, danFALSE
untuk string yang diskriminatif. Saya telah menulis banyak kode jelek untuk tantangan di situs ini, tetapi saya pikir ini adalah yang paling jelek sejauh ini.45 karakter, digunakan dua kali masing-masing (termasuk beberapa dalam komentar). Jawaban R terbaik sebelumnya adalah 116 byte , dengan 29 karakter digunakan masing-masing 4 kali; Saya memposting ini secara terpisah karena ini sangat berbeda.
Kode ini setara dengan
yang mengubah input ke vektor bilangan bulat, menghitung tabel kontingensi
y
dari nilai-nilai, kemudian memeriksa bahwa semua jumlah dalam tabel itu sama dengan jumlah pertama, dan bahwa jumlah pertama lebih besar dari 1.Kesulitan awal adalah menggunakan hanya 2 pasang kurung. Ini dicapai dengan mendefinisikan kembali fungsi unary
!
dan?
menjadiutf8ToInt
danprod
masing - masing. (Saya tidak bisa menggunakanall
karena saya butuha
). Ada empat tugas: dua dengan=
dan dua dengan<-
. Ini berarti bahwa tes kesetaraan antaray
danz
tidak dapat digunakany==z
jugay-z
;y%in%z
datang untuk menyelamatkan.Menentukan fungsi-fungsi ini menggunakan semua tanda kutip yang mungkin: dua tanda kutip ganda, dua tanda kutip tunggal, dan saya akan membutuhkan dua tanda kutip pada paragraf berikutnya, jadi saya harus menggunakan
readLines()
alih-alihscan(,"")
. (Pilihan lain, sepertiscan(,letters)
atauscan(,month.abb)
semua menggunakan barang berhargat
yang tidak bisa saya simpan.)Pada titik ini, saya memiliki sebagian besar blok bangunan:
utf8ToInt
,prod
,table
,readLines
,%in%
. Tiga karakter muncul tiga kali dalam nama mereka:ent
. Pertama, saya menemukan itutable(foo)
setara denganxtabs(~foo)
, menyimpane
. Saya dapat menyelamatkann
dant
dengan trik kode hex / oktal ; solusi golfiest adalah menggunakanu\164f8ToI\x6Et
(dalam backticks) untukutf8ToInt
.sumber
NA
tidak dianggap sebagai nilai yang benar (dalam R, jika (NA) xNA
selain itu menyebabkan kesalahan, jadi tidak benar atau salah) )Brachylog , 18 byte
Cobalah online!
Sayangnya, saya tidak dapat menghapus umpan baris, karena
ḅ
pada nomor memicu kegagalan.sumber
Ruby ,
8778 byte26 karakter diulang 3 kali masing-masing
Cobalah online!
sumber
gets
dan;
. Menggantinya, lebih pendek dari lambdaR,
132116 byteItu tidak mengandung komentar atau string berlebihan, baik, meskipun ini mungkin akan menjadi satu-satunya waktu saya di golf kode memanggil fungsi
crudcardounenforceableuploads
.Mungkin ada anagram yang bagus di sana di suatu tempat untuk nama fungsi!Terima kasih kepada John Dvorak karena menunjukkan pemecah anagram yang bagus, yang saya gunakan untuk namanya.Tabel karakter:
contoh:
sumber
>
s, dengan memutar perbandingannya denganf
. Juga bisa digunakan=
sebagai ganti<<-
.strsplit
mungkin tidak dapat dihindari, yang merupakan sumber dari sebagian besar karakter lain.utf8ToInt
bukanstrsplit
, tapi tidak yakin apakah yang akan membantu. Juga mungkin menyertakan tautan ke TIO?.
tampaknya berlebihan.BASH 144 byte
Baris kode ini mengambil string stdin sebagai input. "Grep -o." menempatkan setiap karakter pada baris baru. "uniq -c" menghitung penggunaan setiap chacter. Script awk membuat array dengan setiap penggunaan sebagai elemen yang berbeda, dan menghasilkan true ketika hanya ada 1 indeks array dan nilainya paling sedikit 2. Setiap karakter digunakan 4 kali, jadi sumber ini mengembalikan true
sumber
Stax ,
262418 byteCobalah online!
Solusi terpendek sejauh ini yang hanya menggunakan ASCII yang dapat dicetakDipukul oleh MATL.Kira saya mendekati masalah dengan cara yang salah. Mengulangi blok kerja tidak golf atau menarik. Sekarang setidaknya terlihat lebih baik ...
Penjelasan
:u{m*
menghasilkan beberapa sampah yang tidak mempengaruhi output.sumber
#
dan dua:
, apakah Anda membaca jawaban saya di baris kedua? Apakah Anda hanya melewatkan paragraf pertama di "Penjelasan" saya?Pip , 22 byte
Cobalah online!
Penjelasan
Setiap karakter muncul dua kali.
Alternatif versi 22-byte dengan no-op yang lebih sedikit:
sumber
SmileBASIC,
164152148140 bytes35 karakter berbeda, masing-masing diulang 4 kali.
Tidak ada komentar yang digunakan (tetapi ungkapan setelah
neXT
tidak pernah benar-benar dievaluasi)Script untuk memeriksa jawaban:
Tampilkan cuplikan kode
sumber
Retina 0.8.2 ,
16890 byteOutput akan kosong jika salah, atau tidak kosong jika benar.
Cobalah online
Program inti (39 byte)
Penjelasan
Seluruh program inti berada dalam lingkaran diam. Tahap pertama mengurutkan input. Tahap kedua akan mencetak string saat ini jika terdiri dari pasangan karakter yang berbeda secara berurutan. Tahap ketiga menghapus kemunculan terakhir dari setiap karakter (menghapus satu dari setiap karakter dalam string).
Tentang sampah di atas: urutannya penting. Selain harus valid secara sintaksis, tanda titik koma harus berada setelah tanda bintang dan sebelum backtick, selama
*
berada dalam string konfigurasi, agar tidak dicetak.sumber
CoffeeScript 1 ,
969390 byteCobalah online!
Dimulai dari jawaban ES6 saya tetapi berjalan kembali menggunakan
Array.every
.323130 token @ 3 masing-masingsumber
Pyth, 30 byte
Ruang terkemuka diperlukan.
Cobalah online!
Program yang sebenarnya adalah adil
&q1lJ{hMrSz8<1hJ
. Saya hanya menambahkan string"&8<MQSlqr{"
agar tidak diskriminatif. Tetapi untuk membuat string tidak mencetak sendiri, saya harus menambahkan spasi, jadi saya menambahkan 2 spasi.length_encode
di sini (r <any> 8
) mengambil urutan dan menampilkan panjang masing-masing proses dengan karakter yang sama, mis."aaabbcc"
menjadi[[3, "a"], [2, "b"], [2, "c"]]
.Jadi ini membutuhkan input, mengurutkannya untuk memasukkan penyandian panjang, dan mengambil elemen pertama dari setiap daftar dalam daftar yang dihasilkan (misalnya, contoh sebelumnya akan menjadi
[3, 2, 2]
). Ini menghitung berapa kali karakter muncul. Maka itu deduplicated (contoh sebelumnya akan menjadi[3, 2]
), dan J diatur untuk itu.Kemudian memeriksa apakah panjangnya 1, yaitu hanya ada 1 jumlah unik kali suatu karakter terjadi, dan jika itu adalah> 1, yaitu> = 2.
Mungkin ada built-in untuk menggantikan
rSz8
atauhMrSz8
tetapi saya tidak dapat menemukannya.sumber
C (gcc) , 153 byte
Cobalah online!
Mengembalikan alamat string sebagai nilai kebenaran, dan nol sebagai kepalsuan.
sumber
Perl 6 ,
5857 byteCobalah online!
Ternyata versi tiga karakter sedikit lebih pendek dari dua karakter satu.
sumber