Jangan tanya saya bagaimana atau mengapa tetapi ketika menulis kode pada proyek saya perhatikan bahwa karakter beberapa kata memiliki pola tertentu yang mengacu pada alfabet, saya menghubungkan setiap karakter kata dengan pensil pada alfabet dan saya mendapatkan dua spiral, maka saya perhatikan bahwa spiral pertama searah jarum jam dan yang lainnya berlawanan arah jarum jam, dan karakteristik lainnya ... jadi saya menamakannya Spiral Words !
Kata Berputar - putar dapat:
- Searah jarum jam atau berlawanan arah jarum jam
- sentripetal atau sentrifugal
Berikut ini beberapa contoh Kata Berputar - putar :
Tugas 1:
Tulis program atau fungsi lengkap yang akan mengambil kata dari input standar dan akan menampilkan jika adalah Kata Berputar - putar dan karakteristiknya, dalam format yang dapat dibaca, teks tambahan, 3 karakter, bendera, dll.
Uji kasus dan contoh keluaran untuk kata-kata yang berbeda (tetapi Anda dapat memutuskan bagaimana merepresentasikan hasil):
EARTH, GROUP > NO // NOT A SWIRLING WORD
OPERA, STAY, IRIS > SW,CF,CW // SWIRLING WORD, CENTRIFUGAL, CLOCKWISE
MINER, TAX, PLUG, META > SW,CF,CC // SWIRLING WORD, CENTRIFUGAL, COUNTERCLOCKWISE
AXIOM, AXIS, COOK > SW,CP,CW // SWIRLING WORD, CENTRIPETAL, CLOCKWISE
WATCH, YETI, PILL > SW,CP,CC // SWIRLING WORD, CENTRIPETAL, COUNTERCLOCKWISE
MORE EXAMPLES OF FALSE TEST CASES (NOT SWIRLING WORDS):
EARTH, GROUP, OUTPUT, WORD, CONNECTION, ODD, MOM, DAD,
CHARACTER, EXAMPLE, QUESTION, NEWSLETTER, OTHER
Aturan:
- Koneksi antara dua karakter pertama harus naik (seperti pada gambar), 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, dll.
- Jika sebuah kata memiliki karakter ganda, seperti "GROOVE", Anda harus menutup ganda menjadi satu karakter: "GROOVE"> "GROVE".
- Kata-kata input akan mengandung setidaknya 3 karakter berbeda. Kata-kata seperti "IBU", "AYAH", "LOL" bukan kata-kata yang valid.
- Dimungkinkan untuk melewati beberapa kali dalam karakter yang sama, seperti "IRIS".
- Kode terpendek menang.
Tugas 2:
Untuk mendapatkan lebih banyak reputasi, temukan Kata-kata Berputar terpanjang , dan karakteristiknya, yang dapat Anda temukan di kamus bahasa Inggris, mengikuti aturan di atas. Anda dapat mengambil contoh sebagai referensi daftar lengkap kata-kata bahasa Inggris di sini .
Selamat coding!
Jawaban:
MATL ,
333130 byteInput dalam huruf besar (atau dalam huruf kecil, tetapi tidak dicampur).
Output adalah:
1
/-1
menunjukkan sentrifugal / sentripetal.1
/ `-1 'menunjukkan searah jarum jam / berlawanan arah jarum jam.Cobalah online! Atau verifikasi semua kasus uji (kode dimodifikasi untuk mengambil semua input dan untuk menghasilkan dua nomor output pada baris yang sama)
Penjelasan
Mari kita ambil input
'OPERAA'
sebagai contoh.Bagian pertama dari kode menghilangkan huruf ganda:
Kami sekarang memeriksa apakah jarak antar huruf tidak menurun (kondisi yang diperlukan untuk kata yang berputar-putar):
Kami kemudian memeriksa apakah huruf-huruf bolak-balik (ini adalah kondisi lain untuk kata yang berputar-putar):
Terakhir, kami memeriksa apakah kedua kondisi bertahan, dan dalam hal ini menghasilkan output:
sumber
Mathematica,
117111 byteTerima kasih kepada JHM karena telah menyimpan 6 byte, dan membuatnya case-sensitive untuk boot!
Fungsi tanpa nama yang mengambil string dan mengembalikan daftar boolean bersarang dalam formulir
{{B1,B2},B3,B4}
. B4 mencatat apakah kata itu berputar-putar (dan jika tidak, sisa outputnya adalah sampah). Jika kata itu berputar, maka B1 mencatat apakah kata itu sentrifugal, B2 mencatat apakah kata itu sentripetal, dan B3 mencatat apakah kata itu searah jarum jam (Benar) atau berlawanan arah jarum jam (Salah).Berikut adalah versi lama yang pasca-proses (baris pertama) fungsi di atas (spasi di atas garis-2-5) untuk membuatnya identik dengan OP:
NO
jika kata tidak berputar-putar, dan pilihan yang tepat{SW,CF,CW}
,{SW,CF,CC}
,{SW,CP,CW}
, atau{SW,CP,CC}
jika kata itu berputar-putar:Penjelasannya sama dengan jawaban CJam Martin Ender, dengan satu catatan tambahan: daftar perbedaan berurutan harus bergantian dalam tanda untuk kata yang berputar-putar, dan itu dapat dideteksi dengan memastikan semua produk dari pasangan perbedaan berurutan negatif (itulah yang
Max[Most[d]Rest@d]<0
dilakukan).Menjalankan fungsi pada semua 40.000+ kata dari Mathematica
WordList[]
, kami menemukan 8 huruf kata-kata berputar-putar berikut, yang merupakan terpanjang dari masing-masing jenis berputar-putar:(Brownie menunjuk
positive
karena tidak memiliki huruf ganda, dan lebih sedikit surat yang diulang daripadastowaway
.)Tapi juara mutlak adalah kata centripetal berputar-putar 9 huruf berlawanan
vassalage
!sumber
LetterNumber
bukanToCharacterCode
dan 3 byte dengan menggunakanMost[d]
bukanDrop[d,-1]
.Scala, 110 byte
Mengembalikan tuple
(a,b)
dengana == 1
jika s adalah centripetala == 0
jika s sentrifugala == -1
jika s tidak berputar-putardan
b == true
jika s searah jarum jamb == false
jika s berlawanan arah jarum jamPenjelasan:
sumber
Jelly , 30 byte
TryItOnline
Atau lihat kasus uji (dengan sedikit perubahan karena yang terakhir
Ñ
akan menunjuk ke tautan utama baru)(Kurangnya keterampilan chaining saya mungkin menelan biaya beberapa byte di sini)
Semua atas atau semua lebih rendah.
Mengembalikan daftar bendera [D, F, S]:
S: berputar = 1 / tidak berputar = 0
F: sentrifugal = 1 (melingkar = 0) sentripetal = -1
D: searah jarum jam = 1 / berlawanan arah jarum jam = -1
- jika S = 0 bendera lainnya masih dievaluasi meskipun tidak membawa informasi yang berguna.
Bagaimana?
sumber
0
jadi ini masih bekerja untuk mereka juga!circular(0)
penjelasan di dalam Anda, mungkin sudah waktunya untuk menghapusnya juga.min([])=0
jelly.tryitonline.net/#code=W13huYI&input= - Perhatikan bahwa karena kata-kata melingkar sekarang tidak pernah input yang diharapkan, tidak ada masalah dalam melayani mereka.min([])==0
, tetapi saya pikir ini masih bisa golf.CJam , 39 byte
Cobalah online!
Input dapat berupa huruf besar atau kecil, tetapi tidak tercampur.
Program ini secara tidak sengaja menunjukkan kata-kata yang tidak harus sentrifugal atau sentripetal, tetapi sebaliknya memenuhi persyaratan menjadi spiral. Ini digambarkan sebagai "lingkaran" pada bagan di bawah ini.
Untuk menginterpretasikan output, gunakan grafik ini:
Penjelasan:
Program ini benar-benar mengevaluasi apakah urutan perbedaan tidak nol antara karakter dimulai positif atau negatif, jika bergantian dalam tanda, jika besarnya mulai meningkat atau menurun, dan jika terus melakukannya. Jika magnitude tidak bertambah atau berkurang maka program rusak dengan mengoperasikan pada array kosong. Langkah-langkah utama ditunjukkan di bawah ini (kode ini juga akan menunjukkan kemajuan tumpukan):
sumber
PHP, 322 Bytes
untuk Output yang lebih cantik
echo["n","+P","-P","+F","-F"][$s];
Versi yang diperluas
Nilai tugas 2 detik tanpa aturan dobel pendek
Visualisasikan sebuah kata
di cuplikan adalah hasil dari SVG yang saya buat
sumber
'.(.8*$radius).'
alih-alih'.($radius).'
dan jika Anda mengganti($radius).' 0 0 0
dengan($radius).' 0 0 '.(($w[$i-1]<$w[$i]?1:0)^(($i-1)%2)).'
program tidak memiliki arah perbaikanHaskell, 148 byte
Cobalah di Ideone.
Input harus berupa huruf kecil atau huruf besar semua.
Output adalah daftar lima boolean:
[SW?, CF?, CP?, CW?, CC?]
.f "positive" -> [True,True,False,False,True]
Ini ternyata lebih lama dari yang diharapkan, terutama menyerahkan runtuhnya karakter yang diulang memakan waktu sekitar 40 byte.
Pada awalnya saya membandingkan hanya dua karakter pertama untuk menghasilkan
CW
atauCC
sebelum memperhatikan bahwa testcases sukabba
ataubbc
valid juga dan mengalahkan pendekatan ini.sumber
Python, 152 byte:
Fungsi lambda anonim. Sebut sebagai
print(<Function Name>('<String>'))
.Mengambil input karena semua huruf kecil atau huruf besar, tetapi tidak kasus campuran.
Keluaran array yang tidak mengandung apa-apa (
[]
) jika kata tersebut tidak berputar, atau array dalam format berikut:True/False
untukCentrifugal/Centripetal
.True/False
untukClockwise/Counterclockwise
.Cobalah secara Online! (Ideone)
sumber