Buchstabe, Zahl, Symbol, Leerzeichen, Wiederholung


36

Es gibt 97 ASCII- Zeichen, die Menschen regelmäßig begegnen. Sie fallen in vier Kategorien:

  1. Buchstaben (52 gesamt)

    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    
  2. Zahlen oder Ziffern (10 insgesamt)

    0123456789
    
  3. Symbole & Interpunktion (32 insgesamt)

    !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
    
  4. Leerzeichen (3 insgesamt)

    Raum , Reiter \tund Newline \n. (Wir behandeln Zeilenumbruchvarianten \r\nals ein Zeichen.)

Der Einfachheit halber werden wir diese Kategorien L, N, S und W nennen.

Wählen Sie eine der 24 Permutationen der LNSWgewünschten Buchstaben aus und wiederholen Sie sie auf unbestimmte Zeit, um eine eigene Programmiervorlage zu erstellen.

Beispielsweise könnten Sie die Permutation auswählen NLWS, sodass Ihre Programmiervorlage wie folgt lautet:

NLWSNLWSNLWSNLWSNLWS...

Sie müssen ein Programm oder eine Funktion basierend auf dieser Vorlage schreiben, wobei:

  1. Jeder Lwird durch einen Buchstaben ( ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz) ersetzt.

  2. Jedes Nwird durch eine beliebige Zahl ersetzt ( 0123456789).

  3. Jedes Swird durch ein beliebiges Symbol ( !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~) ersetzt.

  4. Jedes WZeichen wird durch ein Leerzeichen ( \t\n) ersetzt.

Grundsätzlich muss Ihr Code dem Muster folgen

<letter><number><symbol><whitespace><letter><number><symbol><whitespace>...

Wie aus dem Fragentitel hervorgeht, können Sie bei Bedarf eine andere Reihenfolge der vier Zeichenkategorien auswählen.

Beachten Sie, dass:

  • Ersetzungen für eine Kategorie können unterschiedliche Zeichen sein. zB 9a ^8B\t~7c\n]passt sich gültig an die Schablone an NLWSNLWSNLWS( \tund \nwürde ihre wörtlichen Zeichen sein).

  • Es gibt keine Code-Längenbeschränkungen. zB 1A +2B -und 1A +2Bund 1A und 1alle entsprechen der Vorlage NLWSNLWSNLWS....

In Ihrem vorlagenkonformen Code muss lediglich ein nicht erweitertes ASCII- Zeichen verwendet und eine Zahl von 0 bis 4 ausgegeben werden, je nachdem, zu welcher Kategorie er in der obigen Kategorisierung gehört. Das heißt, es wird ausgegeben, 1wenn die Eingabe ein Buchstabe, 2eine Zahl, 3ein Symbol und ein 4Leerzeichen ist. Ausgabe, 0wenn die Eingabe keine davon ist (ein Steuerzeichen ).

Zur Eingabe können Sie alternativ eine Zahl von 0 bis einschließlich 127 eingeben, die den Code des eingegebenen ASCII-Zeichens darstellt.

Die Eingabe- (als Zeichencode) und Ausgabepaare, die Ihr Code haben muss, lauten genau wie folgt:

in out
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 4
10 4
11 0 or 4
12 0 or 4
13 0 or 4
14 0
15 0
16 0
17 0
18 0
19 0
20 0
21 0
22 0
23 0
24 0
25 0
26 0
27 0
28 0
29 0
30 0
31 0
32 4
33 3
34 3
35 3
36 3
37 3
38 3
39 3
40 3
41 3
42 3
43 3
44 3
45 3
46 3
47 3
48 2
49 2
50 2
51 2
52 2
53 2
54 2
55 2
56 2
57 2
58 3
59 3
60 3
61 3
62 3
63 3
64 3
65 1
66 1
67 1
68 1
69 1
70 1
71 1
72 1
73 1
74 1
75 1
76 1
77 1
78 1
79 1
80 1
81 1
82 1
83 1
84 1
85 1
86 1
87 1
88 1
89 1
90 1
91 3
92 3
93 3
94 3
95 3
96 3
97 1
98 1
99 1
100 1
101 1
102 1
103 1
104 1
105 1
106 1
107 1
108 1
109 1
110 1
111 1
112 1
113 1
114 1
115 1
116 1
117 1
118 1
119 1
120 1
121 1
122 1
123 3
124 3
125 3
126 3
127 0

