9 홀 미니 골프 : 텍스트 조작 [닫힘]


26

9 홀 미니 골프 : 설명

  • 다양한 난이도의 9 가지 (대부분 매우 쉬운) 코드 골프 과제
  • 같은 언어를 두 번 이상 사용하는 것에 대한 처벌
  • 특정 주제에 대한 모든 과제 (이 주제 : 텍스트 조작)
  • 입력 및 출력은 합리적인 위치 (예 : STDIN 및 STDOUT, 파일 읽기 / 쓰기, 함수 인수 및 반환 값 등) 일 수 있지만 프로그램에 하드 코딩되어서는 안됩니다
  • 심하게 영감 9 홀 도전텍스트 정비공

구멍

  1. 코드 골프 백

    두 개의 문자열을 입력으로 사용하십시오.
    두 번째 문자열에서 문자의 발생을 무시하면서 첫 번째 문자열의 문자 수를 출력합니다.
    예 : f("foobarbaz", "ao")=>5
  2. 골프를위한 전문

    두 개의 문자열을 입력으로 사용하십시오.
    모든 줄 앞에 두 번째 줄이 붙은 첫 번째 문자열을 출력하십시오.
    예 : f("foo\nbar\nbaz", "a")=>"a foo\na bar\na baz"
  3. 탭 대 공간의 전쟁

    string s, number n및 boolean b(원하는대로 지정)을 입력으로 사용하십시오. true 인
    경우 모든 탭을 공백으로 변환하여 b출력 합니다. 그렇지 않으면 모든 공백을 탭으로 변환하여를 출력하십시오 . 예 : => ( 공백을 의미)sn
    sn
    f("if (x) {\n\tdoStuff();\n}", 4, true)"if (x) {\n[sp][sp][sp][sp]doStuff();\n}"[sp]
  4. 골프의 기둥

    문자열 s, 숫자 n및 다른 숫자 m를 입력으로 사용하십시오. 각 행의 열과 열당 문자로
    출력 됩니다. 또한 열 사이에 하나의 공백을 채 웁니다. 예 : =>snm

    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에 대한 설명에 사용 된대로 미니 마크 다운으로 변환 된 문자열을 출력합니다.
    이것은 심지어 미니 어 버전입니다 : 만 처리 할 필요가 **bold**, *italics*하고 `code`.
    와 같은 잘못된 중첩을 처리 할 필요는 없습니다 **foo *bar** baz*. 또한 구분 기호 ( *또는 `)가 표시되면 항상 형식화하는 것 (즉, te**st**ing=> te<b>st</b>ingfoo* 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을 입력으로 사용하십시오. 의 각 단어의 문자를
    출력합니다 . (0 색인, 단어는 공백으로 구분). 단어의 길이보다 작은 경우 , 사용 대신에 단어. 예 : =>ns
    nr
    f("this is a test sentence foo bar baz", 2, "-")"i--snorz"

채점

당신의 점수는 프로그램의 문자 수의 합입니다. 반복되는 모든 언어에 110 %를 곱하십시오. 예를 들어, 세 개의 Ruby 솔루션이 있고 모든 솔루션의 총 문자 수가 1000이면 점수는 1000 * 1.1 * 1.1 = 1210입니다. 정수가 아닌 점수를 가진 경우 내림합니다.

행운을 빕니다!


1
Challenge 8은 Markdown의 가장 잘 정의되지 않은 측면 중 하나와 실제로 수행하기 가장 어려운 측면 중 하나를 다룹니다. 모호성과 올바른 테스트 스위트를 처리하는 방법에 대한 명확한 설명이 필요합니다. mdtest 제품군의 Emphasis.text 를 참조하십시오 .
피터 테일러

@PeterTaylor 글쎄, 포함 _시키지 않기로 지정했기 때문에 중요하지 않습니다. 다른 것들을 명확히하기 위해 편집했습니다.
손잡이

무엇에 대해 **foo***bar**baz*?
피터 테일러

1
도전 6은 동일 이것 .
daniero

4
그것 때문에 내가 오프 주제로이 질문을 닫습니다 투표를하고있어 부품 사이의 충분한 상호 작용이 여러 부분으로 도전
pppery

답변:


12

점수 : 382 * 1.1 2 = 462

언어가 변하기 쉬운 언어.

1. APL, 8 4

4 문자를 면도 해 주셔서 감사합니다 @marinus.

f←⍴~

문자열을 왼쪽 및 오른쪽 인수로 호출합니다 (예 :

      'foobarbaz' f 'ao'
5

2. 루비, 35 31

4 개의 문자를 제거해 주신 @DoorknobofSnow에게 감사드립니다.

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

3. 파이썬, 48

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

4. 골프 스크립트, 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. 펄, 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에 능숙하지 않습니다 :)
변동성

Hooray, 당신은 처음으로 마무리합니다 :-D +1
Doorknob

모든 함수가 문자열을 반환해야한다는 인상을 받았습니다. 따라서 4 번에는 하나의 문자를 더 사용해야한다고 생각합니다.
피터 테일러

@PeterTaylor fixed :)
변동성

4

파이썬-697 × 1.1 9 ≈ 1644

Gee, 나는 람다를 좋아한다.

참고 : 3과 5는 더 나은 대안을 찾을 수 없으므로 Volatility의 답변 에서 뻔뻔스럽게 복사되었습니다 . 또한 이것은 단지 재미를 위해 수행 되었습니다 .

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 을 사용할 필요가 없습니다 . 7의 all([...])경우 단축x.replace(' ','').isdigit()
변동성

두 번째 답변은의 첫 줄 앞에 접두사가 없습니다 a.
daniero

1

513 * 1.1 5 = 826 점 

같은 언어 페널티로 인해 상당히 뛰었습니다. 루비에서 대부분의 문제를 해결하여 최대한 빨리 마무리했습니다. 나중에 일부 언어를 변경할 수 있습니다. 각 답변에 작은 요약 / 설명을 추가했습니다.

1 : 파이썬 (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 : 루비 1.9+ (37)

s접두사가 붙은 각 줄을 반환합니다 t.

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

3 : 루비 1.9+ (48)

다음 에 따라 s탭을 n공백으로 바꾸 거나 그 반대로 반환 합니다 b.

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

4 : 루비 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 : 루비 1.9+ (58)

다음에서 가장 일반적인 n문자를 반환합니다 s.

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

6 : J (47)

어떻게 든 텍스트를 스크램블합니다. 뻔뻔에서 그대로 도난 스 marinus :

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

7 : 루비 (57 + 1)

ASCII 화 또는 비 ASCII 화 입력을 인쇄합니다. -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 루비 1.9+ (37)

n에서 s또는 첫 번째 단어의 각 문자의 문자열을 반환합니다 r.

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

에 대한 8 개의 출력 <b>test** **test2</b>**test** **test2**아닌가요?
Doorknob

@DoorknobofSnow 그렇습니다.) 고정됨 (sed는 욕심없는 반복이 없습니다).
daniero

무엇을 줄 것입니까 **foo *bar* baz**?
변동성

@Volatility 죄송합니다. 나는 질문을 제대로 읽지 않았으며 중첩이 없을 것이라고 생각했지만 유효 하지 않은 중첩 은 없다고 말했습니다 . 지금 당장 고칠 지 모르겠습니다.
daniero jan

첫 번째 루비 코드 -연산자는 열거 자와 함께 작동합니까?
Siva

1

진행중인 작업

1. 자바-66

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

2. 자바-64

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

3. 파이썬-58

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

4. 파이썬-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. 98을 9로 사랑하십시오

&,5j3.~@#

8.

9.


첫 번째 홀에서 그것은해야 for(char c:b.toCharArray())하고 replace(c+"","");return s.length();(또는 같은) 그것에게 일을 얻을 수 있습니다.
bobbel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.