Harf Sayıları


15

Bir mektubu alfabedeki konumu ile değiştiren çok basit bir şifre var. Örneğin, abcolacaktı 1 2 3bu şifreyle.

Bu meydan okuma, bu şifre için alternatif bir yaklaşımdır.


Meydan okuma

ASCII karakterlerinin girişini alan ve boşlukla ayrılmış bir dize çıkaran bir program oluşturun:

  • tamsayılar -26yoluyla26

  • aaracılığıyla harflerj

Çıktı STDOUT veya dilinizin en yakın alternatifinden gelmelidir.


Özellikler

  • Büyük harfler reddedilmelidir. DÖrneğin bir sermaye -4, küçük harf dolur 4.

  • Rakamlar alfa muadillerine değiştirilmelidir. 1varlık a, vb. Girişteki sıfırlar olacaktır j.

  • Alfasayısal olmayan tüm karakterler (boşluklar hariç) göz ardı edilmelidir.

  • Uzaylar 0.

  • Çıkıştaki bitişik boşluklar tek bir boşluğa indirilmelidir.

    Input: You + Me
    Correct Output: -25 15 21 0 -13 5
    Incorrect Output: -25 15 21 0 0 0 -13 5
    
  • Tek bir boşluk veya yeni satıra izin verilir.


Örnekler

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

sayı tahtası

Puanınızın tahtada görünmesi için şu biçimde olması gerekir:

# Language, Bytes

Üstü çizili bir soruna neden olmamalıdır.



Çıktının sonunda boşluk olabilir mi?
Dennis

Evet. Tek bir boşluk veya yeni satıra izin verilir. @Dennis
Zach Gates

Dize döndüren / basan bir işlev geçerli bir yanıt mı? Ayrıca tüm [^ \ w] ve [\ W] normal ifadesini ekarte etmek için "abc_ABC" gibi bir test durumu ekleyebilir misiniz?
Maksimum

Ne istediğini tam olarak bilmiyordum, ama bu test senaryosunu ekledim. Umarım aradığınız şey budur; değilse, bana bildirin. @Max
Zach Gates

Yanıtlar:


10

CJam, 58 57 54 51 50 49 bayt

Sadece ben açıklama yazdım, ben alternatif 50 bayt sürümleri biri byte kısaltılabilir fark ettim ...

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

Burada test edin.

50 baytlık çözümler:

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*

açıklama

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.

Bu ilk defa olmalı, CJam'ın negatif değerler için modulo davranışı benim için yararlı oldu.


6

JavaScript (ES6), 110 107 133 120 bayt

Al şunu, yaşlı ben!

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

Potansiyel olarak golf için çok daha fazla alan var, özellikle regexes nope'de, bunu oldukça iyi anladım. Ungolfed sürümü:

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

Öneriler hoş geldiniz!


'123___abc' testini yapın. İpucu: alt
çizgileri

Başka bir sorun: All non-alphanumeric characters should be ignored.. Test: 'A $ b' olmalı-1 2
edc65

@ edc65 Aw adamım, yapmam gerektiğini düşündüm ... Ama bana bildirdiğiniz için teşekkürler!
ETHproductions

4

Pyth, 50 49 bayt

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

Burada deneyin .

Düzenleme: alt çizgilerin doğru işlenmesini sağlamak için yeniden yapılandırılmış dize sanitasyon. Hatta bir bayt kurtardı, yay!

Bu program girdiyi sterilize etmek için kullanılan bir arama dizesi oluşturur. Bu daha sonra bu dizede karşılık gelen dizine eşlenir. Son olarak, 26'dan büyük herhangi bir dizin doğru ASCII karakterine dönüştürülür.

                                                     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

\WRegex'i kullanan önceki sürüm, 50 baytta:

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

3

Julia, 145 136 bayt

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)

Rakamları harf olarak almak için ASCII değerine 58 ekleriz ve geçerli karakter 0 değilse 10 çıkarırız. j ve diğer rakamların a- ile eşleşmesini sağlar i.

Büyük harfleri reddetmek, cmp . Bu, büyük harfler için -1 ve küçük harfler için 1 döndürecektir.

Çevrimiçi deneyin


2

Perl 5, 120 116 113 105 bayt

Öncelikle istenmeyen karakterleri ve fazladan boşlukları temizler.
Sonra her karakter için ascii masasına tırmanıyor.

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

Ölçek

$ 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
\ S yerine regex içinde tek bir boşluk ile bir karakter golf edebilir ve ikinci regex ile golf olabilir s/ +/ /g, ilk regex yanlış çünkü \ w alt çizgi karakteri ile eşleşir
Max

2
Başka bir iki karakter dahas/[^\w ]|_//g
Max

Güzel, görmezden gelin bayrağı daha iyi.
LukStorms

@Max güzel ipucu. Cevabımda 2 bayt kaydedildi, teşekkürler.
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);}

Biraz çözülmedi:

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

GCC 4.9.3 ve Clang 3.5.2'de verilen testleri geçer.