Die Eingänge 11, 12 und 13 entsprechen den Zeichen, die manchmal Leerzeichen betrachtet, so kann ihre Ausgaben sein 0oder , 4wie Sie wünschen.

Der kürzeste Code in Bytes gewinnt.


5
Cookies zur ersten Antwort in einer 2D-Sprache.
Calvins Hobbys

2
Also benutze einfach BF und benutze die Buchstaben SSSS
Christopher

2
Dies schloss grundsätzlich alle herkömmlichen Programmiersprachen aus. 🙄 Was tun mit Sprachen, die eine eigene Codepage verwenden, z. B. Jelly?
Kennytm

1
Andere Zeichen sind nicht erlaubt.
Calvins Hobbys

2
Unary wird gewinnen!
Christopher

Antworten:


38

Haskell 300 Bytes

Dieser Code sollte keine nachgestellte Newline haben. Die Funktion m1nimmt die Eingabe als Charund gibt die Antwort als zurück Char.

f1 (l1 :n1 :p1 :y1 :l2 :n2 :p2 :y2 :r3 )x1 |y1 >p1 =b1 (x1 )y2 (f1 (r3 )x1 )y1 (n1 )n2 |p2 <p1 =b1 (x1 )y1 (n1 )p2 (f1 (p2 :y2 :r3 )x1 )l2 |p2 >p1 =b1 (x1 )p1 (l2 )l1 (n2 )n1
;b1 (x1 )s1 (r1 )b1 (r2 )r3 |x1 <s1 =r1 |x1 >b1 =r2 |s1 <b1 =r3
;m1 =f1 "d0 \t4 \r0 ~d3 {d1 `d3 [d1 @d3 :d2 /d3 !d4 \n0 ?d0 "

Ich konnte einer Herausforderung nicht widerstehen, von der jemand behauptete, dass sie für "konventionelle" Sprachen unmöglich sei.

Sie können darüber streiten, ob Haskell zählt, aber die Mehrzahl der Schlüsselwörter und Bezeichner besteht aus mehreren Zeichen und kann nicht verwendet werden. Funktionsdefinitionen auf oberster Ebene, Listen, Zeichenfolgenliterale, strenge Vergleiche, Mustervergleiche und Verzweigungen mit Wächtern funktionieren jedoch, solange Buchstaben direkt vor Ziffern und Symbole direkt vor Buchstaben vor \tund stehen \r. Leider erlauben die Permutationen, die für die allgemeine Programmierung funktionieren, keine numerischen Literale, so dass ich keine nützlichen Zahlen erhalten konnte.

Wie es funktioniert:

  • Die Intervalle der Zeichenklassen werden in der Zeichenfolge in der letzten Zeile codiert, wobei an den meisten Stellen der Symbole Grenzzeichen und an den meisten Stellen der Ziffern die Ergebnisse angezeigt werden, obwohl einige an den Enden mit Füllzeichen versehen sind.
  • Die Hauptfunktion ist m1.
  • x1 ist der Charakter, der analysiert wird.
  • Die f1Funktion unterbricht die Zeichenfolge mit Listenmusterabgleich und verfügt über drei Zweige: Wenn die Grenzen Symbole sind, die größer als Leerzeichen sind, Steuerzeichen, die kleiner als Leerzeichen sind, und für den endgültigen Vergleich mit Leerzeichen. Die Namen der Listenelemente sind für den ersten Zweig mnemonisch: Buchstabe, Zahl, sPace, sYmbol, Rest.
  • Die b1Funktion verarbeitet die Verzweigung für zwei Begrenzungszeichen s1 < b1gleichzeitig.

Probieren Sie es online aus


1
Willkommen auf der Seite! Ich vermute, dass dies kürzer sein wird als die meisten nicht-konventionellen Sprachen, die tatsächlich das gewünschte Ergebnis erzielen können.
Jonathan Allan

Gret Antwort! Ich habe versucht, Haskell zu verwenden, aber nach kurzer Zeit
aufgegeben

14

Netzhaut , 113 Bytes

Buchstabe, Zahl, Leerzeichen, Symbol, Wiederholung

T1 `a0 @a0 `b1	:D0
+T1 `d9 `a2
+T1 `a9	\n9 `a4
+T1 `l9 @L9 `a1
+T1 `d9 @p9 `d3
\b4
$n3
\b3
$n2
\b2
$n1
\b1
$n0
\n

Probieren Sie es online!

Teste es selbst!

