CodeGolf-노이즈 # 1 무시


15

명령

Barry는 소규모 API를 담당하는 좋지 않은 백엔드 개발자로서 고객의 상점에서 구매 한 정보를 제공해야합니다. 그러나 그는 훌륭한 일을하지 않았으며 상사는 대신 클라이언트 측에서 수정하도록 지시합니다. 이상적으로는 같은 쉼표로 구분 된 값을 받아야 927,2,45,90처럼 뭔가에 해당하는 item_id, item_amount, unit_price,total

우리는 신경이 첫 번째 퍼즐에서 item_id하고 item_amount있지만, 우리는 문제를 제시하는 대신에 다른 필드가 필요합니다. 배리 때로는 혼합 일 반환 소음 출력의 한 부분으로, 그는 또한 반환, 주문 잘못된를 얻을 수를 얻을 수 noise, noise, unit_price, total, item_id, item_amount.

당신의 작업

Barry가 올바르게 반환하는지 여부에 관계없이 맵 (또는 유사한 구조)에 쌍을 저장 item_id하고 item_amount가능한 한 적은 수의 문자로 각 요소를 새 줄에 인쇄해야합니다. (저장은 필수가 아니며 출력에만 신경을 쓴다)

샘플 입력 (올 바르고 지저분한 형식 혼합)

103,2,50,100
106,1,900,900
459,40,150,300,67,2
4,20,30,6000

하나 즉 입력됩니다 a,b,x,x또는 x,x,x,x,a,b어디에 우리가 걱정입니다 a& b. Gcsv의 모든 줄에 변수 (또는 다른 이름)가 있다고 가정하면 코드를 제공해야합니다 .

샘플 출력

103,2
106,1
67,2 //This one was messy
4,20

공차

답에 관해서는 허용 오차에 대한 한계가 있습니다. 비슷한 형식이지만 올바른 값을 준수하는 답변도 허용됩니다. 형식은 같은 [a,b], (a,b)또는 {a,b}유효하지만 a,b바람직하다.

첫 번째 퍼즐은 해결하기 쉽고 빠르다는 사실로 인해 수용이 혼재되었지만 일부 사람들도 그것을 좋아한다고 느꼈습니다. 그래서 저는 지금 당장 quickgolfs를 만들 것입니다


입력은 항상 형식 x,x,x,x이며 x,x,x,x,x,x어디 x에서 숫자를 나타 냅니까?
— Spikatrix

예, 입력은이 두 가지 형식 중 하나를 따릅니다. 명확히하겠습니다
— Juan Cortés

프로그램이나 기능 또는 다른 것을 제출해야합니까? 또한 모든 입력을 어디서 가져올 수 있습니까?
— Spikatrix

3
퀵 골프 는 본질적으로 난이도 태그입니다. 합의는 우리가 원하지 않는 것 같습니다 . 그래서 나는 그 태그를 제거하고 있습니다. 난이도 태그를 다시 평가하려면 메타 게시물을 작성하십시오. 그러나 그것은 거대한 태그 재 지정 노력이 될 것입니다. 개별 사용자가 임의의 새로운 태그를 만드는 것이 아니라 조정 된 방식으로 이루어져야한다고 생각합니다.
— 마틴 엔더

2
@CoolGuy 그런 것은 없습니다. 절대로 Pyth를 C로 이길 수는 없습니다. 기쁨은 다른 언어와 비슷한 언어로 다른 제출물을 때리는 것입니다. 이미 50 바이트 C 제출이 있었다면 게시하지 않는 것으로 이해할 수 있습니다 (그러나 그럼에도 불구하고 접근 방식이 다르면 흥미 롭습니다). 그러나 답변이 없으므로 답변을 게시하십시오. 여러분은 JavaScript와 Python에 매우 가깝기 때문에 C의 경우 그리 길지 않습니다.
— Martin Ender

답변:


8

Pyth, 10 바이트

FNG<.<N4 2

온라인 사용해보기 : Pyth Compiler / Executor

(처음 4 문자는 =G.Q모든 데이터를 읽고에 저장합니다 G)

설명

FNG              for row N in G:
    .<N4            cyclic leftshift by 4
   <     2          print the first two elements

4
아름답습니다, 나는 이미 Pyth를 좋아하기 시작합니다
— Juan Cortés

3
@ JuanCortés : 이것은 당신이 Pyth를 시작하는 찾고 있다면 좋은 자원이 될 수 있습니다.
— Alex A.

7

펄, 24

perl -pe's/(\d+,){4}|,\d+,\d+$//'

