文字列の数字を文字に、またはその逆に変換します


12

数字とそれに相当する文字のリストに基づいて、文字列を入力し、その文字列の文字を同等の数字/文字に置き換えて、結果を出力します。

リスト

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

入力

thisisastring1124

出力

t89s9s1str9n7aabd

ルール

  • 数字は小文字のみに相当します。
  • リスト外の文字はそのまま残されます。
  • 入力文字列にスペースを含めることはできません。
  • 完全なプログラムまたは機能のいずれかが許可されます。
  • それはコードゴルフなので、最少のバイトが勝ちます。

2
PPCGへようこそ。ナイスチャレンジ!
アダム

2
代わりに大文字を交換できますか?
アダム

小文字のみ、大文字のみがリストの範囲外になります。
ノワールアンタレス

入力には文字と数字のみが含まれますか、またはスペース以外の文字(句読点など)が入力されますか?
スンダ

入力文字列にはスペース以外の文字を含めることができますが、リスト外の文字列は出力文字列にそのまま残ります。
ノワールアンタレス

回答:











3

R、40バイト

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

オンラインでお試しください!

驚いたことに、Rはこの種のチャレンジに適しています。これtrは、Bashの回答と同様の機能があるためです。なぜ存在するのか分かりませんが、感謝しています!


すごい!chartr()が正規表現を理解していないことを知らなかった。
snoram

@snoramはまったく正規表現ではありません。ドキュメントでは、「仕様では範囲がサポートされていますが、文字クラスと繰り返し文字はサポートされていません」と指定しています。
ジュゼッペ

3

MS-SQL、71バイト

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

新しいSQL 2017関数TRANSLATEは個別の文字置換を実行するため、この目的に最適です。前回のチャレンジで私の同様の答えをください。

入力は、IOルールに従って、varchar列vを持つ既存のテーブルtを介して行われます。小文字のみを置換するには、大文字と小文字を区別する照合を使用してテーブルを作成する必要があります

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


2

Pyth、13バイト

Xz+jk+0_S9<GT

ここで試してみてください!

説明

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

C(gcc)81 72バイト

提案してくれたGiacomo Garabelloに感謝します。

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

オンラインでお試しください!


あなたは、入力文字列を変更することにより、6つの文字を削除する代わりに、それをプリントアウトすることができますputchar(...)> - *s=...置き換えることで、他の4と*s-48U<11*s<59 、オンラインでそれを試してみてください!
ジャコモガラベッロ

入力に次の*s<59ような文字$が含まれていると@GiacomoGarabelloが壊れます。これが理由です*s-48U([0..47]は[-48 ..- 1]になり、大きな符号なしの値になります)。 -alnumが有効だったので、より保守的な解釈で行った。
-ErikF

けっこうだ。OPは最近、他のすべての文字は有効だがスペースではないことをコメントしました。しかし、私の最初の提案
Giacomo Garabello

1

Powershell、94バイト

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

テストスクリプト:

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

&$f "thisisastring1124"

説明

  • $args -引数文字列
  • $args|% t*y-と|ForEach-Object -Method ToCharArray同等に展開する"$args".ToCharArray()
  • ($s='1a2b3c4d5e6f7g8h9i0j').IndexOf($_)-文字列内の文字を検索し、位置を返します。見つからない場合は-1を返します。$ sに、最後のビットが異なる隣接位置のペアの文字を含む文字列を格納させます:0 + 1、2 + 3、4 + 5 ....
  • if(1+($p=...)) -位置が見つかった場合
  • $p-bxor1 -位置ビットxor 1

で素敵なトリック-bxor1
AdmBorkBork

0

R、107バイト

function(s){a=utf8ToInt(s);l=a>96&a<107;n=a>47&a<58;a[n]=(a[n]-9)%%10+97;a[l]=(a[l]+4)%%10+48;intToUtf8(a)}

オンラインでお試しください!

最初の試み、間違いなく改善可能...


chartrここにいるのは友達だと思う
ジュゼッペ


1
@ジュゼッペ:すごい!私はチャーター機能を知りませんでした。あなたの答えとして投稿してください、アプローチは全く異なります;)
digEmAll


0

K4、38バイト

解決:

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

説明:

リスト内の各文字を検索し、リスト"abcdefghij1234567890"にインデックスを付けます"1234567890abcdefghijX"X、元の文字があるに付けます。

文字列を構築するより短い方法を見つける必要があります...

{(,/|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

ボーナス:

38バイトの別のソリューション:

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



0

sed、44バイト

y/1234567890abcdefghij/abcdefghij1234567890/

少し退屈だと認めます。

テスト:

$ echo 'thisisastring1124' | sed 'y/1234567890abcdefghij/abcdefghij1234567890/'
t89s9s1str9n7aabd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.