Retina scheint ein gutes Werkzeug für diesen Job zu sein: Wir können alle Arten von Zeichen flexibel in der Bühnenkonfiguration verwenden und wir haben einige vordefinierte Zeichenklassen, die nützlich sein können.

Ich denke, dass dieses Problem entweder mit Ersatzphasen oder mit Transliterationsphasen gelöst werden könnte; Ich habe die Transliterationen ausgewählt, weil sie flexibler sind und die nützlichsten Zeichenklassen haben. In Bezug auf das \nQuellmuster war ich gezwungen, Symbole direkt vor Buchstaben zu setzen, um sie für Zeilenumbrüche zu verwenden (ich hatte tatsächlich eine kürzere Lösung, indem ich das praktischere ¶ für Zeilenumbrüche verwendete, aber Nicht-ASCII-Zeichen sind verboten).

Erläuterung

Die ersten Schritte sind Transliterationen. Wir verwenden +und 1als Optionen, um das Muster am Laufen zu halten, aber sie haben keinen Einfluss auf das Bühnenergebnis. Die Syntax besteht darin T`from`to, jedes Zeichen fromauf das Zeichen an derselben Position in abzubilden to. Wenn tokürzer als ist from, wird das endgültige Zeichen so oft wie nötig wiederholt. Wenn fromZeichen wiederholt wurden, wird nur das erste Vorkommen jedes Zeichens berücksichtigt. Einige Buchstaben entsprechen Zeichenklassen, zB dentspricht 0123456789.

T1 `a0 @a0 `b   :D0

Damit ordnen wir einige Zeichen anderen Zeichen der gleichen Klasse zu, um "etwas Platz" für nachfolgende Transliterationen zu schaffen. ( a-> b, 0-> 1, space-> tab, @-> ;). Das Finale :D0ist nur ein Smiley: D0

+T1 `d9 `a2

Wir beginnen mit Ziffern, dist die Zeichenklasse 0-9, hier transformieren wir 0-> a, 1-9-> 2, space-> 2: die Transliterationen für 0und spacesind falsch, aber diese Zeichen wurden durch die vorherige Transliteration eliminiert.

+T1 `a9 \n9 `a4

Whitespace - Transformation a-> a( 9, tab, \n, space) -> 4. 9wurde bereits in der vorherigen Stufe entfernt.

+T1 `l9 @L9 `a1

Buchstaben, hier verwenden wir zwei verschiedene Zeichenklassen (aus Mangel an einer vollständigeren): lfür Kleinbuchstaben und Lfür Großbuchstaben. Sie alle 1werden zusammen mit einigen anderen Charakteren abgebildet , die in den vorherigen Phasen behandelt wurden

+T1 `d9 @p9 `d3

Symbole. Da jede andere Klasse hat sich zu einer Ziffer verwandelt, hier bilden wir alle Stellen , um sich mit d-> dund dann alle druckbaren Zeichen 3mit p-> 3. Ziffern gehören ebenfalls zu den druckbaren Zeichen, aber die erste Transliteration gewinnt.

Jetzt müssen wir 0Steuerzeichen zuweisen , aber ich habe keine gültige Möglichkeit gefunden, diese Klasse explizit anzusprechen. Stattdessen konvertieren wir jede Ziffer in eine unäre: Steuerzeichen sind keine Ziffern und werden daher als leere Zeichenfolge betrachtet, was einer 0unären entspricht. Leider ist der unäre Konvertierungsbefehl in der Netzhaut $*, das sind zwei Symbole in der Nähe, also konvertieren wir stattdessen "manuell" mit Hilfe von Substitutionen.

\b4
$n3
\b3
$n2
\b2
$n1
\b1
$n0

Unsere unäre Ziffer ist $n, was ein Ersatzmuster für Zeilenumbrüche ist. \bEntspricht einer "Grenze", an der ein alphanumerisches Wort beginnt oder endet. In unserem Fall steht dies immer vor einer beliebigen Zahl. Grundsätzlich ersetzen wir jede Nummer ndurch ein Zeilenvorschubplus n-1.

\n

Am Ende zählen wir die Anzahl der Zeilenumbrüche und erhalten das gewünschte Ergebnis.


11

Kardinal 2240 2224 Bytes

Vorlage verwendet LSNW