예:

perl -pe's/(\d+,){4}|,\d+,\d+$//' <in
103,2
106,1
67,2
4,20

1
이것은 Retina 에서 20 바이트입니다 . ;)
— Martin Ender

7

파이썬 3, 123 76 72 62 바이트

나는 새로운 이민자, 어딘가에서 시작해야합니다 ...

 for l in G:
  d=l.rstrip().split(',');x=[0,4][len(d)>5];print(d[x:x+2])

xnor 및 DLosc의 제안 (62 바이트) :

for l in G:d=l.rstrip().split(',');print(d[4*(len(d)>5):][:2])

8
프로그래밍 퍼즐과 코드 골프에 오신 것을 환영합니다! 이것은 코드 골프 경쟁 이기 때문에 코드를 최대한 짧게 만들고 싶을 것입니다. 할 수있는 한 가지는 들여 쓰기에 사용되는 공간의 양을 줄이는 것입니다. 파이썬에서는 단일 공간으로 충분합니다. 이 글 에는 파이썬에서 골프를 치기위한 팁 이 나와 있으며 좋은 참고 자료가 될 수 있습니다.
— Alex A.

@ 알렉스, 감사합니다-정확한 규칙이 무엇인지 알아 내려고 노력했지만 공백을 무시할 수 있기를 바랐지만 그렇지 않습니다.
— monguin

아니, 줄 바꿈 및 공백은 모두 문자 수에 영향을 미칩니다.
— Alex A.

사실,이 경우 줄 바꿈과 들여 쓰기가 필요하지 않습니다. for본문에 다른 블록 문이없는 한 Python 과 같은 블록 문은 모두 같은 줄에있을 수 있습니다.
— DLosc

3
좋은 시작. 당신은 넣을 수 있습니다 같은 줄에 모든 것을 는 AS for들여 쓰기를 방지 할 수 있습니다. bool이 0/1이라는 사실을 사용하여 조건부 [0,4][...] 를으로 단축 할 수 있습니다 4*(...) . 당신이 쓰는 경우에도, d[x:x+2]같은 d[x:][:2]한 문자 이상하지만, 당신이 식을 저장하지 않도록 할 x변수.
— xnor

4

Sed, 32 바이트

s/,/=/4
s/.*=//
s/,/:/2
s/:.*//

쉼표가 있으면 4 번째 쉼표까지 모두 삭제합니다. 그런 다음 두 번째 쉼표 (이전에 6 일 수 있음)에서 모든 것을 삭제합니다.

그리고 나는 심지어 정당화 할 수있었습니다!


데모를 볼 기회가 있습니까?
— Juan Cortés

데모에서 원하는 것이 확실하지 않습니다. 제공된 테스트 입력을 실행하고 필요한 출력을 얻었습니다.
— Toby Speight

4

자바 스크립트, 44 바이트

variable 입력을 가정합니다 G.

편집 : 방금 깨달았습니다. 이것은 nutki의 펄 솔루션과 매우 비슷합니다.

alert(G.replace(/(\d+,){4}|,\d+,\d+$/gm,''))

스 니펫 데모 :

function run(){
    G = input.value;
    /* start solution */
    alert(G.replace(/(\d+,){4}|,\d+,\d+$/gm,''))
    /* end solution */
}
<textarea id="input" cols="25" rows="6">103,2,50,100
106,1,900,900
459,40,150,300,67,2
4,20,30,6000</textarea><br />
<button id="run" onclick="run();">Run</button>


4

스칼라, 68 바이트

G.map(_.split(",")).map(x=>println((x++x).slice(4,6).mkString(",")))

- MrBones

스칼라, 46 70 바이트

편집 : 결과를 인쇄

for{l<-G;r=l.split(",");x=(r++r).slice(4,6).mkString(",")}{println(x)}

데모


1
대신 map을 사용하여 1 바이트 감소G.map{k=>val x=k.split(",");println((x++x).slice(4,6).mkString(","))}
— Squidly

1
바인딩을 삭제하여 다른 바이트를 절약했습니다.G.map(_.split(",")).map(x=>println((x++x).slice(4,6).mkString(",")))
— Squidly

3

CJam, 18 15 14 바이트

