Giúp tôi giặt giũ


21

Cứu giúp! Đèn tự động hoàn toàn của tôi từ Máy phân tách bóng tối V3001.01 đã bị hỏng ! :

Hướng dẫn


Bài tập

Viết chương trình sẽ lấy đầu vào của một mảng (hoặc danh sách bằng một số ngôn ngữ) của bất kỳ số lượng chuỗi nào là chữ L hoặc chữ D (đại diện cho ánh sáng hoặc bóng tối) và xuất ra một mảng có hai mảng, một mảng với tất cả các L và một với tất cả các D.


Quy tắc

  • Đó là mã golf nên câu trả lời ngắn nhất tính bằng byte sẽ thắng
  • Đầu vào sẽ chỉ bao gồm thủ đô
  • Phải có cùng số L trong đầu ra như ở đầu vào, tương tự với D
  • Đầu vào có thể chỉ có một yếu tố (hoặc thậm chí có thể bằng 0 )
  • Nếu một hoặc cả hai mảng đầu ra không chứa phần tử, hãy đưa ra một danh sách trống (trong một số ngôn ngữ, điều này có thể có nghĩa là bạn cần xuất một chuỗi)
  • Luôn có mảng đầu tiên là mảng của L

Ví dụ đầu ra:

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

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

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

[] -> [[],[]]


3
Chúng ta có thể nhập / xuất như một chuỗi không? Ví dụ: "LDLDD" -> "LL DDD"hoặc một cái gì đó như thế?
Đồng chí SparklePony

3
Hoặc đầu ra có lẽ là một danh sách của hai chuỗi, ví dụ `" LDLDĐ "-> [" LL "," DDD "]
Đồng chí SparklePony

Cũng muốn có một câu trả lời, vì câu trả lời của tôi phụ thuộc vào điều này
Skidsdev

Làm thế nào về đầu ra hỗn hợp? Như trong một mảng chứa một chuỗi và một mảng chuỗi? ví dụ ["L","L",["D","D","D"]].
Xù xì

Không, đầu ra phải là một mảng / danh sách. @ComradeSparklePony
Amorris

Câu trả lời:


12

APL, 8 byte

'DL'~⍨¨⊂

Giải trình:

  • : đầu vào kèm theo
  • ~⍨¨: không có mỗi
  • 'DL': 'D' và 'L'

Ví dụ:

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

Tại sao lại như vậy 'DL'nhưng không phải 'LD'?
Nữ tu rò rỉ

@LeakyNun: thêm lời giải thích. Nó hoạt động bằng cách loại bỏ ký tự sai thay vì chọn đúng.
bến tàu

1
'LD'∩⍨¨⊂hoặc ⍞∘∩¨'LD'có thể dễ dàng hơn để giải thích.
Adám



4

PHP, 46 byte

Danh sách giả định là: $arr = ['L','L','D','D','L','D','D','D','D','L'];

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


3
Là quy tắc I / O mặc định, bạn không thể cho rằng đầu vào được lưu trữ trong một biến
Keyu Gan

@KeyuGan argh! Đủ công bằng
ScottMcG sẵn

2
Sử dụng có thể sử dụng $argvthay vì $arrvà mong đợi tập lệnh được chạy từ dòng lệnh như php -f golf.php L L D D L D D D D L- nhưng sau đó bạn phải đi xung quanh $ argv [0] là tên tệp
Ezenhis

1
sử dụng cách này các giải pháp ngắn nhất là for(;$b=$argv[++$i];)$a[$b][]=$b;print_r($a);hoặc<?foreach($_GET as$b)$a[$b][]=$b;print_r($a);
Jörg Hülsermann

Nỗ lực chơi gôn đầu tiên của tôi sau nhiều năm rình rập và tôi vẫn còn là một tay nghiệp dư! Cảm ơn các phản hồi (và tăng phiếu) mặc dù tất cả mọi người :)!
ScottMcG sẵn sàng

3

Toán học, 27 byte

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

Hàm thuần túy lấy danh sách Ls và Ds (ký hiệu, không phải ký tự / chuỗi) làm đầu vào và trả về danh sách hai danh sách. Ví dụ,

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

trả lại {{L, L, L}, {D, D}}. Hãy thử trực tuyến!

Gatherbởi chính nó gần với những gì chúng ta muốn, nhưng không đáp ứng được thông số theo hai cách: nó không tạo ra danh sách trống nếu đầu vào bị thiếu Ls hoặc Ds, và nó không luôn luôn sắp xếp Lsang trái. Thay thế đầu vào #bằng cách {L,D}~Join~#giải quyết cả hai vấn đề cùng một lúc: điều đó có nghĩa là sẽ có ít nhất một Lvà ít nhất một DLs sẽ được trả về trước kể từ Llần đầu tiên gặp phải. Rest/@sau đó loại bỏ ban đầu LD.

(Tôi đã thử một giải pháp bằng cách sử dụng Count, nhưng do các vấn đề về cà ri, nó dường như không ngắn hơn: ±q_:=#~Table~Count[q,#]&/@{L,D}là 31 byte.)


Liên kết TIO (toán học)?
Nữ tu bị rò rỉ

1
Làm thế nào về Cases@@@{{#,L},{#,D}}&, cho 22 byte?
Không phải là một cái cây

Ý tưởng tuyệt vời, Không phải là một cái cây! Bạn nên đăng câu trả lời đó. Tôi sẽ upvote :)
Greg Martin




2

PHP7, 52 45 byte

-7 byte nhờ @ Jörg Hülsermann

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

Sử dụng với CLI như php -r a.php L L L D D L D

Kịch bản đi qua các đối số được cung cấp và nối chúng vào một mảng dựa trên giá trị của nó.


1
45 byte với -rtùy chọn sử dụng thay vì -floại bỏ <?phpvà bỏ khoảng trống sauas
Jörg Hülsermann

2

Lisp thường gặp, 66 65 byte

(defun f(x)`(,(remove"D"x :test'equal),(remove"L"x :test'equal)))

