Anehnya kita belum memiliki tantangan "menemukan angka tertinggi" yang sederhana, tapi saya pikir itu agak terlalu sepele.
Diberikan input integer non-negatif, kembalikan digit unik unik (yaitu tidak diulang) yang ditemukan dalam integer. Jika tidak ada angka unik, program Anda dapat melakukan apa saja (perilaku tidak terdefinisi).
Input dapat diambil sebagai integer tunggal, string, atau daftar digit.
Uji kasus
12 -> 2
0 -> 0
485902 -> 9
495902 -> 5
999999 -> Anything
999099 -> 0
1948710498 -> 7
Ini adalah kode-golf sehingga byte paling sedikit di setiap bahasa menang!
Jawaban:
05AB1E ,
43 byteDisimpan 1 byte berkat Tn. Xcoder yang memberitahukan bahwa daftar angka adalah input yang valid.
Cobalah online!
Penjelasan
sumber
2
tidak benar; hanya1
? : oPython 3 , 40 byte
Disimpan 2 byte berkat movatica .
Cobalah online!
42 byte
Berfungsi untuk String dan daftar tipe parameter digit. Melempar kesalahan tanpa digit unik, jenis penyalahgunaan spec itu:
Cobalah online!
Penjelasan
lambda i:
- Mendeklarasikan fungsi lambda dengan string atau daftar parameter digit i.max(...)
- Menemukan nilai maksimum generator.x for x in i
- Iterasi melalui karakter / digiti
.if i.count(x)<2
- Memeriksa apakah digitnya unik.sumber
lambda i:max(x*(i.count(x)<2)for x in i)
Alice , 15 byte
Cobalah online!
Penjelasan
Ini adalah kerangka kerja sederhana untuk kode linier yang beroperasi sepenuhnya dalam mode Ordinal (artinya program ini bekerja sepenuhnya melalui pemrosesan string). Kode linear yang tidak dilipat hanyalah:
Apa fungsinya:
sumber
Retina , 16 byte
Cobalah online!
Penjelasan
Urutkan digit.
Hapus digit berulang.
Ambil digit terakhir (maksimal).
sumber
Arang ,
1812 byteCobalah online!(Tautan ke versi verbose)
Mencetak apa pun jika tidak ada solusi yang ditemukan. Kuncinya adalah bahwa
for
loop mencetak setiap nomor unik dalam string input, tetapi tanpa menggerakkan kursor, sehingga nilainya terus mencetak ulang sendiri sampai solusi akhir ditemukan.Versi sebelumnya mencetak karakter A hingga Z ketika tidak ada solusi yang ditemukan, karenanya komentar:
Cobalah online! (Tautan ke versi verbose)
sumber
Sekam , 7 byte
Cobalah online! (Test suite, crash pada test case terakhir karena tidak memiliki digit unik)
Ini adalah komposisi fungsi dalam gaya point-free (argumen tidak disebutkan secara eksplisit di mana pun). Mengambil input dan mengembalikan output sebagai string, yang dalam Husk setara dengan daftar karakter.
Penjelasan
* Pemeriksaan panjang 1 dilakukan dengan mengambil kepala daftar (semua elemen kecuali yang terakhir) dan meniadakannya (daftar kosong adalah palsu, daftar tidak kosong adalah benar).
sumber
Haskell, 37 byte
Cobalah online!
Bagaimana itu bekerja:
sumber
R , 41 byte
Fungsi anonim yang mengambil daftar digit, baik sebagai bilangan bulat atau string karakter tunggal. Ini precomputes
y
sebagai argumen opsional untuk menghindari menggunakan kurung kurawal untuk fungsi tubuh. Mengembalikan digit sebagai string. Ini mengambil pendekatan yang sedikit berbeda dari jawaban R lainnya dan akhirnya menjadi yang terkecil lebih pendek! Sepertinya komentar saya ada yang salah setelah semua ...table
menghitung kemunculan setiap elemen dalam daftar, dengannames(table(x))
menjadi nilai unik dalamx
(sebagai string). Karena angka-angka untungnya dipesan dengan leksikografis yang sama dengan angka, kita masih bisa menggunakanmax
.Cobalah online!
sumber
table
akan lebih pendek (ditambah saya tidak pernah ingat bagaimana untuk mulainames
bekerja).<2
untuk byte lain. Seharusnya tidak ada nol dalam hitungan.y=table(scan());max(names(y[y<2]))
lebih pendek beberapa byte.JavaScript (ES6),
464140 byteMengambil input sebagai string. Mengembalikan RangeError jika tidak ada angka unik.
-7 byte berkat Rick Hitchcock
-1 byte terima kasih kepada Shaggy
Uji kasus
Tampilkan cuplikan kode
sumber
(s,i=9)=>s.split(i).length-2?f(s,--i):i
. Anda dapat menghindari stack overflow untuk 42 byte:(s,i=9)=>s.split(i).length-2?i&&f(s,--i):i
.s=>g=(i=9)=>s.split(i).length-2?g(--i):i
dan kemudian panggil denganf("12")()
Python 3, 40 byte
Hanya berfungsi untuk daftar digit. Kasing tepi '990' berfungsi dengan baik :)
Cobalah online!
sumber
Brachylog , 8 byte
Cobalah online!
Penjelasan
sumber
Sekam ,
98 byteTerima kasih kepada Leo karena menyarankan solusi yang sedikit lebih rapi pada jumlah byte yang sama.
Cobalah online!
Penjelasan
sumber
¬←
bisa jadi lebih sederhana=1
, bytecount yang sama :)Mathematica, 41 byte
terima kasih @Martin Ender
inilah pendekatan Martin pada jawaban saya
Mathematica, 35 byte
sumber
R,
4543 bytefunction(x)max(setdiff(x,x[duplicated(x)]))
Cobalah online!
Mengambil input sebagai vektor bilangan bulat. Menemukan elemen yang digandakan, menghapusnya, dan mengambil yang maksimal. (Kembali
-Inf
dengan peringatan jika tidak ada yang unik maksimum.)Diedit menjadi fungsi anonim per komentar
sumber
max(x[!duplicated(x)])
sedikit lebih pendek, tetapi ini adalah jawaban yang bagus. Saya tahu cara saya akan melakukannya tidak sebaik ini. Anda juga dapat menghapusnyaf=
dari awal, karena fungsi anonim adalah jawaban yang benar-benar valid. Selain itu, Anda dapat menggunakan TIO untuk menguji fungsi Anda jika Anda menggunakan format ini: Coba online!duplicated
tetapi saya benar-benar memikirkan jawaban lain yang lebih pendek!Ruby , 42 byte
Cobalah online!
sumber
->x{x.chars.select{|r|x.count(r)<2}.max}
APL (Dyalog Unicode) , 10 karakter = 19 byte
Metode: gandakan elemen yang terjadi beberapa kali dengan nol, dan kemudian denda elemen tertinggi.
⌸
untuk setiap elemen unik dan indeksnya dalam argumen:×
gandakan elemen unik∘(
…)
Dengan:1=
Boolean untuk apakah seseorang sama dengan≢
penghitungan indeks (berapa kali elemen unik terjadi)⌈/
maks ituCobalah online!
APL (Dyalog Classic) , 15 byte
Cobalah online!
Identik dengan yang di atas, tetapi gunakan
⎕U2338
sebagai ganti⌸
.sumber
Bash + coreutils,
3028 byte-2 byte berkat Digital Trauma
Cobalah online!
Bash + coreutils, 20 byte
Cobalah online!
Jika input diberikan sebagai daftar digit, satu digit per baris, kita dapat melewati tahap flip. Rasanya seperti selingkuh.
sumber
grep -o .
denganfold -1
untuk menyimpan 2 byte. Saya setuju bahwa bilangan bulat input yang diberikan sebagai daftar angka terlalu panjang aturannya.Python 2 , 39 byte
Cobalah online!
sumber
C # (.NET Core) ,
279786585775 byteCobalah online!
Terima kasih @CarlosAlejo
sumber
using System.Linq;
jumlah byte.OrderBy(...).Last()
bukan.OrderByDescending(...).First()
, misalnya. Atau bahkan lebih baik, ubah bagian terakhir Anda dengan.Max(i=>i.Key)
setelahWhere
klausa.JavaScript (ES6),
5250 byteMengambil input sebagai daftar digit. Kembali
0
jika tidak ada digit unik.Uji kasus
Tampilkan cuplikan kode
sumber
Japt ,
121110 byteMengambil input sebagai array angka.
Menguji
Penjelasan
sumber
Java (OpenJDK 8) ,
898579 byteCobalah online!
-6 byte berkat wawasan @ KevinCruijssen!
sumber
return i>0?i:0;
denganreturn i;
. Outputnya adalah -1 untuk test case[9,9,9,9,9,9]
, tetapi itu tidak masalah dengan tantangan: " Jika tidak ada digit unik, program Anda dapat melakukan apa saja (perilaku tidak terdefinisi). ".0
. Ini sesuatu yang saya awasi di golf sebelumnya! :)APL (Dyalog) , 14 byte
-2 Terima kasih untukwiwi.
⌈/
terbesar dari⊢
argumen×
dikalikan dengan1=(
...)
Boolean untuk masing-masing di mana satu sama dengan+/
jumlah baris∘.=⍨
tabel kesetaraan merekaCobalah online!
sumber
0
tidak pernah digit unik tertinggi kecuali untuk0
dirinya sendiri, Anda dapat menghemat 1 byte menggunakan×
alih-alih/⍨
, lalu menyimpan byte lain mengonversinya menjadi keretaPHP , 40 byte
Cobalah online!
PHP , 42 byte
Cobalah online!
sumber
<?=array_flip(count_chars($argn))[1]-48;
Java (JDK) , 67 byte
Cobalah online!
sumber
Mathematica, 42 byte
sumber
F # , 88 byte
Cobalah online!
Pendekatan yang ditingkatkan dari upaya pertama saya, menghasilkan lebih sedikit byte.
Poin yang menarik:
fst
dansnd
kembalikan masing-masing elemen tuple pertama dan kedua.sumber
Jelly , 9 byte
Cobalah online!
sumber
Pyth, 6 byte
Suite uji
Penjelasan:
sumber
Perl 5 , 59 byte
Cobalah online!
sumber
-F
bendera perlrun jika diperlukan)