Bir Harfte Sayıları Harfe ve Tersi Şekillere Dönüştür


12

Bir sayı listesine ve eşdeğer harflerine dayanarak, bir dize girişi alın, o dizenin karakterlerini eşdeğer sayı / harfle değiştirin ve sonucu alın.

Liste

  • 1 = a
  • 2 = b
  • 3 = c
  • 4 = d
  • 5 = e
  • 6 = f
  • 7 = g
  • 8 = s
  • 9 = i
  • 0 = j

Giriş

thisisastring1124

Çıktı

t89s9s1str9n7aabd

kurallar

  • Sayılar yalnızca küçük harflere eşittir.
  • Listenin dışındaki tüm karakterler olduğu gibi bırakılacaktır.
  • Giriş dizesi boşluk içermemelidir.
  • Tam programa veya işleve izin verilir.
  • Kod golf olduğu için en az bayt kazanır.

2
PPCG'ye hoş geldiniz. Güzel meydan okuma!
— Adám

2
Bunun yerine büyük harfleri değiştirebilir miyiz?
— Adám

Yalnızca küçük harfler, büyük harfler listenin dışında kalır.
— Noir Antares

Giriş yalnızca harfler ve rakamlar içerecek mi, yoksa diğer boşluk olmayan karakterler (örn. Noktalama işaretleri) içeriyor olabilir mi?
— sundar - Monica'yı

Giriş dizesi, boşluklar dışında başka bir karakter içerebilir, ancak listenin dışındaki herhangi bir şey çıkış dizesinde dokunulmaz.
— Noir Antares

Yanıtlar:







5

Retina 0.8.2 , 12 bayt

T`a-j09-1`Ro

Çevrimiçi deneyin! Açıklama:

T``

Harf çevirisi gerçekleştirin.

a-j09-1

Kaynak listesi harflerdir a-j, sonra 0rakamlardır 9-1.

Ro

Hedef listesi, ters çevrilmiş kaynak listesidir, yani rakamlar 1-9, ardından 0harfler j-a.





3

R , 40 bayt

function(s)chartr("0-9ja-i","ja-i0-9",s)

Çevrimiçi deneyin!

Şaşırtıcı bir şekilde, R, bu tür mücadelesinde iyi, çünkü Bash cevabındatr olduğu gibi benzer bir işlevi var . Neden var olduğu hakkında hiçbir fikrim yok, ama bunun için minnettarım!


İnanılmaz! Chartr () regex anladı bilmiyordum.
— snoram

@snoram oldukça normal değil; o belirten belgelerinde olduğu "Aralıkları şartnamede desteklenir, ancak karakter sınıfları ve tekrarlanan karakterler değiliz."
— Giuseppe

3

MS-SQL, 71 bayt

SELECT TRANSLATE(v,'1234567890abcdefghij','abcdefghij1234567890')FROM t

Yeni SQL 2017 işlevi TRANSLATEbireysel karakter değiştirme gerçekleştirdiğinden, bu amaç için idealdir. Bkz önceki meydan benim benzer bir cevap .

Girdi önceden var olan bir tablo yoluyladır t varchar sütunu ile v , bizim ES kurallarına göre . Yalnızca küçük harfleri değiştirmek için, tablo büyük / küçük harfe duyarlı bir harmanlama kullanılarak oluşturulmalıdır :

CREATE TABLE t(v varchar(max) COLLATE Latin1_General_CS_AS)


2

Pyth , 13 bayt

Xz+jk+0_S9<GT

Burada deneyin!

açıklama

Xz+jk+0_S9<GT – Full program.
       _S9    – Yield [9, 8, 7, ..., 1]
     +0       – Prepend a 0.
   jk         – Join to a single string.
  +       <GT – And append the first 10 letters of the alphabet to it.
                Yields 0987654321abcdefghij.
Xz            – Transliterates the input from the above to the above reversed.


1

REXX, 57 bayt

