Linke Hand gegen rechte Hand - Schreibkraft-Herausforderung

32

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( \x0aund / 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.

Dom Hastings
quelle
6
Warum ist H die linke Hand?
TSH
1
@tsh Ich wollte die Tastatur 6/6 teilen (oder so nah wie möglich daran), um zu versuchen, für jede "Hand" eine gleichmäßigere Anzahl von Symbolen zu erhalten.
Dom Hastings
8
// Vielleicht sollte ich Whitespace lernen und später zurück ...
tsh
@tsh, ich denke, eine Leerzeichen-Antwort ist unvermeidlich! Nicht sicher, wie wettbewerbsfähig es wäre! Vielleicht hätte ich das jetzt zu spät ansprechen sollen!
Dom Hastings
Ist es in Ordnung, wenn das Programm auch eine andere Ausgabe (ohne Leerzeichen) hat, solange die angeforderten Texte enthalten sind?
Grzegorz Oledzki

Antworten:

12

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 -Evon der Kommandozeile aus) um sayAgain 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.

say eYYYYZYEYWYYYYYWQYEYQWQEYQYYZYWYYYYYQYQW^q%565504004w4052bw!504!w!04!204bw56550!6!h%

Probieren Sie es online!

Richtig 173

Mit der -pOption ausführen (die auch aus richtigen Zeichen besteht)

}{*_=\(uuuuuuuuuuuuuiuuuuuuuuuuiuuuuuuuuuuuuuui&Uiipjipjiijij0puiipjiipp0jijipjipjipipp7|Ouiujujjuiuuu0kouuujuiju0jijujuikjujukk7&"7oulio7iouloli77ooliou7liiu7o7lu7io7o77i")

Dies kann mit ziemlicher Sicherheit verbessert werden, aber im Moment war es schwer genug, etwas zum Laufen zu bringen. Keinen Zugang zu print, say, $_und sub{}macht Ausgang heikel

Probieren Sie es online!

Tonne Hospel
quelle
Keine Sorge um Flaggen, ich bin froh, dass dies gültig ist. Eine wesentlich kürzere Lösung als das, was ich habe mit worden bastelt , wie ich rief evalüber &{(u&I.._)[9-7].O.(P|'"'&_).("U::u"&"o::o").("&"|p).(uo&il).(u&i.._)[9-8].("{|o"&"}uu").(j..u)[9]}!
Dom Hastings
12

Whitespace , 1175 1143 655 645 638 632 639 578 (293 + 285) Bytes

Es 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 pumpkinalspumkin .. (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?:

[S S T  T   S T T   T   T   N
_Push_-47_?][S S S T    S N
_Push_2_p][S S S T  N
_Push_1_o][S T  S S T   N
_Copy_1st_p][S S T  T   S T N
_Push_-5_i][S S T   T   S N
_Push_-2_l][S N
S _Duplicate_-2_l][S S S T  N
_Push_1_o][S T  S S T   N
_Copy_1st_l][S S T  T   S S T   T   T   S N
_Push_-78_space][S S T  T   T   S S T   T   N
_Push_-51_;][S S S N
_Push_0_n][S S T    T   S T N
_Push_-5_i][S S T   T   T   N
_Push_-3_k][S S S T S N
_Push_2_p][S S T    T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S S T  S N
_Push_2_p][S S T    T   S S T   T   T   S N
_Push_-78_space][S S S T    S N
_Push_2_p][S S T    T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S T    T   S N
_Push_-2_l][S S S T S N
_Push_2_p][S S T    T   S S T   T   T   S N
_Push_-78_space][S S T  T   T   S S T   T   N
_Push_-51_;][S S T  T   T   N
_Push_-3_k][S S T   T   S N
_Push_-2_l][S S T   T   S T N
_Push_-5_i][S S T   T   N
_Push_-1_m][S S T   T   S S T   T   T   S N
_Push_-78_space][S S T  T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S T    T   S T N
_Push_-5_i][S S S N
_Push_0_n][S S T    T   S T N
_Push_-5_i][S S T   T   S N
_Push_-2_l][S N
S _Duplicate_-2_l][S S S T  N
_Push_1_o][S S T    T   T   T   T   S N
_Push_-30_P][N
S S N
_Create_Label_LOOP][S S S T T   S T T   T   S N
_Push_110][T    S S S _Add][T   N
S S _Print_as_char][N
S N
N
_Jump_to_Label_LOOP]

Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).

Rechtsseitig Weatherheaded sweetheart haberdasheress!:

[S S T  T   S S S T S S N
_Push_-68_!][S S S T    T   T   S N
_Push_14_s][S N
S _Duplicate_14_s][S S S N
_Push_0_e][S S S T  T   S T N
_Push_13_r][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   S N
_Push_14_s][S S T   T   S S N
_Push_-4_a][S S T   T   N
_Push_-1_d][S S S T T   S T N
_Push_13_r][S S S N
_Push_0_e][S S T    T   T   N
_Push_-3_b][S S T   T   S S N
_Push_-4_a][S S S T T   N
_Push_3_h][S S T    T   S S S T S T N
_Push_-69_space][S S S T    T   T   T   N
_Push_15_t][S S S T T   S T N
_Push_13_r][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   T   N
_Push_15_t][S S S N
_Push_0_e][S N
S _Duplicate_0_e][S S S T   S S T   S N
_Push_18_w][S S S T T   T   S N
_Push_14_s][S S T   T   S S S T S T N
_Push_-69_space][S S T  T   N
_Push_-1_d][S S S N
_Push_0_e][S S T    T   N
_Push_-1_d][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   S T N
_Push_13_r][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   T   N
_Push_15_t][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S T    T   T   T   S N
_Push_-14_W][N
S S N
_Create_Label_LOOP][S S S T T   S S T   S T N
_Push_101][T    S S S _Add][T   N
S S _Print_as_char][N
S N
N
_Jump_to_Label_LOOP]

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 aktivieren
  • S: Schieben Sie das Folgende als Zahl auf den Stapel
  • S/ T: Vorzeichenbit, bei dem Spositiv und Tnegativ ist
  • Einige Tund Sgefolgt von einem N: Setze die Zahl als Binärzahl in den Stapel ( T=1und S=0).

Dann wird der Stapel umgekehrt durchlaufen und alles als Zeichen gedruckt. Das macht es wie folgt:

  1. Drücken Sie 0 ( SSSN)
  2. Drücken Sie alle Ziffern, um die umgekehrten Zeichen anzuzeigen, wie oben erläutert
  3. Erstelle ein Label_0( NSSN)
    1. Dupliziere die Oberseite des Stapels ( SNS)
    2. Wenn dieser Wert 0 ist: Springe zu Label_1( NTSTN)
    3. Sonst: Pop und drucke den oberen Teil des Stapels als Zeichen ( TNSS)
    4. Springe zu Label_0( NSNN)
  4. Erstellen 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:

  1. 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 110102 101

    • Drücken Sie 110 ( SSSTTSTTTSN) in Programm 1 oder 101 ( SSSTTSSTSTN) in Programm 2
    • Füge die beiden obersten Werte des Stapels zusammen und füge sie zusammen. Das Ergebnis ist die neue Oberseite des Stapels ( TSSS).
  2. Ich habe auch verwendet SNSin einigen Fällen die Spitze des Stapels zu duplizieren, die zum Golf verwendet wird ll, ll, eeund ss.

  3. 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 ).

  4. Es ist möglich, einen n'ten Wert vom oberen Ende des Stapels zu kopieren (mit einem STSIndex von + 0 n), 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 pin pop( STSSTN(copy 1st) ist kürzer als SSSTTSSN(create number for 'p'), das zweite lin lol( STSSTN(copy 1st) ist kürzer als SSSTSSSN(create number for 'l') )), der zweite pin p p( STSSTN(Kopie 1) ist kürzer als SSSTTSSN(Nummer für 'p' erstellen)), der zweite pin pumlp( STSSTTN(Kopie 3) ist kürzer als SSSTTSSN(Nummer für 'p' erstellen)), der zweite pin pmup( STSSTSN( Kopie 2) ist kürzer alsSSSTTSSN ( Nummer erstellen für 'p')),mm m( STSSTN(copy 1st) ist kürzer als SSSTSSTN(create number for 'm')), das second iin ini( STSSTN(copy 1st) ist kürzer als SSSTSTN(create number for 'i')).
    Im zweiten Programm wird dies für keine gemacht. Der Abstand zwischen einigen ist ziemlich kurz, wie ereoder ded, 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.

  5. In beiden Programmen habe ich Schritt 1 der Schleife von SSSN(Push 0) auf SSN(Push error_value) geändert und die Schritte 3.1 ( SNSDuplizieren) und 3.2 ( NTSTNWenn 0: Beenden) entfernt. Jetzt wird es einfach mit einem Fehler beendet, der SSNein unbekannter Wert ist, sobald versucht wird, darauf zuzugreifen.

  6. 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.

  7. Geändert , um die konstanten Werte von 100und 102zu 110und 101ist. Hier das Java-Programm , mit dem die 110Konstante generiert wurde ; und hier das Java-Programm zur Erzeugung der 101Konstante. 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.

