Pemenang: Chilemagic , 21 byte besar!
Anda dapat terus mengirimkan jawaban Anda, namun Anda tidak bisa lagi menang. Pos asli disimpan:
Tujuan Anda adalah menemukan semua angka dalam string, dan mengalikan masing-masing secara individual dengan input nilai oleh pengguna
- Anda tidak perlu khawatir tentang desimal
- Pengguna akan memasukkan angka dan string
- Pengguna harus mengetikkan angka dan string di beberapa titik, namun metode yang dibaca program itu tidak masalah. Bisa dengan stdin, membaca file teks, dll, namun pengguna harus menekan tombol 9 pada keyboard mereka (misalnya) di beberapa titik
- Apa pun yang dapat dikompilasi dan dijalankan dapat diterima
Contoh:
Input kalimat: 1 ini adalah22a 3352sensi 50
Input angka: 3
Output: 3 is66a 10056sentence 150 ini
- Kontes ini berakhir pada 6 September 2014 (7 hari sejak posting).
- Ini adalah kode-golf , sehingga kode terpendek menang
Jawaban:
Perbarui - Perl - 17
15 karakter + 2 untuk
-i
dan-p
bendera.Kita dapat menggunakan
-i
flag untuk memasukkan ekstensi file, tetapi karena kita tidak membaca file apa pun, kita dapat menggunakannya untuk mendapatkan nomor dan variabel$^I
akan ditugaskan padanya.Jalankan dengan:
Perl - 21
Diperbarui sesuai komentar @ Dennis.
Jalankan dengan
-p
bendera.Contoh dijalankan:
Penjelasan:
$n=<>;
baca di nomor tersebut-p
mencetak hasilnyas/\d+/$&*$n/ge
Baca input dengan <> dan cari satu digit atau lebih dan gantikan dengan digit dikalikan angka.g
bersifat global,e
adalaheval
ramuan ganti s ///.$&
berisi apa yang cocok dan dikalikan dengan angka$n
,.Anda dapat membaca lebih lanjut tentang
s///
di perlop dan lebih lanjut tentang Perl regexes di perlre .Solusi lain:
@ F. Hauri menunjukkan Anda juga dapat menggunakan
s
saklar untuk menetapkan$n
variabel ke 4. Saya tidak yakin berapa banyak karakter yang dihitung tetapi saya akan meninggalkannya di sini:sumber
<>=~
alih-alih_$=<>;
. Bisakah Anda jelaskan apa artis
bagian dari regex, bagi kami pemula?$&
alih-alih$1
, Anda dapat menyingkat(\d)
menjadi\d
. 2. Jika Anda menggunakan-p
sakelar dan mengubah urutan input, Anda dapat menjatuhkansay<>=~
danr
.-s
switch, untuk whipe$n=<>
out:perl -spe 's/\d+/$&*$n/ge' -- -n=4 <<<'This 1 is22a 3352sentence 50'
(jangan membuat:This 4 is88a 13408sentence 200
)JavaScript (ES6) -
4844 karakterTerima kasih kepada @bebe karena telah menyimpan satu karakter. Pembaruan: 8 / Mar / 16, menghapus empat karakter lainnya
Tidak Disatukan :
43 karakter:
Membutuhkan input angka terlebih dahulu dan kemudian kalimat. Potong satu char lagi di sini, terima kasih @bebe lagi!
sumber
(p=prompt)(p(b=p()).replace(/\d+/g,y=>y*b))
satu lagi (tapi ini meminta pengganda dulu)Python 2 (79)
Contoh dijalankan
Memasukkan: Keluaran:Demo online: http://ideone.com/V6jpyQ
sumber
re.sub
metode Beta Decay dan saya (dua pengiriman Python lainnya) sedang mencoba untuk mengimplementasikan kembali. Itu akan sangat mudah ... Hal lain yang telah saya pelajari! ;)re.sub
samping, Anda telah melakukan pekerjaan yang sangat baik di golf logika ganti stringre.sub
itulah yang saya inginkan!Python 2 - 126
Input pertama: integer
n
.Input kedua: string
s
(dengan tanda kutip, misalnya"abc42"
).sumber
CJam,
473330 byteMembaca angka dan string (dalam urutan itu dan dipisahkan oleh satu spasi) dari STDIN.
Cobalah online.
Contoh dijalankan
Bagaimana itu bekerja
sumber
Bash + coreutils, 38 byte
Membaca string input dari STDIN dan pengganda sebagai parameter baris perintah.
Keluaran:
sumber
1 D4R3 Y0U: ; rm -rf /
C # di LINQPad, 124
Mudah. Silakan gunakan CTRL + 2 di LINQPad (Bahasa: Pernyataan C #).
Jika pengali diberikan sebagai parameter input pertama, itu dapat dilakukan dalam 116 karakter:
EDIT:
Berkat komentar Abbas di bawah ini, ini bahkan dapat dipasangkan lebih banyak dengan menggunakan metode statis Regex , daripada membuat contoh:
sumber
var k=int.Parse(Console.ReadLine());Regex.Replace(Console.ReadLine(),"\\d+",t=>""+int.Parse(t.Value)*k).Dump();
. Dalam kedua versi ini menyimpan 5 karakter lain, membuat Anda mendapatkan 119 untuk versi panjang dan 111 untuk versi pengali-pertamaCobra - 171
sumber
Python 3 - 141
Saya tidak berpikir saya bisa bermain golf ini lagi ...
Contoh:
sumber
n=2
dans="1 2"
hasilnya4 4
, karenareplace
memodifikasi angka pertama dua kali. Itu masalah yang sama yang saya hadapi sekarang dengan Python 2 ...;)m=input()
menyelamatkan Anda. Danx=int
sebenarnya 2 byte lebih lama dari memanggilint(...)
dua kali.Mathematica
7161Dengan 10 karakter tersimpan, terima kasih kepada Martin Buttner.
Spasi dalam kode adalah untuk keterbacaan.
f
adalah fungsi di manas
adalah string input dann
nomor untuk mengalikan angka string yang ditemukan oleh.Contohnya
Bilangan bulat
Bilangan rasional
Bilangan kompleks
sumber
StringReplace
tidak ada bedanya apakah ada spasi. Saya menggunakan contoh-contoh yang awalnya diberikan oleh Chiperyman.StringReplace
itu tidak ada bedanya apakah ada spasi.Ruby 40
Masukan dari stdin.
Contoh dijalankan:
Demo online: http://ideone.com/4BiHC8
sumber
Lua:
7369 karakterContoh dijalankan:
sumber
JavaScript, ES6, 43 karakter
Ini adalah usaha pertama saya bermain golf!
Jalankan ini di Konsol Firefox terbaru. Input pertama adalah angka dan input kedua adalah string dari mana angka-angka harus dikalikan dengan nomor input pertama.
Prompt terakhir berisi daftar output.
sumber
Perl - 48 karakter
Baca angka di baris pertama, lalu baca sebuah kalimat dan pisahkan menjadi beberapa bagian baik digit maupun non-digit. Cetak non-digit apa adanya, dan angkanya dikalikan.
sumber
J - 63 char
Program membaca angka, dan kemudian kalimat.
Dijelaskan oleh ledakan:
Jika kita bisa menggunakan pustaka PCRE J dan membuat kalimat menjadi yang utama, kita bisa merobohkannya menjadi 54 karakter :
Dijelaskan oleh ledakan:
J buruk dalam hal ini, apa yang bisa saya katakan. Ini merepotkan karena J sangat tidak imperatif.
Beberapa contoh:
sumber
CJam - 35
Cobalah di http://cjam.aditsu.net/
Input sampel:
Output sampel:
Penjelasan:
Program melewati setiap karakter, mengumpulkan digit pada tumpukan, dan untuk setiap non-digit pertama-tama mencetak angka yang dikumpulkan (jika ada) dikalikan dengan input numerik, kemudian mencetak karakter.
li:X;
membaca input numerik dan menyimpannya dalam XlN+
membaca string dan menambahkan baris baru (ini membantu dengan membuntuti angka){…}/
untuk setiap karakter dalam string-
_s
menyalin karakter dan mengubahnya menjadi string-
A,s-,
menghapus semua digit dan menghitung karakter yang tersisa; hasilnya akan 0 jika karakter adalah digit atau 1 jika tidak-
{…}*
mengeksekusi blok jika hitung adalah 1 (yaitu non-digit); untuk digit itu tidak melakukan apa-apa, jadi mereka tetap berada di stack-
]
mengumpulkan karakter dari stack ke dalam array (yaitu string); karakter adalah setiap digit dari iterasi sebelumnya, ditambah karakter saat ini-
)\
memisahkan item terakhir (karakter saat ini) dan memindahkannya sebelum string (tersisa)-
_!!
menyalin string dan mengubahnya menjadi nilai boolean - 0 jika kosong, 1 jika tidak-
{…}*
mengeksekusi blok jika string tidak kosong, yaitu kami memiliki beberapa digit sebelum karakter non-digit saat ini---
iX*
mengonversi string untuk integer dan dikalikan dengan X-
o
mencetak bagian atas tumpukan - baik angka yang dikalikan atau string kosong jika kita tidak memiliki nomor-
o
(yang ke-2) mencetak bagian atas tumpukan yang baru - yang saat ini tidak karakter digitsumber
Haskell (161)
Golf
Tidak disatukan
Sayangnya, Haskell tidak memiliki perpustakaan Regex di Prelude -nya .
sumber
{}
untuk mendapatkan 1 karakter. juga, saya baru saja memposting solusi Haskell ini dengan 70 byte: codegolf.stackexchange.com/questions/37110/…flex (-lexer) (
9489 karakter)Versi tidak dikelompokkan yang tidak segfault jika Anda lupa argumen baris perintah (tidak lebih lama):
Kompilasi dengan:
atau:
Misalnya:
sumber
Groovy
- 124Klik pada judul untuk melihat contoh runnable
Contoh Mencoba:
sumber
GNU Awk: 86 karakter
Contoh dijalankan:
sumber
PHP -
75/11568/109Dua versi, versi php yang lebih baru dapat melakukan ini:
Versi php yang lebih lama: Saya tidak menghitung baris baru, menambahkannya agar mudah dibaca.
Contoh input + output
Agak sulit, kata-kata 'fungsi' dan 'preg_replace_callback' membutuhkan banyak karakter.
Ruang setelah
global
dan tidakreturn
diperlukan jika diikuti oleh $ var (-2 chars)sumber
\d
kelas karakter (-2 karakter); tidak perlu melampirkan fungsi dalam tanda kutip ganda (-2 karakter); Anda harus menghentikan pernyataan di dalam fungsi dengan semicolon (+1 char) dengan benar. By the way,\d
dalam string dikutip ganda harus ditulis\\d
, jadi lebih baik mengubah tanda kutip menjadi tanda kutip tunggal.0-9
ke \ d. Tidak yakin tentang tanda kutip di sekitar fungsi, saya tidak bisa menguji yang satu, versi php lokal saya tidak mengizinkannya.C (
142134 karakter)Baris baru dimasukkan untuk meningkatkan keterbacaan. Lewati faktor sebagai yang pertama, string sebagai opsi baris perintah kedua. Implementasi ini memerlukan
dprintf
fungsi yang merupakan bagian dari POSIX.1 2008 dan mungkin tidak tersedia di Windows. Berikut adalah sumber yang tidak dijinakkan:Perbaikan
strspn
danstrcspn
bukannya melompati string.sumber
Python 89
misalnya:
sumber
Rebol - 117
Tidak Disatukan:
sumber
Clojure -
141140128 karakterSaya seorang pemula Clojure, tetapi FWIW:
Contoh dijalankan:
Tidak disatukan (jelek tapi mudah-mudahan agak lebih mudah dibaca):
sumber
Python - 142
sumber
Jawa 218
Seseorang harus melakukan java. String input adalah 2 token pada baris perintah.
java M '1 ini adalah22a 3352sensi 50' 3
sumber
if
kondisinya bekerja dengan bitwise|
juga, yaitu 1 karakter lebih pendek.Dua jawaban: perl + bash
Bash murni (~ 262)
Pertama, ada versi bash murni yang tidak terlalu pendek (tanpa garpu, tidak ada binari eksternal)!
Mari kita tunjukkan:
(Yang merupakan kalimat yang benar-benar mustahil)
Perl sedikit dikaburkan (hanya untuk bersenang-senang)
Versi ini (berdasarkan jawaban @ Chilemagic ) tidak lebih pendek, tetapi dirancang sebagai skrip totem :
Contoh dijalankan:
sumber
Haskell, 70
Sayang sekali aku terlambat IMHO ini cukup bagus untuk pertanyaan dan bahasa khusus ini. solusi Haskell lainnya di sini adalah 161 karakter ..
ini bekerja dengan menggunakan
reads
fungsi yang mem-parsing string secara parsial. misalnyareads "34abc" = [(34, "abc")]
,. ini jelas membuatnya sempurna untuk tantangan ini.pemakaian:
sumber