Zahlen für Buchstaben


15

Es gibt eine sehr einfache Chiffre, die einen Buchstaben durch seine Position im Alphabet ersetzt. Zum Beispiel abcwürde 1 2 3in dieser Chiffre werden.

Diese Herausforderung ist eine alternative Herangehensweise an diese Chiffre.


Die Herausforderung

Erstellen Sie ein Programm, das eine Eingabe von ASCII-Zeichen akzeptiert und eine durch Leerzeichen getrennte Zeichenfolge ausgibt:

  • ganze Zahlen -26durch26

  • Briefe adurchj

Die Ausgabe sollte über STDOUT oder die nächstgelegene Alternative Ihrer Sprache erfolgen.


Spezifikationen

  • Großbuchstaben sollten negiert werden. Ein Kapital wäre Dzum Beispiel -4, während ein Kleinbuchstabe dwäre 4.

  • Stellen sollten in ihre Alpha-Gegenstücke geändert werden. 1Sein aund so weiter. Alle Nullen in der Eingabe werden j.

  • Alle nicht alphanumerischen Zeichen (außer Leerzeichen) sollten ignoriert werden.

  • Leerzeichen sind 0.

  • Benachbarte Leerzeichen in der Ausgabe sollten auf ein einzelnes Leerzeichen reduziert werden.

    Input: You + Me
    Correct Output: -25 15 21 0 -13 5
    Incorrect Output: -25 15 21 0 0 0 -13 5
    
  • Ein einzelnes Leerzeichen oder eine neue Zeile ist zulässig.


Beispiele

Input: programming puzzles
Output: 16 18 15 7 18 1 13 13 9 14 7 0 16 21 26 26 12 5 19

Input: Code Golf
Output: -3 15 4 5 0 -7 15 12 6

Input: Programming Puzzles & Code Golf
Output: -16 18 15 7 18 1 13 13 9 14 7 0 -16 21 26 26 12 5 19 0 -3 15 4 5 0 -7 15 12 6

Input: C0d3 G0lf
Output: -3 j 4 c 0 -7 j 12 6

Input: abc_ABC
Output: 1 2 3 -1 -2 -3

Anzeigetafel

Damit Ihre Partitur auf der Tafel erscheint, sollte sie in folgendem Format vorliegen:

# Language, Bytes

Durchgestrichene Symbole sollten kein Problem verursachen.



Kann die Ausgabe ein Leerzeichen enthalten?
Dennis

Ja. Ein einzelnes Leerzeichen oder eine neue Zeile ist zulässig. @ Tennis
Zach Gates

Ist eine Funktion, die einen String zurückgibt / druckt, eine gültige Antwort? Können Sie auch einen Testfall wie "abc_ABC" hinzufügen, um alle regulären Ausdrücke [^ \ w] und [\ W] auszuschließen?
Max

Ich war mir nicht ganz sicher, was Sie fragten, aber ich habe diesen Testfall hinzugefügt. Ich hoffe, das haben Sie gesucht. wenn nicht, lass es mich wissen. @ Max
Zach Gates

Antworten:


10

CJam, 58 57 54 51 50 49 Bytes

Gerade als ich die Erklärung aufgeschrieben habe, ist mir aufgefallen, dass eine der alternativen 50-Byte-Versionen um ein Byte verkürzt werden kann ...

q_el_eu&S-A,s--S%S*{i_32md\2*5-*48md@)A%'a+\?}%S*

Teste es hier.

50-Byte-Lösungen:

q_el_eu&S-A,s--S%S*{_A,s&\i_)A%'a+\32md\2*5-*?}%S*
q_el_eu&S-A,s--S%'`*{i32md:D;(_(2*(D*D3+A%'a+?}%S*
q_el_eu&S-A,s--S%'`*{i32md\(_@_@(2*(*\3+A%'a+?}%S*
q_el_eu&S-A,s--S%'`*{i32md\(_(2*(g@*_z3+A%'a+?}%S*

Erläuterung

q         e# Read input.
_el_eu&   e# Intersect a lower-case version with an upper-case version to remove
          e# all letters.