Kevin Cruijssen
quelle
Das ST-Zeug drückt einfach die Zahl als binär, mit Leerzeichen als 0, Tabulator als 1. Die Ausgabe ist das TNSS, so dass Sie zu Beginn jedes Programms zwei zusätzliche Leerzeichen haben. Es speichert wahrscheinlich auch Bytes zum Duplizieren und addiert / subtrahiert dann für jedes Zeichen und durchläuft die Werte am Ende.
Jo King
1
Du hast Kürbis falsch geschrieben.
5.
@ fəˈnəˈtɪk Whoops lol .. Sollte jetzt behoben sein, danke fürs mitbekommen.
Kevin Cruijssen
4

Sprache, so viele Bytes

Die linke Seite ist 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868 Wiederholungen des aZeichens, das auf das folgende Programm Brainfuck entspricht:

-[--->+<]>-----.[--->+<]>-.---..---.+++++.-----.++++++++++++.--------.[->+++++<]>-.+[----->+<]>.----.+++.-.--[->+++<]>.+[-->+<]>++.[-->+++++++<]>.----.+++++++++.--------.+++.[------->++<]>.[-->+++++++<]>.+++++.--------.+++.-----.--.+++++.[-->+<]>++++.+[-->+<]>++.++[--->++<]>.+++.---..---.+++++++.-.+.[--->++++<]>-.