r{',/4m<2<pr}h

CJam 통역사 에서 온라인으로 사용해보십시오 .

작동 원리

r      e# Read a whitespace separated token from STDIN.
{      e# Do-while loop:
  ',/  e#    Split at commas.
  4m<  e#    Rotate the resulting array 4 units to the left.
  2<   e#    Discard everything but the first 2 elements.
  p    e#    Print the array.
  r    e#    Read a whitespace separated token from STDIN.
}h     e# If the token is a nonempty string, repeat the loop.

3

POSIX 쉘, 30 바이트

POSIX를 가정 sed하고 cut현재 상태 :

sed 's/.*/&,&/'|cut -d, -f5,6

라인을 복제하여 필드 5 및 6에서 관심있는 데이터를 추출 할 수 있습니다.


3

자바 스크립트, 117 (112) 99 95 84 76 71 바이트

for(r of G.split('\n'))s=r.split(','),console.log(s[t=s[4]?4:0],s[t+1])

JS 피들


1
바이올린 또는 데모를 게시하십시오
— Juan Cortés

당신은 대체하여 두 개의 B를 제거 할 수 있습니다 ;와 ,루프 본문에 따라서 괄호를 제거 {하고}
— 후안 코르테스를

@ JuanCortés-고마워요. 그 뒤에 이론은 무엇입니까?
— RichieAHB

중괄호가 추가되지 않으면 루프 본문이 닫는 괄호 뒤에 첫 번째 표현식이됩니다. 식은 세미콜론으로 끝납니다. 그들 식의 같은 종류의 쉼표로 표현하게 분리 그룹 엔딩, 당신은 할 수있다 만약 표현을 그 후
— 후안 코르테스

1
사용 for of하면 3 바이트를 절약 할 수 있습니다. 모든 최신 브라우저에서 작동합니다. for(r of q=G.split('\n'))s=r.split(','),console.log(s[t=s[4]?4:0],s[t+1])
— edc65

2

핍 , 12 + 1 = 13 바이트

-l각 줄에 공백으로 구분 된 숫자 목록으로 출력을 제공 하는 플래그를 사용합니다 . *

_@[4 5]Mg^',

설명:

  • 숫자 목록은에 예상됩니다 g. 때문에 g일반적으로 명령 줄 인수에서 초기화, 당신은 또한 같은 결과가 입력을 넣을 수 있습니다.
  • ^', 목록을 쉼표로 분할합니다 (각 문자열 입력).
  • M 함수를 결과의 각 요소에 매핑합니다.
  • _@[4 5]람다 함수를 정의합니다. 함수에 대한 인수는 _; @[4 5]4 번째와 5 번째 요소의 목록을 반환합니다. 목록에 6 개의 요소가 있으면 마지막 두 요소가됩니다. 네 개가 있으면 인덱스가 줄 바꿈되므로 결과는 처음 두 개입니다. (예 "abcd"@4 == "abcd"@0 == "a")
  • 이제 [[103 2] [106 1] [67 2]]프로그램 끝에서 자동으로 인쇄되는 목록 목록이 생겼습니다 . -l결과로 다음과되도록 플래그는, 공간의 각 하위 목록과 줄 바꿈에 다음 전체를 조인
C : \> pip.py -le "_ @ [4 5] Mg ^ ',"103,2,50,100 106,1,900,900 459,40,150,300,67,2
103 2
106 1
67 2

* 현재. 이 동작을 변경할 수 있지만 여전히 같은 일을하는 플래그를 계획하고 있습니다.


1

펄, 37

@c=/(\d+,\d+)/g;$_=@c>2?$c[2]:$c[0]

35및에 +2대한 문자 입니다 . @nutki의 솔루션을 능가하는 Perl 접근법이 있는지 확실하지 않지만 어쨌든이 아이디어를 게시 할 것이라고 생각했습니다.-p-l

로 실행 :

cat input.txt | perl -ple'@c=/(\d+,\d+)/g;$_=@c>2?$c[2]:$c[0]'


0

C, 95 바이트

f(a,b,c,d){scanf("%d,%d,%*d,%*d,%d,%d",&a,&b,&c,&d)>2?printf("%d,%d",c,d):printf("%d,%d",a,b);}

코드는 간단하다. ungolfed 버전은 다음과 같습니다.

f(a,b,c,d){                                    //Four int variables
    scanf("%d,%d,%*d,%*d,%d,%d",&a,&b,&c,&d)>2 //Scan input
        ?                                      //If scanf returned a value > 2
        printf("%d,%d",c,d)                    //Print last two values
        :                                      //else 
        printf("%d,%d",a,b);                   //Print first two values
}

여기에서 테스트


0

루비, 53

G.each_line{|x|g=x.split',';p[g[4]||g[0],g[5]||g[1]]}

또는 좋다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.