S-        e# Remove spaces from that string.
A,s-      e# Remove digit characters from that string. It now contains all the
          e# the characters from the input we should ignore.
-         e# Remove these characters from the input.
S%S*      e# Split on runs of spaces and join by spaces, collapsing multiple into one.
{         e# Map this block onto each character...
  i_      e#   Convert to character code and make a copy.
  32md    e#   Get divmod 32. Note that digits have character codes 32 + something,
          e#   the upper case letters have character codes 64 + n (where n is the 
          e#   absolute value we want), while lower case letters have codes 96 + n. 
          e#   So the div gives 2 or 3 to distinguish capitalisation (and 1 for digits) 
          e#   and the mod gives the correct absolute value for letters.
          e#   As it happens, the mod also gives 0 for spaces.
  \2*5-   e#   Pull up the div, duplicate, subtract 5. Turns 2 into -1 and 3 into 1. 
          e#   It also turns 1 (digits) into -3.
  *       e#   Multiply the mod by this sign.
          e#   We now have the correct result for everything but digits. Note that
          e#   the absolute value for digits is more than 26, and for everything
          e#   else it's less than 27.
  48md    e#   Get divmod 48. This gives div 0 and mod n for all correct results n.
          e#   For digits it gives div -1 and we don't care about the mod. We'll
          e#   use the div as a truthy/falsy value to select the right result.
  @)A%    e#   Pull up the other copy of the character code, increment 
          e#   (range 49..58), take modulo 10.
          e#   This gives 9 for 0 and n-1 for any other digit n.
  'a+     e#   Add to the character a.
  \?      e#   Select the correct result based on the div 48.
}%
S*        e# Join the resulting values by spaces.

Dies muss das erste Mal sein, dass CJams Modulo-Verhalten für negative Werte für mich nützlich war.


6

JavaScript (ES6), 110 107 133 120 Byte

Nimm das, alter ich!

a=>[...a.replace(/[\W_]*?( ?)[\W_]*/g,'$1')].map(x=>(c=x.charCodeAt())<40?0:c<60?'jabcdefghi'[x]:c<91?64-c:c-96).join` `

Es gibt möglicherweise viel mehr Platz zum Golfen, vor allem, wenn es um die Regexes geht. Ungolfed-Version:

function f(a) {
  // Replaces each run of bad chars and spaces with
  // a space if it contained one, nothing otherwise:
  a = a.replace(/[\W_]*?( ?)[\W_]*/g, '$1');

  var b = a.split('');
  b = b.map(function(x) {
    var c = x.charCodeAt();
    if (c == 32)     // space
      return 0;
    else if (c < 60) // numbers
      return 'jabcdefghi'.charAt(x);
    else if (c < 91)
      return 64 - c; // uppercase
    else
      return c - 96; // lowercase
  });
  b = b.join(' ');
  return b;
}

Vorschläge willkommen!


Testen Sie "123___abc". Hinweis: Sie müssen mit Unterstrichen umgehen
edc65

Ein weiteres Problem: All non-alphanumeric characters should be ignored.. Test: 'A $ b' sollte sein-1 2
edc65

@ edc65 Aw, Mann, ich dachte, ich hätte es geschafft ... Aber danke, dass du mich informiert hast!
ETHproductions

4

Pyth, 50 49 Bytes

jdm?>d26C+70ddm-xZd26:-z-z=Zs[_rG1dGjk.<UT1)" +"d

Probieren Sie es hier aus .

Bearbeiten: Neu strukturierte String-Bereinigung, um sicherzustellen, dass Unterstriche korrekt behandelt werden. Es hat sogar ein Byte gespart, yay!