2

> <> (balık), 219209 bayt

>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

Burada deneyin

Bu benim ilk kod golf cevabım! Sonunda bir kod golf meydan okuma için kullanmak istediğim dili kullanabildim ve bu karakterler otomatik olarak ondalık sayılara dönüştürülür göz önüne alındığında mükemmel bir gibi görünüyordu.

Sonucumun çok daha kısa olmasını bekledim, ama görünüşe göre değil. Yine de, bunu çok fazla golf yapmadım. Kodun daha temiz / anlamlı olabileceği birkaç yer vardır, ancak boşlukların gerekli olduğu yerlerde oldukları için bayt kaydetmeyecektir. İkinci satırdaki son bitte bazı baytları kaydetmenin bir yolu olabilir, ters yöne gitmesini ve zaten orada 00 ile ezilmesini sağlar, daha sonra oynamak zorunda kalacağım

Temel olarak, bu, geçerli karakterin boşluk, sayı, büyük harf veya küçük harf olup olmadığını, o grubun en yüksek / en düşük değerleri arasında olup olmadığını kontrol ederek kontrol eder. Bunlardan herhangi biri değilse, atılır. Bunlardan birindeyse, bir harfse bir sayıya ve bir sayı ise bir harfe dönüştürülür (ya da daha doğrusu, aj harflerinin değerleri olan 97-106 arasında bir sayı). Daha sonra üst değerin 28'den küçük olup olmadığını kontrol eder, bu durumda bir sayı ve bir sayı çıkarır, aksi takdirde bir harftir ve sayının temsil ettiği harfi çıkarır, bir boşluk verir, sonra yığın boşalana kadar döngüler.


2

JavaScript (ES6), 108 122 124

Düzenle @ Max'in yorumundan regexp kullanarak
Edit2 14 bayt kaydedildi teşekkürler ETHProductions

EcmaScript 6 sadece ok işlevleri için Firefox ve en yeni Chrome'da çalışmalıdır.

Aşağıdaki snippet'i çalıştırmayı test edin

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>


Ben yanlış olabilir, ama seni değiştirerek bir sürü kaydedebilirsiniz düşünüyorum [R](/ +/g,' ')[R](/./g,için [R](/ +|./g,. (Eski bir
gönderiyi

@ETHproductions iyi görünüyor. Teşekkürler
edc65


1

CJam, 52 bayt

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

Çevrimiçi deneyin

Çözümün kilit kısmı, CJam er(harf çevirisi) operatörünü kullanmasıdır. İşlecin argümanları olarak, tüm karakterlerin listesine ve karşılık gelen değerlerin bir listesine ihtiyacı vardır.

Girdi üzerinde bir ön işleme adımı olarak, çeviri tablosunun parçası olmayan karakterleri (özel karakterler) kaldırır ve yinelenen boşlukları tek bir boşluğa indirir.

Açıklama:

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

Piton 2, 191 179 177 173 172 168 160 bayt

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

Ölçek

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

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

STDIN'den girdi alır; ile çalıştırın -nR.

Yıkmak

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

@Küçük harf parçasındaki boşlukları işlemek için tuşunu bir ters çiviyle değiştirebilirsiniz . Rakamlarla
birlikte jabcdefghi0de kullanabilirsiniz :.


Bunun "#_|[^\w ]#"yerine siparişi değiştirmeniz gerektiğine inanıyorum "#[^\w ]|_#".
Jörg Hülsermann

0

Hassium , 1156 Bayt

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

Çok uzun cevap


1
Çöken alanların çalışması pek mümkün görünmüyor. You + Meçıktı üretir -25 15 21 0 0 -13 5.
Dennis

1
İlginç bir dil, C / Java / [adını hatırlayamadığım başka bir dil] gibi. Her karakteri bir sayıya dönüştürmenin daha kolay bir yolu var mı, yani bir char kodu almak için bir fonksiyon ? ( Dec
Tabloya

0

Jelly , 32 bayt, dil postdates zorluğu

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

Çevrimiçi deneyin!

açıklama

Yardımcı işlevi1Ŀ (girişteki her alfasayısal / boşluğu bir sayıya çevirir)

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

Yardımcı işlevi (sabit dizeyi döndürür “jabcdefghi”)

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

Ana program

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 bayt (rakip değil)

Satır 3'teki satır aralığı, satır 6'daki satır boşluğu ve boş ikinci satır not edin.

[^ \ w] | _

 +
~
.
$ + 
[AZ]
- $ +
T`L`l
[Js]
Bir $ +
[Tz]
b $ +
T '~ ld`dd0-6jl

Çevrimiçi deneyin!

Dil meydan okumadan önce yapılmış olmasına rağmen, bence kullandığım bazı dil özellikleri meydan okumadan sonra, bu yüzden bunu rakipsiz olarak işaretledim.


0

Java 7, 257254 bayt

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

Burada deneyin.

Açıklama:

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

Örnek giriş ve çıkış:

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 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.