(Terinspirasi oleh tantangan ini pada membingungkan - SPOILER untuk teka-teki di bawah ini, jadi berhentilah membaca di sini jika Anda ingin menyelesaikan teka-teki itu sendiri!)
Jika sebuah huruf dalam sebuah kata muncul secara alfabet lebih lambat dari huruf sebelumnya dalam kata tersebut, kami menyebutnya kenaikan antara kedua huruf tersebut. Kalau tidak, termasuk jika itu surat yang sama , itu disebut jatuh .
Misalnya, kata ACE
memiliki dua naik ( A
ke C
dan C
ke E
) dan tidak ada jatuh, sedangkan THE
memiliki dua jatuh ( T
ke H
dan H
ke E
) dan tidak ada naik.
Kami menyebut kata Bumpy jika urutan naik dan turun bergantian. Sebagai contoh, BUMP
naik naik ( B
ke U
), jatuh ( U
ke M
), naik ( M
ke P
). Perhatikan bahwa deret pertama tidak perlu naik - BALD
turun-naik-turun dan juga bergelombang.
Tantangan
Diberi kata, keluaran apakah itu Bumpy atau tidak.
Memasukkan
- Sebuah kata (tidak harus kata kamus) yang terdiri dari alfabet ASCII (
[A-Z]
atau[a-z]
) saja, dalam format apa pun yang sesuai . - Pilihan Anda jika input semuanya huruf besar atau semua huruf kecil, tetapi harus konsisten.
- Panjang kata setidaknya 3 karakter.
Keluaran
Nilai truthy / falsey untuk apakah kata input Bumpy (truthy) atau tidak Bumpy (falsey).
Aturan
- Program lengkap atau fungsi dapat diterima.
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
Contohnya
Benar:
ABA
ABB
BAB
BUMP
BALD
BALDY
UPWARD
EXAMINATION
AZBYCXDWEVFUGTHSIRJQKPLOMN
Falsey:
AAA
BBA
ACE
THE
BUMPY
BALDING
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
# Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
sumber
BUMP
tercantum dalam Truthy (yaitu Bumpy), mengapaBUMPY
ada dalam daftar Falsey? Apakah yang dimaksud dengan "naik dan turun secara bergantian"? Dua naik tidak bisa berturut-turut?BUMPY
palsu karenaMPY
memberikan dua kenaikan berturut-turut. Dengan kata lain, tidak ada substring dengan panjang 3 harus disortir naik atau turun agar kata menjadi bergelombang (terlepas dari kasus khusus di mana dua huruf berurutan identik).Jawaban:
MATL, 4 byte
Penjelasan:
Ini adalah entri MATL pertama saya, jadi saya bertanya-tanya berapa banyak perbaikan yang dapat terjadi dari port naif ini dari upaya MATLAB / Oktaf saya (yang akan menjadi
@(a)all(diff(diff(a)>0))
). Perhatikan bahwaall
tidak perlu karena sembarang nol membuat array salah, jadi tidak adaA
di port MATL.sumber
d0>d
harus bekerja (Anda tidak perluA
sesuai definisi kami tentang kebenaran / falsey)JavaScript (ES6),
7569634643 byteDisimpan 3 byte berkat Neil:
Merusak parameter string sebagai ganti
s.slice(1)
.Solusi sebelumnya:
Disimpan 17 byte berkat produk ETH:
Apa yang terjadi dari solusi sebelumnya langkah demi langkah:
Solusi sebelumnya:
63 byte berkat produk ETH:
69 byte:
75 byte:
Semua huruf dalam satu kata harus memiliki huruf yang sama.
sumber
!s[2]|...
melakukan hal yang samas[2]?...:1
?f=([c,...s])=>s[1]?c<s[0]^s[0]<s[1]&&f(s):1
LabVIEW, 36 byte setara
Golf turun menggunakan kesetaraan logis:
Tidak Disatukan:
Pertama kita konversi ke huruf kecil, kemudian ke byte array. Potong elemen pertama dari array byte karena tidak memiliki preseden. Kemudian, untuk setiap elemen dalam array, periksa apakah lebih besar dari yang sebelumnya (char char U8 ke ASCII seperti yang Anda harapkan) dan simpan hasilnya untuk iterasi berikutnya, serta dalam array untuk melihat keseluruhan kekenyalan. Jika boolean saat ini dan sebelumnya sama, kami mengakhiri loop dan itu tidak bergelombang. Lain, ini bergelombang!
sumber
Python, 56 byte
Semua test case ada di ideone
Ritsleting tiga kali lipat karakter dalam s dan tes bahwa semua tiga kali lipat tersebut memiliki pasangan kiri dan kanan dengan sifat naik turun yang berbeda.
Berfungsi untuk semua huruf besar atau kecil.
sumber
Ruby,
5748 byteDiharapkan input semua huruf besar.
Lihat di repl.it: https://repl.it/D7SB
Penjelasan
Ekspresi reguler
/.(?=(.)(.))/
cocok dengan setiap karakter yang diikuti oleh dua karakter lagi.(?=...)
adalah lookahead positif, artinya kami cocok dengan dua karakter berikutnya tetapi jangan "mengkonsumsinya" sebagai bagian dari pertandingan. Di dalam kurung kurawal,$&
ada teks yang cocok — karakter pertama dari ketiganya —$1
dan$2
adalah karakter yang ditangkap di dalam lookahead. Dengan kata lain, jika stringnya adalah"BUMPY"
, pertama-tama akan cocok"B"
(dan memasukkannya$&
) dan menangkap"U"
dan"M"
(dan menempatkannya di$1
dan$2
). Selanjutnya itu akan cocok"U"
dan menangkap"M"
dan"P"
, dan seterusnya.Di dalam blok kami memeriksa apakah pasangan karakter pertama (
$&
dan$1
) naik dan yang kedua ($1
dan$2
) jatuh atau sebaliknya, seperti sebagian besar jawaban lainnya.^
Ekspresi ini mengembalikantrue
ataufalse
, yang akan dikonversi ke string dan disisipkan di tempat pertandingan. Hasilnya, contoh kita"BUMPY"
menjadi ini:Karena kita tahu input semua huruf besar, kita tahu
"f"
hanya akan terjadi sebagai bagian dari"false"
dan!result[?f]
memberi kita jawaban kita.sumber
C #,
646355 byte-8 byte dari saran Scepheo
Ini adalah port solusi Hedi untuk C #. Saya juga menemukan solusi rekursif, tetapi rekursi itu tidak sebaik itu. Solusi asli saya ada di bawah ini.
My Original C #,
969491 byte-2 byte dengan menggunakan
1>0
bukantrue
.-3 byte dari saran Scepheo untuk solusi port di atas
Panggilan itu sendiri secara rekursif memeriksa bahwa naik / turun bergantian setiap kali.
Tidak Disatukan:
sumber
?:
operator atau tanda kurung:unsafe bool B(char*s)=>1>s[2]|s[0]<s[1]!=s[1]<s[2]&B(s+1);
unsafe bool B(char*s)=>1>s[2]|*s<s[1]!=*++s<s[1]&B(s);
||
bukannya bitwise ATAU|
. Memperbarui pos, terima kasih.C 59 Bytes
sumber
AAA
- "Falsey" pertama dalam contohgcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
dan saya mendapatkan palsu untuk aaa dan bersemangat. Dalam versi ini yang bukan nol adalah falsey, dan nol adalah benar. Sebenarnya bertanya-tanya sekarang apakah ini diizinkan.f("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
dikompilasi dalam Visual Studio 2012 mengembalikan nilai23
yang dapat diperlakukan sebagaiTrue
tetapi dalam pertanyaan nilai ini di bagian "Falsey", jadi nilai yang0
diharapkan.Jelly , 6 byte
Berdasarkan jawaban @sanchises .
Cobalah online! atau Verifikasi semua.
Penjelasan
sumber
JavaScript (ES6), 65 byte
.map
adalah jelas bukan solusi terbaik .sumber
Python 2, 88 byte
Solusi sederhana.
Cobalah online
Jika huruf yang sama berturut-turut bukan naik atau turun, solusinya akan menjadi 79 byte:
sumber
Perl, 34 byte
Termasuk +3 untuk
-p
(kode mengandung'
jadi-e
tidak bisa digunakan)Berikan input huruf besar pada STDIN:
bump.pl
sumber
Python, 51 byte
Mengambil input like
g('B','U','M','P')
dan output1
atau0
.Gunakan argumen membongkar untuk mengambil tiga huruf pertama dan memeriksa apakah dua yang pertama membandingkan secara berbeda dari dua yang kedua. Kemudian, muncul kembali pada sisanya, menggunakan perkalian untuk
and
.sumber
Jelly ,
65 byte-1 byte terima kasih kepada @Dennis (gunakan reduksi kumulatif)
Semua test case ada di TryItOnline
Bagaimana?
Berfungsi untuk semua huruf besar atau kecil.
sumber
Japt, 8 byte
Uji secara online!
Bagaimana itu bekerja
sumber
C #
105104 BytesSolusi 105 byte:
Cobalah online
Menggunakan array karakter yang disimpan satu byte karena ruang dapat dihilangkan setelah tanda kurung.
f(string x)
vs.f(char[]x)
Ini adalah 101 byte jika saya dapat mengembalikan int 1/0 bukannya bool true / false
sumber
Haskell, 52 byte
Saya menduga saya bisa mendapatkan potongan ini lebih kecil jika saya berhasil menyingkirkan konstruksi "di mana", tapi saya mungkin terjebak dengan zipWith.
Ini bekerja dengan membuat daftar naik (Benar) dan jatuh (Salah), kemudian membuat daftar jika entri yang berdekatan dalam daftar ini berbeda
Ini adalah upaya pertama saya di salah satu dari ini, jadi saya akan pergi melalui proses pemikiran saya jika saya salah besar di suatu tempat.
Versi Tidak Digubah (168 byte)
Persingkat nama, hapus informasi jenis (100 byte)
Pindahkan h ke fungsi utama karena hanya digunakan sekali (86 byte)
Sadarilah bahwa Benjolan dan riseFall cukup mirip dengan abstrak (73 byte)
Perhatikan bahwa (ekor y) lebih pendek dari ya @ (y: ys) (70 byte)
Merapikan; hapus spasi yang tidak dibutuhkan (52 byte)
sumber
g h=tail>>=zipWith h
dan menjadikannya fungsi global untuk menghindariwhere
kata kunci.Java 7,
157153150125117 byteKasus yang tidak disatukan & uji:
Coba di sini.
Keluaran:
sumber
a > b
, tapi jatuh kapana <= b
, bukannya>
dan<
?char[]
sehingga Anda tidak perlu mengubah string input Anda menjadi array char. yang seharusnya menghemat beberapa byte. PS: java ftw!String s
->char[]z
?truthy
orfalsey
value, so make your method an int and return 1 or 0 :).. Puts you down to 117 bytesPowerShell v2+, 83 bytes
A little bit of a different approach. This loops through the input
$n
, each iteration seeing whether the previous character$n[$_-1]
is-l
esst
han the current character$n[$_]
, then casting the result of that Boolean operator to an int with+
. Those are-join
ed together into a string, stored into$a
. We then check whether$a
is-eq
ual to$a
with any substrings of00
or11
removed.sumber
Python 2.7, 84 bytes
Returns 1 for bumpy, 0 for otherwise
Learned some cool stuff with bitwise & and ^.
Starts with boolean b defining first pair as up/down, then tests and flips b for each following pair.
o flips to false if test fails and sticks.
Requires quotes around input (+4 bytes for raw_input() if that breaks some rule)
Test It
sumber
05AB1E, 9 bytes
Explanation
Try it online!
sumber
Python 2.7 (again,
8483 bytes)Or,
7877 bytes without the print.By the way, the above 56 byte Python 2.7 example breaks on, for example,Never mind, didn't read instructions. Revising."abbab"
or any other input with repeated characters.Okay, down to 83. The triples one is nicer though.
sumber
a(x)if x else[]
. 2. Use a lambda insteada=lambda s:[cmp(s[0],s[1:])]+a(s[1:])if s[1:]else[]
3. Use a lambda at the end instead of printing.lambda s:len(set(a(s)))>1
4. iflen(set(a(s)))
isn't greater than 1, than it's already falsy, so you can take off>1
CJam, 15 bytes
Try it online! (As a linefeed-separated test-suite.)
Explanation
sumber
PHP, 80 bytes
or
empty output for false,
1
for trueor Hedi´s recursive approach ported and a little golfed for 70 bytes:
Actually, this should recurse infinitely for bumpy words, but it does not!
sumber
Haskell,
3037 bytesUsage:
sumber
foldl1(/=)
doesn't do what you think it does.PHP 7,
137118 bytesEmpty output for Bumpy,
0
for Not Bumpy.This is my first attempt at code golfing and I have to improve a lot, but it was a wonderful method to learn new things for me. I also wanted to challenge myself on that task by using the new PHP 7 Spaceship Operator which seems very interesting.
Anyway I'm not satisfied about it, first of all for the fact that I had to add an extra(Note: I fixed that simply by changingif(isset($s[$i+2]))
to check if the variable exist because I did not find another workaround to the problem, but this is it for now.strlen($s)-1
tostrlen($s)-2
, I couldn't really see that before...).Testing code:
Test online
sumber
Javascript ES6, 100 bytes
Try it here:
Oh come on two people already beat me to it by 40 bytes... whatever
sumber
"A"<"B"
, so you don't need to get the chars' charcodes.1
forBUMPY
(or anything else that contains both a rise and a fall).Python 3,
148 139127 bytestesting code
sumber
C,
655760 bytesis fix of
that works correctly with any data only at single function call (when the global variable
r
is initialized to zero).But in any case this is shorter than previous solution (65 bytes) due to use of
for
instead ofwhile
. But previous (the following) is a little easier to understand:My solution is based on bitwise
&
with inverted previous and current direction code, where direction code can be2
(1<<1
) for character code increase (*s > *(s-1)
) or1
(1<<0
) otherwise. Result of this operation became 0 if we use the same direction code as previous and current, i.e. when word is not Bumpy.UPDATE:
Code for testing:
sumber
r
to0
for free, but must do so from within the function.PHP, 100 bytes
Replaces every char of the string (except the last one obviously) with an
r
for rise or anf
for fall and then checks whetherrr
orff
occur in the string. To avoid that the last remaining character interfers with that, input must be all uppercase.I'm very unsatisfied with the loop, for example I have a feeling that there must be a way to combine the
$i++
into one of the several$i
s used in the loop, but I failed to find that way. Maybe someone else sees it.(That's also why I posted my code, despite it being 20 (!) bytes longer than Titus' nice solution.)
sumber
Java 8,
11490 bytesUngolfed test program
sumber