Dieses Programm erstellt eine Suchzeichenfolge, mit der die Eingabe bereinigt wird. Dies wird dann dem entsprechenden Index in dieser Zeichenfolge zugeordnet. Schließlich wird jeder Index, der größer als 26 ist, in das richtige ASCII-Zeichen konvertiert.

                                                     Implicit: z=input(), d=' ', ,
                                                       k='', G=[a-z]
                              _rG1                   Reversed, capitalised alphabet
                                  d                  Single space
                                   G                 Lower case alphabet
                                    jk.<UT1          '1234567890'
                            s[             )         Concatenate the 4 previous statements
                          =Z                         Store in Z
                        -z                           Setwise difference of input and above
                                                       (to get all illegal characters)
                      -z                             Setwise difference of input and illegal chars
                     :                      " +"d    Regex replace to lose multiple spaces
              m                                      Map the above over d:
                xZd                                    Get index of d in Z
               -   26                                  Subtract 26
  m                                                  Map the above over d:
   ?>d26                                               If d > 26
        C+70d                                            Convert (d+70) to ASCII
             d                                         Otherwise, select d
jd                                                   Join on spaces and print

Vorherige Version, die \WRegex verwendet hat, mit 50 Bytes:

jdm?>d26C+70ddm-xs[_rG1\ Gjk.<UT1)d26::z"\W"d" +"d

3

Julia, 145 136 Bytes

r=replace;print(join([47<x<58?x+58-10(x>48):x==32?0:cmp(x,96)*(lowercase(x)-96)for x=r(r(readline(),r"[^a-z0-9 ]"i,""),r" +"," ")]," "))

Ungolfed:

# Read a string from STDIN
input = readline()

# Remove non-alphanumeric characters and replace duplicated spaces
r = replace(replace(input, r"[^a-z0-9 ]"i, ""), r" +", " ")

# Construct an array using comprehension over the replaced input string
A = [47 < x < 58 ? x + 58 - 10(x > 48) : x == 32 ? 0 : cmp(x, 96) * (lowercase(x) - 96) for x = r]

# Join the array elements with spaces
j = join(A, " ")

# Print to STDOUT
print(j)

Um die Ziffern als Buchstaben zu erhalten, addieren wir 58 zum ASCII-Wert und subtrahieren 10, wenn das aktuelle Zeichen nicht 0 ist. Dadurch wird sichergestellt, dass 0 jund die anderen Ziffern a- zugeordnet sind i.

Das Negieren von Großbuchstaben erfolgt mit cmp. Dies gibt -1 für Großbuchstaben und 1 für Kleinbuchstaben zurück.

Probieren Sie es online aus


2

Perl 5, 120 & ndash; 116 113 105 Bytes

Bereinigt zuerst die unerwünschten Zeichen und zusätzlichen Leerzeichen.
Klettert dann für jeden Charakter die ASCII-Tabelle hinunter.

$_=pop;s/[^\w ]|_//g;s/ +/ /g;map{$n=ord;say$".($n>96?$n-96:$n>64?64-$n:$n>48?chr$n+48:$n>47?j:0)}split//

Prüfung

$ perl -M5.01 numbers4letters.pl "zZaA _ 190"
 26 -26 1 -1 0 a i j
$ perl -M5.01 numbers4letters.pl "PrOgr4mm1n9 Puz2l3s & C0d3_G0lf!"
-16 18 -15 7 18 d 13 13 a 14 i 0 -16 21 26 b 12 c 19 0 -3 j 4 c -7 j 12 6

2
Sie können ein Zeichen mit einem Leerzeichen in Regex anstelle von \ s als Golf spielen s/ +/ /g, und das zweite Regex kann als Golfspiel verwendet werden . Das erste Regex ist falsch, weil \ w mit dem Unterstrich übereinstimmt
Max

2
Weitere zwei Charaktere mits/[^\w ]|_//g
Max

Schön, noch besser als mit der Ignorier-Case-Flagge.
LukStorms

@ Max netter Hinweis. 2 Bytes in meiner Antwort gespeichert, danke.
EDC65

2

C 142 138 135

c,d;main(s){while(c=getchar()+1)d=c|32,c=d-98<26u?s=(d-97)*(c/32*2-5),0:c-48<11u?s='a'+c%10,4:c==33&&s?s=0,0:3,printf("%d \0%c "+c,s);}

Ein bisschen Ungolfed:

