; # ohne zurücksetzen

8

;#ist eine sehr einfache Sprache. Es hat 2 Befehle:

  • ; erhöht den Akku
  • # gibt den Akkumulator Modulo 127 aus und setzt dann den Akkumulator zurück

;$ist auch sehr einfach und ist sehr ähnlich (und existiert auch noch nicht). Es hat 2 Befehle:

  • ; erhöht den Akku
  • $ gibt den Akku Modulo 127 aus. Der Akku wird jedoch nicht zurückgesetzt.

Herausforderung

Erstellen Sie ein Programm, das ;#Code in ;$Code konvertiert . Das heißt, bei Eingabe amit Standardmethoden ist die Ausgabe am kürzesten, bso dass ain ;#Ausgaben dasselbe wie bin ausgegeben wird ;$. Die Eingabe enthält nur die Zeichen ';'und '#'. Die Eingabe enthält keine nachgestellten Semikolons. Das heißt, es wird mit dem regulären Ausdruck übereinstimmen (;*#)+. Dies bedeutet auch, dass die Eingabe nicht leer ist. Beachten Sie, dass dies ;;;;##möglich ist (entspricht ord(4) ord(0)).

Beispiele

;# code -> ;$ code
;;;;;;;;;;#;;;;;;;;;;;;# -> ;;;;;;;;;;$;;$
;;;;;;;;;;;;;;#;;;# -> ;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;# -> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;$$;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;$;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$ (Hello, World!)
HyperNeutrino
quelle
1
Ich stimme dem zu, weil es zu viele ;#Fragen gibt. Sie sind nicht sehr interessant.
isaacg
@isaacg Ah. Danke für deinen Beitrag. Ich werde versuchen, meine Herausforderungen beim nächsten Mal origineller zu halten. Beachten Sie jedoch, dass dies eine der früheren ;#Herausforderungen war. Es war das erste nach dem Compiler und dem Transpiler IIRC.
HyperNeutrino
Ist die ;#Eingabe die kürzeste?
14 m2

Antworten:

2

JavaScript (ES6), 68 Byte

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

Beispiele

Arnauld
quelle
2

Gelee , 18 Bytes

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

Probieren Sie es online aus!

Wie es funktioniert

ṣ”#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
quelle
1

PHP, 99 Bytes

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

Python, 101 100 97 85 Bytes

1 Byte dank @WheatWizard gespeichert

def t(c,s=0):
 for x in map(len,c.split('#')[:-1]):print(end=';'*((x-s)%127)+'$');s=x
Uriel
quelle
Sie können das Leerzeichen zwischen )undfor
Ad Hoc Garf Hunter
@ WheatWizard danke
Uriel
0

Netzhaut , 52 Bytes

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

Probieren Sie es online aus! Beinhaltet Testsuite. Erklärung: 127 wird zu jedem hinzugefügt, #um das Subtraktionsmodulo 127 einfacher zu machen; Die #s werden gleichzeitig geändert $. Die Subtraktion selbst wird vom Lookbehind behandelt, (?<=\$\1(;{127})?\$\1)wodurch sichergestellt wird, dass entweder die Anzahl der ;s zwischen den beiden vorherigen #s subtrahiert wird (was den Fall behandelt, wenn mehr ;s vorhanden sind ) oder 127 weniger als diese Zahl (die den Fall behandelt, wenn weniger ;s vorhanden sind) und sie müssen über 127) wickeln. Ein Lookbehind wird verwendet, damit alle Ersetzungen in einem Durchgang berechnet werden können. Damit es immer zwei vorherige #s gibt, #werden vorübergehend zwei zusätzliche s vorangestellt.

Neil
quelle