세탁을 도와주세요


21

도움! 내 다크 구분 V3001.01에서 완전히 자동화 된 조명 돌파! :(

지침


태스크

문자 L 또는 문자 D (빛 또는 어둡게 나타남) 인 문자열의 배열 (또는 일부 언어로 된 목록)을 입력하고 두 배열을 포함하는 배열을 출력하는 프로그램을 작성하십시오. 모든 L과 하나, 모든 D와 함께


규칙

  • 코드 골프이므로 바이트 단위의 최단 답변이 승리합니다.
  • 입력은 항상 자본을 포함합니다
  • 입력에있는 것과 동일한 수의 L이 출력에 있어야하며, D에 대해서도 동일합니다.
  • 입력은 하나의 요소만을 가질 수 있습니다 (또는 아마도 0 요소).
  • 출력 배열 중 하나 또는 둘 다에 요소가없는 경우 빈 목록을 출력하십시오 (일부 언어에서는 문자열을 출력해야 함을 의미 할 수 있음)
  • 항상 첫 번째 배열은 L의 배열이어야합니다

출력 예 :

["L","D","L","D","D"] -> [["L","L"],["D","D","D"]]

["L","L","L"] -> [["L","L","L"],[]]

["D","D"] -> [[],["D","D"]]

[] -> [[],[]]


3
문자열로 입력 / 출력 할 수 있습니까? 예를 들면 "LDLDD" -> "LL DDD"다음과 같습니다.
동지 SparklePony

3
또는 두 문자열의 목록으로 출력 될 수도 있습니다. 예 : ""LDLDD "-> ["LL ","DDD "]
SparklePony 동료

내 대답이 이것에 달려 있기 때문에 대답을 원하십니까
Skidsdev

혼합 출력은 어떻습니까? 하나의 문자열과 하나의 문자열 배열을 포함하는 배열에서와 같이? 예를 들어, ["L","L",["D","D","D"]].
얽히고 설킨

아니요, 출력은 배열 / 목록이어야합니다. @ComradeSparklePony
Amorris

답변:


12

APL, 8 바이트

'DL'~⍨¨⊂

설명:

  • : 밀폐 된 입력
  • ~⍨¨: 각각없이
  • 'DL': 'D'와 'L'

예 :

      ('DL'~⍨¨⊂) 'LDLDD'
┌──┬───┐
│LL│DDD│
└──┴───┘
      ('DL'~⍨¨⊂) 'LLL'
┌───┬┐
│LLL││
└───┴┘
      ('DL'~⍨¨⊂) 'DD'
┌┬──┐
││DD│
└┴──┘
      ('DL'~⍨¨⊂) ''
┌┬┐
│││
└┴┘

왜이다 'DL'하지만 'LD'?
Leaky Nun

@LeakyNun : 설명이 추가되었습니다. 올바른 문자를 선택하는 대신 잘못된 문자를 제거하여 작동합니다.
marinus

1
'LD'∩⍨¨⊂또는 ⍞∘∩¨'LD'설명하기가 쉬울 수 있습니다.
Adám



4

PHP, 46 바이트

주어진 목록은 다음과 같습니다. $arr = ['L','L','D','D','L','D','D','D','D','L'];

foreach($arr as $b){$a[$b][]=$b;};print_r($a);


3
기본 I / O 규칙으로서 입력이 하나의 변수에 저장되어 있다고 가정 할 수 없습니다
Keyu Gan

@KeyuGan 아아! 충분히 공정한
ScottMcGready

2
사용 사용할 수 있습니다 $argv대신 $arr으로 명령 줄에서 실행하고 스크립트를 기대 php -f golf.php L L D D L D D D D L-하지만 다시는 $ ARGV 주위에 갈 필요가 [0] 파일 이름 인
Ezenhis

1
이 방법으로 가장 짧은 솔루션은 다음 for(;$b=$argv[++$i];)$a[$b][]=$b;print_r($a);과 같습니다.<?foreach($_GET as$b)$a[$b][]=$b;print_r($a);
Jörg Hülsermann

몇 년 동안 숨어 지낸 첫 번째 골프 시도와 나는 여전히 완전한 아마추어입니다! 모든 사람들에게 피드백 (그리고 투표)에 감사드립니다 :)!
ScottMcGready

3

수학, 27 바이트