int c,d;
int main(int s)                     // s initially non-zero, meaning spaces are allowed
{
    while(c=getchar()+1)            // getchar until EOF (-1) encountered
    {
        d=c|32;                     // d becomes lowercase c (both incremented by 1)
        if (d-98<26u)               // check for letter
        {
            s=(d-97)*(c/32*2-5);    // print this number and allow subsequent spaces
            c=0;                    // format string will be "%d "
        }
        else if (c-48<11u)          // check for digit
        {
            s='a'+c%10;             // print this letter and allow subsequent spaces
            c=4;                    // format string will be "%c "
        }
        else if (c==33&&s)          // else if space and allowed to output spaces
        {
            s=0;                    // print 0 and disallow subsequent spaces
            c=0;                    // format string will be "%c "
        }
        else
        {
            c=3;                    // format string will be "", prints nothing
        }
        printf("%d \0%c "+c,s);     // final c is treated as index into string literal
    }
}

Besteht die angegebenen Tests in GCC 4.9.3 und Clang 3.5.2.


2

> <> (Fisch), 219 209 Bytes

>i:84*=?v:86*1-)?!^:f4*2-(?v:88*)?!v:a9*1+(?v:c8*)?!^:ca*3+  (?v~
>4*(?vov>~86*$:@=?v86*00.  >:86*=?v77*1-+00.>88*-::-$-00.01-*8c<
 >.! ! ! 00~v?( 0:\00. >.!00+6*aa~<>~    92*2!.<2*29<
^7:;?=0:<r0~<
*o73.>n>84

Versuch es hier aus

Dies ist meine erste Code Golf Antwort! Endlich konnte ich die Sprache verwenden, die ich für eine Code-Golf-Herausforderung verwenden wollte, und dies schien die perfekte zu sein, da Zeichen automatisch in Dezimalstellen umgewandelt werden.

Ich habe erwartet, dass mein Ergebnis viel kürzer ist, aber anscheinend nicht. Allerdings habe ich diesen nicht zu sehr golfen. Es gibt ein paar Stellen, an denen der Code sauberer / sinnvoller sein könnte, aber keine Bytes speichert, da sie sich an Stellen befinden, an denen ohnehin Leerzeichen erforderlich sind. Es könnte eine Möglichkeit geben, einige Bytes im letzten Bit in der zweiten Zeile zu speichern, damit es in die entgegengesetzte Richtung geht und mit der 00 zusammenpasst, die bereits da ist. Ich muss später mehr damit spielen

Grundsätzlich wird überprüft, ob das aktuelle Zeichen ein Leerzeichen, eine Zahl, ein Großbuchstabe oder ein Kleinbuchstabe ist, indem überprüft wird, ob es sich im Bereich der höchsten / niedrigsten Werte dieser Gruppe befindet. Wenn dies nicht der Fall ist, wird es verworfen. Wenn es sich um einen Buchstaben handelt, wird es in eine Zahl umgewandelt, wenn es sich um einen Buchstaben handelt, und in einen Buchstaben, wenn es sich um eine Zahl handelt (oder vielmehr eine Zahl von 97-106, die die Werte für die Buchstaben aj sind). Dann wird geprüft, ob der oberste Wert kleiner als 28 ist. In diesem Fall handelt es sich um eine Zahl und gibt eine Zahl aus. Andernfalls handelt es sich um einen Buchstaben und gibt den von der Zahl dargestellten Buchstaben aus. Anschließend wird eine Schleife ausgeführt, bis der Stapel leer ist.


2

JavaScript (ES6), 108 122 124

Bearbeiten Mit dem regulären Ausdruck aus @ Max's Kommentar
Bearbeiten2 14 Bytes gespeichert dank ETHProductions

EcmaScript 6 ist nur für die Pfeilfunktionen gedacht, daher sollte es in Firefox und neuestem Chrome funktionieren.

Testen Sie das folgende Snippet

F=
t=>t[R='replace'](/[^\w ]|_/g,'')[R](/ +|./g,c=>((v=parseInt(c,36))>9?c>'Z'?v-9:9-v:'jabcdefghi'[v]||0)+' ')

// Less golfed
U=t=>
  t.replace(/[^\w ]|_/g,'') // remove invalid characters
  .replace(/ +/g,' ') // collapse spaces
  .replace(/./g, c => ( // valid character replacing
    v = parseInt(c,36), // '0'..'9'-> 0..9, 'a'..'z' -> 10..25, ' ' -> NaN
    (
      v > 9 
      ? c > 'Z' ? v-9 : 9-v // manage upper vs lower
      : 'jabcdefghi'[v] || 0 // digits, NaN as an index gives undefined, substituted with 0
    ) + ' ' // separator space
  ))


// TEST
out=x=>O.textContent=x+'\n'+O.textContent;

function go() { out(I.value + ' --> ' + F(I.value) +'\n')}

// test cases, a trailing blank added to the expected output as ...
// "A single trailing space or newline is allowed."

;[
  ['A$b','-1 2 ']
, ['123___abc', 'a b c 1 2 3 ']
, ['You + Me','-25 15 21 0 -13 5 ']
, ['programming puzzles', '16 18 15 7 18 1 13 13 9 14 7 0 16 21 26 26 12 5 19 ']
, ['Code Golf', '-3 15 4 5 0 -7 15 12 6 ']
, ['Programming Puzzles & Code Golf', '-16 18 15 7 18 1 13 13 9 14 7 0 -16 21 26 26 12 5 19 0 -3 15 4 5 0 -7 15 12 6 ']
, ['C0d3 G0lf', '-3 j 4 c 0 -7 j 12 6 ']
].forEach(t=>{ 
  k=t[1],r=F(t[0]), 
  out('Test '+(k==r?'OK':'Fail')+'\nInput:  '+t[0]+'\nResult: '+r+'\nCheck:  '+k+'\n')
})
Custom test: <input id=I><button onclick='go()'>-></button>
<pre id=O></pre>


Ich kann falsch sein, aber ich denke , man kann , indem eine ganze Reihe speichern [R](/ +/g,' ')[R](/./g,zu [R](/ +|./g,. (Entschuldigen Sie, dass Sie einen alten Beitrag veröffentlicht haben, übrigens)
ETHproductions

@ETHproductions scheint gut zu sein. Vielen Dank
edc65


1

CJam, 52 Bytes

'{,97>:L_eu+A,s(++S+l{1$&},S%S*\26,:)_Wf*+LA<+0+erS*

Probieren Sie es online aus

Der Hauptbestandteil der Lösung besteht darin, dass der CJam- erOperator (Transliteration) verwendet wird. Als Argumente für den Operator werden die Liste aller Zeichen und eine Liste der entsprechenden Werte benötigt.

Als Vorverarbeitungsschritt für die Eingabe werden Zeichen entfernt, die nicht Teil der Übersetzungstabelle sind (Sonderzeichen), und wiederholte Leerzeichen werden auf ein einzelnes Leerzeichen reduziert.

Erläuterung:

'{,97>  Build list of all lower case letters.
:L      Save it in variable L for later reuse.
_eu+    Add list of upper case letters.
A,s     Build digits "0123456789".
(+      Pop off first digit and append it at the end, to get "1234567890".
+       Add digits to list of characters.
S+      Add a space. List of characters that have values is now complete.
l       Get input.
{1$&},  Filter out all input characters that are not in list.
S%      Split input at spaces.
S*      And re-assemble it with spaces. This reduces multiple spaces to one space.
\       Swap input and character list.
26,     Start building list of values. Start with [0 ... 25].
:)      Use "smilie operator" to increment all values, to get [1 ... 26].
        These are the values for the lower case letters.
_Wf*    Copy the list and negate the values to get [-1 ... -26] for upper case.
+       Concatenate the two lists.
L       Retrieve the list of lower case letters we saved away earlier.
A<      Keep the first 10, which are the values for the digits.
+       Concatenate to list of values.
0+      Add 0 to list, as value for space.
er      Transliterate input string to corresponding values.
S*      Join with spaces for output.

1

Python 2, 191 179 177 173 172 168 160 Bytes

import re
print" ".join([[[chr(x+48),"j"][x<49],[`[x-96,-x+64][x<96]`,"0"][x<65]][x>57or x<33]for x in map(ord,re.sub(" +"," ",re.sub("[^\w ]|_","",input())))])

Prüfung

"programming puzzles"
16 18 15 7 18 1 13 13 9 14 7 0 16 21 26 26 12 5 19

"Code Golf"
-3 15 4 5 0 -7 15 12 6

"Programming Puzzles & Code Golf"
-16 18 15 7 18 1 13 13 9 14 7 0 -16 21 26 26 12 5 19 0 -3 15 4 5 0 -7 15 12 6

"C0d3 G0lf"
-3 j 4 c 0 -7 j 12 6

"You + Me"
-25 15 21 0 -13 5

1

PHP, 116 Bytes

while($c=ord(preg_replace(["#[^\w ]|_#","# +#"],["","@"],$argn))[$i++])echo$c<96?jabcdefghi[$c-48]?:64-$c:$c-96," ";

nimmt Eingaben von STDIN entgegen; renn mit -nR.

Nervenzusammenbruch

while($c=ord(preg_replace(["#[^\w ]|_#","# +#"],["","@"],$argn) # sanitize input
    [$i++]))echo            # loop through string and print ...
    $c<96                       # if not lowercase:
        ?jabcdefghi[$c-48]          # digit -> letter
        ?:                          # if that turned out falsy (=empty):
        64-$c                       # uppercase (or former spaces) -> negative (or 0)
    :$c-96                      # else -> positive
," ";                           # append space

Sie können das @Symbol durch ein Backtick ersetzen , um Leerzeichen im Kleinbuchstabenbereich zu behandeln.
Mit jabcdefghi0für die Ziffern könnten Sie auch verwenden :.


Ich glaube, dass Sie die Reihenfolge ändern müssen, "#_|[^\w ]#"anstatt "#[^\w ]|_#".
Jörg Hülsermann

0

Hassium , 1156 Bytes

func main() {s = input();c="";for(x=0;x<s.length;x++){c=s[Convert.toNumber(Convert.toString(x))].toString();if (c.toLower()!=c)print(r(c.toLower())*-1);else if(r(c)=="")continue;else print(r(c));print(" ");}}func r(c) {if(c=="a")return 1;else if(c=="b")return 2;else if(c=="c")return 3;else if(c=="d")return 4;else if(c=="e")return 5;else if(c=="f")return 6;else if(c=="g")return 7;else if(c=="h")return 8;else if(c=="i")return 9;else if(c=="j")return 10;else if(c=="k")return 11;else if(c=="l")return 12;else if(c=="m")return 13;else if(c=="n")return 14;else if(c=="o")return 15;else if(c=="p")return 16;else if(c=="q")return 17;else if(c=="r")return 18;else if(c=="s")return 19;else if(c=="t")return 20;else if(c=="u")return 21;else if(c=="v")return 22;else if(c=="w")return 23;else if(c=="x")return 24;else if(c=="y")return 25;else if(c=="z")return 26;else if(c==" ")return 0;else if(c=="1")return "a";else if(c=="2")return "b";else if(c=="3")return "c";else if(c=="4")return "d";else if(c=="5")return "e";else if(c=="6")return "f";else if(c=="7")return "g";else if(c=="8")return "h";else if(c=="9")return "i";else if(c=="0")return "j";else return"";}

Sehr lange Antwort


1
Das Einklappen von Räumen scheint nicht ganz zu funktionieren. You + Meerzeugt die Ausgabe -25 15 21 0 0 -13 5.
Dennis

1
Interessante Sprache, so ähnlich wie C / Java / [eine andere Sprache, an deren Namen ich mich nicht erinnern kann]. Gibt es eine einfachere Möglichkeit, jedes Zeichen in eine Zahl umzuwandeln, dh eine Funktion zum Abrufen eines Zeichencodes ? (Scrolle runter zu der Tabelle und sieh dir die DecSpalte an.)
ETHproductions

0

Jelly , 32 Bytes, Sprachnachstellung

⁶ØB;µ³fi@€
Øaḣ⁵ṙ9
26RµN;;0¢;ị@ÑK

Probieren Sie es online!

Erläuterung

Hilfsfunktion1Ŀ (übersetzt jedes alphanumerische Zeichen / Leerzeichen in der Eingabe in eine Zahl)

⁶ØB;µ³fi@€
⁶           space
 ØB;        append all digits, uppercase and lowercase letters (in that order)
    µ       set as the new default for missing arguments
     ³      first command-line argument
      f     delete all characters not in {space + alphanumerics}
       i@€  take index of each element within {space + alphanumerics}

Hilfsfunktion (gibt den konstanten String zurück “jabcdefghi”)

Øaḣ⁵ṙ9
Øa      lowercase alphabet
  ḣ⁵    take first 10 elements
    ṙ9  rotate 9 elements to the left

Hauptprogramm

26RµN;;0¢;ị@ÑK
26R             Range from 1 to 26
   µ            set as default for missing arguments
    N           Minus {each element of the range from 1 to 26}
     ;          with {the range from 1 to 26} appended
      ;0        with a 0 appended
        ¢;      with the result of 2£ prepended
          ị@    index into this using
            Ñ   the result of 1Ŀ
             K  separate by spaces

0

Retina, 74 70 Bytes (nicht konkurrierend)

Beachten Sie das führende Leerzeichen in Zeile 3, das nachfolgende Leerzeichen in Zeile 6 und die leere zweite Zeile.

[^ \ w] | _

 +
~
.
$ + 
[AZ]
- $ +
T`L`l
[js]
ein $ +
[tz]
b $ +
T` ~ ld`dd0-6jl

Probieren Sie es online!

Obwohl die Sprache vor der Herausforderung erstellt wurde, denke ich, dass einige der Sprachfunktionen, die ich nach der Herausforderung verwendet habe, als nicht konkurrierend markiert wurden.


0

Java 7, 257 254 Bytes

class M{public static void main(String[]a){String r="",x;for(int c:a[0].getBytes()){x=(c>96&c<123?c-96:c>64&c<91?"-"+(c-64):c>48&c<58?(char)(c+48):c==48?"j":c<33?0:"")+"";r+=!x.isEmpty()&&!(r.endsWith("0 ")&x.equals("0"))?x+" ":"";}System.out.print(r);}}

Probieren Sie es hier aus.

Erläuterung:

class M{                               // Class
  public static void main(String[]a){  //  Required main-method
    String r="",                       //   Result-String
      x;                               //   Temp String
    for(int c:a[0].getBytes()){        //   Loop over the characters of the input-String
      x=(                              //    Set the temp String to:
        c>96&c<123?                    //     If it's a lowercase letter:
          c-96                         //      Set `x` to the 1-indexed alphabetic index
        :c>64&c<91?                    //     Else-if it's a uppercase letter:
          "-"+(c-64)                   //      Set `x` to the 1-indexed alphabetic index as negative
        :c>48&c<58?                    //     Else-if it's a digit 1-9:
          (char)(c+48)                 //      Set `x` to the 1-indexed alphabetic character
        :c==48?                        //     Else if it's a zero:
          "j"                          //      Set `x` to "j"
        :c<33?                         //     Else if it's a space:
          0                            //      Set `x` to "0"
        :                              //     Else:
          ""                           //      Set `x` to an empty String
       )+"";                           //     Required `+""` because `(char)` and `0` aren't Strings
      r+=                              //    Append the result-String with:
        !x.isEmpty()                   //     If `x` has a value
        &&!(r.endsWith("0 ")&x.equals("0"))?
                                       //     and it's not "0" with the previous value also being a zero
          x+" "                        //      Append the value of `x`, plus a space
        :                              //     Else:
          "";                          //      Append nothing
    }                                  //   End of loop
    System.out.print(r);               //   Print the result to STDOUT
  }                                    //  End of main-method
}                                      // End of class

Beispiel Eingabe & Ausgabe:

Input:
Programming Puzzles & C0d3 G0lf

Output:
-16 18 15 7 18 1 13 13 9 14 7 0 -16 21 26 26 12 5 19 0 -3 j 4 c 0 -7 j 12 6 
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.