Menulis sebuah program yang berjalan melalui string karakter non-spasi (Anda mungkin menganggap bahwa mereka adalah digit 0
ke 9
, tapi tidak dalam cara mereka untuk diproses tergantung pada ini) dan menambah ruang sesuai dengan aturan berikut.
- Biarkan token saat ini menjadi string kosong, dan token yang dipancarkan sebelumnya menjadi set kosong.
- Iterasi melalui karakter string. Untuk setiap karakter, pertama tambahkan karakter ke token saat ini. Kemudian jika token saat ini belum ada di set token yang dipancarkan sebelumnya, tambahkan token saat ini ke set itu dan biarkan token saat ini menjadi string kosong.
- Jika ketika Anda mencapai akhir string token saat ini kosong, output token yang dipancarkan sebelumnya dalam urutan emisi, dipisahkan oleh karakter spasi. Kalau tidak, output string asli kata demi kata.
Memasukkan
Input ke STDIN harus berupa urutan digit.
Keluaran
Program harus mencetak hasilnya seperti yang ditentukan pada langkah 3.
Sampel
Input sampel
2015
10101010
4815162342
101010101010
3455121372425
123456789101112131415
314159265358979323846264338327950288419716939937
Output sampel
2 0 1 5
10101010
4 8 1 5 16 2 3 42
1 0 10 101 01 010
3 4 5 51 2 1 37 24 25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
3 1 4 15 9 2 6 5 35 8 97 93 23 84 62 64 33 83 27 95 0 28 841 971 69 39 937
Ini adalah kode golf, jadi aturan standar CG berlaku. Program terpendek dalam byte menang.
(Silakan minta klarifikasi dalam komentar. Saya masih baru dalam hal ini. Terima kasih!)
4815162342
Saya melihat apa yang Anda lakukan di sana, brotha .1 0 10
, iterasi berikutnya akan menemukan1
(sudah digunakan), kemudian memajukan satu untuk menemukan10
(sudah digunakan), lalu memajukan satu untuk menemukan101
, yang baru dan akan 'ditambahkan'. Kemudian akan menambahkan spasi dan Anda akan mendapatkan yang baru0
, yang telah digunakan, tetapi di sini di akhir string. Oleh karena itu, output akan menjadi1 0 10 101 0
, yang tidak valid (0
diulang), dan skrip kemudian harus hanya output string input. Itu hanya bisa membuat1010
jika101
sudah digunakan.If a unique number cannot be formed at the end of the string, then the input should be printed verbatim
10101010 tidak dapat dibagi sehingga dicetak seperti apa adanya.1
, yang akan menjadi pengulangan. Jadi alih-alih Anda memindahkan yang benar di ruang 5, dan kemudian Anda memindahkan yang benar lagi di langkah 4, dan Anda memasukkan langkah 5 lagi dan membuat101
.Jawaban:
Pyth, 22 byte
Ruang utama adalah penting.
sumber
Retina ,
6861 byte<empty>
adalah baris kosong. Perhatikan spasi tambahan pada baris 3. Anda dapat menjalankan kode di atas dari satu file dengan-s
flag.Penjelasan
Langkah pertama ini menerapkan aturan 1 hingga 6. Ini adalah pengganti regex yang diterapkan berulang kali hingga string berhenti berubah (untuk itulah
+
gunanya). Di setiap langkah kami menambahkan satu spasi ke string dari kiri ke kanan (mengikuti aturan tantangan). Regex cocok dengan string digit terpendek yang belum muncul di bagian string yang sudah diproses. Kami memastikan bahwa kami melihat awalan string yang tersisa dengan batas kata\b
dan memeriksa bahwa kami dapat mencapai akhir string tanpa melewati spasi(\w+)$
. Yang terakhir juga memastikan bahwa kami hanya melakukan satu penggantian per langkah.Ini cocok dengan ruang apa pun (yang berada di akhir regex), asalkan segmen terakhir dari string adalah sama dengan segmen lainnya di string, dan menggantinya dengan string kosong. Yaitu, kami membatalkan langkah pertama jika menghasilkan segmen akhir yang tidak valid, menerapkan aturan 7.
sumber
Pyth,
2423 byteCobalah di sini .
Terima kasih kepada @FryAmTheEggman karena telah menyimpan byte: o)
sumber
Python 3, 92 byte
Pada dasarnya versi berat dari solusi @ Willem.
sumber
[" ".join(o),i][n>""]
bool(n)
tetapi saya tidak memikirkann>""
.Python 3,
10099 bytesumber
else "
.Brachylog , 91 byte
Ini membuat saya sadar bahwa ada banyak hal tentang sintaks yang perlu saya ubah ...
Penjelasan
sumber
CJam, 26 byte
Uji di sini.
Penjelasan
sumber
JavaScript (ES6), 109
Format output saya tidak persis sama dengan sampel output di questioin (ada ruang terkemuka). Saya tidak melihat itu sebagai cacat, karena format output tidak ditentukan (hanya Program harus mencetak nomor setelah nomor ... )
Tes menjalankan cuplikan di bawah ini di peramban yang mendukung EcmaScript 6. Dikembangkan dengan Firefox, diuji dan dijalankan di Chrome terbaru.
sumber
GNU sed,
83777371 byte(Skor satu ekstra karena kami memerlukan
-r
bendera)Loop dalam menguji urutan berulang dan menambahkan karakter yang diperlukan sampai nomor unik muncul setelah pemisah
_
. Loop luar bergerak_
bersama.Versi diperluas, beranotasi:
sumber
t
menjadi satu./((\b[^ ]+).*\b\2)_/{
dapat ditulis ulang sebagai/(\b[^ ]+).*\b\1_/{
, tidak ada alasan untuk 2 kelompok penangkap.\1
!Ruby, 57 + 1 = 58 byte
Menggunakan bendera baris perintah
-p
(ataupl
jika input Anda memiliki baris tambahan). Mengeksploitasi beberapa sifat kamus Ruby Hash: Anda dapat dengan aman mengubah string yang Anda gunakan untuk mendefinisikan kunci tanpa itu mengubah kunci (yang tidak bekerja untuk jenis bisa berubah lainnya),.keys
mengembalikan kunci dalam urutan mereka dimasukkan, dan[]||=
operator menyediakan cara singkat untuk bercabang pada apakah kunci yang diberikan sudah ada di sana.sumber
Haskell, 105 byte
f
melakukannya.sumber
PHP - 148 byte
Tantangan keren, sangat menyenangkan!
sumber