Masalah:
Anda membuat telepon baru di mana orang dapat mengetikkan nomor telepon khusus, misalnya 1-800-program
, dan mereka akan dikonversi secara otomatis ke nomor telepon yang dapat digunakan, seperti 1-800-7764726
(untuk contoh sebelumnya).
Program Anda akan menerima string jika panjangnya dengan angka, huruf dan garis, dan mengonversi semua huruf menjadi angka yang sesuai.
Ini adalah keypad, untuk referensi:
Aturan:
- Program Anda akan menerima string
- Ini akan memprosesnya dan mengembalikan / mencetak string lain
- Bahasa apa pun diterima
- Karena kode-golf , kode terpendek menang
Jawaban:
GolfScript, 24 karakter
Input tes:
Output tes:
Penjelasan:
{ }%
menerapkan kode antara kawat gigi ke setiap karakter input..96>{ }*
mengeksekusi kode antara kawat gigi bagian dalam jika dan hanya jika kode ASCII dari karakter lebih besar dari 96 (yaitu itu adalah huruf kecil).Yang pertama
,
mengubah karakter menjadi daftar semua karakter dengan kode ASCII yang lebih rendah, dan91,'qx'+-
menyaring semua karakter dengan kode ASCII kurang dari 91, serta hurufq
danx
, dari daftar. Jadi, misalnya, karaktera
diubah menjadi daftar 6 karakter[\]^_`
, sementaraz
diubah menjadi daftar 29 karakter[\]^_`abcdefghijklmnoprstuvwy
.Yang kedua
,
menghitung elemen yang tersisa dalam daftar, dan3/
membagi jumlah ini dengan tiga (pembulatan ke bawah). Akhirnya,`
mengubah angka yang dihasilkan (dalam kisaran 2 - 9) menjadi string.Jadi, sesuai spek, tanda hubung dan angka dibiarkan tidak berubah, sedangkan huruf kecil dipetakan ke dalam angka sesuai dengan diagram papan tombol referensi. Kode ini benar-benar akan dengan bersih melewati semua karakter ASCII yang dapat dicetak kecuali untuk huruf kecil (yang dipetakan seperti yang dijelaskan) dan karakter
{
,|
dan}
(yang dipetakan ke string dua karakter10
). Input 8-bit Non-ASCII akan menghasilkan segala macam output numerik yang aneh.Setelah semua ini, agak mengecewakan bahwa ini hanya mengalahkan solusi bash sepele hanya dengan enam karakter.
sumber
Bash, 30
Sunting: Terima kasih Gagang Pintu untuk menghilangkan 3 karakter
Contoh:
sumber
9
detik terakhir ?C,
837877656362http://ideone.com/qMsIFQ
sumber
~(c=getchar())
getch()
bukangetchar()
?getch()
bukan standar C, karena itu saya kira itu tidak terhubung di ideone. Namun saya mengujinya di MSVC dan itu tidak benar-benar bekerja dengan sedih - karena secara langsung mengkonsumsi input keyboard tidak ada cara untuk keluar dari program, meskipun itu menerjemahkan apa yang Anda ketik dengan cepat yang agak rapi.Javascript - 103 karakter
sumber
charCodeAt(0)
dengancharCodeAt()
dan Anda dapat menggunakan fungsi panah untukfunction(y)...
menyimpan beberapa byte dan untuk~~(y/3)
Anda dapat menggunakany/3|0
Ruby, 75 karakter
Menggunakan
chars
blok yang sudah usang , dan mencetak setiap huruf satu per satu$><<
. Saya juga suka[[*?a..?z].index(c)||-1]
; itu mengambil karakter yang sesuai dengan huruf alfabet jika huruf, dan karakter terakhir (yang merupakan karakter uji tidak berubah) jika tidak.Ruby, 43 (atau 35) karakter
Mencuri dari @ace;)
Shave off 8 chars jika saya bisa berjalan di IRB dengan variabel
s
sebagai string:sumber
C ++ - 222 karakter
Solusi terlama sejauh ini:
sumber
Frink, 92
Bahasa yang agak verbose, saya tahu. Ini memeriksa 8 nilai alih-alih 26 tanpa harus mengetikkan perbandingan. Bisakah solusi "222333444 .." di atas dapat dikurangi dengan cara yang sama?
Menggunakan struktur bawaan, 107
Menggunakan fungsi rekursif khusus, 92
sumber
Smalltalk,
7970input adalah s:
mungkin bukan kandidat untuk tersingkat - tetapi mungkin menarik untuk trik lama untuk menghindari tes untuk kondisi yang tidak ditemukan (indexOf: mengembalikan 0 dalam kasus ini). Jadi tidak diperlukan tes khusus untuk surat. Namun beberapa Smalltalks memiliki string yang tidak dapat diubah, dan kita membutuhkan 4 karakter tambahan ("copy").
Oh, versi yang lebih baik, yang bahkan berurusan dengan string yang tidak dapat diubah dalam 70 karakter:
sumber
Mathematica 90
Ini mengikuti logika solusi @ ace:
Contoh
sumber
1
masuk#1
:)1
. Masih 90 char tapi potong dan tempel akan bekerja. Anda tentu saja memahami motivasi untuk menggunakan panah char tunggal.Perl, 50
Salinan jawaban bash Ace yang jelas
sumber
-p
switch sebagai gantinya yang memungkinkan Anda dengan baik melalui setiap baris stdin. Sementara kita berada di sana, rentang dalam y /// tidak perlu diletakkan dalam tanda kurung. Kami juga dapat menyingkirkan tiga angka 9 yang tersisa hanya satu dan menghapus titik koma terakhir:-p y/a-z/22233344455566677778889/
Begini, 30 +1 untuk-p
. Terima kasih telah menggunakan Enterprise Chinese Perl Golfing dan Layanan Optimasi dan selamat bersenang-senang.R, sangat panjang tapi menyenangkan
sumber
k [32 Karakter]
Pemakaian
sumber
JavaScript, 85
JavaScript tidak akan pernah memenangkan perang golf, tetapi saya menyukainya dan saya ingin melakukan sesuatu yang berbeda dari melompat pada kereta musik @ace.
sumber
PHP, 141
Bukan yang terpendek, tetapi lebih menyenangkan:
Lebih mudah dibaca:
sumber
strtolower
Python 2.7, 80
Saya baru mengenal python, jadi saya yakin pasti ada cara untuk bermain golf ini lebih jauh , ini adalah pendekatan yang berbeda, harap kalian menyukainya, ya Tuhan, python cantik!
Jalankan contoh:
sumber
T-SQL, 216 byte
Saya menghabiskan beberapa waktu selama beberapa malam dengan susah payah menciptakan fungsi urutan matematis yang akan dibulatkan dengan benar untuk menghasilkan kode ASCII yang tepat untuk angka-angka dari kode ASCII alfabet. Itu memiliki jumlah tempat desimal dalam koefisien yang konyol, tetapi berhasil.
Namun, pendekatan rasional mattnewport bekerja di SQL juga, dengan biaya byte yang jauh lebih rendah, jadi saya tanpa malu-malu menggesek matematika saya sendiri untuk mendukungnya. Pilih dia, ini solusi yang elegan!
Ini milik saya:
Ini menggunakan CTE rekursif untuk membuat tumpukan karakter dadakan di nomor telepon dan menerjemahkan huruf-huruf dengan cepat, kemudian sedikit tipuan SQL (SELECT @ p = @ p + columnValue) untuk mengomposisi ulang string dari CTE tanpa memerlukan konstruksi rekursi lainnya.
Keluaran:
sumber
Python 2.7,
6665Asli Anakata
Selanjutnya bermain golf
Saya tidak memiliki reputasi yang cukup untuk mengomentari jawaban @ anakata, jadi saya membuat posting terpisah di sini. Saya memiliki ide yang sama (mengambil modulus tata cara 3) tetapi tidak tahu bagaimana cara mencetak angka yang tepat untuk s - z .
Bagaimanapun, peningkatan golf yang saya buat:
diubah
raw_input
menjadiinput
menghapus
'\b'
tanda kurung dan tanda kurung serta tanda kutip tunggalmenghapus
+2
offset dan menempatkannya dalam pengurangan asli (97 - (3 * 2) = 91)Diuji dengan juru bahasa Python 2.7.6. Asumsikan, sesuai aturan, input string.
sumber
PHP, 87
sumber
q [38 Karakter]
Terinspirasi oleh solusi ace
Contoh
sumber
XQuery, 71
BaseX digunakan sebagai prosesor XQuery.
$i
adalah input.Bukan jawaban terpendek, tetapi cukup singkat dan sangat mudah dibaca.
sumber
Python, sangat ungolfed
Karena semua orang menyalin ace, saya memutuskan untuk mengirim kode yang saya buat sebelum saya mengajukan pertanyaan:
sumber
EcmaScript 6 (103 bytes):
Berharap
i
mengandung string.Cobalah di semua versi Firefox terbaru. Saya belum mencoba Google Chrome.
sumber
Python 3, 121
sumber
Haskell, 93C
Pemakaian
sumber
C # 140
sumber
Python
sumber
ECMASCRIPT, 101 (dengan input)
Newline ditambahkan untuk kejelasan. 85 karakter jika input dalam variabel.
sumber
Perl, 54
Tembak, @RobHoare masih mengalahkan saya dengan 4 karakter. :)
sumber
QBasic, 155
Ah, kenangan itu ...
Seharusnya ini lebih pendek, tapi saya menguji dengan repl.it , yang tidak memungkinkan
IF
pernyataan baris tunggal dan berperilaku aneh jika Anda membiarkan variabel offNEXT i
. Ini juga tidak mengenaliASC
fungsinya, jadi untuk menjalankan kode Anda harus menambahkan solusi ini di awal:(Kali kedua Anda menjalankannya, penerjemah akan mengeluh kecuali jika Anda menghapus
DECLARE FUNCTION
garis, pergi angka.)sumber
R, 110
Contoh:
sumber