Pertanyaan yang terhapus di Stack Overflow terkadang menghasilkan materi golf yang bagus.
Tulis fungsi yang mengambil integer nonnegatif sebagai input, dan mengembalikan true jika semua digit dalam representasi basis 10 dari angka tersebut adalah unik. Contoh:
48778584 -> false
17308459 -> true
Hitungan karakter hanya mencakup fungsi.
Jika Anda memilih untuk menjawab dalam C atau C ++: tidak ada makro, tidak ada perilaku tidak terdefinisi; perilaku yang ditentukan implementasi dan peringatan kompiler baik-baik saja.
Jawaban:
Skrip golf,
87 karakter:`
- pertegas argumen..
- mengkloning dua kali&
- berpotongan dengan dirinya sendiri (menghapus duplikat)=
- periksa kesetaraan.jika fungsi perlu dinamai (
109 karakter ):jika suatu program mencukupi (
54 karakter ):sumber
Python 2 (28)
(32)Backticks mengambil representasi string. Konversi ke set menghapus duplikat, dan kami memeriksa apakah ini mengurangi panjang dengan membandingkan dengan 10 ^ d, yang lebih besar dari semua angka d-digit tetapi tidak ada (d + 1) -digit angka.
Kode lama:
sumber
n
dengani
f=lambda _:len(`_`)==len(set(`_`))
lambda n:max(map('n'.count,'n'))<2
(tanda kutip tunggal adalah backticks), tetapi dua karakter lagi.APL (6)
Salah satu dari beberapa kali gaya tacit lebih pendek di APL juga.
Itu 8 karakter untuk memberinya nama,
tapi itu tidak perlu untuk menggunakannya:
sumber
Perl, 19 karakter
sumber
<>!~/(\d).*\1/
.\d
ke.
.Rebmμ (10 karakter)
Trik "mushing" Rebmu adalah bahwa case-insensitive, jadi karakter dijalankan bersama. Setiap kali transisi kasus dipukul, itu terbagi ke token berikutnya. Dengan menggunakan transisi alih-alih jenis CamelCase, pilihan unik untuk memulai dengan modal besar berarti "set-word" dibuat. (Sementara set-words dapat digunakan untuk tujuan lain dalam pemrograman simbolik, mereka dievaluasi sebagai tugas secara default).
Jadi ini "tidak bersuara" ke:
Ruang diperlukan karena setelah Anda memulai serangkaian proses bergantian, Anda tidak dapat menggunakan trik itu untuk mendapatkan kata-kata setelah yang pertama kecuali Anda memulai proses baru. Jadi
e?AtsAuqA
akan membuat Andae? a ts a uq a
... tidak ada tugas.(Catatan: Untuk alasan yang mungkin bukan alasan yang bagus, saya cenderung lebih suka memikirkan kembali solusi sehingga tidak ada spasi, jika jumlah karakter sama. Karena tanda kurung, tanda kurung, dan string secara implisit mengakhiri simbol ... sering kali ada yang adil sejumlah peluang untuk ini.)
Bagaimanapun, ketika dipetakan ke Rebol yang disingkat:
Melemparkan beberapa tanda kurung untuk membantu mendapatkan inti dari urutan evaluasi:
Jadi operator kesetaraan awalan diterapkan pada dua argumen - yang pertama hasil penugasan untuk
a
versi string itu sendiri, dan yang kedua hasilunique
dijalankan terhadap string itu. Kebetulan yang unik akan memberi Anda kembali elemen dalam urutan yang sama dengan yang Anda lewati ... begitu unik dari "31214" adalah "3124" misalnya.Jalankan dengan:
Ada juga beberapa statistik dan informasi debug:
Jika persyaratannya adalah seseorang harus mendefinisikan fungsi yang dinamai / digunakan kembali, Anda dapat membuat "A-function" yang secara implisit mengambil parameter bernama a with
a|
. (Fungsi B akan dibuat denganb|
dan mengambil parameter bernama A lalu yang bernama B). Jadi itu akan menambah lima karakter lagi ... katakanlah Anda memanggil fungsi "f""Kamu tertawa! Mereka menertawakan Einstein! Atau tunggu ... kan? Aku ... tidak tahu."
sumber
Reb moo
, tapi sekarang aku tidak yakin apakah itu seharusnyaRebum mew
atauReb mew
atau sesuatu yang lain.Fa|[e? AtsAugA]
sebagaiFalse? SomeGibberish
s
benar - benar membusuk[
di Nethack?REBmu
mungkin lebih baik. Either way, jenggotnya kencang..itu menjepit. Kira Anda mendapatkan apa yang Anda bayar.FRACTRAN -
5338 pecahanGunakan pembagian untuk menghitung jumlah kemunculan setiap digit. Panggilan dengan memasukkan n di register 2 dan mengatur register 5 ke 1, memberikan output di register 3 (0 jika salah, 1 jika benar). Juga, pastikan sisa program Anda hanya menggunakan register> 71.
Sunting 25/12/14: Sudah 7 bulan dan kami sudah mendapatkan Cuplikan Stack, jadi inilah salah satu untuk menguji kodenya (menggunakan juru bahasa saya yang bisa lebih baik di sini ).
Ganti
142857
dengan nomor lain. Keluaran harus3^1
jika benar,1 = 3^0
jika salah. Membawa sedangkan untuk angka yang lebih besar (baik, ini adalah FRACTRAN ...).sumber
JavaScript - 23 Karakter
Sebagai fungsi (ECMAScript 6):
Atau mengambil input dari prompt (25 karakter)
sumber
C #
736059Golf pertama untuk saya ...
Bisa strip karakter lain dengan mengkonversiIni dia ...uint
keint
, tapi aku suka mengambil tugas terlalu harfiah dari jalan di sekitar lainnya.sumber
i => (i + "").Distinct().SequenceEqual(i + "");
+""
menelepon diToString()
bawah tenda.Ruby (24 byte)
Gunakan ekspresi reguler untuk mencocokkan "beberapa karakter, diikuti oleh nol atau lebih karakter, lalu karakter yang sama".
Jika nilai true atau falsy diterima, bukan literal
true
ataufalse
, maka kita mendapatkan 20 karakter:sumber
C (87)
Karena saya tidak bisa menang, saya akan mengejar efisiensi.
Kode fungsi:
sumber
Mathematica,
3525 karakter(27 jika fungsi membutuhkan nama.)
EDIT: Disimpan 8 karakter berkat belisarius!
sumber
Unequal @@ IntegerDigits@# &
saya kira bisa melakukannya≠
akan membandingkan elemen yang tidak berdekatan). Terima kasih, ini lebih pendek!Unequal@@IntegerDigits@#&
adalah 25 karakter.R,
53514834 BytesCobalah online!
Konversikan ke string dan pisah. Konversikan ke daftar jumlah minus 1, jumlahkan dan negasikanTerinspirasi oleh Jawaban bilangan paling umum oleh Alex dan saran dari Hugh.Satu pasangan disimpan, terima kasih kepada @plannapus Satu lagi dari @Gregor Dan pasangan dari menjadikannya fungsi anonim
Sekarang dengan kebaikan regex yang luar biasa terima kasih kepada @ Joe. Ini mencari setiap karakter tunggal dalam jumlah yang cocok dengan dirinya sendiri di mana saja dalam string. The
grepl
perintah mengembalikan logis yang kemudian kembali. Reg gaya reg diatur ke True.sumber
paste0
bukantoString
dan menyimpan 2 karakter.paste
alih-alihpaste0
menyimpan satu karakter lagi.J (9)
Asumsikan nilai yang akan diuji adalah dalam variabel
b
(Saya tahu ini dapat dibuat menjadi fungsi, tetapi tidak memiliki petunjuk tentang bagaimana . J membingungkan. Setiap bantuan tentang ini dihargai)Terima kasih Marinus!Cek apakah panjang string rep nomor dengan semua duplikat dihapus sama dengan panjang rep string biasa.
sumber
(-:~.)@":
.R (
70,60,53, 52)Terima kasih atas komentar yang bermanfaat! Komentar Anda dimasukkan dalam jawaban.
sumber
strsplit
mengapa tidak memaksa x menggunakan karakterc(x,"")
?f=function(x)all(table(strsplit(c(x,""),"")[[1]])<2)
lebih pendek 1 karakter :)Mathematica (
2019)(
2221 jika fungsi membutuhkan nama)atau
dimana | ist dimasukkan sebagai [Esc] membagi [Esc]
sumber
Brachylog , 1 byte
Cobalah online!
sumber
C99, 59 karakter
sumber
Groovy (36 karakter)
Mengujinya menggunakan:
sumber
0>1
lebih pendek.!1
saja.Haskell:
sumber
Data.List
tetap mengimpor aku sarankannub
, yang menghapus duplikat dari Daftar.(\x->nub x==x).show
main = interact $ show . ap (==) nub . show
J (8)
Sepertae yang kompeten dari jawaban saya sebelumnya.
sumber
R,
6665 karakterPisahkan digit menggunakan divisi integer dan modulo, lalu periksa apakah duplikat.
Pemakaian:
Atau, seperti yang disarankan @MickyT, untuk 63 karakter:
sumber
anyDuplicated
daripadasum
danduplicated
untuk 2 lebihC, 58 byte
Dapat menyimpan penghitungan hingga 7 digit identik sebelum berguling.
dalam program uji (lebih mudah untuk melihat cara kerjanya dengan konstanta dalam oktal)
Jika Anda memiliki kekuatan besar 2 berguna, konstanta dapat dihitung seperti
f&(1<<30)/7*6
sumber
int main(int)
jawaban Anda ...Haskell , 34 byte
Cobalah online!
sumber
Javascript 73 karakter
sumber
Menembus 98, 17 byte
Ini adalah jawaban yang tidak bersaing karena Befunge tidak memiliki fungsi.
Mencetak a
1
jika digit angka semuanya unik; jika tidak, itu hanya berakhir.Ini bekerja dengan mengakses sel di ruang Funge yang
x
koordinatnya adalah nilai ASCII dari karakter yang dimasukkan (mengambil karakter masukan berdasarkan karakter) dan yangy
koordinatnya adalah1
. Jika digit belum terlihat sebelumnya, nilai sel adalah32
(karakter spasi). Jika demikian, saya menetapkan nilai ke 1.Sebagai bonus, ini juga berlaku untuk non-angka.
sumber
PowerShell - 26
sumber
Perl 6 (19 byte)
.comb
membagi string menjadi karakter (misalnya,42.comb
memberi"4", "2"
)..uniq
menghapus semua karakter non-unik..comb
karakter dalam string (awalnya saya gunakan.chars
, tetapi.comb
lebih pendek).==
mengubah daftar menjadi sejumlah elemen di dalamnya, dan membandingkan jumlahnya. Ketika.
digunakan tanpa objek sebelumnya,$_
yang merupakan parameter fungsi default diasumsikan.{}
adalah fungsi literal.sumber
C, 76
Ini bukan tempat yang hampir menang, tetapi saya akan mempostingnya hanya untuk menunjukkan pendekatan alternatif.
Mencetak baris baru jika salah, tidak mencetak apa pun jika benar.
sumber
int main(int, char **)
atauint main(void)
.int main(int)
tidak valid.main()
tidak apa-apa?main(void)
(ketika digunakan dalam definisi, dalam deklarasi menyatakan fungsi dengan daftar parameter yang tidak diketahui).POSIX sh dan egrep (
47,43, 40)!
sebagai ganti-z
dengantest
- Terima kasih DigitalTrauma`CODE`
sebagai ganti$(CODE)
- Terima kasih DigitalTraumafold -1
sebagai gantigrep -o .
1 - Terima kasih DigitalTrauma.Jika kepatuhan POSIX tidak penting
echo PARAM |
dapat diganti dengan<<<PARAM
, mengurangi panjang fungsi menjadi 37 :Pemakaian:
1 The
fold -N
notasi sudah ditinggalkan di beberapa versifold
.sumber
f()(! [ `fold -1<<<$1|sort|uniq -d` ])
turun ke 38 menurut hitungan sayatest
kadarnya ketikauniq -d
mengembalikan lebih dari satu baris. Jadi versi non-POSIX terpendek adalah 40 karakter. Saya tahu tentang[ !
notasi, tetapi saya terkejut bahwa itu! [
juga berfungsi, apakah Anda tahu mengapa demikian?Jawa (
1315957)57 karakter:
dihapus ^ dan $ seperti yang disarankan @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
59 karakter (berfungsi juga dengan angka negatif!):
7978 karakter (terima kasih @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳):Gunakan untuk loop untuk menyimpan beberapa charachers dan gunakan int sebagai array boolean.
Gunakan & alih-alih && untuk menyimpan 1 karakter (Ternyata java mengizinkannya).
131 karakter (menghasilkan true untuk angka negatif):
dengan komentar:
Dan jawaban yang secara teknis benar (jumlah karakter hanya mencakup fungsi, bukan variabel global), tapi saya pikir itu curang, 29 karakter:
m [] adalah array boolean yang berisi jawaban yang benar untuk semua bilangan bulat 32-bit.
sumber
"^.*(.).*\\1.*$"
Anda dapat menjatuhkan^
dan$
. Mereka diimplikasikan olehmatches()
return!
di antara jawaban tersingkat, Anda bisa mencapai 56 byte.