; # tanpa mengatur ulang

8

;#adalah bahasa yang sangat sederhana. Ini memiliki 2 perintah:

  • ; akan menambah akumulator
  • # mengeluarkan modulo 127 akumulator, dan kemudian mengatur ulang akumulator

;$juga sangat sederhana dan sangat mirip (dan juga belum ada). Ini memiliki 2 perintah:

  • ; akan menambah akumulator
  • $ mengeluarkan modulo akumulator 127. Namun, itu tidak mengatur ulang akumulator.

Tantangan

Buat program yang akan mengonversi ;#kode ke ;$kode. Artinya, diberi input amenggunakan metode standar, output terpendek bsedemikian sehingga adalam ;#output hal yang sama seperti bdalam ;$. Input hanya akan berisi karakter ';'dan '#'. Input tidak akan memiliki tanda titik koma. Artinya, itu akan cocok dengan regex (;*#)+. Ini juga berarti input tidak akan kosong. Perhatikan bahwa ;;;;##itu mungkin (setara dengan ord(4) ord(0)).

Contohnya

;# code -> ;$ code
;;;;;;;;;;#;;;;;;;;;;;;# -> ;;;;;;;;;;$;;$
;;;;;;;;;;;;;;#;;;# -> ;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;# -> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;$$;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;$;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$ (Hello, World!)
HyperNeutrino
sumber
1
Saya downvoting ini, karena ada terlalu banyak ;#pertanyaan yang beredar. Mereka tidak terlalu menarik.
isaacg
@isaacg Ah. Terima kasih atas masukan Anda. Saya akan mencoba untuk menjaga tantangan saya lebih orisinil di lain waktu meskipun perlu dicatat bahwa ini adalah salah satu ;#tantangan sebelumnya ; itu yang pertama setelah kompiler dan IIRC transpiler.
HyperNeutrino
Apakah ;#input terpendek?
14m2

Jawaban:

2

JavaScript (ES6), 68 byte

s=>s.replace(/;*#/g,s=>';'.repeat((127-a+(a=s.length))%127)+'$',a=1)

Contohnya

Arnauld
sumber
2

Jelly , 18 byte

ṣ”#L€ṙ-I%127”;ẋp”$

Cobalah online!

Bagaimana itu bekerja

ṣ”#L€ṙ-I%127”;ẋp”$  Main link. Argument: s (string)

ṣ”#L€               Split s at hashes. Take the length of each resulting chunk.
     ṙ-             Rotate the result -1 units to the left / 1 unit to the right.
                    Since s won't have trailing semicola, the length of the last
                    chunk will be 0. Rotating moves this 0 to the beginning.
       I            Increments; take all forward differences. Because of the 0 we
                    removed to the beginning, the first forward difference will be
                    the length of the first chunk.
        %127        Take the differences modulo 127. In Python, `n % d' is either 0
                    or has the same sign as d, so this reports how many semicola
                    are needed to get from one code point to the next one.
            ”;ẋ     Repeat ';' k times, for each modulus k.
               p”$  Take the Cartesian product with "$", appending '$' to each run
                    of semicola.
Dennis
sumber
1

PHP, 99 byte

while(~$c=a^$argn[$p++])j^$c?r^$c?:$a=-$b*$b=print str_repeat(";",(127+$a%127)%127)."$":$b+=!!++$a;
Titus
sumber
1

J , 37 byte

[:;';$'<@#~1,.~127|2-~/\0,=&'#'#;._2]

Cobalah online!

mil
sumber
0

Python, 101 100 97 85 byte

1 byte disimpan berkat @WheatWizard

def t(c,s=0):
 for x in map(len,c.split('#')[:-1]):print(end=';'*((x-s)%127)+'$');s=x
Uriel
sumber
Anda dapat membuang jarak antara )danfor
Ad Hoc Garf Hunter
@WheatWizard terima kasih
Uriel
0

Retina , 52 byte

^
##
#
127$*;$
^;+\$;+\$|(;+)(?<=\$\1(;{127})?\$\1)

Cobalah online! Termasuk test suite. Penjelasan: 127 ditambahkan ke masing #- masing untuk membuat modulo pengurangan 127 lebih mudah; yang #s berubah menjadi $pada waktu yang sama. Subtraction itu sendiri ditangani oleh lookbehind (?<=\$\1(;{127})?\$\1)yang memastikan bahwa kita mengurangi jumlah ;s antara dua #s sebelumnya (yang menangani case ketika ada lebih banyak ;s) atau 127 lebih sedikit dari jumlah itu (yang menangani case ketika ada lebih sedikit ;s dan mereka harus melewati 127). Tampilan di belakang digunakan sehingga semua penggantian dapat dihitung dalam satu pass. Agar selalu ada dua #s sebelumnya , dua #s tambahan diawali sementara.

Neil
sumber