Chiffres pour lettres

15

Il existe un chiffre très simple qui remplace une lettre par sa position dans l'alphabet. Par exemple, abcdeviendrait 1 2 3dans ce chiffre.

Ce défi est une version alternative de ce chiffre.


Le défi

Créez un programme qui accepte une entrée de caractères ASCII et génère une chaîne séparée par des espaces de:

  • entiers à -26travers26

  • lettres à atraversj

La sortie doit provenir de STDOUT ou de l'alternative la plus proche de votre langue.


Caractéristiques

  • Les majuscules doivent être annulées. Un capital Dpar exemple serait -4, tandis qu'un minuscule le dserait 4.

  • Les chiffres doivent être remplacés par leurs homologues alpha. 1être a, etc. Tous les zéros dans l'entrée seront j.

  • Tous les caractères non alphanumériques (à l'exception des espaces) doivent être ignorés.

  • Les espaces sont 0.

  • Les espaces adjacents dans la sortie doivent être réduits à un seul espace.

    Input: You + Me
    Correct Output: -25 15 21 0 -13 5
    Incorrect Output: -25 15 21 0 0 0 -13 5
    
  • Un seul espace de fin ou une nouvelle ligne est autorisé.


Exemples

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

Tableau d'affichage

Pour que votre score apparaisse sur le tableau, il doit être dans ce format:

# Language, Bytes

Les barrés ne devraient pas poser de problème.

Portes Zach
la source
La sortie peut-elle avoir un espace de fin?
Dennis
Oui. Un seul espace de fin ou une nouvelle ligne est autorisé. @Dennis
Zach Gates
Une fonction renvoyant / imprimant une chaîne est-elle une réponse valide? Pouvez-vous également ajouter un cas de test comme "abc_ABC" pour exclure toutes les expressions régulières [^ \ w] et [\ W]?
Max
Je n'étais pas tout à fait sûr de ce que vous demandiez, mais j'ai ajouté ce cas de test. J'espère que c'est ce que vous cherchiez; sinon, faites-le moi savoir. @Max
Zach Gates

Réponses:

10

CJam, 58 57 54 51 50 49 octets

Juste au moment où j'ai écrit l'explication, j'ai remarqué qu'une des versions alternatives de 50 octets peut être raccourcie d'un octet ...

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

Testez-le ici.

Solutions de 50 octets:

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*

Explication

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.

Ce doit être la première fois que le comportement modulo de CJam pour les valeurs négatives m'a été utile.

Martin Ender
la source
6

JavaScript (ES6), 110 107 133 120 octets

Prends ça, vieux moi!

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` `

Il y a potentiellement beaucoup plus de place pour le golf, en particulier dans les regexes , non, ça a assez bien réussi. Version non golfée:

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;
}

Suggestions bienvenues!

ETHproductions
la source
Testez '123___abc'. Astuce: vous devez gérer les
traits de
Un autre problème: All non-alphanumeric characters should be ignored.. Test: 'A $ b' devrait être-1 2
edc65
@ edc65 Aw, mec, je pensais l'avoir fait ... Mais merci de me le faire savoir!
ETHproductions du
4

Pyth, 50 49 octets

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

Essayez-le ici .

Edit: restructuration de la chaîne de nettoyage pour garantir que les traits de soulignement sont traités correctement. Il a même enregistré un octet aussi, yay!

Ce programme crée une chaîne de recherche, qui est utilisée pour nettoyer l'entrée. Ceci est ensuite mappé à l'index correspondant dans cette chaîne. Enfin, tout index supérieur à 26 est converti en le bon caractère ASCII.

                                                     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

Version précédente, qui utilisait l' \Wexpression régulière, à 50 octets:

jdm?>d26C+70ddm-xs[_rG1\ Gjk.<UT1)d26::z"\W"d" +"d
Sok
la source
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" +"," ")]," "))

Non golfé:

# 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)

Pour obtenir les chiffres sous forme de lettres, nous ajoutons 58 à la valeur ASCII et soustrayons 10 si le caractère actuel n'est pas 0. Cela garantit que 0 correspond à jet que les autres chiffres correspondent à a- i.

La négation des lettres majuscules se fait à l'aide de cmp. Cela renverra -1 pour les lettres majuscules et 1 pour les minuscules.

Essayez-le en ligne

Alex A.
la source
2

Perl 5, 120 116 113 113 105 octets

Nettoie d'abord les caractères indésirables et les espaces supplémentaires.
Descend ensuite le tableau ascii pour chaque personnage.

$_=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//

Tester

$ 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
LukStorms
la source
2
Vous pouvez jouer au golf un personnage avec un seul espace dans regex à la place de \ s et le deuxième regex peut être joué avec s/ +/ /g, le premier regex est faux parce que \ w correspond au caractère de soulignement
Max
2
Deux autres personnages avecs/[^\w ]|_//g
Max
Bien, encore mieux qu'avec le drapeau Ignorer la casse.
LukStorms
@Max bon indice. 2 octets enregistrés dans ma réponse, merci.
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);}

Ungolfed un peu:

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
    }
}

Réussit les tests donnés dans GCC 4.9.3 et Clang 3.5.2.

découpage
la source
2

> <> (poisson), 219 209 octets

>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

Essayez-le ici

Ceci est ma première réponse de golf de code! Enfin, j'ai pu utiliser le langage que je voulais utiliser pour un défi de golf de code, et cela semblait le parfait étant donné que les caractères sont automatiquement convertis en décimales.

Je m'attendais à ce que mon résultat soit beaucoup plus court, mais apparemment pas. Cependant, je n'ai pas trop joué à celui-ci. Il y a quelques endroits où le code pourrait être plus propre / plus logique, mais ne sauvera aucun octet car ils sont de toute façon dans des endroits où un espace est nécessaire. Il pourrait y avoir un moyen d'économiser quelques octets sur le dernier bit de la deuxième ligne, en le faisant aller dans la direction opposée et en mélangeant le 00 déjà là, je devrai jouer avec plus tard

Fondamentalement, cela vérifie si le caractère actuel est un espace, un nombre, une lettre majuscule ou minuscule, en vérifiant s'il se trouve dans la plage des valeurs les plus élevées / les plus basses de ce groupe. Si ce n'est pas le cas, il est jeté. S'il se trouve dans l'un de ceux-ci, il est converti en un nombre s'il s'agit d'une lettre et en une lettre s'il s'agit d'un nombre (ou plutôt, un nombre de 97 à 106 qui sont les valeurs des lettres aj). Ensuite, il vérifie si la valeur supérieure est inférieure à 28, auquel cas il s'agit d'un nombre et génère un nombre, sinon c'est une lettre et génère la lettre que le nombre représente, génère un espace, puis boucle jusqu'à ce que la pile soit vide.

torcado
la source
2

JavaScript (ES6), 108 122 124

Modifier en utilisant l'expression rationnelle du commentaire de @ Max
Edit2 14 octets enregistrés grâce à ETHProductions

EcmaScript 6 uniquement pour les fonctions fléchées, il devrait donc fonctionner dans Firefox et le dernier Chrome.

Testez l'exécution de l'extrait ci-dessous

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>

edc65
la source
Je me trompe peut-être, mais je pense que vous pouvez économiser tout un tas en passant [R](/ +/g,' ')[R](/./g,à [R](/ +|./g,. (Désolé d'avoir
évoqué
@ETHproductions semble bon. Merci
edc65
1

CJam, 52 octets

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

Essayez-le en ligne

L'élément clé de la solution est qu'elle utilise l'opérateur CJam er(translittération). Comme arguments à l'opérateur, il a besoin de la liste de tous les caractères et d'une liste des valeurs correspondantes.

En tant qu'étape de prétraitement sur l'entrée, il supprime les caractères qui ne font pas partie de la table de traduction (caractères spéciaux) et réduit les espaces répétés à un seul espace.

Explication:

'{,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.
Reto Koradi
la source
1

Python 2, 191 179 177 173 173 172 168 160 octets

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())))])

Tester

"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
Max
la source
1

PHP, 116 octets

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

prend l'entrée de STDIN; courir avec -nR.

panne

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

Vous pouvez remplacer le @par un crochet pour gérer les espaces dans la partie minuscule.
Avec jabcdefghi0pour les chiffres, vous pouvez également utiliser :.

Titus
la source
Je crois que vous devez changer l'ordre "#_|[^\w ]#"au lieu de "#[^\w ]|_#".
Jörg Hülsermann
0

Hassium , 1156 octets

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"";}

Réponse très longue

Jacob Misirian
la source
1
L'effondrement des espaces ne semble pas vraiment fonctionner. You + Meproduit la sortie -25 15 21 0 0 -13 5.
Dennis
1
Langage intéressant, un peu comme C / Java / [un autre langage dont je ne me souviens plus du nom]. Existe-t-il un moyen plus simple de convertir chaque caractère en nombre, c'est-à-dire une fonction pour récupérer un code char ? (Faites défiler jusqu'au tableau et regardez la Deccolonne.)
ETHproductions
0

Jelly , 32 octets, défi de postdates de langue

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

Essayez-le en ligne!

Explication

Fonction d'aide1Ŀ (traduit chaque alphanumérique / espace dans l'entrée en un nombre)

⁶Ø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}

Fonction d'assistance (retourne la chaîne constante “jabcdefghi”)

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

Programme principal

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

la source
0

Rétine, 74 70 octets (non concurrent)

Notez l'espace de début sur la ligne 3, l'espace de fin sur la ligne 6 et la deuxième ligne vide.

[^ \ w] | _

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

Essayez-le en ligne!

Bien que le langage ait été créé avant le défi, je pense que certaines des fonctionnalités linguistiques que j'ai utilisées sont postérieures au défi, j'ai donc marqué cela comme non concurrentiel.

accro aux mathématiques
la source
0

Java 7, 257 254 octets

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);}}

Essayez-le ici.

Explication:

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

Exemple d'entrée et de sortie:

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 
Kevin Cruijssen
la source