a%1
a:1 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a+1 a+1 a+1 a+1 a.1 x.1 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a>0 a+1 a+1 a+1 a+1 a.1 x>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a+1 a+1 a+1 a.0 x>1 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a+1 a+1 a.0 x>1 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a+1 a+1 a+1 a.0 x>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a+1 a.0 x>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a+1 a+1 a+1 a.0 x>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a+1 a.0 x>1 a>1 a>1 a>1 a>1 a>1 a>1 a+1 a+1 a+1 a.0
a>1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a>1 a>1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a>1 a>1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a>1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a>1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a>1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^0 a.0

Der Code hat eine nachgestellte Newline.

Wie es funktioniert:

Dieser Code enthält viele Zeichen, die nicht verwendet werden.
% gibt einen Zeiger in alle Richtungen frei. 3 von ihnen treffen einfach das Ende einer Linie und sterben.
Der letzte Zeiger nimmt eine Eingabe an:
Diese Eingabe wird dann mit jedem Wert von 0 bis 127 verglichen.

Drucke:
0 für 0-8
4 für 9-12
0 für 13-31
4 für 32
3 für 33-47
2 für 48-57
3 für 58-64
1 für 65-90
3 für 91-96
1 für 97-122
3 für 123-126
0 für 127

Verwendete Operationen:
J = Nächste Operation überspringen, wenn nicht Null
^ = Richtung nach oben
ändern> = Richtung nach links ändern
- = Dekrementieren
+ = Inkrementieren
: = Eingabe übernehmen
% = Zeiger beim Programmstart
erzeugen x = Zeiger entfernen
0 = Aktiv setzen Wert des Zeigers auf 0

Probieren Sie es online aus


7

Perl 5 , 293 Bytes

291 Byte Code + 2 für -0p .

Ich wurde darauf hingewiesen, dass die Befehlszeilen-Flags kostenlos sind, aber ich habe sie hier -0zur besseren Übersicht hinzugefügt, da der TIO-Link keine enthält , um das Testen zu vereinfachen.

y 0-a 1"a 1#a 1$a 1%a 1&a 1'a 1(a 1)a 1*a 1+a 1,a 1.a 1/a 1_a 1{a 1|a 1}a 1~a 0!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 0;s 0\s
0\t
0;s 0\d
0\r
0;s 0\w
0\n
0;y 1!a 9-a 1_a 0-Z 1;s 0\w
0\u 3\u 0;s 1\S
1\u 0\u 1;s 0\t
0\u 4\u 0;s 0\r
0\u 2\u 0;s 0\n
0\u 1\u 0

Probieren Sie es online!

Dies ist eine besonders knifflige Herausforderung, die in fast jeder Sprache zu lösen ist. Ich bin also ziemlich froh, dass ich in der Lage war (endlich eine ganze Reihe von Bastelarbeiten durchzuführen), dies in Perl zum Laufen zu bringen. Hoffentlich ist das zusätzliche Leerzeichen vor und nach der Nummer kein Problem.

Die Auswahl der Sequenz , um besonders heikel, aber forunately s///und y///kann ein anderes Zeichen als Trennzeichen akzeptieren , so war es möglich , Brief, Raum, Zahl, ein Symbol zu verwenden, die für erlaubt s 0...0...0;undy 0...0...0; .

Das erste, was für die Annäherung erforderlich war, war das Ersetzen _mit, !so dass \wnur Übereinstimmungen erzielt wurden [0-9a-zA-Z], und dann alle Leerzeichen ( \s) mit \t, alle Ziffern mit \rund alle verbleibenden Wortzeichen ( \w) mit, \num später eine einfache Zuordnung zu ermöglichen. Dann werden die unter Verwendung des y///Bedieners, werden alle verbleibenden Symbole zu Wort - Zeichen umgewandelt !zu _und alle anderen Zeichen (zwischen 9und a) nach unten verschoben werden 9 Plätze, um sie in Buchstaben oder Zahlen drehen. Diese werden dann durch \wmit ersetzt, 3und die anderen zuvor vorgenommenen Ersetzungen werden durch ihre nummerierten Werte ersetzt.


1

Leerzeichen , 1332 Bytes

Y0! Y0! Y0! Y0!
Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0!
Y0! Y0! Y0! Y0!
Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0!
Y0!
Y0! Y0!
Y0! Y0! Y0!
Y0!
Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0!
Y0! Y0! Y0!
Y0!
Y0!
Y0!
Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0!
Y0! Y0! Y0!
Y0!
Y0!
Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0!
Y0! Y0! Y0!
Y0!
Y0!
Y0!
Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0!
Y0! Y0! Y0!
Y0!
Y0!
Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0!
Y0! Y0!
Y0! Y0! 