Rest/@Gather[{L,D}~Join~#]&

Ls 및 Ds (문자 / 문자열이 아닌 기호) 목록을 입력으로 사용하여 두 목록의 목록을 리턴하는 순수 함수 입니다. 예를 들어

Rest/@Gather[{L,D}~Join~#]& @ {D, L, L, D, L}

을 반환합니다 {{L, L, L}, {D, D}}. 온라인으로 사용해보십시오!

Gather그 자체로 우리가 원하는 것에 가깝지만 두 가지 방법으로 사양을 충족시키지 못합니다. 입력에 Ls 또는 Ds 가 없으면 빈 목록을 생성 하지 않으며 항상 Ls를 왼쪽으로 정렬하지 않습니다 . 입력 교환 #으로 {L,D}~Join~#두 문제를 한번에 해결할 수있는 문제 : 거기 적어도 하나 의미 L적어도 하나 DL가 이후의 첫 반환되는 L첫 번째 발생 하였다. Rest/@다음 초기를 제거 L하고 D.

(을 사용하여 솔루션을 시도했지만 Count커링 문제로 인해 더 짧은 것처럼 보이지는 않습니다 ±q_:=#~Table~Count[q,#]&/@{L,D}. 31 바이트입니다.)


TIO 링크 (수학)?
Leaky Nun

1
방법에 대해 Cases@@@{{#,L},{#,D}}&, 22 바이트?
나무가 아님

좋은 생각이야, 나무가 아니야! 답을 게시해야합니다.
Greg Martin




2

PHP7, 52 45 바이트

@ Jörg Hülsermann 덕분에 -7 바이트

foreach($argv as$a)$$a[]=$a;print_r([$L,$D]);

CLI를 다음과 같이 사용 php -r a.php L L L D D L D

스크립트는 제공된 인수를 통해 값에 따라 배열에 추가합니다.


1
-r-f<?phpas
Jörg Hülsermann


2

라켓 , 48 바이트

(compose list((curry partition)(λ(x)(eq? x'L))))

이 익명 함수를 예를 들어 '(L D L D D L)


2

수학, 22 18 바이트

CalculatorFeline의 천재로 4 바이트 절약!

Cases@@@{#|L,#|D}&

온라인 또는 Wolfram 샌드 박스 에서 사용해보십시오 !

입력 기호의 목록 LD문자열이 아니라,처럼 자신의 바로 문자, - 그렉 마틴의 대답 . 구문 #|L은 축약 형 Alternatives[#,L]이지만 @@@구문은 헤드를 Alternatives로 대체하므로이 Cases코드는와 동일합니다 {Cases[#,L],Cases[#,D]}&.


1
{#,x}#|x-4 바이트 일 수 있습니다 .
CalculatorFeline

@CalculatorFeline, 와우, 그 트릭은 놀랍습니다! 고맙습니다!
나무가 아님

1
@@그리고 @@@어떤 머리 일뿐만 아니라List . 경우 |없는 작업을 수행, 당신은 여전히 몇 가지 경우에 저장할 수 있습니다 &&, ||또는 **.
CalculatorFeline

.산술 연산자를 사용할 수도 있습니다 .
CalculatorFeline

또한, 우선 순위 남용은 당신을 위해 더 많은 비용을 절약 할 수 있습니다 (출력 형식 변경) :#.L|#.D
CalculatorFeline

2

자바 8, 105 바이트

import java.util.stream.*;a->Stream.of(a).collect(Collectors.groupingBy("D"::equals)).values().toArray();

팁 환영합니다.


PPCG를 처음 사용 import java.util.*;import java.util.stream.*;하면 바이트 수 에 포함시켜야 합니까?


경쟁이 아닌 경우 빈 입력으로 빈 목록을 만들지 않습니다. 바이트를 절약 해 준 Nevay에게 감사합니다.


2
수입품을 세거나 클래스 이름이 더 짧은 경우 정규화 할 수 있습니다.

1
Stream#of대신 및로 대신 Arrays#stream가져 오기를 줄이기 위해 대신 사용할 수 있습니다 . 게다가 / 가 없으면 빈 목록을 출력하지 않으므로 코드가 요구 사항을 충족하지 않습니다 (테스트 사례 2-4). java.util.stream.*"D"::equalsk->k.equals("D")LD
Nevay

PPCG에 오신 것을 환영합니다! 불행하게도, 잘못된 답변은 경쟁이 아닌 것으로 표시 될 수 없습니다. 이 답변을 수정하여 사용할 수는 있지만 지금은 삭제해야합니다. (아마도 직접 삭제해야합니다. 모드가 삭제하면 작동하는 솔루션이 있으면 직접 삭제를 취소 할 수 없습니다.)
Esolanging Fruit


2

apt , 13 12 10 바이트

2Æf¥"LD"gX

그것을 테스트 ( -Q시각화 목적으로 만 플래그 지정)


설명

배열의 암시 적 입력 U.

배열을 생성하고 현재 요소 인 [0,1]함수를 통해 각 요소를 전달 X하십시오.

U평등을 확인하여 필터링 ...

"LD"gX

... 문자열의 문자가 LDindex에 X있습니다.


"흠, 제거는 ¥... 작동합니다" [["L","L","D","D"],[]]"이하지 않을 아니를 :)"- 나 2017
ETHproductions

@ETHproductions : 하하! 예,없이 작동하도록 많은 방법을 시도했습니다 ¥.
얽히고 설킨



1

자바 스크립트 (ES6), 37 바이트

이것은 (현재 삭제 된) Javascript (ES6) 답변을 기반으로합니다.

a=>[(b=c=>a.filter(d=>c==d))`L`,b`D`]

언 골프 버전 :

function(array) {
  function filter(character){
    return array.filter(function(d) {
      return character == d;
    });
  }
  return [filter("L"), filter("D")];
}

코드 스 니펫 예제 :

f=

a=>[(b=c=>a.filter(d=>c==d))`L`,b`D`]

console.log(f(["L", "D", "L", "D", "D"]))


1

C #, 61 바이트

using System.Linq;a=>new[]{a.Where(c=>c<69),a.Where(c=>c>68)}

풀 / 포맷 버전 :

using System;
using System.Linq;

class P
{
    static void Main()
    {
        Func<char[], System.Collections.Generic.IEnumerable<char>[]> f =
            a => new[] { a.Where(c => c < 69), a.Where(c => c > 68) };

        Console.WriteLine(string.Join(", ", f(new[]{ 'L', 'D', 'L', 'D', 'D' }).SelectMany(a => a.Select(c => c))));

        Console.ReadLine();
    }
}

1

F # , 37 바이트

let f s=List.partition(fun a->a="L")s

온라인으로 사용해보십시오!

입력을 문자열 목록으로 가져 와서 두 개의 목록을 리턴합니다. 첫 번째 목록은 요소 fun a -> a="L"가 true이고 다른 목록은 요소가 false입니다.


1

젤리 , 10 바이트

ẎfЀ⁾LDW€€

온라인으로 사용해보십시오!

Jelly에서 문자열은 1- 문자 파이썬 문자열의 목록입니다 (예 :) ['a', 'b', 'c']. [[['L'], ['L']], [['D'], ['D'], ['D']]]1-char Jelly 문자열이 동일하게 작동하기 때문에과 같은 출력을 얻는 이유 입니다.

전체 프로그램으로 작동하지 않으므로 ÇŒṘ하단에 있습니다.


@ 레오 흠, 당신이 맞을 수도 있습니다 ... 고정되었습니다.
Outgolfer Erik

젤리 입력이 젤리 출력과 다른 것 같습니까? 통역사는 string->char[]자동적으로 작동합니까?
nmjcman101

1
@ nmjcman101 문자열에서는 입력이 Python 형식이고 출력이 Jelly 형식이므로 문자열이 다릅니다. 그렇기 때문에 W€€부분이 필요합니다 .
Outgolfer Erik

1

Perse , 21 바이트

part(i,fn(x){x=="L"})

이 과제를 위해 특별히 목록 파티션 기능을 구현했을 수도 있고 아닐 수도 있습니다. 입력을 문자열 배열로 가져옵니다.



1

자바 8 110 106 바이트

a->{String[]r={"",""};for(char c:a)r[c/69]+=c;return new char[][]{r[1].toCharArray(),r[0].toCharArray()};}

@Nevay 덕분에 -4 바이트 .

설명:

여기에서 시도하십시오.

a->{                      // Method with char-array parameter and 2D char-array return-type
  String[]r={"",""};      //  Two Strings in an array
  for(char c:a)           //  Loop over the characters of the input
    r[c/69]+=c;           //   Append either of the two String with the character
                          //   c/69 will result in 0 for 'D' and 1 for 'L'
                          //  End of loop (implicit / single-line body)
  return new char[][]{    //  Return a 2D character-array
    r[1].toCharArray(),   //   With the String for L's converted to a char-array
    r[0].toCharArray()};  //   and String D's converted to a char-array
}                         // End of method

1
l과 d를 배열에 저장하여 if-else 문을 제거 할 수 있습니다. a->{String[]r={"",""};for(char c:a)r[c/69]+=c;return new char[][]{r[1].toCharArray(),r[0].toCharArray()};}(-4 바이트)
Nevay

1

옥타브, 21 바이트

@(A){A(a=A>72),A(~a)}

Input is an array of characters, output is a cell array. Recycled from my answer here.

Sample execution on ideone.



1

Julia, 26 bytes

g(s)=s[s.=="L"],s[s.=="D"]



0

CJam, 14 bytes

"LD"qf{1$e=*}`

Input is a list of characters (string), output is a list of lists of characters (list of strings).

Try it online!

Explanation:

"LD"  e# Push the string "LD"                  | "LD"
q     e# Push the input                        | "LD" "LDLLDLDDL"
f{    e# Foreach char in "LD", push input and: | ['L "LDLLDLDDL"
  1$  e#   Copy from 1 back                    | ['L "LDLLDLDDL" 'L
  e=  e#   Count occurences                    | ['L 5
  *   e#   Repeat character                    | ["LLLLL"
}     e# End                                   | ["LLLLL" "DDDD"]
`     e# Stringify:                            | "[\"LLLLL\" \"DDDD\"]"
e# Implicit output: ["LLLLL" "DDDD"]

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