; # mà không cần đặt lại


8

;#là một ngôn ngữ rất đơn giản. Nó có 2 lệnh:

  • ; sẽ tăng tích lũy
  • # xuất ra modulo 127, sau đó đặt lại bộ tích lũy

;$cũng rất đơn giản và rất giống nhau (và cũng chưa tồn tại). Nó có 2 lệnh:

  • ; sẽ tăng tích lũy
  • $ xuất ra modulo tích lũy 127. Tuy nhiên, nó không thiết lập lại bộ tích lũy.

Thử thách

Tạo một chương trình sẽ chuyển đổi ;#mã thành ;$mã. Đó là, cho đầu vào asử dụng phương pháp chuẩn, đầu ra ông ngắn bnhư vậy mà atrong ;#đầu ra điều tương tự như btrong ;$. Đầu vào sẽ chỉ chứa các ký tự ';''#'. Đầu vào sẽ không có dấu chấm phẩy. Đó là, nó sẽ phù hợp với regex (;*#)+. Điều này cũng có nghĩa là đầu vào sẽ không trống. Lưu ý rằng ;;;;##có thể (tương đương ord(4) ord(0)).

Ví dụ

;# code -> ;$ code
;;;;;;;;;;#;;;;;;;;;;;;# -> ;;;;;;;;;;$;;$
;;;;;;;;;;;;;;#;;;# -> ;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;# -> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;$$;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;$;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$ (Hello, World!)

1
Tôi đang hạ thấp điều này, bởi vì có quá nhiều ;#câu hỏi xung quanh. Chúng không thú vị lắm.
isaacg

@isaacg À. Cảm ơn vì đầu vào của bạn. Tôi sẽ cố gắng giữ cho các thử thách của mình nguyên bản hơn vào lần tới mặc dù lưu ý rằng đây là một trong những ;#thử thách trước đó ; nó là cái đầu tiên sau trình biên dịch và bộ chuyển đổi IIRC.
HyperNeutrino

;#đầu vào ngắn nhất?
l4m2

Câu trả lời:


2

JavaScript (ES6), 68 byte

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

Ví dụ


2

Thạch , 18 byte

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

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

ṣ”#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.

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;


0

Python, 101 100 97 85 byte

Đã lưu 1 byte nhờ @WheatWizard

def t(c,s=0):
 for x in map(len,c.split('#')[:-1]):print(end=';'*((x-s)%127)+'$');s=x

Bạn có thể thả khoảng trống giữa )for
Ad Hoc Garf Hunter

@WheatWizard cảm ơn
Uriel

0

Võng mạc , 52 byte

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

Hãy thử trực tuyến! Bao gồm bộ thử nghiệm. Giải thích: 127 được thêm vào từng cái #để làm cho phép trừ modulo 127 dễ dàng hơn; các #s được thay đổi $cùng một lúc. Phép trừ được xử lý bởi giao diện (?<=\$\1(;{127})?\$\1)đảm bảo rằng chúng ta trừ đi số ;s giữa hai #s trước đó (xử lý trường hợp khi có nhiều ;s) hoặc ít hơn 127 so với số đó (xử lý trường hợp khi có ít ;s hơn và họ cần phải vượt qua 127). Một lookbehind được sử dụng để tất cả các thay thế có thể được tính trong một lần. Để luôn có hai #s trước đó , hai #s thêm tạm thời được thêm tiền tố.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.