Probieren Sie es online!

Die rechte Seite ist 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140 Wiederholungen des pZeichens, das auf das folgende Programm Brainfuck entspricht:

+[--->++<]>+.++[->++++<]>+.----.--[--->+<]>-.------------.---.+++++++++++++.----------.---.----.+++.+.-.-[--->+<]>-.---[->++++<]>-.++++.[->+++<]>..[--->+<]>---.------------.---.----.--[--->+<]>---.++.[---->+<]>+++.-[--->++<]>--.-------.+.+++.+++++++++++++.--------------.---.--[--->+<]>--.-----------.---.+++++++++++++.-------------.[--->+<]>----..+[-->+++++<]>-.

Probieren Sie es online!

MD XF
quelle
3

CJam , 128 + 192 = 320 Bytes

64G^c111c111Z^cT$111c6^111X^c1$116X^c111Y^c32c1$6$Y3#$111c4^56Z^c32c112c13$A$A$3$5$1$4$4$4$12$22$22$14$32c13$111c1$T$7$A$4$1$63c

Probieren Sie es online!

'U))'i(((('_))'u('i('i(((('p))'i('i(((('_))'_)))))'i(((('_)))))'&(((((('u(('u))'i(((('i(((('u('i('i(((('_))'p))'u('&(((((('i('_))'_)))'i(((('p))'_)))))'_))'u(('i('i(((('p))'i(((('u(('u(('&(((((

Probieren Sie es online!

Lynn
quelle
3

Spaltung , 958 + 752 = 1710 Bytes

._.

Links

D
z
^@$$$$$$$$$$$$$$$$$$$@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~@!!@~~~@!@$$$$$@!@~~~~~@!@$$$$$$$$$$$$@!@~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~~@!@$$$@!@~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~~@!@$$$$$$$$$@!@~~~~~~~~@!@$$$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@$$$$$@!@~~~~~~~~@!@$$$@!@~~~~~@!@~~@!@$$$$$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@$$$@!@~~~@!!@~~~@!@$$$$$$$@!@~@!@$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!V

Probieren Sie es online!

Recht

                                           } \} \    } \      } \    } \   } \   } \    } \   } \       } \    } \   } \ } \       } \   } \                                           } \   } \    } \    } \   } \   } \   } \} \      } \    } \    } \                                           } \ } \ } \   } \    } \   } \   } \    } \   } \   } \   } \    } \      } \ 
O________________________________________I'/O\/O\__u'/O\____i'/O\++p'/O\___/O\_i'/O\__u'/O\___/O\_____i'/O\++p'/O\+++/O\+/O\_______/O\_i'/O\_________________________________________I'/O\_u'/O\++p'/O\____/O\___/O\_i'/O\_u'/O\/O\____i'/O\++u'/O\__u'/O\_________________________________________I'/O\_/O\+/O\+++/O\____/O\___/O\_i'/O\++p'/O\___/O\_i'/O\_u'/O\____/O\____i'/O\+++++++P'L

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: RLDUIch habe also zwei Befehle für linke und rechte Gruppen.
Zweiter Glücksbringer sind 2 Befehle zur Ausgabe !und O, 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 auch Spiegel, um Atome in beiden Gruppen zu steuern! Aber ich habe sie nicht im ersten Programm verwendet

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

D   create atom, going down
z   set its mass to ASCII code of 'z'
^   split atom in 2, dividing their mass. One goes left, second - right

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 Vihn 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.

@   swap atom's mass and energy
... increament or decrement energy until it would match desired ASCII code
@   swap again
!   print character by atoms mass

Schließlich wird es dem VSchicksal 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 Ozerstört Atome, also muss ich sie irgendwie erhalten.
Das Programm beginnt rechts Lmit dem Atom nach links.

Wiederholtes Muster:

} \
/O\...X'

'Setzt den ASCII-Code des nächsten gefundenen Zeichens in die Atommasse, sodass der Code einiger Xzuerst 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, begegnet Ound druckt.
Am Ende trifft sich das letzte Atom O, um zerstört zu werden.

Totes Opossum
quelle