Teilen Sie die 95 druckbaren Zeichen in ASCII plus Zeilenvorschub in zwei gleich große 48 Zeichengruppen (im Folgenden Gruppe A und Gruppe B genannt) auf. Erstellen Sie eine Eins-zu-Eins-Zuordnung Ihrer Wahl zwischen den beiden Gruppen. Mit anderen Worten, A
kann auf a
und umgekehrt abgebildet werden, kann aber A
auch auf >
und umgekehrt abgebildet werden, wenn Sie dies für Ihr Programm benötigen.
Wenn Sie ASCII in zwei Gruppen unterteilt haben, schreiben Sie zwei Programme und / oder Funktionen, wobei Sie jeweils nur die Zeichen in jeder Gruppe verwenden. Mit anderen Worten, schreiben Sie ein Programm / eine Funktion, die nur die Zeichen in Gruppe A verwendet, und ein anderes Programm / eine Funktion, die nur die Zeichen in Gruppe B verwendet.
Diese Programme müssen ein Zeichen als Eingabe empfangen können. Das Programm, das mit den Zeichen in Gruppe A geschrieben wurde, sollte das gleiche Zeichen ausgeben / zurückgeben, wenn die Eingabe ein Zeichen der Gruppe A war, und das zugeordnete Zeichen der Gruppe A, wenn es ein Zeichen der Gruppe B erhielt. Das Programm der Gruppe A sollte immer ein Zeichen der Gruppe A ausgeben. In ähnlicher Weise sollte das Programm der Gruppe B dasselbe Zeichen ausgeben, wenn es sich um ein Zeichen der Gruppe B handelt, und das zugeordnete Zeichen der Gruppe B, wenn es sich bei der Eingabe um ein Zeichen der Gruppe A handelt.
Das ist vielleicht nicht so klar, also hier ein Beispiel. Wenn Sie davon ausgehen, dass sich alle Großbuchstaben in Gruppe A und alle Kleinbuchstaben in Gruppe B befinden und Sie ausgewählt haben, dass Ihre Eins-zu-Eins-Zuordnung für diese Buchstaben von einem zum anderen ist, dann: dann sind hier einige Beispiel Ein- / Ausgänge:
Programm A:
Input Output
A A
D D
a A
q Q
Programm B:
Input Output
A a
D d
a a
q q
Andere Regeln:
- Die beiden Programme müssen nicht in derselben Sprache sein.
- Sie müssen nicht beide Programme oder beide Funktionen sein. Das eine könnte ein Programm sein, das andere eine Funktion, das ist in Ordnung.
- Sie müssen nicht auf die gleiche Weise arbeiten, von ähnlicher Länge sein, so etwas; Sie müssen einfach die anderen oben genannten Regeln erfüllen.
- Ja, nur eines Ihrer Programme darf Zeilenumbrüche und nur eines Leerzeichen verwenden (dies kann dasselbe oder ein anderes Programm sein).
- Sie müssen nicht alle 48 Zeichen in jedem Programm verwenden.
Standard-Schlupflöcher sind wie gewohnt verboten. Alle Programme müssen eigenständig sein, keine Dateien, die die von Ihnen gewählte Zuordnung enthalten.
Bewertungskriterien: Code-Golf . Insbesondere die Summe der Bytes des Texts der beiden Programme.
Bitte posten Sie Ihre Antwort so:
Sprache - # Bytes + Sprache - # Bytes = # Bytes
Eine eindeutige Beschreibung Ihres Mappings. Wenn es kompliziert ist, verwenden Sie ein Diagramm wie das folgende:
ABCDEFGHIJKLMNOPQRSTUVWXYZ (etc.) zyxwvutsrpqonmlkjihgfedcba (etc.)
Oder Sie können es einfach erklären (die ersten 48 Karten bis zu den letzten 48 in Folge), gefolgt von Ihrer normalen Antwort.
quelle
+
und>
und das andere mit-
und haben<
. Dann müssen Sie versuchen, die fehlenden Operatoren zu generieren, z. B. ein,
oder.
in dem Programm, das sie nicht verwenden kann.Antworten:
CJam - 11 Bytes + CJam - 25 Bytes = 36 Bytes
Zeichen werden in abwechselnden Gruppen von 16 ausgewählt:
Es ist cool, dass einige der Zuordnungen mit der Umschalttaste abgerufen werden können :)
Programm A:
Probieren Sie es online aus
Programm B:
Probieren Sie es online aus
Erläuterung:
Programm A:
Programm B:
quelle
\n
), es ist nur nicht einfach zu sehen, ohne das HTML zu überprüfen . Sie können einen anhangi
am Ende des Programms des ASCII - Code zu sehen , stattdessen (oderci
auch mit einer Newline Eingabe befassen, da es eine neue Zeile Zeichenfolge gibt eher als ein Zeichen in diesem Fall)_0=
,0=_
dass es immer ein Zeichen ausgibtCJam -
46442611 Bytes + GolfScript -1421251159368474036 Bytes = 47 BytesVielen Dank an Peter Taylor für das Golfen von 6 Bytes aus dem GolfScript-Programm (und den Weg für viele weitere.)
Vielen Dank an Dennis für das Golfen von 15 Bytes aus dem CJam-Programm und 4 Bytes aus dem GolfScript-Programm.
Gruppe A: alle Zeichen mit geradem Zeichencode.
Gruppe B: alle Zeichen mit ungeradem Zeichencode plus Zeilenvorschub.
Ich benutze die offensichtliche Zuordnung zwischen den beiden, dh paarweise die Zeichen, die sich nur im niedrigstwertigen Bit unterscheiden, sowie
~
und\n
. Hier ist die komplette Karte (die Spalten):Programm A (CJam, hier testen ):
Programm B (GolfScript, hier testen ):
Erläuterung
Programm A
(Veraltet, wird morgen aktualisiert.)
Dieses Programm sollte ungerade Zeichencodes in gerade umwandeln, dh das niedrigstwertige Bit auf 0 setzen. Die naheliegende Methode hierfür ist bitweises UND mit 126 (oder 254 usw.), aber es ist kürzer, es auf 1 zu setzen (über bitweises ODER mit 1) stattdessen und dekrementiere dann das Ergebnis. Zuletzt müssen wir die Zeilenumbrüche manuell korrigieren:
Programm B
(Veraltet, wird morgen aktualisiert.)
Dieses Programm kann nun einfach das niedrigstwertige Bit durch bitweises ODER mit 1 auf 1 setzen. Es muss jedoch manuell nach (Zeichencode 0x0B)
\v
und<DEL>
(Zeichencode 0xFF) suchen und~
stattdessen auf festlegen . In GolfScript hatte ich keinen Zugriff auf eval. Stattdessen können Sie einem Block eine Zeichenfolge hinzufügen (die dann Teil des Codes in diesem Block wird), die ich der Eingabe zuordnen konnte mit%
:Und was den generierten Code im Block betrifft:
quelle
Java - 1088 Bytes + Java - 1144 Bytes = 2232 Bytes
Vielen Dank an @ durron597 für die Unterstützung beim Golfen von 1090 Bytes aus dem ersten Programm.
Beweise, dass es möglich ist, in einer Sprache zu arbeiten (und zwar als Nicht-Esolang).
Verwenden Sie den Unicode-Trick, um den ersten in alle Unicode-Zeichen zu konvertieren. Die zweite Methode verwendet Reflection, um auf System.out zuzugreifen und auf std zu drucken. aus. Das u konnte nicht verwendet werden, da es im ersten Programm verwendet wurde. Ich weiß, dass man mehr Golf spielen kann, aber ich wollte zuerst eine gültige Lösung veröffentlichen.
Die Gruppen sind ziemlich willkürlich zugeordnet, aber im Grunde genommen benötigte die erste nur u, \ und die hexadezimalen Ziffern (auf jeden Fall).
Die Gruppen:
Erstes Programm:
Gleichwertig
Zweites Programm:
Probieren Sie sie hier aus: https://ideone.com/Q3gqmQ
quelle
void x(int z)
, das sind auch Zeichen im ersten ZeichensatzFEST! Pyth - 23 Bytes + Pyth - 30 Bytes = 53 Bytes
oops Fixing error --- bitte haben sie etwas geduldGleiche ASCII-Aufteilung wie bei Martin:
Prog # 1: Online testen
Prog # 2: Online testen
quelle