9ホールミニゴルフ:テキスト操作[終了]


26

9ホールミニゴルフ:説明

  • さまざまな難易度の9(ほとんど簡単)コードゴルフチャレンジ
  • 同じ言語を複数回使用した場合の罰則
  • 特定のテーマに関するすべての課題(このテーマ:テキスト操作)
  • 入力と出力はどこでも合理的です(つまり、STDINとSTDOUT、ファイルの読み取り/書き込み、関数の引数と戻り値など)。ただし、プログラムにハードコーディングしてはなりません。
  • 9ホールチャレンジテキストメカニックから大きな影響を受けた

  1. コードゴルフバッグ

    入力として2つの文字列を受け取ります。
    最初の文字列の文字カウントを出力しますが、2番目の文字列での文字の出現を無視します。
    例:f("foobarbaz", "ao")=>5
  2. ゴルフの口実

    入力として2つの文字列を受け取ります。
    すべての行の先頭に2番目の文字列を付けて、最初の文字列を出力します。
    例:f("foo\nbar\nbaz", "a")=>"a foo\na bar\na baz"
  3. タブとスペースの戦争

    入力として string s、number n、およびboolean b(必要に応じて指定)を受け取ります。
    場合はbtrueで、出力sのすべてのタブでは、に変換されnた空間。
    そうでなければs、すべてのnスペースをタブに変換して出力します。
    例:f("if (x) {\n\tdoStuff();\n}", 4, true)=> "if (x) {\n[sp][sp][sp][sp]doStuff();\n}"[sp]スペースを意味します)
  4. ゴルフの柱

    文字列s、数値n、および別の数値mを入力として受け取ります。各行の列および列ごとの文字で
    出力sします。 また、列間に1つのスペースを埋めます。 例:=>nm

    f("this is some placeholder text, foo bar baz...", 3, 5)

    this  aceho  foo 
    is so lder  bar b
    me pl text, az...
    
  5. フレンドリーレター

    入力として 文字列sと数値nを受け取ります。
    で最も一般的なn文字グループを出力しsます。
    同点がある場合、それらの一部またはすべてを出力します。
    例:f("abcdeabcfghiabc", 3)=>"abc"
  6. 朝食のスクランブルエッグの手紙

    入力として文字列を受け取ります。
    文字列の最初と最後の文字を除くすべての単語をスクランブル(文字の順序をランダム化)して出力します。
    簡単にするために、入力はスペースで区切られた「単語」のリストであると仮定します(つまり@$&_():;" foo bar@$&_():;"は「単語」と見なされます)。
    例:f("this is a sentence that will be scrambled")=>"tihs is a stcneene that wlil be sclamrbed"
  7. ASCIIfy

    入力として文字列を受け取ります。
    文字列に数字とスペースのみが含まれている場合は、数字をそれぞれのASCII文字に置き換えます(スペースを削除します)。
    そうでない場合は、逆(文字から数字)を行います。
    例:f("ASCIIfy challenge")=> "65 83 67 73 73 102 121 32 99 104 97 108 108 101 110 103 101"
    例2:f("65 83 67 73 73 102 121 32 99 104 97 108 108 101 110 103 101")=>"ASCIIfy challenge"
  8. ミニミニマークダウン変換

    入力として文字列を受け取ります。
    Stack Exchangeのコメントで使用されているように、ミニマークダウンで変換された文字列を出力します。
    これはさえミニERバージョンです:あなただけ処理する必要がある**bold***italics*`code`
    のような無効なネストを処理する必要はありません**foo *bar** baz*。また、区切り文字(*または`)が表示された場合、常にフォーマットすること意味すると想定します(つまり、te**st**ing=> te<b>st</b>ing、およびfoo* bar *baz=> foo<i> bar </i>baz)。
    例:f("**foo** *bar **baz*** `qux`")=>"<b>foo</b> <i>bar <b>baz</b></i> <code>qux</code>"
  9. 最高のキャラクターのみ

    入力として string s、number n、およびstring rを受け取ります。の各単語のth番目の文字を
    出力nsます。(0から始まる、単語はスペースで区切られます)。
    単語の長さが未満の場合nr代わりにその単語に使用します。
    例:f("this is a test sentence foo bar baz", 2, "-")=>"i--snorz"

得点

スコアは、プログラムの文字数の合計です。繰り返される言語ごとに、110%を掛けます。たとえば、3つのRubyソリューションがあり、すべてのソリューションの合計文字数が1000である場合、スコアは1000 * 1.1 * 1.1 = 1210です。非整数のスコアがある場合は切り捨てます。

がんばろう!


1
チャレンジ8では、Markdownで最も明確に指定されていない側面の1つと、実際にうまく行うのが最も難しい側面に触れます。あいまいさを処理する方法の明確な説明と適切なテストスイートが必要です。mdtestスイートのEmphasis.textを参照してください。
ピーターテイラー14年

@PeterTaylorまあ、_私はそれを含めないように指定したので問題ではありません。他のいくつかを明確にするために編集しました。
ドアノブ

どう**foo***bar**baz*
ピーターテイラー14年

1
課題6はこれと同じです。
ダニエロ14年

4
私はそれはだから、オフトピックとして、この質問を閉じるために投票してる部分との間の不十分な相互作用を持つマルチパートの挑戦
pppery

回答:


12

スコア:382 * 1.1 2 = 462

言語が変更されやすい。

1. APL、8 4

4文字を削ってくれた@marinusに感謝します。

f←⍴~

文字列を左右の引数として呼び出します。

      'foobarbaz' f 'ao'
5

2.ルビー、35 31

@DoorknobofSnowに4文字の文字を削除してくれてありがとう。

f=->s,r{s.gsub(/(?<=^)/,r+' ')}

3. Python、48

f=lambda s,n,b:s.replace(*['\t',' '*n][::2*b-1])

4. GolfScript、20

{@//zip{' '*}%n*}:f;

引数がスタック上にあると仮定します。オンラインでテストする

5. J、50

f=:({~[:(i.>./)+/"1@=@(}.~0-1{$))@|:@([$~],1+[:$[)

左の引数として文字列、右の番号として呼び出されます。

   'abcdeabcfghiabc' f 3
abc

6.ルビー、61

f=->s{s.gsub(/(?<!^| )[^ ]+(?!$| )/){[*$&.chars].shuffle*''}}

7. GolfScript、39 35 34

{[.10,' '*-{{}/]' '*}{~]''+}if}:f;

繰り返しますが、引数がスタック上にあると仮定します。オンラインでテストする

8. Perl、98

sub f{$_=@_[0];s!\*\*(.+?)\*\*!<b>$1</b>!g;s!\*(.+?)\*!<i>$1</i>!g;s!`(.+?)`!<code>$1</code>!g;$_}

9.ハスケル、36

f s n r=[(x++cycle r)!!n|x<-words s]

すばらしいです!f=->s,r{...}関数の代わりにproc()を使用して、Rubyにいくつかの文字を保存できます。完了までアップボットを拒否しますが、:P
ドアノブ

@DoorknobofSnowああ、ありがとう。Rubyにそれほど熟練していない:)
ボラティリティ14年

Hooray、あなたが最初にフィニッシュしました:-D +1
Doorknob

すべての関数が文字列を返すことになっているという印象を受けますので、4番については、もう1文字使用する必要があると思います。
ピーターテイラー14年

@PeterTaylor修正:)
ボラティリティ14年

4

Pythonの- 697×1.1 9 ≈1644

うん、ラムダが大好きです。

:3と5は、ボラティリティの答えから恥知らずにコピーされました。より良い代替手段が見つからなかったためです。また、これは楽しみのためだけに行われました

f=lambda a,b:sum([x not in b for x in a])        # 1, 41 chars
f=lambda a,b:b+' '+a.replace('\n','\n'+b+' ')    # 2, 43 chars
f=lambda s,n,b:s.replace(*['\t',' '*n][::b*2-1]) # 3, 47 chars
f=lambda s,n,m:'\n'.join([' '.join([s[x:x+m]for x in range(y*m,len(s),m*n)])for y in range(n)])
                                                 # 4, 94 chars
f=lambda s,n:max([s[x:x+n]for x in range(len(s)+1-n)],key=s.count)
                                                 # 5, 66 chars
import random;f=lambda s:' '.join([''.join(sorted(y,key=lambda*x:random.random()))for y in s.split()])
                                                 # 6, 102 chars
f=lambda s:s.replace(' ','').isdigit()and ''.join(map(chr,map(int,s.split())))or ' '.join(map(str,map(ord,s)))
                                                 # 7, 110 chars
import re;f=lambda s:re.sub('`(.*?)`','<code>\\1</code>',re.sub(r'\*(.*?)\*','<i>\\1</i>',re.sub(r'\*\*(.*?)\*\*','<b>\\1</b>',s)))
                                                 # 8, 128 chars
f=lambda s,n,r:''.join([len(x)>n and x[n]or r for x in s.split()])
                                                 # 9, 66 chars

編集:ヒントについては、ボラティリティに感謝します。


それらのほとんどにジェネレータ式を使用できます。これにより、大量の文字を節約できます。また、1のために使用する必要はありませんintブールは、それらのサブクラスであるため、および7のためall([...])に短縮することができますx.replace(' ','').isdigit()
ボラティリティ

2番目の答えは、の最初の行の前に付けませんa
ダニエロ14年

1

スコア513 * 1.1 5 = 826 

同じ言語のペナルティによりかなりの打撃を受けた。これらのほとんどをRubyで解決して、できるだけ早く終了しました。一部の言語は後で変更される場合があります。各回答に小さな要約/説明を追加しました。

1:Python(46)

f=lambda a,b:len([x for x in a if not x in b])

まず、Ruby 2.0の短い回答(30)によりペナルティが大きくなり、全体的なスコアが高くなります。

p (gets.chars-gets.chars).size

2:Ruby 1.9+(37)

s接頭辞付きの各行を返しますt

f=->s,t{s.split(?\n).map{|x|t+x}*?\n}

3:Ruby 1.9+(48)

に応じて、sタブをnスペースに、またはその逆に置き換えて返しますb

f=->s,n,b{r=[" "*n,?\t];b||r.reverse!;s.gsub *r}

4:Ruby 1.9+(95)

誰かが私を撃ちます。

f=->s,n,m{[*s.chars.each_slice(m).map{|w|w*''}.each_slice(s.size/m/n)].transpose.map{|w|w*' '}}

5:Ruby 1.9+(58)

の最も一般的なn文字列を返しますs

f=->s,n{(a=s.chars.each_slice(n)).max_by{|v|a.count v}*''}

6:J(47)

テキストを何とかスクランブルします。マリナスから恥知らずに盗まれた:

''[1!:2&4('\w(\w+)\w';,1)({~?~@#)rxapply 1!:1[3

7:ルビー(57 + 1)

ASCIIfiedまたはde-ASCIIfiedの入力を印刷します。-pスイッチで実行します。

~/\d/?gsub(/\d+\s*/){$&.to_i.chr}:gsub(/./){"#{$&.ord} "}

8:セッド(87)

(ミニ)マークダウンからHTMLに変換された入力を印刷します。

s:\*\*([^*]+)\*\*:<b>\1</b>:g;
s:\*([^*]+)\*:<i>\1</i>:g;
s:`([^`]+)`:<code>\1</code>:g

9 Ruby 1.9+(37)

nの各最初の単語のth文字の文字列を返しますs。またはr

f=->s,n,r{s.split.map{|w|w[n]||r}*''}

8の出力<b>test** **test2</b>はありません**test** **test2**か?
ドアノブ

@DoorknobofSnowはい、そうです;)修正されました(sedに貪欲でない繰り返しはありません)。
ダニエロ14年

それは何に役立つのでしょう**foo *bar* baz**か?
ボラティリティ14年

@ボラティリティおっと。私は質問をきちんと読んでいませんでした。ネストはないと思いましたが、無効なネストはありませんでした。今すぐ修正するかどうかはわかりません。
daniero 14年

最初のルビコード-演算子は列挙子で動作しますか?
シヴァ14年

1

進行中の作業

1. Java-66

int f(String s,String b){for(char c:b)s=s.replace(b,"");return s;}

2. Java-64

String f(String i,String r){return i.replaceAll("(?m)^",r+" ");}

3. Python-58

def f(s,n,b):t=" "*n;a=t,'\t';print s.replace(a[b],a[b^1])

4. Python-84

def f(s,n,m):
 a=['']*n;c=0
 while s:a[c%n]+=s[:m]+" ";s=s[m:];c+=1
 for i in a:print i

5。

6。

7. Befunge 98-9

&,5j3.~@#

8。

9。


最初の穴ではfor(char c:b.toCharArray())、それを機能させるためにand replace(c+"","");およびreturn s.length();(またはそのようなもの)が必要です。
ボベル14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.