Tantangan:
Memasukkan:
Anda mengambil dua input:
- Sebuah string yang hanya berisi ASCII yang dapat dicetak (tidak termasuk spasi, tab, atau baris baru)
- Karakter ASCII yang dapat dicetak
Keluaran:
Baris pertama akan berisi string-input. Setiap i
kemunculan pertama -modulo-3 dari karakter ini akan bergerak ke arah Tenggara; setiap i
-modulo-3 detik akan bergerak ke arah Selatan; dan setiap i
kejadian ketiga -modulo-3 akan bergerak ke arah Barat Daya. Anda akan melanjutkan sampai karakter akan berada pada posisi awal awal mereka lagi (yang berarti akan membungkus dari satu sisi ke sisi lain jika perlu), dan kemudian Anda akan mencetak baris terakhir dengan string-input lagi ke selesaikan itu. (Perhatikan bahwa semua kasus uji akan berakhir pada input awal setelah paling banyak length(input)
baris, termasuk baris yang mengandung input tambahan. Akan lebih cepat, seperti yang terlihat dalam kasus uji pertama di bawah ini, dengan panjang 14, tetapi berakhir setelah 9.)
Ini semua mungkin sangat kabur, jadi di sini sebuah contoh:
Uji kasus 1:
Input string: Input "This_is_a_test"
karakter:'s'
Keluaran:
This_is_a_test
s s s
ss s
s s
sss
sss
s s
ss s
s s s
This_is_a_test
Ini adalah test case yang sama dengan jalur berwarna ketiganya s
:
di mana yang pertama 's'
mengikuti jalur hijau di arah Tenggara; yang kedua 's'
mengikuti jalur kuning ke arah Selatan; dan yang ketiga 's'
mengikuti jalur biru muda ke arah Barat Daya. (Jika akan ada yang keempat 's'
itu akan pergi ke arah Tenggara lagi, yang dapat dilihat dalam beberapa kasus uji lainnya di bawah ini.)
Aturan tantangan:
- Input hanya akan berisi ASCII yang dapat dicetak (tidak termasuk spasi, tab, dan baris baru)
- Format I / O fleksibel. Dapat berupa string yang dibatasi baris baru, matriks karakter, dll. Panggilan Anda.
- Ada kemungkinan bahwa karakter yang diberikan tidak ada dalam string, dalam hal ini Anda diizinkan untuk output-string input sekali atau dua kali (yaitu
"test", 'a'
dapat memiliki salah satu dari ini sebagai output yang mungkin:"test\ntest"
/"test"
). - Ruang pemimpin adalah wajib; spasi tambahan adalah opsional. Satu atau beberapa baris baru yang mengarah / tertinggal diizinkan.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
Uji kasus / lebih banyak contoh:
Uji kasus 2:
Input string: Input "abcabcabcabcabc"
karakter:'b'
Keluaran:
abcabcabcabcabc
b b b b b
bbb bb
b b
bbb bb
b b b b b
b b b b
b b b b b
bb b bb
b b b
bb bbb
b b bbb
b b b b
b bb bb
b b bb b
abcabcabcabcabc
Berikut ini adalah kasus uji yang sama dengan jalur berwarna lima a
:
Uji kasus 3:
Input string: Input "only_two_paths?"
karakter:'o'
Keluaran:
only_two_paths?
o o
o o
o o
o o
o o
oo
o
oo
o o
o o
o o
o o
o o
o o
only_two_paths?
Ini adalah test case yang sama dengan jalur berwarna keduanya o
:
Uji kasus 4:
Input string: "lollollollollol"
Input karakter:'l'
Keluaran:
lollollollollol
lll ll ll
ll ll ll
l ll ll ll ll
lll l ll l ll
llllll ll ll
l l ll ll
ll lll ll
l l l lll ll l
ll l ll l l
l l l l llll l
ll lll lll
l l l ll
ll lll lllll
l l l ll l ll
lollollollollol
Berikut ini adalah kasus uji yang sama dengan jalur berwarna sepuluh l
:
Uji kasus 5:
Input string: "AbCdEeDcBaAbCdEeDcBa_CCCCC"
Input karakter:'C'
Keluaran:
AbCdEeDcBaAbCdEeDcBa_CCCCC
C C C C C
C C C C CCC
C C C C C C C
C C C C C C C
C C C C C C C
C C C C C C C
C C C C C C C
C C C CC C C
C C CC C C
C C CC C C
C C CC C
CC CC C C
CC CC C C
C C CC C C
C C CC C C C
C C C C C C
C C CC C C C
C C C C C C C
C C C C C C C
C C C C C CC
C C C C C C
C C C C CCC
C C C CCCC
C C C C
C C CCCCC
AbCdEeDcBaAbCdEeDcBa_CCCCC
Ini adalah test case yang sama dengan jalur berwarna ketujuh C
:
Uji kasus 6:
Input string: "XyX"
Input karakter:'X'
Keluaran:
XyX
XX
X
XyX
Ini adalah test case yang sama dengan jalur berwarna keduanya X
:
Uji kasus 7:
Input string: "aaaa"
Input karakter:'a'
Keluaran:
aaaa
aa
aaa
aaa
aaaa
Ini adalah test case yang sama dengan jalur berwarna dari empat a
:
length(input)
semuanya cocok lagi, tetapi bisa lebih cepat setelah ujian pertama terbukti. Tapi sepertinya Anda memang benar tentang kelipatan 3 bagian (walaupun saya tidak 100% yakin).Jawaban:
Stax , 24 byte
Jalankan dan debug secara online
Ini adalah representasi ascii dari program yang sama.
Itu mendapatkan indeks semua karakter, dan kemudian bermutasi sampai mereka set-bijaksana sama dengan indeks asli. Untuk setiap perubahan, buat string dengan karakter di indeks tersebut.
sumber
Perl 5 ,
-plF
10110099989796 byteGanti
\0
dengan 0 byte literal untuk mendapatkan 96. Perhatikan bahwa tautan Try It Online memiliki 97 byte karena tampaknya tidak mungkin untuk memasukkan karakter 0 literal di sana.Kode golf perl highlighter dianggap
#
memulai komentar. Betapa naifnya 😈Cobalah online!
Bagaimana itu bekerja
$l
adalah penghitung untuk baris mana setelah yang pertama kita aktif (menghitung mundur, jadi misalnya -3 untuk 3 baris di bawah string teratas). Setelah mencetak string awal setelah berulang kali melakukan hal berikut.Cari string pertama untuk kemunculan karakter target dan hitung
(++$#$l%3*$l-$l+"@-")%@F
kapan offset itu akan muncul: yang merupakan posisi saat ini ditambah nomor baris (negatif) kali-1, 0, 1
(siklik). Bangun sebuah string dengan yang berkali-kali\0
diikuti oleh karakter target danor
itu menjadi akumulator$$l
(yang merupakan akumulator yang berbeda untuk masing-masing$l
dan alasannya$l
mundur bukannya naik karena$1
,$2
dll hanya baca-saja). Simularly$#$l
mengacu pada array yang berbeda setiap kali melalui loop. Hasilnya adalah$l
garis th tetapi dengan\0
bukannya spasi.Karakter target di string pertama diganti oleh
\0
sehingga Anda berakhir dengan string asli dengan "lubang" (dengan\0
) di posisi asli karakter target. Jika Andaxor
bahwa dengan akumulator lubang diisi jika dan hanya jika akumulator memiliki karakter target di posisi asli, sehingga hasilnya akan menjadi string asli. Itu digunakan untuk mengakhiri loop. Jika loop belum selesai, cetak akumulator dengan\0
diganti dengan spasi.Ketika loop berakhir
-p
opsi sekali lagi mencetak string pertama dan program selesai.Karakter target diambil dengan cara yang agak rumit. The
${\<>}
mualaf garis membaca dari STDIN ke referensi yang kemudian segera dereferenced dan diganti di regex. The\Q
awalan lolos semua karakter yang khusus dalam regex (seperti.
dan*
). Ini\E
tersirat. Theo
pengubah menyebabkan bagian pencarian untuk tidak pernah dievaluasi lagi tapi hanya mengulangi di semua pertandingan berikutnya (yang baik karena tidak ada di STDIN lagi).sumber
Python 2 ,
199193191 byteCobalah online!
Jika loop dapat keluar melalui pengecualian:
Python 2 , 187 byte
Cobalah online!
sumber
(j[i]-i%3+1)%l
dua byte.C (gcc) , 261 byte
Cobalah online!
sumber
JavaScript (Node.js) ,
197194 byteCobalah online!
Mengambil input dalam sintaks currying, yaitu
f(s)(c)
.Sama sekali tidak sempurna, tapi saya butuh JS. Banyak fungsi dalam fungsinya.
sumber
Ruby ,
189 176 171 156 150 146 144137 byteCobalah online!
sumber
Jelly , 33 byte
Cobalah online!
Panggil sebagai fungsi. (tautan diad)
Saya menemukan beberapa alternatif 33-byte , tetapi tidak ada peningkatan yang sebenarnya.
sumber