(Catatan: Ini adalah spin-off dari tantangan saya sebelumnya Find the Swirling Words! )
Definisi Kata Infinity :
- Jika Anda terhubung dengan kurva semua karakter Kata Infinity pada alfabet (AZ) Anda mendapatkan simbol infinity ∞ seperti pada diagram di bawah ini.
- 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.
- Setiap kata harus tepat 5 karakter. Kata> 5 atau <5 tidak valid.
- Jika sebuah kata memiliki karakter ganda berturut-turut, kata tersebut tidak valid, seperti "FLOOD" atau "QUEEN".
- Semua Kata Infinity dimulai dan diakhiri dengan karakter yang sama.
Berikut ini beberapa contohnya:
Tugas:
Tulis program atau fungsi lengkap yang akan mengambil kata dari input standar dan akan menampilkan apakah Word Infinity atau bukan. Outputnya bisa benar / salah, 1/0, 1 / Null, dll.
Kasus uji:
Infinity Words:
ALPHA, EAGLE, HARSH, NINON, PINUP, RULER, THEFT, WIDOW
NOT Infinity Words:
CUBIC, ERASE, FLUFF, LABEL, MODEM, RADAR, RIVER, SWISS, TRUST,
KNEES, QUEEN, GROOVE, ONLY, CHARACTER, OFF, IT, ORTHO
Aturan:
- Kode terpendek menang.
Tugas Opsional:
Temukan, sebagai daftar, sebanyak kata Infinity yang Anda bisa dalam kamus bahasa Inggris. Anda dapat mengambil contoh sebagai referensi daftar lengkap kata-kata bahasa Inggris di sini .
Jawaban:
Jelly ,
43 41 40 25 24 23 22 21 1413 byte-7 byte berkat fireflame241 (
0ị=1ị$
->=ṚḢ
dan penggunaanIIA⁼2,2
untuk menguji 4 rotasi)-1 Terima kasih kepada Kevin Cruijssen (penggunaan nilad
Ø2
yang sebelumnya tidak tersedia yang menghasilkan[2,2]
)TryItOnline
Atau semua test case (ditambah "ATURAN")
Bagaimana?
Kata tak terhingga memiliki:
Semua kecuali (1) dan (ekuivalen) (4) dapat direbus ke kondisi bahwa tanda-tanda alfabet delta adalah beberapa rotasi
[1,1,-1,-1]
(di mana tanda0
itu0
)fireflame241 mencatat bahwa ini kemudian setara dengan delta delta dari tanda-tanda alfabet delta
[[2,2],[2,-2],[-2,2],[-2,-2]]
yang mungkin diuji dengan nilai absolut yang sama dengan[2,2]
!Bagaimana?
sumber
II
untuk memeriksa kesetaraan dengan rotasi 1,1, -1, -1.Java 8,
23119318512210378 byteCoba di sini.
-38 byte berkat @ dpa97 untuk mengingatkan saya untuk menggunakan
char[]
bukanString
.-63 byte berkat formula turunan @KarlNapf .
-25 byte dengan mengonversinya dari Java 7 ke Java 8 (dan sekarang mengembalikan boolean bukan integer).
193 byte menjawab:
Penjelasan:
false
false
true
jika sesuai dengan salah satu dari mereka (danfalse
sebaliknya):1<2<3>4>5
(yaituALPHA
)1>2<3<4>5
(yaituEAGLE
,HARSH
,NINON
,PINUP
)1<2>3>4<5
(yaituRULER
)1>2>3<4<5
(yaituTHEFT
,WIDOW
)Keempat aturan ini dapat disederhanakan
1*3<0 and 2*4<0
(berkat jawaban Python 2 dari @KarlNapf ).sumber
char[]
sebagai input dan bukanString
. -38 byte terima kasih.z,x
danw,y
harus memiliki tanda bolak-balik, sehingga cukup untuk memeriksaz*x<0
danw*y<0
JavaScript (ES6),
918987 byteDisimpan 2 byte berkat Ismael Miguel
Bagaimana itu bekerja
Kami membangun bitmask 4-bit yang
k
mewakili 4 transisi antara 5 karakter string:NaN
sehingga kata tersebut ditolak (untuk mematuhi aturan # 6)Bitmask yang valid adalah yang memiliki tepat dua
1
transisi berturut-turut (bit pertama dan terakhir juga dianggap berturut - turut ):Dengan kata lain, ini adalah kombinasi yang:
k?
: lebih besar dari 0!(k%3)
: kongruen dengan 0 modulo 3Kondisi lainnya adalah:
!s[5]
: tidak ada lebih dari 5 karakters[0]==s[4]
: karakter 1 dan 5 identikNB : Kami tidak secara eksplisit memeriksa
k != 15
karena kata apa pun yang mengikuti pola seperti itu akan ditolak oleh kondisi terakhir ini.Uji kasus
Tampilkan cuplikan kode
Versi awal
Sebagai catatan, versi awal saya adalah 63 byte. Ini berhasil melewati semua kasus uji tetapi gagal mendeteksi karakter identik berturut-turut.
Di bawah ini adalah versi 53-byte yang disarankan oleh Neil dalam komentar, yang berfungsi dengan baik (dan gagal):
Sunting: Lihat jawaban Neil untuk versi kode yang diperbaiki / selesai di atas.
sumber
0000
juga kongruen dengan 0 modulo 3 tetapi sekali lagi Anda tidak dapat memiliki huruf pertama dan terakhir yang sama, jadi, seperti 15, Anda tidak perlu mengujinya secara eksplisit.!((a>b)-(b>c)+(c>d)-(d>e))
?p<c?0:NaN
dapat ditulis sebagai0/(p<c)
, yang menghemat 2 byte.k?
tes karena kemungkinan ituNaN
.) Mengenai versi alternatif Anda: itu memang bisa digunakan.JavaScript (ES6), 78 byte
Berdasarkan kode yang salah @ Arnauld, tetapi golf dan dikoreksi. Bekerja dengan terlebih dahulu memeriksa bahwa karakter pertama sama dengan yang kelima (sehingga menjamin 5 karakter) dan bahwa panjang string tidak lebih dari 5. Setelah memeriksa karakter duplikat berturut-turut, masih untuk memeriksa keragu-raguan dari string, yang harus memiliki satu puncak dan satu palung terpisah dua huruf.
Sunting: Alternatif solusi 78-byte berdasarkan jawaban @ KarlNapf:
sumber
Kode keluar Python 2, 56 byte
Keluaran melalui kode keluar: Kesalahan untuk Salah, dan proses yang berhasil untuk True.
Mengambil string
s
dengan karakterabcde
, memutarnyabcdea
, melakukan perbandingan elemen dengan karakter yang sesuai, dan menetapkannya ke lima variabelv,w,x,y,z
. Panjang yang salah memberikan kesalahan.Semua kata-kata tak terbatas
yang dapat diperiksa bersama sebagai
v*x+w*y|z == -2
. Perbandinganv*x+w*y|z>-2>_
rangkaian pendek jika ini adalah kasusnya, dan selanjutnya mengevaluasi-2>_
yang memberikan kesalahan nama.sumber
Python 2,
1108760 byteMenyimpan 1 byte berkat Neil
Membutuhkan input yang dilampirkan dalam tanda kutip, mis
'KNEES'
True
jika itu kata tak terhingga,False
jika tidak dan memiliki panjang 5 dan mencetak pesan kesalahan jika panjangnya salahTerinspirasi oleh jawaban xnor menggunakan
map(cmp...
solusi sebelumnya:
Menggunakan logika yang dioptimalkan dari Kevin Cruijssen
sumber
a*c+b*d+2==0==e
?a*c+b*d|e
bahkan lebih pendek.<-1
kerja kekuatan, karena keduanya-2|1
dan-2|-1
sama-1
.PHP, 102 Bytes
sumber
Python 2, 71 byte
Mengambil string
s
dengan karakterabcde
, memutarnyabcdea
, dan melakukan perbandingan elemen dengan karakter yang sesuai.Hasilnya adalah daftar
-1, 0, 1
. Kemudian, periksa apakah hasilnya adalah salah satu urutan naik dan turun yang valid:seperti yang dihasilkan dari template
[m,n,-m,-n,0]
denganm,n=±1
.0
Cek terakhir bahwa huruf pertama dan terakhir sama, dan panjangnya memastikan bahwa string input memiliki panjang 5.Alternatif 71. Memeriksa kondisi perbandingan sambil memastikan panjang yang tepat.
sumber
R, 144 byte
Jawabannya didasarkan pada logika @Jonathan Allan. Mungkin bisa bermain golf.
R-biola uji kasus (contoh vektor tetapi logika yang sama)
sumber
length(s)==5
, Anda dapat menggantinyas[1]==tail(s,1)
dengans[1]==s[5]
. Metode satu byte lebih pendek untuk memeriksa panjangnyais.na(s[6])
. Bersama dua perubahan tersebut kembaliTRUE
untuks
panjang 5 tepat danFALSE
sebaliknya, sepertiTRUE&NA
yangNA
tapiFALSE&NA
adalahFALSE
. Anda juga dapat menyimpan beberapa byte dengan menggantinya!sum(sign(d))&any(rle(sign(d))$l>1)
dengan!sum(a<-sign(d))&any(rle(a)$l>1)
.GNU Prolog, 47 byte
Menentukan predikat
i
yang berhasil (berkali-kali tak terhingga, pada kenyataannya) untuk kata tak terhingga, sehingga menghasilkan "ya" ketika dijalankan dari penerjemah (seperti biasa untuk Prolog); gagal untuk kata kandidat yang huruf pertama dan terakhirnya tidak cocok, atau panjangnya 5 huruf, sehingga menghasilkan "tidak" ketika dijalankan dari penerjemah; dan crash dengan stack overflow jika diberi kata kandidat yang bukan kata tak terhingga, tetapi lima huruf dengan dua yang cocok pertama dan terakhir. (Saya tidak yakin mengapaitu crash; panggilan rekursif harus dapat diperlakukan sebagai panggilan ekor. Rupanya pengoptimal GNU Prolog tidak terlalu bagus.) Pengganti adalah padanan Prolog tentang kebenaran, dan gagal dengan padanan falsey; crash jelas lebih bohong daripada benar, dan memperbaikinya akan membuat solusi jauh lebih lama, jadi saya berharap ini dianggap sebagai solusi yang valid.Algoritma ini cukup sederhana (dan memang, program ini cukup mudah dibaca); periksa apakah huruf-huruf tersebut membentuk salah satu dari empat pola yang menghasilkan kata tak terhingga, dan jika tidak, ubah siklusnya dan coba lagi. Kami tidak perlu secara eksplisit memeriksa huruf ganda sebagai huruf
<
dan>
operator membiarkan kami memeriksa secara implisit bahwa pada saat yang sama kami memeriksa bahwa delta cocok.sumber
Sebenarnya ,
3827 byteJawaban ini sebagian besar terinspirasi oleh jawaban Jelly Jonathan Jonathan yang sangat baik . Mungkin ada beberapa tempat di mana ini bisa bermain golf, jadi saran bermain golf menyambut! Cobalah online!
Tidak melakukanolf
sumber
APL (Dyalog) ,
1615 byteCobalah online!
sumber
TI-BASIC, 81 byte
String untuk masuk ke program adalah di Ans. Mengembalikan (dan secara implisit menampilkan) 1 jika kata yang dimasukkan adalah Kata Infinity, dan 0 (atau keluar dengan pesan kesalahan) jika tidak.
Kesalahan pada karakter berulang, atau kata-kata non-5-huruf.
sumber
05AB1E , 16 byte
Port of @JonathanAllan jawaban Jelly .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber