Numeri per lettere


15

Esiste un codice molto semplice che sostituisce una lettera con la sua posizione nell'alfabeto. Ad esempio, abcdiventerebbe 1 2 3in questa cifra.

Questa sfida è un'alternativa a questa cifra.


La sfida

Crea un programma che accetta un input di caratteri ASCII e genera una stringa separata da spazio di:

  • numeri interi -26attraverso26

  • lettere aattraversoj

L'output dovrebbe arrivare tramite STDOUT o l'alternativa più vicina alla tua lingua.


specificazioni

  • Le lettere maiuscole dovrebbero essere negate. Un capitale Dper esempio sarebbe -4, mentre un minuscolo dsarebbe 4.

  • Le cifre dovrebbero essere cambiate nelle loro controparti alfa. 1essere ae così via. Qualsiasi zero nell'input sarà j.

  • Tutti i caratteri non alfanumerici (tranne gli spazi) devono essere ignorati.

  • Gli spazi sono 0.

  • Gli spazi adiacenti nell'output devono essere ridotti a un singolo spazio.

    Input: You + Me
    Correct Output: -25 15 21 0 -13 5
    Incorrect Output: -25 15 21 0 0 0 -13 5
    
  • È consentito un singolo spazio finale o una nuova riga.


Esempi

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

tabellone segnapunti

Affinché il tuo punteggio appaia sul tabellone, dovrebbe essere in questo formato:

# Language, Bytes

Le barrature non dovrebbero causare problemi.



L'output può avere uno spazio finale?
Dennis,

Sì. È consentito un singolo spazio finale o una nuova riga. @Dennis
Zach Gates,

Una funzione che restituisce / stampa una stringa è una risposta valida? Inoltre puoi aggiungere un caso di test come "abc_ABC" per escludere tutta la regex [^ \ w] e [\ W]?
Max

Non ero del tutto sicuro di ciò che stavi chiedendo, ma ho aggiunto quel caso di prova. Spero sia quello che stavi cercando; in caso contrario, fammi sapere. @Max
Zach Gates,

Risposte:


10

CJam, 58 57 54 51 50 49 byte

Proprio quando ho scritto la spiegazione, ho notato che una delle versioni alternative a 50 byte può essere accorciata di un byte ...

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

Provalo qui.

Soluzioni da 50 byte:

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*

Spiegazione

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.

Questa deve essere la prima volta che il comportamento del modulo di CJam per valori negativi mi è stato utile.


6

JavaScript (ES6), 110 107 133 120 byte

Prendi questo, vecchio me!

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

C'è potenzialmente molto più spazio per giocare a golf, specialmente nelle regexes no, è abbastanza basso. Versione non golfata:

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

Suggerimenti benvenuti!


Prova "123___abc". Suggerimento: è necessario gestire i trattini
bassi

Un altro problema: All non-alphanumeric characters should be ignored.. Test: 'A $ b' dovrebbe essere-1 2
edc65,

@ edc65 Aw, amico, pensavo di averlo fatto ... Ma grazie per avermelo fatto notare!
ETHproductions,

4

Pyth, 50 49 byte

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

Provalo qui .

Modifica: sanificazione delle stringhe ristrutturata per garantire la corretta gestione dei caratteri di sottolineatura. Ha anche salvato anche un byte, yay!

Questo programma crea una stringa di ricerca, che viene utilizzata per disinfettare l'input. Questo viene quindi mappato all'indice corrispondente in quella stringa. Infine, qualsiasi indice maggiore di 26 viene convertito nel carattere ASCII corretto.

                                                     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

Versione precedente, che utilizzava \Wregex, a 50 byte:

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

3

Julia, 145 136 byte

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)

Per ottenere le cifre come lettere aggiungiamo 58 al valore ASCII e sottraggiamo 10 se il carattere corrente non è 0. Ciò assicura che 0 sia mappato a j e le altre cifre mappate su a- i.

La negazione delle lettere maiuscole viene eseguita utilizzando cmp. Ciò restituirà -1 per le lettere maiuscole e 1 per le lettere minuscole.

Provalo online


2

Perl 5, 120 116 113 105 byte

Per prima cosa pulisci i personaggi indesiderati e gli spazi extra.
Quindi scende la tabella ASCII per ogni personaggio.

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

Test

$ 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
Puoi giocare a golf un personaggio con un singolo spazio in regex al posto di \ s e il secondo regex può essere giocato a golf s/ +/ /g, il primo regex è sbagliato perché \ w corrisponde al carattere di sottolineatura
Max

2
Altri due personaggi cons/[^\w ]|_//g
Max

