Mengingat string 1
dan 2
dari setiap panjang, menulis beberapa kode (tidak harus menjadi fungsi lagi, semuanya akan baik-baik saja) yang menghitung berapa banyak langkah apakah itu perlu untuk mengecilkan string ke bentuk akhir, berikut kriteria ini:
Jika string Anda adalah 112112
, ini berarti bahwa Anda harus mencetak 1, dua 1s dan 2, seperti ini:
1112
. Ketika Anda akan melakukan operasi lagi Anda harus mencetak 1 dan 2. Anda dapatkan 12
. Kemudian Anda mencetak satu 2, dapatkan 2
. Ini adalah bentuk final, karena string ini tidak akan berubah lagi. Kode Anda akan ditampilkan 3
, karena Anda memerlukan 3 langkah untuk sampai ke bentuk akhir.
Peraturan Lainnya
Jika string memiliki panjang yang tidak rata, angka terakhir tetap tidak tersentuh.
Setiap string yang tidak dapat diubah lagi (seperti
222222
) dianggap sebagai bentuk akhir.Anda tidak dapat menggunakan sumber eksternal apa pun.
Kode Anda harus bekerja dengan setiap string dari
1
dan2
.Kode terpendek menang, karena kode-golf.
Kode Anda harus mencetak setiap langkah.
Setiap metode input akan baik-baik saja.
Contohnya
Input >> 122122122121212212
Your code has to print:
211222111111222
11222111222
122111222
2111222
111222
1222
222
Steps:7 (you can omit the "Steps")
---- ---- ---- ----
Input >> 22222221
Your code has to print:
22222211
2222221
2
---- ---- ---- ----
Input >> 2222
Your code has to print:
0
EDIT: Sangat diedit. Maaf soal itu.
1 11 2
. Setiap dua angka adalah pasangan: angka pertama dari pasangan mengatakan berapa kali untuk membuat angka kedua dalam pasangan. Digit ganjil akhir tanpa pasangan pasangan diberikan apa adanya.Jawaban:
Ruby 1.9+, 73 karakter
Saya melihat aturan no-regex sebagai konyol dan sewenang-wenang, jadi inilahsolusi berbasis regexdengki:Uji coba:
Baris terakhir adalah jumlah langkah.
Sunting: Pembatasan regex telah dihapus oleh Vereos.
sumber
C -
156154Golf kode pertamaku di sini!
Uji:
Keluaran:
sumber
GolfScript: 69 karakter
Setiap iterasi dari loop dalam menemukan 2 angka pertama dalam string, dan menggunakannya untuk membentuk blok formulir
{num1 num2 '' + *}
. Ketika blok ini dievaluasi, kita mendapatkan bacaan yang diinginkan dari angka-angka itu. Ulangi ini sampai tidak ada karakter lagi. Kemudian, ulangi loop itu sambil melacak jumlah iterasi dan pencetakan.Sampel:
sumber
Python - 126
Ini tidak mencetak nilai input. Jika perlu, maka pindah
print s;
ke kanan sebelumnyan="";
Catatan: Anda mengatakan "fungsi", jadi ini adalah fungsi. Ini adalah versi yang bukan fungsi (127 karakter):
(Jika saya dapat meminta pengguna menempelkan angka di kemudian 118 (tempel data di antara tanda kutip di baris pertama)):
Contoh dijalankan:
Sebagai bonus, masing-masing solusi ini berfungsi untuk string yang berisi angka lebih besar (hingga 9), tetapi beberapa string menghasilkan output yang lebih besar dan lebih besar (misalnya,
99
)sumber
JavaScript, 107
(memerlukan dukungan fungsi panah, misalnya di Firefox)
s
adalah string inputSetiap putaran, kami menggunakan regex
.?.?
untuk meledaks
menjadi array string dua karakter, kemudianmap
string tersebut ke bentuk tereduksi dan merekatkan array kembali bersama-samar
menyimpan hasil putaran saat ini untuk perbandingan dengan yang sebelumnyas
k
adalah konter bulatKami sangat menyalahgunakan
prompt
(aliasp
) sebagai mekanisme input dan output, karena dapat menyajikan pesan kepada penggunasumber
Perl - 50 (+2) byte
Membutuhkan
-pl
sakelar baris perintah.Penggunaan sampel:
sumber
PHP, 240
Contoh: http://skyleo.de/codegolf.php?i=211222111111222
Saya agak buruk di codegolf ._. Mungkin saya seharusnya tidak hanya menggunakan Java dan PHP (dan saya harus berpikir lebih rumit)
sumber
str_split
karena Anda dapat mengakses karakter individu dalam sebuah string seperti halnya array di PHP.R, 158
Contoh:
sumber
MATHEMATICA, 117
sumber
POWERSHELL, 2
Berdasarkan tanggapan Vereos, "Anda dapat menggunakan metode input apa pun yang lebih pendek kode Anda" untuk pertanyaan saya di komentar OP, skrip berikut mencapai hasil:
Contoh jalankan untuk "122122122121212212":
Jelas ini bukan entri serius - tujuannya adalah untuk mengilustrasikan poin saya bahwa mengizinkan metode input apa pun dapat meremehkan kode aktual yang diperlukan untuk menghasilkan jawaban. Oleh karena itu metode input perlu ditentukan dengan lebih teliti.
sumber
J, 41 karakter
Sebagai fungsi (ew paren! Tidak terlalu senang tentang mereka):
Tampilan meledak Contoh dijalankansumber
Perl, 107 karakter
Kode perl lainnya jelas mengalahkan ini, tetapi untuk apa nilainya, ini dia. Saya menggunakan -l switch dengan mengorbankan karakter tambahan:
Versi yang lebih mudah dibaca:
sumber