Konsep
Mengingat angka bisa sulit. Mengingat kata mungkin lebih mudah. Untuk menghafal angka besar, saya menciptakan cara untuk mengucapkannya dengan cara seperti leetspeak.
Aturan
Setiap digit pertama diganti dengan huruf yang sesuai:
0 => O
1 => I
2 => R
3 => E
4 => A
5 => S
6 => G
7 => T
8 => B
9 => P
Setelah penggantian, dua hal tambahan dilakukan untuk meningkatkan pengucapan:
Di antara dua konsonan, a
U
ditambahkan.Di antara dua vokal, a
N
ditambahkan.
Contoh / uji kasus
512431 => SIRANENI
834677081 => BENAGUTUTOBI
3141592 => ENINANISUPUR
1234567890 => IRENASUGUTUBUPO
6164817 => GIGABIT
Apa yang tidak mungkin
- Huruf dan angka dicampur dalam kata yang sama
- Dua konsonan berturut-turut atau dua vokal berturut-turut
- Surat yang tidak ada dalam daftar di atas
- Karakter lainnya
Aturan
Tujuan golf kode ini adalah untuk menciptakan penerjemah 2 arah untuk konsep ini.
- Program Anda pertama-tama harus mengerti dengan sendirinya jika itu terjemahan dari huruf ke angka atau angka ke huruf.
- Itu harus memeriksa entri yang akan dibentuk dengan benar.
- Jika semuanya benar, tampilkan terjemahannya.
- Lain, tampilkan pesan kesalahan, tidak ada, mengembalikan nilai falsey atau crash program
Detail
- Nomor input / string dapat dimasukkan dalam format apa pun yang Anda inginkan (stdin, argumen, ...)
- Ini kode-golf , jadi jawaban tersingkat menang.
- Celah standar dilarang.
GIGATESTER
seharusnyaGIGATESUTER
?AB23
;AEI
;BB
;Z
;ACE
;giga
;!@#$
;-123
; dll. Juga, berdasarkan aturan validasi, kita dapat mengkonversi6164735732 => GIGATESTER
, tetapiGIGATESTER
akan menghasilkan nilai yang salah, karenaST
(dua aturan konsonan berturut-turut). Cara tantangan Anda saat ini disiapkan, bagian utama dari tantangan adalah validasi, alih-alih konversi. Saya setuju dengan itu, tetapi validasi harus didefinisikan sedikit lebih baik dalam kasus itu.Jawaban:
JavaScript (ES6), 130 byte
Mengambil input sebagai string dalam kedua cara terjemahan. Mengembalikan terjemahan sebagai string atau
false
dalam kasus input yang tidak valid.Demo
Tampilkan cuplikan kode
sumber
Japt ,
6159928584 byteMengambil input sebagai string untuk kedua operasi dan mengembalikan string baik untuk maupun
false
untuk input yang tidak valid. Asumsikan jumlah input akan selalu mengandung banyak digit, tambahkan 1 byte menggantikanUÉ
denganUn<space>
jika itu tidak valid. Pengembalianfalse
untuk kasus ujiGIGATESTER
tetapi, menurut aturan, itu harus menjadi input yang tidak valid.Cobalah: Bilangan -> Surat atau Surat -> Angka
24 byte disimpan, terima kasih obarakon , yang juga meyakinkan saya untuk mengambil ini lagi setelah saya meninggalkannya sebelumnya. Saya berharap dia tidak melakukannya!332625 (!) Byte dikorbankan menerapkan perbaikan cepat (yaitu, belum sepenuhnya golf) untuk memeriksa validitas input.Penjelasan
(Belum diperbarui ke versi terbaru)
sumber
AEI
Python 3 , 147 byte
Cobalah online!
sumber
Java (OpenJDK 8) ,
416410399382376370 byte-2 byte terima kasih kepada @Cyoce
-17 byte lebih banyak berkat sebuah ide oleh @Cyoce
-6 byte terima kasih kepada @KevinCruijssen
Cobalah online!
Ugh, penggantian java sangat verbose.
Fungsi yang mengambil string dan mengembalikan string yang diterjemahkan dari angka -> huruf atau sebaliknya. Gangguan pada input yang tidak valid (Anda dapat melihat ini dalam contoh tio di mana output nilai yang benar untuk 10 kasus uji pertama dan kemudian crash dengan kesalahan dibagi dengan nol yang ditampilkan dalam tampilan debug)
Tidak digabungkan (istilah pertama dan terakhir dari for loop ditarik agar mudah dibaca)
Regex untuk mencocokkan angka-angka itu sederhana, tetapi di sini adalah regex untuk mencocokkan huruf dengan angka case
sumber
(s)->
if
pernyataan Anda adalah penugasan (yang mengembalikan nilai), coba gantiif
...else if
...else
dengan operator kondisional?:
, awali denganObject _=
membuatnya menjadi pernyataan yang valid. Tidak yakin apakah ini benar-benar akan membantu jumlah byte, tapi saya pikir itu akan membantu.t
, karena Anda hanya menggunakannya sekali. Jadit.charAt(i)+""
menjadi"OIREASGTBP".charAt(i)+""
( -4 byte ). Dan Anda dapat menempatkan baris terakhir di dalam for-loop setelah dii<9;
dalam deklarasi for-loop. Jadi itu menjadifor(;i<9;s=b?s.replace(v,c):s.replace(c,v)){
( -1 byte ). Oh, dan Anda bisa meletakkans=b?...
yang datang tepat setelah bagianint i=-1;
dalam for-loop juga:for(s=b?...;i<9;...
( -1 byte ).PHP;
129 127 267 259228 bytesJalankan sebagai pipa dengan
-nR
atau coba online .kerusakan
sumber
Java 8,
312308304301294290 byte-4 byte (308 → 304) untuk perbaikan bug (tidak sering terjadi bahwa byte-count berkurang ketika saya memperbaiki bug dalam kode saya ..: D)
EDIT: Menggunakan pendekatan yang berbeda dari jawaban Java @ PunPun1000 dengan terlebih dahulu membuat String-kembali dalam for-loop di atas karakter, dan kemudian menggunakan regex yang lebih abstrak untuk memvalidasi di kembali-ternary (input adalah semua digit, atau apakah vokal dan konsonan yang diberikan berselang-seling (tanpa vokal atau konsonan yang berdekatan).
Penjelasan:
Coba di sini.
Regex validasi:
sumber
05AB1E , 76 byte
Cobalah online!
Mengembalikan nilai falsy
0
untuk input yang tidak valid.sumber
Pesta ,
241 238235 byteCobalah online!
Kurang golf:
sumber
PHP, 268 Bytes
Cobalah online!
sumber
Perl, 127 byte
126 byte + 1 byte baris perintah
Pemakaian:
Harus mengikuti semua aturan tantangan - dapat menerima huruf atau angka dan akan kesalahan (pembagian dengan nol) jika validasi gagal
sumber
NO
danUS
.Rubi , 205 + 1 = 206 byte
Menggunakan
-p
bendera untuk +1 byte. Sekarang dengan sistem validasi input lengkap.Cobalah online!
sumber
Python 3, 741 byte
Cobalah online!
Ada banyak ruang untuk perbaikan, saya tahu.
sumber
sed, 123 byte
Penjelasan
Pertama, kita mengelilingi angka dengan
_
(untuk vokal) atau=
(untuk konsonan).Jika kami tidak melakukan penggantian, kami mengonversi huruf menjadi angka, jadi itu adalah penggantian sederhana, dan hapus
U
danN
. Lalu berhenti.Kalau tidak, kita bercabang untuk memberi label
a
, tempat kita berurusan dengan vokal berturut-turut dan kemudian konsonan berturut-turut. Kemudian, ubah digit menjadi huruf, dan hapus karakter marker yang kami perkenalkan pada langkah pertama.sumber
Python3, 246 byte
penjelasan:
dicttuple, ditambah elemen saat inidicttuple adalah tabel kebenaran berdasarkan dua unsur, menjadi vokal atau tidaksumber
JavaScript (ES6), 120
Fungsi mengambil input sebagai string. Ini mengembalikan string yang diterjemahkan dengan benar jika inputnya valid, kalau tidak palsu atau fungsi crash.
Kurang golf
Uji
sumber