Bello, anche meglio che con la bandiera maiuscola.
LukStorms

@Max bel suggerimento. 2 byte salvati nella mia risposta, grazie.
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 po ':

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

Supera i test indicati in GCC 4.9.3 e Clang 3.5.2.


2

> <> (pesce), 219 209 byte

>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

Provalo qui

Questa è la mia prima risposta di golf in codice! Finalmente sono stato in grado di usare il linguaggio che volevo usare per una sfida di codice golf, e questo sembrava quello perfetto dato che i personaggi vengono automaticamente convertiti in decimali.

Mi aspettavo che il mio risultato fosse molto più breve, ma apparentemente no. Tuttavia, non ho giocato a golf troppo. Ci sono alcuni posti in cui il codice potrebbe essere più pulito / più sensato, ma non salverà alcun byte poiché si trovano in luoghi in cui è comunque necessario lo spazio bianco. Potrebbe esserci un modo per salvare alcuni byte sull'ultimo bit sulla seconda riga, facendolo andare nella direzione opposta e mescolando con lo 00 già lì, dovrò giocarci più tardi

Fondamentalmente, questo controlla se il carattere corrente è uno spazio, un numero, una lettera maiuscola o una lettera minuscola, controllando se si trova nell'intervallo dei valori più alti / più bassi di quel gruppo. Se non è uno di quelli, viene scartato. Se è in uno di questi, viene convertito in un numero se è una lettera e una lettera se è un numero (o meglio, un numero compreso tra 97 e 106 che sono i valori per le lettere aj). Quindi controlla se il valore superiore è inferiore a 28, nel qual caso è un numero e genera un numero, altrimenti è una lettera e genera la lettera che rappresenta il numero, genera uno spazio, quindi esegue un ciclo fino a quando lo stack è vuoto.


2

JavaScript (ES6), 108 122 124

modificare Usando la regexp dal commento di @ Max
Edit2 14 byte salvati grazie a ETHProductions

EcmaScript 6 solo per le funzioni freccia, quindi dovrebbe funzionare in Firefox e Chrome più recenti.

Prova a eseguire lo snippet di seguito

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>


Potrei sbagliarmi, ma penso che puoi salvare un intero gruppo cambiando [R](/ +/g,' ')[R](/./g,in [R](/ +|./g,. (Mi dispiace per aver
tirato

@ETHproductions sembra buono. Grazie
edc65,


1

CJam, 52 byte

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

Provalo online

La parte fondamentale della soluzione è che utilizza l'operatore CJam er(traslitterazione). Come argomenti per l'operatore, ha bisogno dell'elenco di tutti i caratteri e di un elenco dei valori corrispondenti.

Come fase di pre-elaborazione sull'input, rimuove i caratteri che non fanno parte della tabella di traduzione (caratteri speciali) e riduce gli spazi ripetuti a un singolo spazio.

Spiegazione:

'{,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 byte

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

Test

"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 byte

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

accetta input da STDIN; corri con -nR.

abbattersi

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

È possibile sostituire il @con un backtick per gestire gli spazi nella parte minuscola.
Con jabcdefghi0per le cifre, puoi anche usare :.


Credo che tu debba cambiare l'ordine "#_|[^\w ]#"invece di "#[^\w ]|_#".
Jörg Hülsermann,

0

Hassium , 1156 byte

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

Risposta molto lunga


1
Gli spazi collassati non sembrano funzionare. You + Meproduce l'output -25 15 21 0 0 -13 5.
Dennis,

1
Linguaggio interessante, un po 'come C / Java / [un'altra lingua di cui non ricordo il nome]. Esiste un modo più semplice per convertire ciascun carattere in un numero, ovvero una funzione per recuperare un codice char ? (Scorri verso il basso fino alla tabella e guarda la Deccolonna.)
ETHproductions

0

Jelly , 32 byte, sfida postdatati in lingua

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

Provalo online!

Spiegazione

Funzione di aiuto 1Ŀ (traduce ogni numero alfanumerico / spazio nell'input in un numero)

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

Funzione di aiuto (restituisce la stringa costante “jabcdefghi”)

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

Programma principale

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 byte (non competitiva)

Nota lo spazio iniziale sulla riga 3, lo spazio finale sulla riga 6 e la seconda riga vuota.

[^ \ w] | _

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

Provalo online!

Sebbene la lingua sia stata creata prima della sfida, penso che alcune delle funzionalità linguistiche che ho usato dopo la sfida, quindi l'ho contrassegnata come non competitiva.


0

Java 7, 257 254 byte

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

Provalo qui.

Spiegazione:

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

Esempio di input e output:

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 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.