Ihre Aufgabe ist es, jede Seite der Tastatur gegeneinander auszurichten und zwei Programme in derselben Sprache zu erstellen, eines mit nur Tasten auf der linken Seite einer Standardtastatur Pollinium milk; plump pumpkin; lollipop?
und eines mit den Tasten auf der rechten Seite Weatherheaded sweetheart haberdasheress!
.
Regeln
Die genauen Tasten, die für das Programm für die linke Hand zulässig sind, lauten:
123456!@#$%^QWERTYqwertyasdfghASDFGH`zxcvb~ZXCVB
und für das rechte Programm:
7890-=&*()_+uiop[]UIOP{}jkl;'\JKL:"|nm,./NM<>?
Es gibt vier freie Schlüssel Esc
( \x1b
), Tab
( \x09
), Space
( \x20
) und Enter
( \x0a
und / oder \x0d
), die in einer, keiner oder beiden Lösungen verwendet werden können.
Ihre Punktzahl ist die Gesamtbytezahl für beide Programme. Während ich den Begriff verwendet habe program
, können Ihre Einreichungen entweder vollständige Programme sein oder wie gewohnt funktionieren, und beide können unterschiedliche Typen haben (z. B. ein vollständiges Programm und eine Funktion).
Ihr Ergebnis muss den gewünschten Text enthalten. Eine beliebige Anzahl von führenden und nachfolgenden Leerzeichen ist in Ordnung, solange der genaue Text darin enthalten ist.
Standardlücken sind verboten .
Die kürzesten Lösungen in jeder Sprache gewinnen.
quelle
Antworten:
Perl 5 , 261 = 88 + 173 Bytes
Dies ist ein Beispiel, bei dem "Sprachoptionen zählen nicht" ein Problem ist. Die rechte Seite verwendet
-p
, die linke Seite nicht. Zählt es also als dieselbe Sprache oder nicht? Und sollten die Optionen aus dem linken / rechten Zeichensatz stammen?Links 88
benutze
-M5.10.0
(oder-E
von der Kommandozeile aus) umsay
Again zu aktivieren. Fraglich, ob diese Option als Code gelten soll und von links kommt oder ob sie unter "Optionen zum Einstellen der Sprachversion zählen nicht" steht.Probieren Sie es online!
Richtig 173
Mit der
-p
Option ausführen (die auch aus richtigen Zeichen besteht)Dies kann mit ziemlicher Sicherheit verbessert werden, aber im Moment war es schwer genug, etwas zum Laufen zu bringen. Keinen Zugang zu
print
,say
,$_
undsub{}
macht Ausgang heikelProbieren Sie es online!
quelle
eval
über&{(u&I.._)[9-7].O.(P|'"'&_).("U::u"&"o::o").("&"|p).(uo&il).(u&i.._)[9-8].("{|o"&"}uu").(j..u)[9]}
!Whitespace ,
11751143655645638632639578 (293 + 285) BytesEs musste getan werden ..; p
Kann definitiv gespielt werden, indem der Stapel umgekehrt gefüllt und alles am Ende in einer Schleife ausgedruckt wird, aber dies ist erst mein zweites Whitespace-Programm, also muss ich es erst noch herausfinden ..EDIT: Golf.+7 Bytes, weil ich falsch geschrieben habe
pumpkin
alspumkin
.. (Danke, dass du es bemerkt hast , @ fəˈnəˈtɛk .)Buchstaben
S
(Leerzeichen),T
(Tab) undN
nur als Hervorhebung hinzugefügt.[..._some_action]
nur als Erklärung hinzugefügt.Links
Pollinium milk; plump pumpkin; lollipop?
:Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Rechtsseitig
Weatherheaded sweetheart haberdasheress!
:Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Erläuterung:
Zuerst wird der Stapel umgekehrt aufgebaut. Das Drücken einer Nummer geschieht wie folgt:
S
zu Beginn: Stack-Manipulation aktivierenS
: Schieben Sie das Folgende als Zahl auf den StapelS
/T
: Vorzeichenbit, bei demS
positiv undT
negativ istT
undS
gefolgt von einemN
: Setze die Zahl als Binärzahl in den Stapel (T=1
undS=0
).Dann wird der Stapel umgekehrt durchlaufen und alles als Zeichen gedruckt. Das macht es wie folgt:
SSSN
)Label_0
(NSSN
)SNS
)Label_1
(NTSTN
)TNSS
)Label_0
(NSNN
)Label_1
(NSSTN
)Dies ist das Standardlayout für beide Programme. Hier ist das Änderungsprotokoll für dieses Standardlayout, das die Byteanzahl noch weiter gesenkt hat:
Alle Zahlen werden ( im ersten und im zweiten Programm) um den gleichen Betrag gesenkt, um die für die jetzt niedrigeren Zahlen verwendeten Binärziffern zu verringern. Zwischen Schritt 3.2 und 3.3 werden die folgenden zwei Unterschritte hinzugefügt:
100
110
102
101
SSSTTSTTTSN
) in Programm 1 oder 101 (SSSTTSSTSTN
) in Programm 2TSSS
).Ich habe auch verwendet
SNS
in einigen Fällen die Spitze des Stapels zu duplizieren, die zum Golf verwendet wirdll
,ll
,ee
undss
.Darüber hinaus wurde Schritt 4 (Erstellen
Label_1
) vollständig entfernt. Es wird mit einem Fehler beendet, aber trotzdem alles korrekt ausgegeben ( was laut Meta erlaubt ist ).Es ist möglich, einen
n
'ten Wert vom oberen Ende des Stapels zu kopieren (mit einemSTS
Index von + 0n
), der in einigen Fällen kürzer ist als das Erstellen einer neuen Zahl.Im ersten Programm habe ich das gemacht für: das zweite
p
inpop
(STSSTN
(copy 1st) ist kürzer alsSSSTTSSN
(create number for 'p'), das zweitel
inlol
(STSSTN
(copy 1st) ist kürzer alsSSSTSSSN
(create number for 'l') )), der zweitep
inp p
(STSSTN
(Kopie 1) ist kürzer alsSSSTTSSN
(Nummer für 'p' erstellen)), der zweitep
inpumlp
(STSSTTN
(Kopie 3) ist kürzer alsSSSTTSSN
(Nummer für 'p' erstellen)), der zweitep
inpmup
(STSSTSN
( Kopie 2) ist kürzer alsSSSTTSSN
( Nummer erstellen für 'p')),m
m m
(STSSTN
(copy 1st) ist kürzer alsSSSTSSTN
(create number for 'm')), das secondi
inini
(STSSTN
(copy 1st) ist kürzer alsSSSTSTN
(create number for 'i')).Im zweiten Programm wird dies für keine gemacht. Der Abstand zwischen einigen ist ziemlich kurz, wie
ere
oderded
, aber das Erstellen der Zahl für 'e' (SSTTN
) oder 'd' (SSTTSN
) ist kürzer oder gleich lang wie Kopie 1 (STSSTN
), daher konnte ich diesen Trick in der nicht anwenden zweites Programm zum Speichern von Bytes. HINWEIS: Nach Golf-Schritt 7 sind nicht mehr alle zutreffend.In beiden Programmen habe ich Schritt 1 der Schleife von
SSSN
(Push 0) aufSSN
(Push error_value) geändert und die Schritte 3.1 (SNS
Duplizieren) und 3.2 (NTSTN
Wenn 0: Beenden) entfernt. Jetzt wird es einfach mit einem Fehler beendet, derSSN
ein unbekannter Wert ist, sobald versucht wird, darauf zuzugreifen.Der
SSN
(error_value) wurde in beiden Programmen komplett entfernt. Es wird nun mit dem Fehler " Infix Plus kann nicht ausgeführt werden " beendet, wenn versucht wird, die Add-Funktion auszuführen, ohne dass noch etwas auf dem Stapel vorhanden ist.Geändert , um die konstanten Werte von
100
und102
zu110
und101
ist. Hier das Java-Programm , mit dem die110
Konstante generiert wurde ; und hier das Java-Programm zur Erzeugung der101
Konstante. Beachten Sie, dass es jetzt weniger Kopieren verwendet als 4 oben unter Punkt, da die neuen Werte in vielen Fällen kürzer als die Kopien sind, so wieder treibt sie kürzer ist.quelle
Sprache, so viele Bytes
Die linke Seite ist 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868 Wiederholungen des
a
Zeichens, das auf das folgende Programm Brainfuck entspricht:Probieren Sie es online!
Die rechte Seite ist 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140 Wiederholungen des
p
Zeichens, das auf das folgende Programm Brainfuck entspricht:Probieren Sie es online!
quelle
CJam , 128 + 192 = 320 Bytes
Probieren Sie es online!
Probieren Sie es online!
quelle
Spaltung , 958 + 752 = 1710 Bytes
._.
Links
Probieren Sie es online!
Recht
Probieren Sie es online!
OK, hier haben wir Glück, eigentlich ._.
Das erste coole Feature von Fission ist, dass es 4 Befehle zum Erstellen von Befehlszeigern und AKA-Atomen enthält:
RLDU
Ich habe also zwei Befehle für linke und rechte Gruppen.Zweiter Glücksbringer sind 2 Befehle zur Ausgabe
!
undO
, die in verschiedenen Gruppen vorkommen.Zum dritten Mal den Charme. Beide Ausgabebefehle geben ASCII-Äquivalente der Atommasse aus. Also muss ich es irgendwie ändern. Ich Glückspilz! Beide
+ (+1 mass)
und_ (-1 mass)
sind in einer Gruppe und alle drei$ (+1 energy)
, die benötigt werden~ (-1 energy)
,@ (swap mass and energy)
sind in einer anderen Gruppe.Es gibt also nichts, was mich aufhalten könnte, aber es kann nicht kompakt sein und die Massen Schritt für Schritt einstellen.
Erstes Programm
Erstes Programm besteht nur aus
Dz^@$~!V
Der Start kann einfacher (nur
R
) sein, aber mit dividieren werden einige Bytes für den ersten Buchstaben gespart.Atom, der links herum geht und auf
V
ihn trifft , was ihn dazu bringt, unbegrenzt zu fallen und sich einzuwickeln, ohne etwas zu tun.Das zweite Atom wird gerade und trifft auf eine Reihe von sich wiederholenden Mustern
@...@!
für jeden auszugebenden Buchstaben.Schließlich wird es dem
V
Schicksal des ersten Atoms begegnen und es teilen. Es gibt keine Möglichkeit, sie zu zerstören oder mit dem linken Teil der Tastatur anzuhalten.Zweites Programm
Der zweite kommt mit seinen Höhen und Tiefen. Ich habe Befehle, um die Masse direkt zu ändern, aber der Ausgabebefehl
O
zerstört Atome, also muss ich sie irgendwie erhalten.Das Programm beginnt rechts
L
mit dem Atom nach links.Wiederholtes Muster:
'
Setzt den ASCII-Code des nächsten gefundenen Zeichens in die Atommasse, sodass der Code einigerX
zuerst gespeichert wird, bevor die Masse um_
und+
auf den exakten Wert geändert wird .Manchmal
X'
wird übersprungen, wenn es nur_
und kürzer ist+
.Atom kommt von links, spiegelt zweimal und trifft
}
von links. In diesem Fall}
funktioniert es wie ein Kloner, der zwei identische Atome nach oben und unten sendet. Das Atom nach unten wird vom Spiegel reflektiert und geht nach links. Up Atom Wraps, trifft auf den gleichen Spiegel, aber von unten und reflektiert so richtig, begegnetO
und druckt.Am Ende trifft sich das letzte Atom
O
, um zerstört zu werden.quelle