Angka Suzhou (蘇州 碼子; juga 花 碼) adalah angka desimal China:
0 〇
1 〡 一
2 〢 二
3 〣 三
4 〤
5 〥
6 〦
7 〧
8 〨
9 〩
Mereka cukup banyak bekerja seperti angka Arab, kecuali bahwa ketika ada digit berturut-turut milik set {1, 2, 3}
, digit bergantian antara notasi goresan vertikal {〡,〢,〣}
dan notasi goresan horizontal {一,二,三}
untuk menghindari ambiguitas. Digit pertama dari grup berurutan seperti itu selalu ditulis dengan notasi goresan vertikal.
Tugasnya adalah mengubah bilangan bulat positif menjadi angka Suzhou.
Uji kasus
1 〡
11 〡一
25 〢〥
50 〥〇
99 〩〩
111 〡一〡
511 〥〡一
2018 〢〇〡〨
123321 〡二〣三〢一
1234321 〡二〣〤〣二〡
9876543210 〩〨〧〦〥〤〣二〡〇
Kode terpendek dalam byte menang.
Jawaban:
Jelly , 35 byte
Cobalah online!
sumber
R , 138 byte
Saya berani bertaruh ada cara yang lebih mudah untuk melakukan ini. Gunakan
gsub
untuk mendapatkan posisi numerik bolak-balik.Cobalah online!
sumber
JavaScript, 81 byte
Cobalah online!
Menggunakan
14>>c
menghemat 3 byte. Terima kasih untuk Arnauld .sumber
Retina , 46 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Cocokkan dengan dua digit 1-3 atau digit lainnya.
Ganti karakter pertama dari setiap pertandingan dengan Suzhou-nya.
Ganti digit yang tersisa dengan Suzhou horisontal.
51 byte di Retina 0.8.2 :
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Pisahkan input menjadi masing-masing digit atau pasangan digit jika keduanya 1-3.
Ganti karakter pertama dari setiap baris dengan Suzhou-nya.
Gabungkan kembali garis-garis itu dan gantilah digit yang tersisa dengan Suzhou horisontal.
sumber
Perl 5
-pl -Mutf8
,5346 byte-7 byte terima kasih kepada Grimy
Cobalah online!
Penjelasan
sumber
s/[123]\K[123]/$&^$;/ge;y/--</一二三〇〡-〩/
( TIO )s/[123]{2}/$&^v0.28/ge;y/--</一二三〇〡-〩/
( TIO ). 48:s/[123]{2}/$&^"\0\34"/ge;y/--</一二三〇〡-〩/
(membutuhkan penggunaan karakter kontrol literal alih-alih\0\34
, idk bagaimana melakukan ini di TIO)s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c
( TIO )Java (JDK) , 120 byte
Cobalah online!
Kredit
sumber
c=s[i]-48;if(p>0&p<4&c>0&c<4)
bisaif(p>0&p<4&(c=s[i]-48)>0&c<4)
, dan kemudian Anda juga bisa menjatuhkan tanda kurung di sekitar loop. Juga,else{p=c;s[i]+=c<1?12247:12272;}
bisa jadielse s[i]+=(p=c)<1?12247:12272;
JavaScript (ES6),
95 8988 byteDisimpan 6 byte berkat @ShieruAsakoto
Mengambil input sebagai string.
Cobalah online!
sumber
Python 3 , 102 byte
Cobalah online!
mypetlion mengingatkan saya pada golf yang sepele. -4 byte.
sumber
Bersih ,
181165 byteSemua lolos oktal dapat diganti dengan karakter byte-tunggal yang setara (dan masing-masing dihitung sebagai satu byte), tetapi digunakan untuk keterbacaan dan karena jika tidak maka akan merusak TIO dan SE dengan UTF-8 yang tidak valid.
Cobalah online!
Kompiler penyandian-tidak sadar adalah berkah sekaligus kutukan.
sumber
Perl 6
-p
,8561 byte-13 byte berkat Jo King
Cobalah online!
sumber
Merah ,
198171 byteCobalah online!
sumber
Jelly , 38 byte
Cobalah online!
sumber
C, 131 byte
Cobalah online!
Penjelasan: Pertama-tama - Saya menggunakan char untuk semua variabel agar pendek.
Array
s
menampung semua karakter Suzhou yang dibutuhkan.Sisanya cukup banyak iterasi di atas angka yang disediakan, yang dinyatakan sebagai string.
Saat menulis ke terminal, saya menggunakan nilai nomor input (jadi karakter - 48 di ASCII), dikalikan dengan 3, karena semua karakter ini panjangnya 3 byte di UTF-8. 'String' yang dicetak selalu sepanjang 3 byte - jadi satu karakter asli.
Variabel
c
dand
hanya 'jalan pintas' ke karakter input saat ini dan selanjutnya (angka).Variabel
f
memegang 0 atau 27 - dikatakan jika karakter 1/2/3 berikutnya harus digeser ke karakter alternatif - 27 adalah offset antara karakter reguler dan karakter alternatif dalam array.f=c*d&&(c|d)<4&&!f?27:0
- tulis 27 ke f jika c * d! = 0 dan jika keduanya <4 dan jika f bukan 0, tuliskan 0.Dapat ditulis ulang sebagai:
Mungkin ada beberapa byte untuk dicukur, tetapi saya tidak lagi dapat menemukan sesuatu yang jelas.
sumber
Ruby
-p
, 71 byteCobalah online!
sumber
K (ngn / k) , 67 byte
Cobalah online!
10\
dapatkan daftar angka desimal{
}@
terapkan fungsi berikutx&x<4
boolean (0/1) daftar di mana argumennya kurang dari 4 dan bukan nol<\
memindai dengan kurang dari. ini mengubah proses 1s berurutan menjadi 1s dan 0s bergantianx+9*
kalikan dengan 9 dan tambahkanx
penjajaran adalah pengindeksan, jadi gunakan ini sebagai indeks di ...
0N 3#"〇一二三〤〥〦〧〨〩〡〢〣"
string yang diberikan, dibagi menjadi daftar string 3-byte. k tidak sadar unicode, jadi ia hanya melihat byte,/
menggabungkansumber
Bahasa Wolfram (Mathematica) , 117 byte
Cobalah online!
Perhatikan bahwa pada TIO ini menampilkan hasilnya dalam bentuk lolos. Di ujung depan Wolfram yang normal, akan terlihat seperti ini:
sumber
f[123]
harus kembali〡二〣
.Japt , 55 byte
Cobalah online!
Perlu dicatat bahwa TIO memberikan jumlah byte yang berbeda dari penerjemah pilihan saya , tetapi saya tidak melihat alasan untuk tidak mempercayai yang memberikan nilai lebih rendah kepada saya.
Penjelasan:
sumber
C # (.NET Core) , 107 byte, 81 karakter
Cobalah online!
Disimpan 17 byte berkat @ Jo King
Jawaban Lama
C # (.NET Core) , 124 byte, 98 karakterCobalah online!
Mengambil input dalam bentuk Daftar, dan mengembalikan IEnumerable. Saya tidak tahu apakah input / output ini ok, jadi beri tahu saya jika tidak.
Penjelasan
Cara kerjanya adalah ia mengubah semua bilangan bulat ke bentuk angka Suzhou masing-masing, tetapi hanya jika variabel
b
benar.b
terbalik setiap kali kita bertemu integer yang satu, dua, atau tiga, dan disetel ke true sebaliknya. Jikab
salah, kami mengubah bilangan bulat ke salah satu angka vertikal.sumber
R , 104 byte
Cobalah online!
Pendekatan alternatif dalam R. Menggunakan beberapa fitur Regex gaya Perl (
T
param terakhir dalam fungsi substitusi adalah singkatan dari)perl=TRUE
).Pertama, kami menerjemahkan angka ke karakter alfabet
a-j
, kemudian menggunakan substitusi Regex untuk mengonversi kejadian duplikatbcd
(sebelumnya123
) menjadi huruf besar, dan akhirnya menerjemahkan karakter ke angka Suzhou dengan berbagai penanganan huruf kecil dan huruf besar.Penghargaan untuk J.Apakah untuk persiapan kasus uji, karena ini diambil dari jawabannya .
sumber
C #, 153 byte
Cobalah online!
sumber