Lithp Tranthlator


28

私の友人は先日、Lispトランスレータを作成しました。つまり、文字列を取り、s => thとS => Thに変換しました。かなり長く、ゴルフができると思った。

したがって、タスクは、入力文字列を受け取り、それをlispに変換して出力するプログラム/関数を作成することです

テストケース

Sam and Sally like Sheep        Tham and Thally like Thheep
Sally likes sausages            Thally liketh thauthageth
Sally sells seashells           Thally thellth theathhellth

hが常に繰り返されることは重要ではないことに注意してください。

これはコードゴルフなので、最短の回答が勝ちます


13
私は誰もが彼らのヘッダーのバイトをバイトに変えて欲しいと思いました
リーキー修道女

6
プログラムがその中のどこにsも使用しない場合、ボーナスポイントがあるはずSです。
ネイトダイヤモンド

1
言語名を明確にする必要があると思います。交換なし。一部の言語にはすでに「th」が含まれているため、あいまいです。そして、誰かが将来「Common Lithp」と呼ばれる別の言語を作成しないと誰が言うのでしょうか?
mbomb007

1
@ mbomb007私はそれについてあまり心配しません。実際に回答にタイトルを付けるデフォルトの方法があるかどうかはわかりません。彼らがそれを行う方法を述べているかどうか私が見るほとんどの質問は、それは通常同じ方法です。答えをどのように設定するかについては説明していませんが、ユーザーは自由にタイトルを付けることができます。独学者なので、言語を要求することさえしなかったので、書くことでさえ彼らに反論することができました。しかし、私はあなたの主張を理解しています。私はそれが心配だとは思わない
ジョージ

2
この課題をより面白くするものは、全体的な症例保存です。たとえば、LOOK OUT A SNAKE!!! -> LOOK OUT A THNAKE!!!
ふわふわ

回答:


36

Common Lithp、62

