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.