Diberikan string yang berisi angka desimal:
teststring134this 123test string54 100
tambahkan setiap angka dalam string ini dengan satu untuk memberikan string baru
teststring135this 124test string55 101
.
String dapat diberikan sebagai:
- argumen baris perintah
- STDIN
- variabel variabel atau argumen fungsi
Tutupi semua posisi yang memungkinkan untuk suatu nomor:
- sebagai awalan untuk sebuah kata;
123test
►124test
- sebagai akhiran untuk sebuah kata;
test123
►test124
- di dalam sebuah kata;
te123st
►te124st
- sendirian
test 123 test
►test 124 test
Berikut solusi non-golf dengan Python:
NUMBERS = '0123456789'
def increment(s):
out = ''
number = ''
for c in s:
if c in NUMBERS:
number += c
else:
if number != '':
out += str(int(number) + 1)
number = ''
out += c
if number != '':
out += str(int(number) + 1)
number = ''
return out
print "\"%s\"" % (increment('teststring134this 123test string54 100'))
Ini code-golf
pertanyaan, kode terpendek menang.
Jawaban:
Perl, 14 byte
Membutuhkan
-p
saklar, yang saya hitung sebagai satu byte.Contoh dijalankan
sumber
Ruby,
3024 byteDiharapkan input untuk disimpan
s
.sumber
$1.next
dapat digunakan di blok?next
apakah itu canggih.Vim - 13 penekanan tombol
Mengharapkan input menjadi baris saat ini.
Atau untuk banyak angka (misalnya 999) dalam penekanan tombol 8 + ceil (log (n)):
sumber
JavaScript (ES6) - 28
Jalankan dengan menggunakan
H("test 123 234t")
.sumber
H=
dan hanya memiliki fungsi anonim.Perl, 23
Mengasumsikan string input ditugaskan untuk
$_
sumber
Python 2 - 59
Masukkan string sebagai variabel
n
sumber
C99 - 86 (GCC 4.9.0 dan Visual C ++ 2013)
Sunting: Baik GCC 4.9.0 (dengan -std = c99) dan Visual C ++ 2013 berhasil membangun (dengan peringatan) kode yang sama tanpa menyertakan. Saya tidak tahu Anda bisa melakukan itu! Terima kasih atas petunjuknya.
Sunting: Tidak terpikir oleh saya bahwa saya harus menulisnya ke layar dengan cepat alih-alih membuat string dan kemudian mencetaknya. Itu membuat perbedaan besar. Dennis terima kasih!
Ini menggunakan string kode keras tetapi isi string tidak dihitung terhadap total (the = "" dihitung).
Pada dasarnya itu berjalan melalui string satu karakter pada suatu waktu memeriksa masing-masing untuk melihat apakah itu bilangan bulat Jika ya maka akan menambah bilangan bulat dan menulisnya ke output jika tidak maka menyalin karakter saat ini ke output.
Ini membocorkan string hardcoded karena peningkatan s.
sumber
include
dan masih dapat dikompilasi dengan gcc.99
?J (20)
Mengharapkan input disimpan dalam variabel
a
.Uji:
sumber
(f?) lex (39)
File
inc.l
:Menyusun:
Lari:
Saya tidak menguji ini dengan yang asli
lex
. Komentar diterima.sumber
%%
karena ini bukan kode pengguna: flex.sourceforge.net/manual/…Emacs - 20 karakter
Membutuhkan teks untuk diproses agar ada di buffer saat ini. Saya menghitung CM-% sebagai satu karakter di sini karena dapat dimasukkan dengan satu keystroke ketika menahan tiga pengubah.
sumber
GNU sed, 304 (termasuk 1 untuk -r flag)
Saya menutup pertanyaan ini sebagai duplikat yang mungkin, tetapi ini mungkin bertentangan dengan itu karena jawaban ini tidak dapat diubah sepele untuk bekerja di sana. Sejauh ini jawaban terpanjang.
Terinspirasi oleh contoh ini dari sed dokumentasi , meskipun perlu beberapa pekerjaan untuk menangani beberapa angka dalam sebuah string:
Keluaran:
Perhatikan ini menyisipkan
_
karakter sementara , sehingga dapat menyebabkan hasil yang salah jika ada_
dalam aliran input. Sebagai mitigasi untuk ini, kita dapat mengganti_
skrip sed dengan beberapa karakter yang tidak dapat dicetak (mis. ASCII 0x07 BEL), dan menganggap aliran input hanya berisi ASCII yang dapat dicetak. Ini sepertinya berfungsi dengan baik ketika saya mengujinya.sumber
Racket 74
sumber
Lua - 68 karakter
Mengharapkan input untuk disimpan dalam s.
sumber
CJam,
67 58 534831 karakterPertanyaan ini seperti pertanyaan terburuk untuk CJam. Tanpa regex, tidak ada pencocokan pola, tidak terkecuali penangkapan. Tapi ini dia (#YOLO)
Ini membagi string dalam kelompok hanya huruf dan hanya angka. Peningkatan setiap digit dan menjahit kembali dua array dengan mengambil satu elemen dari masing-masing sekaligus.
Solusi sebelumnya:
Cobalah online di sini
Bagaimana itu bekerja:
Ide dasarnya adalah untuk tetap menyimpan karakter secara terpisah dalam string jika itu adalah angka dan membuang nilai yang ditambahkan ke string terakhir setelah kita mendapatkan karakter yang bukan digit.
sumber
Cobra - 88
sumber
C # -
178169157 karakterIni mengasumsikan bahwa angka-angka seperti 999 diizinkan untuk melimpah ke 000 dan bahwa - +, E bukan bagian dari angka.
Formulir lebih mudah dibaca:
Saya baru di sini, tidak pernah mencoba kode golf sebelumnya, hanya mencobanya :)
Saya ingin tahu apakah ada yang punya ide untuk membuatnya lebih pendek ...
Untuk berpartisipasi dengan C # alangkah baiknya jika kita bisa menghilangkan semua kerangka kerja yang diperlukan di sekitar kode aktual - maka ini hanya akan memiliki 82 karakter, dan tanpa memanggil fungsi sistem yang kuat.
Sama dengan pointer (182 karakter):
Sekarang tanpa meluap, ini dengan benar menangani kasus 999 (223 karakter):
Satu lagi yang berbeda, itu dibaca dari input standar dan menggunakan rekursi:
catatan:
Console.ReadKey();
dan string itu sendiri tidak harus dihitung.Saya memperbaiki ini sudah beberapa kali, lihat komentar. Masih ada ruang untuk perbaikan lebih lanjut, saya akan mengatakan :) Dan maaf untuk panjangnya, tapi saya pikir versi yang berbeda cukup menarik untuk menjaga mereka ...
sumber
if(c==57)
Anda setelah Anda bisa menulis,c--;
bukanc=48;
, bagaimana dengan operator ternary juga. ada banyak trik golf. mungkin Anda harus mengunjungi codegolf.stackexchange.com/questions/2203/tips-for-golfing-in-c... ? ... : c++*b--
Groovy, 38 byte
Uggghhh ... Aku benar-benar benci kata-kata itu
replace
danall
, mereka merusak semua golf regex untukku.sumber
(it as int)+1
→it.next()
PHP - 91 Bytes
Saya tidak ingin menggunakan ekspresi reguler. PHP tidak mampu secara langsung menambah string offset, jadi, saya perlu menambahkan beberapa byte pada langkah kenaikan. Skrip satu baris ini mengingatkan saya pada usia yang sangat gelap dari skrip PHP ...
sumber
K, 56
sumber
sed dan bash - 40 (termasuk doa dan pipa)
Output:
sumber
42;rm -rf /
Ini bekerja pertama kali.\0
ke&
(-1 char),$((…))
ke$[…]
(-2 chars),s/^/echo /
keiecho \\
(-2 chars) untuk mempersingkat kode Anda saat ini . Namun lebih baik perbaiki bug yang disebutkan oleh @Dennis terlebih dahulu. (Dia menulis “Ini bekerja pertama kalinya” untuk bersenang-senang dan sebagai petunjuk tentang masalah Sebenarnya kode Anda gagal pada input yang mengandung.;
,#
,`…`
,$(…)
Dan karakter khusus mungkin lain juga.)eval echo `sed 's/[0-9]\+/$[&+1]/g'`
- masih memiliki masalah kode injeksi, sesuai jawaban saya untuk pertanyaan serupa lainnya codegolf.stackexchange.com/a/37145/11259Java 7, 119 byte
Jika persyaratannya adalah program, bukan hanya fungsi, maka itu 149 byte:
Tidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
Gema, 14 karakter
Contoh dijalankan:
sumber
DASH , 16 byte (tidak bersaing)
Ini mengembalikan fungsi / aplikasi parsial.
Pemakaian:
Penjelasan
sumber
CJam, 18 byte
Coba di sini.
Penjelasan
sumber
R, 83 byte
Terlambat ke pesta. Mengasumsikan input disimpan dalam variabel
x
. Mungkin tidak perlu digunakanregmatches
untuk menyelesaikan ini, tetapi saya tidak bisa menemukan penggantian vektor tanpa paket eksternal.Tidak diikat dan dijelaskan
Contoh output
sumber
C # (Visual C # Interactive Compiler) dengan opsi baris perintah
/u:System.Text.RegularExpressions.Regex;System.Int32
, 40 byteMengharapkan input berada dalam variabel bernama n.
Cobalah online!
sumber