(Catatan: ini adalah spin-off yang lebih mudah dari tantangan saya sebelumnya Find the Infinity Words ! , yang merupakan spin-off dari tantangan saya sebelumnya yang lain Find the Swirling Words! :))
Definisi Kata yang Berombak :
- Jika Anda terhubung dengan kurva semua karakter dari Word Wavy pada alfabet (AZ), Anda mendapatkan jalur gelombang yang terus-menerus mengarah ke kanan atau ke kiri dan tidak pernah berubah arah, seperti pada diagram di bawah ini.
- Sebuah Bergelombang Kata dapat:
- Pemeliharaan jika masing-masing karakter berturut-turut di sebelah kanan (pada alfabet) dari yang sebelumnya.
- Mengurangi jika setiap karakter berturut-turut adalah di sebelah kiri (pada alfabet) dari yang sebelumnya.
- Semua koneksi genap harus turun, semua koneksi aneh harus naik.
- Anda dapat mengabaikan huruf besar / kecil atau mempertimbangkan / mengonversi semua menjadi huruf besar atau semua ke huruf kecil.
- Kata-kata input hanya karakter dalam rentang alfabet AZ, tanpa spasi, tanpa tanda baca, atau simbol.
- Jika sebuah kata memiliki karakter ganda, seperti "SPOON", Anda harus menutup ganda menjadi satu karakter: "SPOON"> "SPON" (karena jika Anda pergi dari O ke O adalah jarak nol).
- The Bergelombang Kata akan berisi minimal 3 karakter yang berbeda (bahkan setelah ganda runtuh).
Berikut ini beberapa contohnya:
Tugas:
Tulis program penuh atau fungsi yang akan mengambil kata-kata dari standar input dan output akan jika itu adalah Bergelombang Firman atau tidak, dan dalam hal positif, keluaran jika menaikkan atau menurunkan . Output bisa True/False/Null
, 2/1/0
, 1/Null/0
, -1/0/1
, NO/WR/WD
, dll, Anda memutuskan bagaimana untuk mewakilinya.
Kasus uji:
WAVY WORDS:
ADEPT, BEGIN, BILL, BOSS, BOOST, CHIMP,
KNOW, SPONGE, SPOON, TROLL, WOLF
ADEPT > YES > RAISING
BEGIN > YES > RAISING
BILL > YES > RAISING
BOSS > YES > RAISING
BOOST > YES > RAISING
CHIMP > YES > RAISING
KNOW > YES > RAISING
SPONGE > YES > DECREASING
SPOON > YES > DECREASING
TROLL > YES > DECREASING
WOLF > YES > DECREASING
NOT WAVY WORDS:
WATCH, EARTH, NINON, FOO, BAR, WAVE, SELECTION,
YES, NO, DEFINITION, WATER, WINE, CODE, AAAHHHH, I, MM, ABCA
Aturan:
- Kode terpendek menang.
Tugas Opsional:
Temukan, sebagai daftar, sebanyak mungkin Wavy Words dalam kamus bahasa Inggris, dan juga yang terpanjang. Anda dapat mengambil contoh sebagai referensi daftar lengkap kata-kata bahasa Inggris di sini .
NO
danFOO
bukan input yang valid menurut aturan Anda.NOT WAVY WORDS
bagian, yang benar ..Jawaban:
05AB1E ,
119 byte (Terima kasih kepada Adnan)Cobalah online!
Kasus bergelombang:
0 - Mengurangi Bergelombang
1 - Meningkatkan Bergelombang
Bukan Kasus Bergelombang:
[0,1] - Tidak bergelombang, awalnya menurun, tetapi kemudian memiliki peningkatan / kesetaraan yang mematahkan pola.
[1,0] - Tidak bergelombang, awalnya meningkat, tetapi kemudian memiliki penurunan / kesetaraan yang mematahkan pola
Input String - Tidak mungkin bergelombang di tempat pertama karena panjang.
Penjelasan:
sumber
The input words will contain at least 3 distinct characters
bahwa saya tidak harus menangani kurang dari 3 kata char. Bekerja pada perubahan, mungkin perlu waktu; ini jawaban pertama yang bisa saya lakukan di 05AB1E.ü‹
sama denganü-0‹
:)Jelly , 10 byte
TryItOnline! atau jalankan semua test case
Pengembalian:
[1]
untuk bergelombang meningkat[-1]
untuk bergelombang menurunsesuatu yang lain sebaliknya (
[]
,[0]
,[-1,1]
, atau[1,-1]
)(Dinyatakan sebagai tidak perlu: Untuk nilai tunggal untuk setiap
OIṠḟ0µL’aQS
(11 bytes) akan kembali1
,-1
dan0
masing-masing.)Bagaimana?
sumber
Python 2, 54 byte
Mengambil input sebagai daftar karakter. Output:
Cek apakah string input yang diurutkan sama dengan aslinya atau terbalik. Lakukan dengan mengiris dengan ukuran langkah 1 dan -1. Pada saat yang sama, kami memeriksa apakah kata tersebut memiliki setidaknya 2 huruf berbeda.
Jika "keluar dengan kesalahan" dapat digunakan sebagai output untuk kedua kasus, kita dapat turun ke 51 byte:
sumber
Python 3,
7775 byteAsumsikan semua huruf dari kasus yang sama.
Pengembalian:
0
jika tidak bergelombang1
jika ke depan bergelombang2
jika mundur bergelombangRuang yang tidak perlu dihapus terima kasih @ETHproductions
sumber
or
.R,
9695 bytePengembalian:
1
untuk bergelombang dan membesarkan2
untuk bergelombang dan menurun3
untuk non-bergelombangDijelaskan
d=diff(rle(utf8ToInt(x))$v)
: Menghasilkan variabeld
dengan terlebih dahulu mengubah string menjadiASCII
nilai - nilai itu menggunakanutf8ToInt
yang dengan mudah mengembalikan vektor. Selanjutnya melakukan pengkodean run length menggunakanrle
.rle(...)$v
mengembalikan nilai-nilai yang tidak berulang dari urutan (yaitu runtuh semua proses) Akhirnya ambil perbedaannya.if(any(d>0)&any(d<0)|sum(1|d)<2)3
: Jika setidaknya salah satu perbedaannya positif dan setidaknya satu negatif, atau jika urutan perbedaannya kurang dari2
elemen (setara dengan kata aslinya yang memiliki kurang dari 3 karakter), kata tersebut tidak bergelombang dan kembali3
else``if``(all(d<1),2,1)
: Lain jika semua perbedaan negatif, kembali2
untuk bergelombang dan menurun, jika tidak kembali1
untuk bergelombang dan membesarkan.Coba semua test case di R-fiddle (perhatikan bahwa ini dinamai sedemikian sehingga dapat di-vectorized untuk test case).
sumber
JavaScript (ES6),
8481 byteMengasumsikan input semuanya dalam kasus yang sama. Pengembalian
1
untuk menaikkan bergelombang,-1
untuk mengurangi bergelombang,0
atau-0
(keduanya palsu) karena tidak bergelombang. Sunting: Disimpan 3 byte berkat @RobertHickman.sumber
new
?new
.t=[...s]
dan menggunakan t bukannya [... s] di dua tempat yang Anda miliki.Javascript (ES6),
848078 byteDi mana peningkatan bergelombang adalah 0, penurunan adalah 1, dan -1 tidak bergelombang.
Terima kasih kepada @Neil karena membantu saya menghemat 2 byte.
sumber
new Set(s=[...i])
menghemat 2 byte. (Ini bekerja dengan cara iterasii
, mengubahnya menjadi array, iterasi array, dan mengubahnya menjadi satu set. Berbelit-belit tetapi Anda tidak khawatir tentang hal semacam itu ketika Anda bermain golf.)Pyth, 12 byte
Cobalah online. Suite uji.
sumber
Python 2,
535250 byteDiharapkan input terlampir dalam tanda kutip, mis
"watch"
Sebagai lambda yang tidak disebutkan namanya:
Menjumlahkan tanda perbedaan antara setiap huruf dan bilangan bulat-dibagi
len-1
. Jika semua1
(meningkat) jumlah yanglen-1
ditampilkan1
, mirip untuk menurun-1
dan untuk campuran1
,-1
jumlahnya lebih kecil daripadalen-1
yang ditampilkan0
.-1 byte untuk diubah
cmp,s[1:],s[:-1])
menjadicmp,s[1:],s)+1
sumber
1
untuk"NO"
LMNOP
jadi O adalah setelah N yang berarti meningkat yang berarti 1len
masalah ini, tetapi saya karakter yang berulang masih menjadi masalahRuby, 54 byte
Mengembalikan
0
jika kata tidak bergelombang,1
jika mundur bergelombang, dan2
jika maju bergelombang.sumber
Groovy - 56 byte
Output
[1,0]
untuk meningkatkan bergelombang,[0,1]
untuk mengurangi bergelombang,[0,0]
untuk input karakter tunggal atau[1,1]
untuk non-bergelombang.CATATAN: Mengasumsikan input berupa String atau karakter [] dan semua huruf memiliki huruf yang sama.
sumber
PHP, 96 Bytes
atau 98 Bytes
0 tidak bergelombang 1 kenaikan -1 menurun
sumber
-
alih-alih2*
(-1 untuk penurunan: -1 byte).*(!!...)
tidak membutuhkan tanda kurung. (-2)$s*$s>1
bukannyaabs($s)>1
(-2)PHP, 100 byte
Pengembalian:
-1
untuk bergelombang, menurun.0
karena tidak bergelombang.1
untuk bergelombang, membesarkan.sumber
!!array_unique($s)[2]
bukannyacount(array_unique($l))>2
C, 164 byte
Mengembalikan 0 jika tidak wawy, 1 jika wawy dan membesarkan, 2 jika menurun.
sumber
Racket 321 byte
Tidak Disatukan:
Pengujian:
Keluaran:
sumber
Java 7,
254240 byteOutput
0
jika string input tidak bergelombang,1
jika itu gelombang penaikan, dan2
jika itu gelombang yang menurun.Tidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
int c(char[]s){int t=s[0],f=s.length,a=1,b=1,i;for(i=1;i<f;){if(s[i]-s[i-1]>=0)++a;if(s[i]-s[i++-1]<1)++b;}return a==f?1:b==f?-1:0;}
(132 bytes)