Tantangan
Pertimbangkan pelangi sebagai tujuh warna, diwakili oleh string sebagai Red Orange Yellow Green Blue Indigo Violet
.
Tugas Anda adalah membuat program yang menerima salah satu dari warna-warna ini sebagai input dan output selanjutnya dalam warna pelangi. Ini termasuk tumpang tindihViolet -> Red
Memasukkan
Tali berisi salah satu warna pelangi.
Keluaran
Selanjutnya agar warna pelangi.
Aturan
- Nama warna peka huruf besar-kecil. Mereka harus cocok dengan kasing yang termasuk dalam pos ini.
- Masukan akan selalu valid. Perilaku apa pun diizinkan untuk input yang tidak valid.
- Ini adalah kode golf, sehingga jumlah byte terpendek menang!
Contoh Input dan Output
Input -> Output
Red -> Orange
Orange -> Yellow
Yellow -> Green
Green -> Blue
Blue -> Indigo
Indigo -> Violet
Violet -> Red
Provide at least one example input and output. Make sure they match your own description of what the input should look like.
Jawaban:
SOGL V0.12 , 23 byte
Coba Di Sini!
Penjelasan:
sumber
JavaScript, 68 byte
Untuk input
"Red"
, fungsi ini pertama-tama membuat RegExp/Red(.[a-z]*)/
untuk mencocokkan string'RedOrangeYellowGreenBlueIndigoVioletRed'
dan kemudian mengembalikan hasil tangkapan pertama.Tampilkan cuplikan kode
sumber
'RedOrangeYellowGreenBlueIndigoVioletRed'
atau sesuatuPerl 5
-p
,5857 byteCobalah online!
Sekarang tantangan telah diubah menjadi siklus solusi regex
tidak optimal lagi (karena dua kali lipat
Red
)Juga 57 byte:
Cobalah online!
sumber
Python , 79 byte
Cobalah online!
Pegangan
Violet -> Red
. Fungsi yang diinginkan diberikan secara anonim di baris kedua.80 byte
Cobalah online!
sumber
Perl 6 , 56 byte
Cobalah online!
Mengeksploitasi fakta bahwa bit 2-4 dari kode ASCII dari setiap huruf pertama warna memetakan ke 0-6.
Berikut ini adalah solusi non-bersaing yang bagus yang menggunakan "ungu" alih-alih "indigo" dan "violet" (38 karakter, 59 byte):
Cobalah online!
sumber
%12
solusi untuk Kelapa, tetapi tentu saja ini lebih rapi.Ruby
-n
,6260 byte-2 oleh Asone Tuhid.
Cobalah online!
Pendekatan regex juga menjanjikan untuk Ruby. Namun, saya tiba pada solusi yang lebih pendek menggunakan lookahead dan langsung mencetak pertandingan, daripada bermain dengan menangkap grup. Daftar warna berada dalam arah terbalik karena lookahead lebih murah 1 byte daripada lookbehind.
sumber
/#$_/
interpolasi)Merah , 87 byte
Cobalah online!
sumber
05AB1E , 30 byte
Cobalah online!
Penjelasan
sumber
Excel, 85 byte
Menggunakan nama huruf kecil.
Pendekatan yang sama, dengan huruf besar 86 byte:
sumber
Haskell ,
80 7175 byteTerima kasih kepada Laikoni untuk mempersingkat 9 byte!
Cobalah online!
Solusi lain, sedikit lebih idiomatis, tapi saya tidak bisa membuatnya lebih pendek:
Itu perlu diturunkan
Read
karena persyaratan bahwa input adalah string dan setidaknyaEq
atauShow
untuk menguji kesetaraan atau menunjukkan hasilnya.sumber
span
: Cobalah online!span
...Violet
seharusnya membungkusRed
, jadi Anda perlu menambahkanRed
lagi ke akhir string.succ Violet
tidak akan berhasil karenaEnum
jangan membungkus :(Retina ,
6558 byteCobalah online!
Penjelasan
Kami mulai dengan menambahkan
(.[a-z]+)
ke input, dengan demikian mengubahnya menjadi regex yang cocok dengan warna input, segera diikuti oleh tepat satu warna lagi (menangkap yang terakhir).Sekarang
:
swap input panggung dengan regex sendiri. Jadi hasil sebelumnya menjadi regex dan cocok dengan daftar warna. Pertandingan (tunggal) diganti dengan kelompok tangkapan pertama (yaitu warna berikutnya dalam siklus) dan dikembalikan. Output pada akhir program terjadi secara otomatis.sumber
\1
dan melompat ke target menghabiskan banyak byte: :-)Vim,
59565352 Bytes-1 byte terima kasih kepada tsh
sumber
Java (JDK 10) , 77 byte
Cobalah online!
Kredit
sumber
s->"RedOrangeYellowGreenBlueIndigoVioletRed".split(s)[1].split("(?=[A-Z])")[0]
s->"Red Orange Yellow Green Blue Indigo Violet Red".split(s)[1].split(" ")[1]
Kelapa , 79 byte
Cobalah online!
sumber
s->"# green indigo yellow # # orange blue # violet red".split()[ord(s[0])%12]
Sekam , 28 byte
Cobalah online!
Mungkin ada opsi yang lebih baik untuk mengelola argumen, tetapi ini adalah yang terbaik yang bisa saya temukan
Penjelasan
sumber
Stax ,
313029 byteJalankan dan debug itu
Ini menggunakan instruksi terjemahan cincin. Ini menggantikan setiap elemen dalam array dengan yang berikut dari "decoder ring". Biasanya, ini digunakan untuk melakukan penggantian karakter dalam string, tetapi dapat digunakan pada seluruh string juga, jika itu dibungkus dengan array tunggal.
Berikut ini adalah representasi ascii yang belum dibongkar, tanpa komentar, dari program yang sama.
Jalankan yang ini
sumber
J ,
67 6462 byte-2 byte terima kasih kepada FrownyFrog
Cobalah online!
sumber
&.
sebenarnya berfungsi untuk ini. Cobalah onlineR ,
10993 byteCobalah online!
-16 Terima kasih kepada Giuseppe untuk penggunaan
match
sarannyasumber
match(y,x)%%7+1
lebih pendek untuk mengindeks daripadaif
pernyataan Anda . Selain itu, builtincolors()
berisi banyak nama warna, jika Anda menemukan indeks :)colors()
tidak mengandungindigo
! Ah, masih, +1!match
lebih baik di sinicolors()
: /Batch, 97 byte
Penjelasan: Baris
call
kedua memiliki efek menggantikan parameter ke dalam perintah dan mengevaluasinya, mengubahnya menjadi misalnyaset s=%s:Red =%
, yang menghapus awalan string yang menyertakan parameter. Substitusi pada baris ketiga kemudian menggantikan semua ruang dengan pemisah pernyataan dan komentar. Ini berfungsi karena pergantian string terjadi sebelum parsing.sumber
Ruby
-n
,7569 byteCobalah online!
sumber
i&&
? Tidak perlu memeriksanil
, karena "Abaikan kesalahan jika ini bukan warna."Julia 0,6 , 76 byte
Cobalah online!
Ini menangani Violet-> Merah dengan mendaur ulang tali dengan kekuatan
^
operator .Inilah solusi yang sedikit lebih lama tanpa regex:
sumber
PowerShell , 74 byte
Cobalah online!
Mengambil string
"Red ... Violet "
dan mengalikan-string dengan dua untuk menanganiViolet -> Red
kasus uji dengan benar . Kami kemudian-split
bahwa string pada input$args
untuk memberi kami sebuah array dari dua string. Kami mengambil string kedua daripadanya[1]
, kemudian-split
pada spasi untuk memberikan kami serangkaian string dan mengambil yang pertama[0]
.Misalnya, untuk input
"Yellow"
, langkah pertama akan menghasilkan@("Red Orange ", " Green Blue Indigo ... Indigo Violet ")
. Kami mengambil yang kedua dari itu, membaginya di whitespace (yang menghilangkan whitespace), menghasilkan@("Green", "Blue", ... "Violet")
, jadi mengambil yang[0]
hasilnya menghasilkan string berikutnya yang tepat.sumber
Bahasa Formula IBM / Lotus Notes,
7974 byteVersi sebelumnya untuk 79:
Mengambil input dari bidang teks yang dapat diedit yang disebut
a
.Tidak ada TIO untuk bahasa formula jadi inilah beberapa tangkapan layar.
sumber
PHP, 92 byte
Cobalah online!
sumber
Kotlin , 73 byte
Cobalah online!
Mengambil keuntungan dari kenyataan bahwa banyak warna adalah 6 karakter, yang tidak diawali dengan spasi untuk membuatnya 6 karakter. Semoga bisa diterima bahwa beberapa warna dihasilkan dengan spasi di depan mereka.
misalnya Merah
" Red"
, Biru" Blue"
sumber
SmileBASIC,
9484 bytesumber
Gema , 67 karakter
Contoh dijalankan:
Gema , 59 karakter
Membosankan satu. Pendekatan paling bodoh yang pernah ada, tapi cukup singkat.
Contoh dijalankan:
sumber
q / kdb + ,
5955 byteLarutan:
Contoh:
Penjelasan:
Buat kamus warna => warna berikutnya, input adalah kunci untuk kamus:
Bonus:
Ini 53 byte dalam K4:
sumber
Japt ,
4543 byte-2 byte terima kasih kepada Shaggy
Cobalah online!
sumber
N
sed, 72 byte
Cobalah secara Online
Contoh 1:
Memasukkan:
Keluaran:
Contoh 2:
Memasukkan:
Keluaran:
sumber