#=1234567890
a='abcdefghij'
say translate(arg(1),a #,# a)

1

C (gcc) , 81 72 bayt

Öneriler için Giacomo Garabello'ya teşekkürler.

f(char*s){for(;*s++=*s-97U<11?(*s-6)%10+48:*s-48U<11?(*s-9)%10+97:*s;);}

Çevrimiçi deneyin!


Sen girdi dizesini değiştirerek 6 karakter kaldırmak yerine onu yazdırabilirsiniz putchar(...)> - *s=...değiştirerek diğer 4 ve *s-48U<11birlikte *s<59 çevrimiçi deneyin!
— Giacomo Garabello

@GiacomoGarabello *s<59gibi karakterler girişte yer alıyorsa kırılır $, bu yüzden yaptım *s-48U([0..47] [-48 ..- 1] olur, bu da büyük bir işaretsiz değer haline gelir.) -alnumlar geçerliydi, daha muhafazakar bir yorumla gittim.
— ErikF

Yeterince adil. OP kısa süre önce diğer tüm karakterlerin geçerli olduğunu, ancak boşluk olmadığını yorumladı. Ama yine de ilk
— önerimi

1

Powershell, 94 bayt

-join($args|% t*y|%{if(1+($p=($s='1a2b3c4d5e6f7g8h9i0j').IndexOf($_))){$s[$p-bxor1]}else{$_}})

Test komut dosyası:

$f = {
-join($args|% t*y|%{if(1+($p=($s='1a2b3c4d5e6f7g8h9i0j').IndexOf($_))){$s[$p-bxor1]}else{$_}})
}

&$f "thisisastring1124"

açıklama

  • $args - argüman dizeleri
  • $args|% t*y- |ForEach-Object -Method ToCharArrayeşdeğerine kadar genişler"$args".ToCharArray()
  • ($s='1a2b3c4d5e6f7g8h9i0j').IndexOf($_)- dizede bir karakter bulun, bir konum veya bulunmazsa -1 döndürür. $ S, eşleştirilmiş karakter içeren dizeyi son bite göre değişen komşu konumlarında saklar: 0 + 1, 2 + 3, 4 + 5 ....
  • if(1+($p=...)) - konum bulunursa
  • $p-bxor1 - konum biti x veya 1

Güzel hile ile -bxor1.
— AdmBorkBork



0

K4 , 38 bayt

Çözüm:

{(,/|x,a)(,/a:0 1_'10 11#'.Q`a`n)?x}@'

Açıklama:

Listedeki her karakteri arayın "abcdefghij1234567890"ve ardından orijinal karakterin "1234567890abcdefghijX"olduğu listeye dizin Xekleyin.

Dizeleri oluşturmak için daha kısa bir yol bulmamız gerekiyor ...

{(,/|x,a)(,/a:0 1_'10 11#'.Q`a`n)?x}@'
{                                  }@' / apply (@) lambda {} to each (')
                                 ?x    / lookup x in
         (                      )      / do this together
                          .Q`a`n       / index into .Q with a (gives a-z) and n (gives 0-9)
                   10 11#'             / take 10 from first list and 11 from second list
              0 1_'                    / drop 0 from first list and 1 from second list
            a:                         / save as a
          ,/                           / flatten
 (      )                              / do this together
     x,a                               / prepend x to a
    |                                  / reverse it
  ,/                                   / flatten

Bonus:

38 bayt için başka bir çözüm :

{(a,b,x)?[(b:1_11#.Q.n),a:10#.Q.a]x}@'

0

Yabasic , 135 bayt

Konsoldan girdi alır ve konsola çıktılar.

Input""s$
For i=1To Len(s$)
c$=Mid$(s$,i,1)
n=asc(c$)-96
If-38>n Then?chr$(143+n+11^(n=-48));ElsIf n<11Then?n*(10>n),"";Else?c$;Fi
Next

Çevrimiçi deneyin!



0

sed, 44 bayt

y/1234567890abcdefghij/abcdefghij1234567890/

Biraz sıkıcı, itiraf ediyorum.

Test yapmak:

$ echo 'thisisastring1124' | sed 'y/1234567890abcdefghij/abcdefghij1234567890/'
t89s9s1str9n7aabd
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.