Ubah string yang berisi digit sebagai kata menjadi bilangan bulat, dengan mengabaikan nol di depan.
Contohnya
"four two"
->42
."zero zero zero one"
->1
.
Asumsi
Pengajuan dapat mengasumsikan bahwa:
- String input terdiri dari kata-kata digit yang dipisahkan oleh spasi.
- Semua kata valid (dalam kisaran "nol" .. "sembilan") dan huruf kecil. Perilaku untuk input kosong tidak ditentukan.
- String input selalu merupakan angka yang tidak ditandai dalam kisaran
int
dan tidak pernah menjadi string kosong.
Mencetak gol
Jawaban akan dinilai dalam byte dengan lebih sedikit byte menjadi lebih baik.
code-golf
string
number
conversion
Sparkler
sumber
sumber
range "zero".."nine"
itu tidak sepenuhnya ditentukan.Interpreter@"SemanticNumber"
melakukan hal ini dalam Mathematica — kecuali bahwa ia gagal pada string yang dimulai denganzero zero
.Jawaban:
PHP , 74 byte
Cobalah online!
Mencoba mendapatkan solusi yang tidak menyalin jawaban yang ada. Saya mendapatkan polinomial redundansi checksum siklik dengan panjang 32-bit ( crc32 ) untuk setiap kata dan kemudian melakukan mod 20 dan mod 11 di atasnya untuk mendapatkan nilai-nilai unik dari 0 hingga 10 (hilang 6) untuk setiap digit. Kemudian menggunakan nilai unik itu saya menemukan digit yang sebenarnya.
Alternatif 74 bytes CRC32 lainnya menggunakan
%493%10
: Coba online!Alternatif 74 bytes CRC32 lainnya menggunakan
%2326%11
: Coba online!PHP , 74 byte
Cobalah online!
Alternatif lain dengan panjang yang sama, mengambil karakter ke-22 di
md5
kata (hanya karakter yang memberikan nilai unik untuk setiap kata) dan kemudian menggunakan karakter itu untuk memetakan ke digit.sumber
Python 2 ,
7170 byte-1 berkat ovs (digunakan
find
sebagai penggantiindex
)Cobalah online!
sumber
JavaScript (ES6),
70 67 6662 byteDisimpan 3 byte berkat @ovs
Cobalah online!
sumber
'2839016547'[parseInt(s,36)%204%13]
adalah 3 byte lebih pendek.Jelly ,
1917 byteTautan monadik yang menerima daftar karakter yang menghasilkan bilangan bulat.
Cobalah online!
Cukup banyak port jawaban Python 2 saya.
Sebelumnya
Cobalah online!
Ada
sangat mungkincara yang lebih pendek, tapi ini adalah cara yang pertama kali datang ke pikiran.sumber
Python 3 ,
107,91,77, 90 byte-16 byte oleh Sriotchilism O'Zaic
+13 byte untuk menghapus nol terkemuka
Cobalah online!
sumber
lstrip
Metode strip setiap karakter dalam string yang diberikan sebagai argumen itu, sehingga "delapan dua" menjadi "ight dua", sebagai "e" akan dilucuti. Juga, "nol nol nol" harus mencetak "0", tidak memberikan kesalahan.Perl 6 ,
3532 byteCobalah online!
Penjelasan
sumber
C (gcc) , 89 byte
Cobalah online!
Terima kasih untuk trik cerdas @Ceilingcat:
sumber
05AB1E ,
1816 byteCobalah online.
Penjelasan:
Lihat ini 05AB1E ujung tambang (bagian Cara string kompres bukan bagian dari kamus? ) Untuk memahami mengapa
.•ƒ/ÿßÇf•
adalah"rothuvsein"
.sumber
05AB1E ,
1716 byteCobalah online!
Ikat sempurna dengan jawaban 05AB1E lainnya , tetapi menggunakan pendekatan yang sama sekali berbeda.
sumber
Retina 0.8.2 ,
4645 byteCobalah online! Tautan termasuk kasus uji. Penjelasan:
Letakkan setiap kata di barisnya sendiri dan rangkap tiga.
Menerjemahkan karakter ke-7 dari setiap baris menggunakan string @ UnrelatedString.
Hapus semua karakter non-digit yang tersisa.
Hapus angka nol di depan (tapi tinggalkan setidaknya satu digit).
46 byte sebelumnya solusi yang lebih tradisional:
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Kata-kata
zero
,two
,four
,six
daneight
unik berisi hurufzwuxg
. Transliterasikan ke angka genap.Untuk digit aneh, cukup cocokkan dua huruf pertama dari setiap kata secara terpisah.
Hapus semua karakter non-digit yang tersisa.
Hapus angka nol di depan (tapi tinggalkan setidaknya satu digit).
sumber
Jelly ,
201817 byteCobalah online!
-2 byte dari menjalankan "rothuvsein" melalui kompresor string user202729 .
-1 byte dari mencuri string bebas-nol Jonathan Allan, dan meletakkannya dalam program terstruktur yang sedikit berbeda.
sumber
C ++ (gcc) ,
478218142 byte- (banyak) terima kasih kepada Jo King
Cobalah online!
sumber
Japt , 13 byte
Cobalah
Sepertinya semua orang mengalahkan saya dengan ide yang sama - bisa menyelamatkan diri dari kerumitan menulis skrip untuk memaksa paksa string optimal untuk kompresi, hanya untuk menemukan bahwa, hingga indeks
1,000,000
(masih awal, saya belum punya saya kafein!), "rothuvsein" adalah satu - satunya string yang mungkin!String dikompresi berisi karakter di codepoints
206
,168
,117
,118
,160
&136
.sumber
Ruby ,
63 byte,52 byte, 50 byte-2 Berkat tip nilai tinta
sumber
$*
adalah alias untukARGV
, jadi silakan menggunakannya untuk menyimpan byte tambahan.T-SQL, 110 byte
Line break hanya untuk keterbacaan.
Input diambil melalui tabelsaya , sesuai aturan IO kami . Saya bisa menyimpan 14 byte dengan mempopulasikan variabel string, tetapi itu hanya diperbolehkan jika bahasa tidak memiliki metode input lain.
Penjelasan:
STRING_SPLIT
mengambil string input dan memisahkannya di spasiCHARINDEX
mengambil 2 karakter pertama dan mengembalikan posisi (berbasis 1) dalam string'_ontwthfofisiseeini'
.'ze'
untuk nol tidak ada dalam string dan mengembalikan 0 untuk "tidak ditemukan". Garis bawah memastikan kita hanya mendapatkan kelipatan dua.STRING_AGG
menghancurkan digit kembali bersama tanpa pemisah0+
memaksa konversi implisit ke INT dan menjatuhkan semua nol di depan.1*
juga akan bekerja.sumber
kode mesin x86, 46 byte
Hexdump:
Ini adalah
fastcall
fungsi - menerima pointer ke stringecx
, dan mengembalikan hasilnyaeax
.Fungsi hashing dikalikan dengan angka ajaib
1856645926
, apakah aXOR
byte input, dan bergeser ke kanan dengan 2 bit.Menyimpan dan memulihkan register noclobber (
edi
danebx
) memerlukan 4 byte, tetapi saya tidak menemukan cara yang lebih efisien untuk mengimplementasikannya. Menyimpan konstanta 10 inebx
sangat menyebalkan!Disassembly dengan byte kode yang sesuai:
Kode C Setara:
sumber
Bersih , 88 byte
Cobalah online!
Sangat berdasarkan jawaban Jonathan Allan .
Menggunakan pemahaman untuk pengindeksan bukan
indexOf
/elemIndex
.sumber
J , 38 byte
Cobalah online!
sumber
Arang , 19 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Port dari jawaban 05AB1E @ KevinCruijssen. Penjelasan:
sumber
PowerShell , 48 byte
Cobalah online!
Menggunakan
rothuvsein
trik yang sama seperti yang lainnya, terima kasih kepada Jonathan Allan. Mengharapkan argumen input melalui splatting, yang pada TIO bermanifestasi sebagai argumen baris perintah yang terpisah.sumber
Kotlin, 83 byte
+1 byte jika Anda ingin mendukung rindu dengan
toLong()
Trik rothuvsein yang sama seperti yang lain, menghemat beberapa byte berharga berkat kotlin yang bagus
toInt()
danfold()
. Aku hanya tidak bisa menghilangkan perasaan bahwa beberapa byte lagi dapat dicukur ...sumber
sed -re , 78 byte
sumber
Windows Batch, 169 byte
sumber
Perl 6 , 45 byte
Cobalah online!
sumber
VBA, 160 byte
Cocokkan dua karakter pertama dalam sebuah string, nol dikecualikan.
sumber
BaCon ,
8372 byteDengan asumsi string disediakan dalam w $, kode ini mencari indeks di "zeontwthfofisiseeini" menggunakan ekspresi reguler berdasarkan 2 karakter pertama yang unik dari setiap kata. Indeks kemudian dibagi 2 dengan memberikan hasil yang benar.
sumber