Hãy thử trực tuyến!

Nếu, thay vì các chuỗi, chúng tôi sử dụng các ký hiệu, thì nó ngắn hơn nhiều:

Lisp thường gặp, 42 41 40 byte

(defun f(x)(mapcar'remove'(D L)`(,x,x)))

Hãy thử trực tuyến!

(f '(D D L L D L D)) ; => ((L L L) (D D D D)) 

2

Vợt , 48 byte

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

Chỉ cần áp dụng chức năng ẩn danh này, vd '(L D L D D L)


2

Toán học, 22 18 byte

4 byte được lưu bởi thiên tài của CalculatorFeline!

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

Hãy thử trực tuyến hoặc tại hộp cát Wolfram !

Đầu vào là một danh sách các ký hiệu LD- không phải các chuỗi, chỉ các chữ cái riêng, giống như trong câu trả lời của Greg Martin . Cú pháp #|Llà tốc ký Alternatives[#,L], nhưng @@@cú pháp thay thế phần đầu Alternativesbằng Cases, vì vậy mã này tương đương với {Cases[#,L],Cases[#,D]}&.


1
{#,x}có thể #|xcho -4 byte.
Máy

@CalculatorFeline, wow, mẹo đó thật tuyệt vời! Cảm ơn bạn!
Không phải là một cái cây

1
@@@@@làm việc với bất kỳ người đứng đầu, không chỉ List. Nếu |không làm việc, bạn vẫn có thể lưu trong một số trường hợp với &&, ||hoặc **.
Máy

Bạn cũng có thể sử dụng .và toán tử số học.
Máy

Ngoài ra, lạm dụng quyền ưu tiên có nhiều khoản tiết kiệm hơn cho bạn (với thay đổi định dạng đầu ra):#.L|#.D
CalculatorFeline

2

Java 8, 105 byte

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

Lời khuyên chào mừng.


Mới sử dụng PPCG, tôi có phải đưa import java.util.*;import java.util.stream.*;vào số byte không?


Không cạnh tranh, nó không tạo danh sách trống với đầu vào trống. Cảm ơn Nevay vì đã lưu một số byte.


2
Nhập khẩu phải được tính, hoặc bạn có thể đủ điều kiện tên lớp của bạn nếu đó là ngắn hơn.

1
Bạn có thể sử dụng Stream#ofthay vì Arrays#streamđể giảm nhập khẩu java.util.stream.*"D"::equalsthay vì k->k.equals("D"). Ngoài ra, mã không đáp ứng các yêu cầu vì nó không xuất ra một danh sách trống nếu không có L/ Dcó (trường hợp thử nghiệm 2-4).
Nevay

Chào mừng đến với PPCG! Thật không may, câu trả lời không hợp lệ không thể được đánh dấu là không cạnh tranh. Bạn có thể sửa đổi câu trả lời này để làm cho nó hợp lệ, nhưng bây giờ, nó sẽ bị xóa. (Bạn có thể nên tự xóa nó; nếu một mod xóa nó, bạn không thể tự phục hồi nó một khi bạn có giải pháp hiệu quả.)
Esolanging Fruit 16/07/17

2

Prolog (SWI) , 42 , 37 byte

l('L').
w(L,D,W):-partition(l,W,L,D).

Hãy thử trực tuyến!

Cho rằng đó Wlà danh sách giặt, w/3sẽ thống nhất LDđưa vào danh sách Ánh sáng và Bóng tối tương ứng, bằng cách phân vùng giặt theo một vị từ thành công nếu vật phẩm là Ánh sáng.

[Chỉnh sửa: đánh gôn -5 nhờ Fatalize ]


1
l('L').ngắn hơn 5 byte so vớil(X):-X='L'.
Fatalize

@Firthize - cảm ơn! Đã chỉnh sửa.
TessellatingHeckler

2

Japt , 13 12 10 byte

2Æf¥"LD"gX

Kiểm tra nó ( -Qcờ cho mục đích trực quan hóa)


Giải trình

Đầu vào ngầm định của mảng U.

Tạo mảng [0,1]và truyền từng phần tử thông qua một hàm, với Xphần tử hiện tại.

Lọc Ubằng cách kiểm tra sự bằng nhau ...

"LD"gX

... với ký tự trong chuỗi LDtại chỉ mục X.


"Hmm, loại bỏ ¥công việc nên làm ..." [["L","L","D","D"],[]]"Không, sẽ không đến đó :)" - tôi 2017
ETHproductions 11/07/17

@ETHsản phẩm: Ha-ha! Vâng, tôi đã thử rất nhiều cách để cố gắng làm cho nó hoạt động mà không có ¥.
Shaggy



1

Javascript (ES6), 37 byte

Điều này dựa trên câu trả lời (hiện đã bị xóa) Javascript (ES6).

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

Phiên bản bị đánh cắp:

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

Đoạn mã ví dụ:

f=

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

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


1

C #, 61 byte

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

Phiên bản đầy đủ / định dạng:

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 byte

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

Hãy thử trực tuyến!

Lấy đầu vào dưới dạng danh sách các chuỗi và trả về hai danh sách, danh sách đầu tiên có các phần tử fun a -> a="L"là đúng và phần còn lại có các phần tử dẫn đến sai.


1

Thạch , 10 byte

ẎfЀ⁾LDW€€

Hãy thử trực tuyến!

Trong Jelly một chuỗi là danh sách các chuỗi Python 1-char, vd ['a', 'b', 'c']. Đó là lý do tại sao bạn nhận được đầu ra như[[['L'], ['L']], [['D'], ['D'], ['D']]] , vì các chuỗi Jelly 1-char hoạt động giống nhau.

Không hoạt động như một chương trình đầy đủ, do đó ÇŒṘở phía dưới.


@Leo Hmm, bạn có thể đúng ... đã sửa.
Erik the Outgolfer

Có vẻ như đầu vào Jelly khác với đầu ra Jelly? Có thông dịch viên làm string->char[]tự động?
nmjcman101

1
@ nmjcman101 Trên các chuỗi thì khác, vì đầu vào ở định dạng Python và đầu ra ở định dạng Jelly. Đó là lý do tại sao tôi cần W€€một phần.
Erik the Outgolfer

1

Perse , 21 byte

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

Tôi có thể hoặc không thể thực hiện chức năng phân vùng danh sách cụ thể cho thử thách này. Lấy đầu vào là một chuỗi các chuỗi.



1

Java 8, 110 106 byte

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

-4 byte nhờ @Nevay .

Giải trình:

Hãy thử nó ở đây.

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
Bạn có thể lưu trữ l và d trong một mảng để loại bỏ câu lệnh if-other. a->{String[]r={"",""};for(char c:a)r[c/69]+=c;return new char[][]{r[1].toCharArray(),r[0].toCharArray()};}(-4 byte)
Nevay 11/07/17

1

Octave, 21 byte

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

Đầu vào là một mảng các ký tự, đầu ra là một mảng ô. Tái chế từ câu trả lời của tôi ở đây .

Thực hiện mẫu trên ideone .






0

CJam , 14 byte

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

Đầu vào là danh sách các ký tự (chuỗi), đầu ra là danh sách các danh sách các ký tự (danh sách các chuỗi).

Hãy thử trực tuyến!

Giải trình:

"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"]

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.