Kami memiliki beberapa moderator sheriff baru di kota, Mego dan DJMcMayhem . Kami membutuhkan tantangan untuk menghormati mereka dengan benar untuk posisi baru mereka, jadi begitulah.
Berikut adalah sesuatu yang menarik perhatian saya ketika mengarahkan profil mereka - ID pengguna mereka adalah dan 45.941 . Jika Anda melakukan pengurangan digit-bijaksana, Anda akan melihat sesuatu yang cukup menarik (tentu saja, mengambil perbedaan absolut):
3|1|7|1|6
4|5|9|4|1
-+-+-+-+- (-)
1|4|2|3|5
Jumlah yang dihasilkan oleh algoritma di atas adalah . Ada sesuatu yang istimewa tentang bilangan bulat ini: Terdiri dari hanya digit berturut - turut , diurutkan dalam urutan naik, tetapi tepat satu dari digit tidak ditempatkan dengan benar - 4 .
Kami akan memanggil sepasang bilangan bulat positif suatu pasangan DJMcMego jika perbedaan mutlak digit-bijaksana adalah bilangan bulat berturut-turut, diurutkan dalam urutan menaik, tapi tepat satu dari mereka tidak di tempatnya. Artinya, adalah mungkin untuk memindahkan tepat satu digit dari hasil pengurangan digit ke posisi lain, sehingga bilangan bulat yang diperoleh hanya memiliki digit berurutan, diurutkan dalam urutan menaik.
Dalam contoh kami di atas, pasangan adalah pasangan DJMcMego , karena jika 4 dipindahkan antara 3 dan 5 , hasilnya adalah 12345 , yang memenuhi kriteria. Perhatikan bahwa angka-angka dari angka yang dihasilkan tidak perlu mulai dari 1 , mereka hanya harus berturut-turut. Ketika seseorang tidak yakin tentang keputusan apa yang harus mereka ambil, mereka selalu dapat mengandalkan bantuan pihak lain untuk menyelesaikan masalah.
Tugas Anda adalah untuk menghasilkan nilai kebenaran / kepalsuan tergantung pada apakah sepasang bilangan bulat positif yang diberikan sebagai input adalah pasangan DJMcMego.
Anda dijamin bahwa dan b akan memiliki jumlah digit yang sama, selalu setidaknya 4.
Anda dapat mengambil bilangan bulat dalam format apa pun yang wajar (yaitu bilangan bulat asli, string, daftar digit, dll.)
Anda dapat bersaing dalam bahasa pemrograman apa pun dan dapat mengambil input dan memberikan output melalui metode standar apa pun , sambil memperhatikan bahwa celah ini dilarang secara default. Ini adalah kode-golf , jadi pengiriman terpendek (dalam byte) untuk setiap bahasa menang.
Uji kasus
a, b -> Output
31716, 45941 -> Truthy
12354, 11111 -> Truthy
56798, 22222 -> Truthy
23564, 11111 -> Truthy
1759, 2435 -> Truthy
12345, 11111 -> Falsy
3333, 2101 -> Falsy
22354, 22222 -> Falsy
31717, 45941 -> Falsy
14325, 11111 -> Falsy
89789, 78865 -> Falsy
14954, 61713 -> Falsy
25631, 11114 -> Falsy
Atau, dalam format lain .
sumber
25631, 11114
sebagai contoh. Perbedaannya adalah14523
yang membingungkan beberapa program saat iniJawaban:
05AB1E , 18 byte
Cobalah online!
sumber
1
merupakan satu-satunya nomor yang benar di 05AB1E; Seandainya Tn. Xcoder tidak memberi tahu saya mengenai fakta ini, saya akan mempertanyakan validitas solusi ini. Bisakah Anda menambahkan penjelasan juga, ketika Anda punya waktu?C (gcc) ,
259258254253250248233222 bytefor(...;l++)b*=B[l]==-~B[l-1];
untukfor(...;b*=B[l]==-~B[~-l++]);
(kemungkinan besar mengandalkan perilaku undefined, karena memerlukan pertama mengevaluasiB[l]
diikuti oleh-~B[~-l++]
).tigalima byte.lima belasdua puluh enam byte berkat ceilingcat .Cobalah online!
Penjelasan (versi 248 byte)
Cobalah online!
sumber
j=0
seperti pada char ke-41j
memiliki nilai0
yang belum tentu terjadi setelah beberapa panggilan. Suatu fungsi, bagaimanapun, harus sewenang-wenang sering dapat dipanggil dan masih menyelesaikan tantangan ( meta post yang relevan ).j
menjadi nol sebelum loop dan dengan demikian menghemat satu byte.f(char*A,char*B){
->f(A,B)char*A,*B;{
.JavaScript (ES6), 130 byte
Mengambil input sebagai dua larik digit dalam sintaks currying
(a)(b)
. Mengembalikan boolean.Cobalah online!
sumber
SWI-Prolog, 157 byte
Tidak terlalu singkat tetapi masalahnya tampaknya sangat cocok untuk predikat deklaratif, pengikatan variabel dan rekursi, yaitu, Prolog :)
Panggil dengan, misalnya,
n([3,1,7,1,6],[4,5,9,4,1]).
Penjelasan: pindahkan elemen di kedua daftar ke posisi baru (menggunakan SWI-Prolog bawaan
nth0
) dan periksa apakah perbedaan daftar baru berturut-turut.sumber
J , 27 byte
−8 byte berkat FrownyFrog
Cobalah online!
Solusi awal:
J , 35 byte
Cobalah online!
Penjelasan
Mengambil daftar digit sebagai input
|@-
menemukan perbedaan mutlak antara digit daftar1=1#.0<2-/\]
Cek apakah hanya satu digit yang keluar dari tempatnya. Pertama saya menemukan perbedaan antara semua pasangan digit yang berdekatan dan memeriksa untuk melihat apakah hanya satu dari mereka yang positif.*
Lipat gandakan hasil dari tes di atas (1 atau 0) dengan tes berikut:1=[:*/2-/\\:~
Apakah semua digit berurutan? Saya mengurutkan daftar, mengambil perbedaan untuk semua pasangan digit yang berdekatan, kalikan dan periksa apakah sama dengan 1sumber
25634 11111
(seperti halnya banyak kiriman lainnya)Jelly , 14 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Japt , 18 byte
Mengambil input sebagai array 2 digit, output
0
untuktrue
atau nomor lainnya untukfalse
.Cobalah atau periksa semua test case
Penjelasan
Dan, untuk menjalani proses itu pada beberapa kasus uji lagi:
sumber
25634 11111
(seperti halnya banyak kiriman lainnya)Perl,
121118 byteTes dalam bash:
sumber
25634 11111
(seperti halnya banyak pengajuan lainnya)Java 8 ,
245227223194188 BytesTerima kasih kepada Kevin karena telah menghemat ~ 29 byte
Terima kasih kepada Kevin lagi untuk 6 byte lagi
Mengikuti pola yang sama Galen datang dengan jawaban J-nya.
Cobalah online!
sumber
z->{int l=z.length/2,c[]=new int[l],i=0,j=0,d[];for(;i<l;)c[i]=Math.abs(z[i]-z[i+++l]);java.util.Arrays.sort(d=c.clone());for(i=0;i<l-1;j+=d[i+1]-d[i++]!=1?1:0)j+=c[i]-c[i+1]>0?1:0;return j==1;}
Saya menggabungkanint
danint[]
pada awalnya; digunakanl=z.length/2
sekali dan gunakan kembalil
bukan 4 kali; mengubahif(...)j++
kej+=...?1:0
sehingga mereka dapat ditempatkan di dalam loop dan tanda kurung dan semi-kolon kedua dapat dihapus; dihapusi++
dan lakukan++
langsung pada yang terakhiri
di loop; dll.z->{int l=z.length/2,c[]=new int[l],i=0,j=0;for(;i<l;)c[i]=Math.abs(z[i]-z[i+++l]);java.util.Arrays.sort(z=c.clone());for(i=0;i<l-1;j+=z[i]-z[i-1]!=1?1:0)j+=c[i]-c[++i]>0?1:0;return j==1;}
. Menghapusd[]
dan menggunakan kembali inputz
yang tidak lagi Anda perlukan; Berubahj+=c[i]-c[i+1]?1:0;
danj+=d[i+1]-d[i++]!=1?1:0
kej+=c[i]-c[++i]?1:0;
danj+=z[i]-z[i-1]?1:0
. +1 dari saya, meskipun. Jawaban bagus! :)25634 11111
(seperti halnya banyak kiriman lainnya)Retina , 102 byte
Cobalah online! Tautan termasuk kasus uji. Mengembalikan jumlah cara digit dapat dipindahkan untuk mencapai urutan naik, yaitu 2 untuk swap lurus karena salah satu digit dapat dipindahkan melewati yang lain dalam kasus itu. Penjelasan:
Pasangkan digit.
Konversikan ke unary.
Ambil perbedaannya, tetapi kemudian tambahkan 1 karena bekerja dengan nol di Retina adalah hard ™.
Daftar semua urutan digit yang diperoleh dengan menggerakkan tepat satu digit.
Periksa digit berturut-turut.
sumber
Perl 5 , -F
878483 bytePenghitungan gaya lama: 86 byte (
+3
untuk-F
)Beri dia angka 2 baris pada STDIN, baris terakhir tanpa baris tambahan.
Mencetak string perbedaan hingga 2 kali untuk true, nothing for false
A0123456789
Tali panjangnya benar-benar menjengkelkan.Cobalah online!
Saya yakin jika ini
79
dianggap valid:Ini macet untuk pasangan yang valid, sehingga Anda mendapatkan kode keluar bukan nol. Ia tidak melakukan apa-apa jika bukan sepasang dan keluar dengan kode keluar 0. Saya tahu mengembalikan hasilnya melalui kode keluar diperbolehkan, tetapi apakah mereka benar-benar benar dan salah atau bahkan terbalik (karena shell
0
itu benar)?sumber
Ruby ,
124 113 9995 byteCobalah online!
sumber
25634 11111
(seperti halnya banyak pengajuan lainnya)+1
:-)Pyt ,
2018 byteCobalah online!
Penjelasan:
sumber
25634 11111
(seperti halnya banyak pengajuan lainnya)Tambahkan ++ , 105 byte
Cobalah online!
Menentukan fungsi lambda yang mengambil dua daftar digit sebagai input. Menghasilkan bilangan bulat positif yang dapat habis dibagi 24 1 untuk pasangan DJMcMego, 0 sebaliknya.
1: Jika ini terlalu ketat, itu juga menghasilkan bilangan bulat positif untuk pasangan DJMcMego, dan 0 sebaliknya
Bagaimana itu bekerja
Di sini kami melakukan 4 pemeriksaan untuk menentukan apakah input tersebut valid. Bagian dari kode yang melakukan pemeriksaan tersebut adalah
Di sini, kami mengambil daftar perbedaan digit absolut, kemudian menghitung jumlah pasangan yang tumpang tindih yang diurutkan dalam urutan menurun. Setiap pasangan DJMcMego menghasilkan hasil 1 , tetapi mereka tidak unik dalam aspek ini. Kami juga menyimpan perbedaan digit absolut input, untuk menyimpan byte di lain waktu. Array ini akan disebut sebagai A seluruh.
Selanjutnya, kami mengambil perbedaan elementwise antara A dan A yang diurutkan, sebelum menyatakan bahwa setidaknya salah satu dari perbedaan tersebut adalah negatif.
Ketiga, kita memeriksa apakah pasangan [1, 2] terkandung dalam penambahan maju dari A . Ini memeriksa bahwa, dalam setidaknya satu posisi A , itu diurutkan, yang merupakan kriteria untuk pasangan DJMcMego.
Sebagai pemeriksaan terakhir kami, kami menyatakan bahwa elemen kedua A tidak pernah 0 . Agar pasangan, X dan Y , menjadi pasangan DJMcMego, kita dapat mengasumsikan bahwa A mereka selalu unik, karena array dengan duplikat di dalamnya tidak pernah dapat dibuat berurutan dengan menukar nilai tunggal dengan yang lain.
Akhirnya, kami memeriksa bahwa tiga tes pertama mengembalikan 1 , dan yang keempat mengembalikan nilai x sehingga x ≠ 0
Langkah untuk langkah berjalan melalui kode adalah sebagai berikut
sumber
R ,
110 10684 byteCobalah online!
@JayCe dengan hemat 22 byte yang konyol!
Pekerja keras di sini adalah
adist
, yang memberikan "jarak edit Levenshtein yang digeneralisasi" antara dua string. Secara default jarak adalah hitungan jumlah minimal penyisipan, penghapusan, dan penggantian yang diperlukan untuk mengubah satu string menjadi yang lain. Tetapiadist
memungkinkan Anda untuk menimbang hal-hal yang Anda suka - jadi saya telah membobot masing-masing substitusi untuk menambahkan 9 ke jarak daripada 1. Ini secara efektif memaksa algoritma untuk mencari penyisipan dan penghapusan saja.Kode ini menerima vektor bilangan bulat, menghitung perbedaan elemen absolut, dan menerjemahkan hasilnya untuk mulai pada 1, menyebutnya
w
.Kemudian jarak Levenshtein tertimbang kustom dihitung antara
w
disisipkan bersama untuk membuat string dan string"1234..."
(sebenarnya utf-8"\001\002\003\004...
"tetapiadist
tidak peduli.) Dengan jumlah karakter yang sama sepertiw
.Satu-satunya cara string dapat memiliki tepat satu digit dari tempatnya adalah jika Anda membuat satu penghapusan dan satu penyisipan, memberikan jarak 2.
sumber
paste0
bisa jadi hanyapaste
karena hanya ada satu input.p=intToUtf8
?w=z-min(z)+1)adist(p(1:max(w))
denganw=z-min(z))adist(p(0:max(w))
tetapi tidak bekerja karenaintToUtf8(\000)
adalah NULL.JavaScript,
137136135134132123 byteMengambil input sebagai dua larik digit dalam sintaks currying, output
0
untuktrue
dan nomor lainnya untukfalse
.Uji Kasus
sumber
[...u].sort(y=0)
adalah javascript yang tidak valid, argumen untuk pengurutan harus berupa fungsi25634 11111
(seperti halnya banyak pengajuan lainnya)" - Ton HospelPython 2 ,
116119106 byteTerima kasih Tn. Xcoder untuk
116->84
pemangkasan, tetapi saya menemukan saya telah melewatkan kriteria "angka berurutan", jadi 26 byte ditambahkan untuk tujuan itu :(Setelah itu, -1 lagi Terima kasih Tn. Xcoder, dan -13 Terima kasih
Cobalah online!
Yang di bawah ini memperbaiki
25634 - 11111
masalah tetapi dengan panjang ganda (211206145142B) ... Golf ...Cobalah online!
Dan selamat untuk moderator baru :)
Penjelasan:
Menghasilkan daftar perbedaan mutlak digit.
Hitung offset dari posisi yang tepat.
Jika urutan tidak kontinu, maka jumlah offset akan "biasanya" tidak menjadi 0. Tetapi bahkan jika itu sama dengan 0, yang berikutnya akan memblokir mereka.
Hanya 0 atau 1 item yang memiliki offset absolut lebih besar dari 1 (item dengan posisi yang salah, dan 0 dalam kasus seperti
1,2,3,5,4
)Memblokir kasing ketika semua nomor dalam posisi yang benar
sumber
m([3,3,3,3],[2,1,0,1])
(pengembalianTrue
) Tio25634 11111
(seperti halnya banyak pengajuan lainnya)Haskell ,
182163162132 byteMengambil input sebagai daftar digit. Fungsi helper
p
yang memberikan semua cara yang mungkin untuk membagi daftar menjadi dua bagian digunakan untuk mengeluarkan elemen dan memasukkannya lagi ke tempat lain.Cobalah online!
sumber