(map()(lambda(u)(princ(case u(#\s"th")(#\S"Th")(t u))))(read))

まず、(read)入力(文字列でなければなりません)。CLの文字列はシーケンスなのでmap、各文字を反復処理するために使用します。への最初の引数mapは、結果のタイプを表します(例えば、ベクトルからリストを作成できます)。の場合nil、別名()、結果は破棄されます。入力にマッピングされる関数はprinc、置き換えられる必要があるものを除き、各文字を単純に(読み取り不可として印刷します)。


14
しかし、その言語名。
ジョーZ.

1
@JoeZ。私は、sbyをth他のすべての人が行ったように、Pysonの回答を見てください。
コアダンプ

@coredumpそれらはすべて間違っています:それは一方向です:s-> thS-> Thth-> thTh-> Th
エリックアウトゴルファー

1
@DrGreenEg​​gsandIronMan確かに、 (defmacro cathe (&rest args) `(case ,@args))
コアダンプ

1


13

JavaThcript ETh6、38バイト

最初は明らかな解決策を採用しました

a=>a.replace(/s/g,'th').replace(/S/g,'Th')

しかし、私はそれを4バイト下にゴルフしました

a=>a.replace(/s/gi,b=>b>'r'?'th':'Th')

これはi、大文字と小文字を区別しないパターンを検索するregex フラグを使用します。Javascriptの良い点は、置換(正規表現)を処理する匿名関数を指定できることです。

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

f=
a=>a.replace(/s/gi,b=>b>'r'?'th':'Th')

s.innerHTML = [
    'abScdsefSghsij',
    'Sam and Sally like Sheep',
    'Sally likes sausages',
    'Sally sells seashells'
].map(c=>c + ' => ' + f(c)).join`<br>`
<pre id=s>


11
「E eth thickth」?
ジョーZ.

私は考えていました'Tt'[b>'r']+'h'が、それは同じ長さです
ワシントンゲデス

1
あなたは38バイトを意味する-Downgoat 16
19:41

コードポイント値を介して文字列比較が行われるTILの+1
MayorMonty

@Upgoatそれはすみません、私のせいです。
ニール

11

GNU Sed-17

s/S/Th/g;s/s/th/g

明らかな答え。

$ sed -e "s/S/Th/g;s/s/th/g"

Sam and Sally like Sheep
Tham and Thally like Thheep

Sally likes sausages
Thally liketh thauthageth

Sally sells seashells
Thally thellth theathhellth

17
GNU Thedのことですか?;)
m654


8

Python 3-40バイト

最初のゴルフ!

lambda s:s.translate({115:'th',83:'Th'})

変換テーブルを受け入れるstrモジュールの変換メソッドを使用します。変換テーブルは、dictキーコードをキーとし、そのstr代わりに値として使用するシンプルなものです。


1
PP&CGコミュニティへようこそ!
エリックアウトゴルファー

4
なぜあなたは2つの別々のアカウントを持っているのでしょうか?
バリント

@Bálintどうやら、彼はたった3人の担当者で現在のアカウントにログインするのを忘れていましたが、Stack Overflowでの経験がありました。そして、新しいアカウントで投稿しました。
user48538

6

JavaThcript ETh6、43バイト

s=>s.replace(/s/gi,m=>({s:'th',S:'Th'})[m])

Tetht Thuite:

th=s=>s.replace(/s/gi,m=>({s:'th',S:'Th'})[m])
  
console.log(th('Sam and Sally like Sheep'));
console.log(th('Sally likes sausages'));
console.log(th('Sally sells seashells'));


6
Confethth:あなたは、ththタイトルのthaketのためにthutを書いただけです!
反時計回りの回転を停止


5

C、50バイト

s(c){c=getchar();c+=c-83&95?0:'h\1';s(printf(&c));}

\1実際の\x01バイトに置き換えます。

jimmy23013は1バイトを保存し、彼のアプローチを使用してさらに2つ保存しました!ありがとう。


&cパラメータが壊れているとコメントしようとしていました。しかし、そうではありません。リトルエンディアンアーキテクチャでは、その2バイト目int0x00実際に「文字列」を終了するからです。これは恐ろしく巧妙で、大好きです!
クエンティン

s(c){c=getchar();c+=c-83&~32?0:26625;s(printf(&c));}
jimmy23013

に2バイトをプッシュすることはできませんchar'h\1'
エリックアウトゴルファー

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ複数文字の定数は実装で定義されており、完全に有効なCです。-
デニス


4

Java、71 65バイト

String t(String s){return s.replace("S","Th").replace("s","th");}

ゴルフの最初の試みなので、Javaを使ってみませんか。


2
replace代わりに使用できますreplaceAll
-aditsu

ああ、そうだね。ありがとう!@aditsu
非常識な

3
関数の代わりにラムダ式を使用して、いくつかのバイトを保存できます。s->s.replace("S","Th").replace("s","th")
デンカー

4

GNU AWK、31バイト

gsub関数を使用して、正規表現を介して下位または上位のSを変換し、後で印刷します。ファイル、またはstdinこの場合のように作業できます

$ awk '{gsub(/s/,"th");gsub(/S/,"Th")}1' <<< "This is Sparta"                   
Thith ith Thparta


3

Python3-46バイト

lambda s:s.replace("s","th").replace("S","Th")

@DenkerAffeの助けを借りて4バイトをドロップしました


1
Python 3は元々作成された言語でした。彼のコードの私のバージョンは59バイトだったので、完了しました!
ジョージ

1
lambda s:s.replace("s","th").replace("S","Th")少し短いです。
デンカー

@DenkerAffeはい、短いですが、この場合にラムダを使用するには、元の質問に答えるために入力と出力が必要です。
ジョージ

1
@georgeコミュニティのコンセンサスでは、関数はstdin / stdoutを使用する代わりに引数を使用して値を返すことができます。I / Oのデフォルトを見てください。もちろん、必要に応じてオーバーライドできますが、この特定の課題ではあまり意味がありません。
デンカー

@DenkerAffe大丈夫それは大丈夫です。質問をしたとき、出力はエコーまたは印刷になります。ただし、デフォルトのままにします。はい、ラムダを使用すると短くなります
ジョージ

3

C#6.0-58バイト

string f(string s)=>s.Replace("s","th").Replace("S","Th");

入力文字列を関数の引数として受け取ります。


3

Haskell、36バイト

f 's'="th";f 'S'="Th";f x=[x]
(>>=f)

スペースは必要ありません:f's'=...
ThreeFx

1
悲しいことに、私はそうします。Haskell名にはアポストロフィを含めることができます。:(
リン

あぁ、すっかり忘れてた。私はほとんど必要ありませんChar...
ThreeFx

8
「ハスケル」と思った
パトリックロバーツ

3

さび、46バイト

|s:&str|s.replace("s","th").replace("S","Th");

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


1
@ mbomb007。それを編集する必要があるかどうかはわかりません。
ワシントンGuedes

回答のガイドラインに従うようにしています。投稿を表示し、それがどの言語であるかを知ることができるはずです。一部の言語にはすでに「th」が含まれているため、あいまいです。そして、将来、誰かが実際に「Rutht」と呼ばれる別の言語を作成しないと言うのは誰ですか
mbomb007

2
@ mbomb007、誰かが将来「Rust」と呼ばれる別の言語を作成しないと言うのは誰ですか?
msh210

@ msh210論争点。使用する場合、ポスターを明確にする必要があるため。
mbomb007

3

PHP、42バイト

ファイルから実行する場合:

<?=strtr($argv[1],["s"=>"th","S"=>"Th"]);

として実行:

~$ php [file] "This is Silly"

-1バイト:末尾の改行を削除します
Erik the Outgolfer

-8バイト:引用符を削除します。-> php -d error_reporting=0通知を抑制するために使用します。
タイタス

3

TI-Basic、126バイト

Input Str1
inString(Str1,"s
While Ans
sub(Str1,1,Ans-1)+"th"+sub(Str1,Ans+1,length(Str1)-Ans->Str1
inString(Str1,"s
End
inString(Str1,"S
While Ans
sub(Str1,1,Ans-1)+"Th"+sub(Str1,Ans+1,length(Str1)-Ans->Str1
inString(Str1,"S
End
Str1

これは間違っています。Str1変更されることはなくAns、最後に数字を保持します。
リルトシアスト

メモをありがとう、今修正しました。どうすればStr1元に戻すのを忘れたのかわかりません
...-Timtech

これはまだ間違っています。最初または最後の文字がSの場合はエラーになります。前述したように、投稿する前にコードをテストしてください。
リトシアスト

3

Java、101バイト

interface a{static void main(String[]A){System.out.print(A[0].replace("S","Th").replace("s","th"));}}

これは、以前のJavaの回答とは異なり完全なプログラムであることに注意してください。

ボーナス(最初にCプリプロセッサ THEEプリプロテサーに供給される必要があります):

#define interfaith interface
#define thtatic static
#define Thtring String
#define Thythtem System
#define replaith(x,y) replace(x,y)

interfaith a{thtatic void main(Thtring[]A){Thythtem.out.print(A[0].replaith("S","Th").replaith("s","th"));}}



2

Python 3、53バイト

def l(s):return s.replace("s","th").replace("S","Th")

使用法:

>> l('Sam and Sally like Sheep')

Tham and Thally like Thheep

-7バイト:lambda s:s.replace("s","th").replace("S","Th")使用法:(lambda s:s.replace("s","th").replace("S","Th"))(s)
エリックアウトゴルファー

...ので、(私の前に投稿されました)TuukkaXの答えと同じだEʀɪᴋᴛʜᴇGᴏʟғᴇʀまあ、@
m654

別の回答を投稿する理由はありません。
エリックアウトゴルファー

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ私が私のものを投稿したとき、私は彼に気付きませんでした。
m654

あなたの回答の前に短い回答が投稿されていることに気付いたら、回答を削除できます。
エリックアウトゴルファー



2

Emacth Lithp、61バイト

(lambda(s)(replace-regexp-in-string"[Ss]\\(\\w*\\)""th\\1"s))

Emacs Lispはテキストを置換する際にスマートになろうとしますが、置換された文字列が1つのスペース、つまり大文字Sだけを占めると、そのスマートさが壊れます。これにより、「Sam and Sally」代わりに一致します。ただし、これは「SAM and Sally」も必要に応じて処理します。つまり、「THAM and Thally」を生成します。


2

x86マシンコード、19バイト

16進数で:

86ac3c5374043c73750440aab068aa84c075eec3

入力::ESI入力文字列、EDI:出力バッファ。

分解:

_loop:
0:  ac          lodsb       
1:  3c 53       cmp al,'S'  
3:  74 04       je _th      
5:  3c 73       cmp al,'s'  
7:  75 04       jne _nth    
_th:
9:  40          inc eax     ;[Ss]->[Tt]
a:  aa          stosb       
b:  b0 68       mov al,'h'  
_nth:
d:  aa          stosb       
e:  84 c0       test al,al  
10: 75 ee       jnz _loop   
12: c3          ret         

test al, 'S'両方を一度に確認するために使用できます
アナトリグ

2

Befunge 98、37 49バイト

元のバージョン :

~:"s"- #v_$"ht",>,
_;#-"S":<;$"hT",^ 

コンセンサスによると、エディションの終了:

~:a-!#@_:"s"-#v_$"ht",>,
_;#-"S":      <;$"hT",^ 

これにより、コードグリッドに大きな不満が残ります。時間があればそれを調べます。
49番目のバイトは、ccbi(およびおそらく他のインタープリター)が "Th"の無限行をバグアウトして印刷するのを防ぐために必要な、2番目の行の最後のスペースです。



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