Anda baru saja mendapat telepon baru, tetapi Anda tidak terlalu suka bergetar, Anda telah memutuskan ingin membuat pola getaran sendiri. Jadi, Anda telah menulis program tempat Anda menggunakan kata kunci long
, short
danpause
membuat ponsel Anda bergetar sesuai dengan kata kunci ini.
Tugas
Buat sebuah program kecil yang menerima string dari long
, short
, dan pause
dan output string lain yang mewakili suara fonetik dari ponsel bergetar;Rrrr - Rr
long
suara adalah Rrrr
short
suara Rr
(masalah Casing)
pause
adalah tanda hubung -
semua suara dibatasi oleh tanda hubung dengan ruang sekitarnya' - '
Uji Kasus
input: long long short long short
keluaran:Rrrr - Rrrr - Rr - Rrrr - Rr
input: long long long short short short
keluaran:Rrrr - Rrrr - Rrrr - Rr - Rr - Rr
input: short short short pause short short short
keluaran:Rr - Rr - Rr - - - Rr - Rr - Rr
input: long short short long long pause short short
keluaran:Rrrr - Rr - Rr - Rrrr - Rrrr - - - Rr - Rr
Ini adalah pertanyaan kode-golf sehingga jawaban akan dinilai dalam byte, dengan kemenangan paling sedikit.
-
? Ini adalah kasus dalam contoh Anda, tetapi tidak ditentukan di mana pun.Jawaban:
Pyke ,
2220 byteCoba di sini!
Inti dari jawaban ini adalah transformasi
["long", "short", "pause"]
menjadi[4, 2, 0]
. Ia mendapat titik kode dari huruf pertama dari setiap kata danAND
s dengan 6. Secara kebetulan itu berubah menjadi nilai-nilai yang kita cari. (Saya mencari melalui beberapa solusi yang lebih panjang sebelum menemukan yang ini). Setelah selesai, kita dapat mengubah daftar int menjadi lebih lanjut["RRRR", "RR", ""]
dengan mengalikan int"R"
yang kemudian berubah menjadi["RRRR", "RR", "-"]
dan akhirnya diberi judul casing untuk mendapatkannya["Rrrr", "Rr", "-"]
. Kami kemudian bergabung dengan daftar yang dihasilkan oleh" - "
sumber
j" - "m|*\M.&Chd6\-c
:-)\xef
dan\xa6
yang.o
dan.&
masing-masing. Ini adalah perubahan yang kompatibel ke belakang di mana jika bit tinggi diatur, itu berjalan seperti perintah 2 byte yang lama. Saya menulisnya dengan cara ini untuk memudahkan pembaca dan karena Pyke secara teknis tidak menggunakan halaman kode lagi dan saya tidak ingin harus memasukkan byte acak yang tidak berfungsiJavaScript,
7063 byte2 byte disimpan berkat Luke
Cobalah online!
sumber
[]
s luar !Haskell ,
716659 byteCobalah online!
Oh benar,
=<<
adalah concatMap.Mengambil keuntungan dari kenyataan itu
"long"
dan"short"
keduanya memiliki surat ituo
.sumber
f=
fungsi bebas titik diizinkan tanpa penugasan(>>=(\case 'o'->"Rr";'n'->"rr";'p'->"-";' '->" - ";_->""))
JavaScript (ES6),
6559 bytesumber
05AB1E ,
33272521 byteCobalah online!
Penjelasan
Disimpan 3 byte menggunakan
AND 6
trik dari muddyfish ini jawaban Pykesumber
Python 2 ,
766964 byteCobalah online!
Alternatif:
Python 2 ,
7669 byteCobalah online!
Python 2 , 69 byte
Cobalah online!
sumber
Mathematica, 81 byte
Cobalah online!
sumber
Retina ,
3129 byte1 byte disimpan berkat Dom Hastings
1 byte disimpan berkat Neil
Cobalah online!
Ini pendekatan yang berbeda dari jawaban @ DomHastings .
sumber
Perl 5 , 39 byte
37 byte kode + 2 untuk
-pa
.Cobalah online!
sumber
R , 77 byte
Mengambil input melalui STDIN, memeriksa apakah input cocok
long
,short
ataupause
dan bertukar pasanganRrrr
,Rr
atau-
masing - masing.Ini kemudian dicetak dengan
-
bantalan dengan spasi sebagai pemisah, cocok dengan output yang diinginkan.sumber
scan(,'') %in% c('long','short','pause')
a %in% b
memeriksa apakah entri dalama
hadirb
, sambilmatch(a, b)
mengembalikan indeks yang sebenarnya dari pertandingan. Karena kita dapat mengasumsikan bahwa input tersebut valid, menggunakan%in%
hanya akan mengembalikan vektorTRUE
s.[
, itu ditafsirkan sebagai[which(bool) == TRUE]
, yang dalam contoh Anda akan[c(1,2,3)]
, yang pada gilirannya terjadi untuk memberikan output yang benar.sep=' - '
Anda dapat menggunakans=' - '
kurang dari 2 byteRöda ,
735747464044 byteCobalah online!
+4 byte karena perubahan aturan (harus menggunakan
Rrrr
alih-alih varian 4 huruf apa pun).Kode sebelumnya:
sumber
Mmm
danMm
1 byte lebih pendek.C (gcc) ,
937776 byte-2 byte terima kasih kepada Scepheo!
-1 byte terima kasih kepada Cyoce!
Mengambil NULL yang dihentikan ** char atau setara dengan input.
Cobalah online!
Penjelasan:
sumber
a++,*a
ke dalam*++a
untuk menyimpan dua byte, dan mengambil keuntungan dari definisi "suara" yang tidak jelas untuk digunakan*a
daripada"Rrrr"
menyimpan empat byte lainnya.R , 72 byte
Mengambil input dari stdin, mencetak ke stdout.
Cobalah online!
sumber
Batch, 88 byte
Mengambil input pada STDIN. Sayangnya biaya overhead loop 26 byte jadi ini hanya penggantian membosankan.
sumber
@
sMmmm
danMm
denganRrrr
danRr
, akan menyenangkan untuk memperbarui jawaban Anda c:Retina , 31 byte
-1 byte terima kasih kepada @ fergusq !
Cobalah online!
sumber
PHP, 113 byte
Cobalah online!
Upaya pertama di kode golf, jadi mungkin banyak optimisasi tersedia!
sumber
Vim (52 bytes)
:s/long/Rrrr/ge|s/short/Rr/ge|s/pause/-/ge|s/ / - /g
memasukkanMungkin bisa dibuat lebih pendek ...
sumber
e
bendera di akhirs/[^ -]/r/
R pertama setelah setiap spasi, pangkas empat-r ke dua-r) keluar lebih lama.Excel, 100 byte
Per contoh, Input adalah
SPACE
dipisahkan string, seperti halnya output.Pertanyaan itu sendiri tidak menyebutkan
SPACE
persyaratan, yang memungkinkan solusi 97 byte yang sedikit lebih pendek :sumber
Otomatis , 145 byte
(AutoIt adalah pilihan yang sangat buruk untuk kode golf, mencoba yang terbaik untuk membuatnya sekecil mungkin)
sumber
Alice , 37 byte
Cobalah online!
Penjelasan
Program ini membuat penggantian berikut:
l
,h
→R
o
,n
,g
→r
p
→-
sumber
Sed, 50 byte
Mengambil input dari
stdin
, mencetak kestdout
Edit - disimpan 2 byte
Sed, 40 byte
Menyalin ide dari jawaban Nitrodon
Edit: menyimpan 2 byte lagi
sumber
Python 2 , 69 byte
Cobalah online!
Port jawaban Pyke saya
sumber
Paradoc (v0.2.10), 21 byte (CP-1252)
Cobalah online!
Mengambil string di stack dan menghasilkan string di stack. Tergantung
i
untuk berubah menjadi program lengkap yang bertuliskan STDIN.Menggunakan
&6
seperti jawaban Pyke dan yang lainnya, tetapi menggabungkan token bersama sedikit berbeda, dengan menambahkan"-"
token setelah setiap suara, menghapus yang terakhir, dan kemudian menggabungkan token ini dengan spasi. Tampaknya menyimpan byte lebih dari bergabung dengan" - "
.Penjelasan:
v0.2.11 akan mendukung mencukur dua byte lagi dengan mengganti
\°
denganx
dan"-"
dengan'-
.sumber
SOGL V0.12 , 28 byte
Coba Di Sini!
Fakta menyenangkan: jika diizinkan untuk membatasi dengan
-
atau-
itu akan menjadi byte yang lebih pendeksumber
Ruby , 67 byte
Ini adalah solusi JavaScript Johan Karlsson yang diangkut ke Ruby. Jika Anda menyukai jawaban ini, Anda harus memilih jawaban Johan.
Ide kuncinya adalah membandingkan string kata
'short'
, dll. Dengan satu karakter untuk membedakan antara kata-kata.Atau, dalam urutan abjad:
Cobalah online!
sumber
Ruby , 78 byte
Bagian hanya penting dari input yang
p
,o
,g
, dan ruang ... mengabaikan sisanya.short
menjadio
long
menjadiog
pause
menjadip
Cobalah online!
sumber
V , 32 byte
Cobalah online!
sumber
Python 3 , 66 byte
Cobalah online!
sumber