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:
DECLARE @p VARCHAR(MAX)='';WITH t AS(SELECT ASCII(LEFT(@s,1))c,2 i UNION ALL SELECT ASCII(SUBSTRING(@s,i,1)),i+1FROM t WHERE i<=LEN(@s))SELECT @p=@p+CHAR(CASE WHEN c>96THEN 20-c/122+5*c/16 ELSE c END)FROM t;SELECT @p
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:
DECLARE @s VARCHAR(MAX)='1-800-abcdefghijklmnopqrstuvwxyz'
--above code runs here
1-800-22233344455566677778889999