Reihenfolge ist 1234/ LNSW(Buchstabe, Ziffer, Symbol, Leerzeichen).

Probieren Sie es online aus (Eingabe als Ganzzahl, die den Unicode eines Zeichens darstellt).

Erläuterung:

Whitespace ist eine stapelbasierte Sprache, bei der alle Zeichen außer Leerzeichen, Tabulatoren und Zeilenumbrüchen ignoriert werden. Hier ist das gleiche Programm ohne die YO!( 333 Bytes ):

[S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   T   _Read_STDIN_as_integer][T   T   T   _Retrieve][S N
S _Duplicate_input(9)][S N
S _Duplicate_input(10][S N
S _Duplicate_input(32)][S N
S _Duplicate_input(33-47)][S N
S _Duplicate_input(48-57)][S N
S _Duplicate_input(58-64)][S N
S _Duplicate_input(65-90)][S N
S _Duplicate_input(91-96)][S N
S _Duplicate_input(97-122)][S N
S _Duplicate_input(123-126)][S S S T    S S T   N
_Push_9][T  S S T   _Subtract][N
T   S S N
_If_0_Jump_to_Label_WHITESPACE][S S S T S T S N
_Push_10][T S S T   _Subtract][N
T   S S N
_If_0_Jump_to_Label_WHITESPACE][S S S T S S S S S N
_Push_32][T S S T   _Subtract][S N
S _Duplicate][N
T   S S N
_If_0_Jump_to_Label_WHITESPACE][N
T   T   S T N
_If_negative_Jump_to_Label_NONE][S S S T    T   S S S S N
_Push_48][T S S T   _Subtract][N
T   T   N
_If_negative_Jump_to_Label_SYMBOL][S S S T  T   T   S T S N
_Push_58][T S S T   _Subtract][N
T   T   S S N
_If_negative_Jump_to_Label_DIGIT][S S S T   S S S S S T N
_Push_65][T S S T   _Subtract][N
T   T   N
_If_negative_Jump_to_Label_SYMBOL][S S S T  S T T   S T T   N
_Push_91][T S S T   _Subtract][N
T   T   T   N
_If_negative_Jump_to_Label_LETTER][S S S T  T   S S S S T   N
_Push_97][T S S T   _Subtract][N
T   T   N
_If_negative_Jump_to_Label_SYMBOL][S S S T  T   T   T   S T T   N
_Push_123][T    S S T   _Subtract][N
T   T   T   N
_If_negative_Jump_to_Label_LETTER][S S S T  T   T   T   T   T   T   N
_Push_127][T    S S T   _Subtract][N
T   T   N
_If_negative_Jump_to_Label_SYMBOL][N
S N
S T N
_Jump_to_Label_NONE][N
S S S N
_Create_Label_WHITESPACE][S S S T   S S N
_Push_4][T  N
S T _Print_as_integer][N
N
N
_Exit][N
S S N
_Create_Label_SYMBOL][S S S T   T   N
_Push_3][T  N
S T _Print_as_integer][N
N
N
_Exit][N
S S S S N
_Create_Label_DIGIT][S S S T    S N
_Push_2][T  N
S T _Print_as_integer][N
N
N
_Exit][N
S S T   N
_Create_Label_LETTER][S S S T   N
_Push_1][T  N
S T _Print_as_integer][N
N
N
_Exit][N
S S S T N
_Create_Label_NONE][S S S N
_Push_0][T  N
S T _Print_as_integer]

Buchstaben S(Leerzeichen), T(Tabulator) und (Zeilenvorschub) werden Nnur als Hervorhebungen hinzugefügt.
[..._some_action]nur als Erklärung hinzugefügt.

Probieren Sie es online aus.

Programm in Pseudocode:

If the input is 9, 10 or 32: call function WHITESPACE()
Else-if the input is below 32: call function NONE()
Else-if the input is below 48: call function SYMBOL()
Else-if the input is below 58: call function DIGIT()
Else-if the input is below 65: call function SYMBOL()
Else-if the input is below 91: call function LETTER()
Else-if the input is below 97: call function SYMBOL()
Else-if the input is below 123: call function LETTER()
Else-if the input is below 127: call function SYMBOL()
Else (the input is 127 or higher): call function NONE()

WHITESPACE():
  Print 4
  Exit program
SYMBOL():
  Print 3
  Exit program
DIGIT():
  Print 2
  Exit program
LETTER():
  Print 1
  Exit program
NONE():
  Print 0
  (Implicit exit with error: Exit not defined)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.