Bantu aku mencuci pakaian

21

Membantu! Lampu Sepenuhnya Otomatis Saya Dari Pemisah Kegelapan V3001.01 rusak! :(

Pedoman


Tugas

Tulis program yang akan mengambil input dari array (atau daftar dalam beberapa bahasa) dari jumlah string apa pun yang merupakan huruf L atau huruf D (mewakili cahaya atau gelap) dan menghasilkan array yang berisi dua array, satu dengan semua L, dan satu dengan semua D's.


Aturan

  • Ini kode golf sehingga jawaban tersingkat dalam byte menang
  • Input hanya akan mengandung huruf kapital
  • Harus ada jumlah L yang sama di output seperti yang ada di input, sama berlaku untuk D
  • Input mungkin hanya memiliki satu elemen (atau bahkan mungkin nol elemen)
  • Jika salah satu atau kedua array output tidak mengandung elemen, output daftar kosong (dalam beberapa bahasa ini mungkin berarti Anda perlu menampilkan string)
  • Selalu punya array pertama menjadi array L.

Contoh output:

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

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

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

[] -> [[],[]]

Amorris
sumber
3
Bisakah kita input / output sebagai string? Misalnya: "LDLDD" -> "LL DDD"atau semacamnya?
Kamerad SparklePony
3
Atau output mungkin sebagai daftar dari dua string, misalnya `" LDLDD "-> [" LL "," DDD "]
Kamerad SparklePony
Saya juga ingin jawaban, karena jawaban saya tergantung pada ini
Skidsdev
Bagaimana dengan output campuran? Seperti dalam array yang berisi satu string dan satu array string? misalnya ["L","L",["D","D","D"]],.
Shaggy
Tidak, output harus berupa array / daftar. @ComradeSparklePony
Amorris

Jawaban:

12

APL, 8 byte

'DL'~⍨¨⊂

Penjelasan:

  • : input terlampir
  • ~⍨¨: tanpa masing-masing
  • 'DL': 'D' dan 'L'

Contoh:

      ('DL'~⍨¨⊂) 'LDLDD'
┌──┬───┐
│LL│DDD│
└──┴───┘
      ('DL'~⍨¨⊂) 'LLL'
┌───┬┐
│LLL││
└───┴┘
      ('DL'~⍨¨⊂) 'DD'
┌┬──┐
││DD│
└┴──┘
      ('DL'~⍨¨⊂) ''
┌┬┐
│││
└┴┘
marinus
sumber
Kenapa begitu 'DL'tapi tidak 'LD'?
Leaky Nun
@LeakyNun: menambahkan penjelasan. Ini bekerja dengan menghapus karakter yang salah daripada memilih yang benar.
marinus
1
'LD'∩⍨¨⊂atau ⍞∘∩¨'LD'mungkin lebih mudah dijelaskan.
Adám
13

Python 3 , 37 byte

lambda a:[[c]*a.count(c)for c in"LD"]

Cobalah online!

Biarawati Bocor
sumber
5

Haskell , 28 byte

f l=[filter(==[c])l|c<-"LD"]

Cobalah online!

Jika input dapat berupa daftar karakter, []sekitar cdapat dihapus.

Tidak
sumber
4

PHP, 46 byte

Diasumsikan daftar yang diberikan adalah: $arr = ['L','L','D','D','L','D','D','D','D','L'];

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

ScottMcGready
sumber
3
Sebagai aturan I / O default, Anda tidak dapat menganggap input disimpan dalam satu variabel
Keyu Gan
@KeyuGan argh! Cukup adil
ScottMcSudah
2
Gunakan dapat menggunakan $argvalih-alih $arrdan mengharapkan skrip dijalankan dari baris perintah sebagai php -f golf.php L L D D L D D D D L- tetapi sekali lagi Anda harus mencari $ argv [0] yang merupakan nama file
Ezenhis
1
menggunakan cara ini solusi terpendek adalah for(;$b=$argv[++$i];)$a[$b][]=$b;print_r($a);atau<?foreach($_GET as$b)$a[$b][]=$b;print_r($a);
Jörg Hülsermann
Usaha golf pertama saya setelah bertahun-tahun mengintai dan saya masih amatir total! Terima kasih atas umpan balik (dan suara-up) untuk semua orang :)!
ScottMcSudah
3

Mathematica, 27 byte

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

Fungsi murni mengambil daftar Ls dan Ds (simbol, bukan karakter / string) sebagai input dan mengembalikan daftar dua daftar. Sebagai contoh,

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

kembali {{L, L, L}, {D, D}}. Cobalah online!

Gatherdengan sendirinya dekat dengan apa yang kita inginkan, tetapi gagal memenuhi spesifikasi dalam dua cara: itu tidak menghasilkan daftar kosong jika inputnya hilang Latau Ds, dan itu tidak selalu urutkan Lke kiri. Mengganti input #dengan {L,D}~Join~#menyelesaikan kedua masalah sekaligus: itu berarti akan ada setidaknya satu Ldan setidaknya satu D, dan Ls akan dikembalikan terlebih dahulu sejak Lpertama kali ditemukan. Rest/@kemudian menghapus inisial LdanD .

(Saya mencoba menggunakan solusi Count, tetapi karena masalah kari, sepertinya tidak lebih pendek: ±q_:=#~Table~Count[q,#]&/@{L,D}31 byte.)

Greg Martin
sumber
TIO link (matematika)?
Leaky Nun
1
Bagaimana Cases@@@{{#,L},{#,D}}&, selama 22 byte?
Bukan sebatang pohon
Ide bagus, Bukan pohon! Anda harus memposting jawaban itu — saya akan angkat suara :)
Greg Martin
Selesai!
Bukan sebatang pohon
3

Haskell, 32 byte

import Data.List
partition(>"K")

Hanya fungsi perpustakaan yang membosankan.

Cobalah online!

nimi
sumber
1
Coba tanpa impor: P
Amorris
2

PHP7, 52 45 byte

-7 byte terima kasih kepada @ Jörg Hülsermann

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

Gunakan dengan CLI sebagai php -r a.php L L L D D L D

Script berjalan melalui argumen yang disediakan dan menambahkannya ke array berdasarkan nilainya.

Ezenhis
sumber
1
45 byte dengan menggunakan -ropsi alih-alih -fmenghapus <?phpdan menjatuhkan ruang setelahas
Jörg Hülsermann
2

Common Lisp, 66 65 byte

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

Cobalah online!

Jika, alih-alih string, kami menggunakan simbol, maka itu jauh lebih pendek:

Common Lisp, 42 41 40 byte

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

Cobalah online!

(f '(D D L L D L D)) ; => ((L L L) (D D D D)) 
Renzo
sumber
2

Raket , 48 byte

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

Cukup terapkan fungsi anonim ini ke, misalnya, '(L D L D D L)

Majora320
sumber
2

Mathematica, 22 18 byte

4 byte disimpan oleh jenius CalculatorFeline!

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

Cobalah online , atau di kotak pasir Wolfram !

Input adalah daftar simbol Ldan D- bukan string, hanya hurufnya sendiri, seperti dalam jawaban Greg Martin . Sintaksnya #|Ladalah singkatan Alternatives[#,L], tetapi @@@sintaks menggantikan kepala Alternativesdengan Cases, jadi kode ini setara dengan {Cases[#,L],Cases[#,D]}&.

Bukan pohon
sumber
1
{#,x}bisa #|xuntuk -4 byte.
CalculatorFeline
@ CalculatorFeline, wow, trik itu luar biasa! Terima kasih!
Bukan sebatang pohon
1
@@dan @@@bekerja dengan kepala apa pun, bukan hanya List. Jika |tidak bekerja, Anda masih dapat menyimpan dalam beberapa kasus dengan &&, ||atau **.
CalculatorFeline
Anda juga dapat menggunakan .dan menghitung operator.
CalculatorFeline
Juga, penyalahgunaan presedensi memiliki lebih banyak penghematan untuk Anda (dengan perubahan format output):#.L|#.D
CalculatorFeline
2

Java 8, 105 byte

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

Tips diterima.


Baru di PPCG, apakah saya harus memasukkan import java.util.*;import java.util.stream.*;dalam jumlah byte?


Non-bersaing, itu tidak membuat daftar kosong dengan input kosong. Terima kasih kepada Nevay untuk menghemat beberapa byte.

Justin
sumber
2
Impor harus dihitung, atau Anda dapat sepenuhnya memenuhi syarat nama kelas Anda jika itu lebih pendek.
1
Anda dapat menggunakan Stream#ofalih-alih Arrays#streammengurangi impor ke java.util.stream.*dan "D"::equalsalih-alih k->k.equals("D"). Selain itu kode tidak memenuhi persyaratan karena tidak menampilkan daftar kosong jika tidak ada L/ Dada (kasus-uji 2-4).
Nevay
Selamat datang di PPCG! Sayangnya, jawaban yang tidak valid tidak dapat ditandai sebagai tidak bersaing. Anda boleh memodifikasi jawaban ini untuk membuatnya valid, tetapi untuk sekarang, itu harus dihapus. (Anda mungkin harus menghapusnya sendiri; jika seorang mod menghapusnya, Anda tidak dapat menghapusnya sendiri begitu Anda memiliki solusi yang berfungsi.)
Esolanging Fruit
2

Prolog (SWI) , 42 , 37 byte

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

Cobalah online!

Mengingat bahwa Wini adalah daftar pencucian, masing-masing w/3akan menyatukan Ldan Dmasuk ke dalam daftar Cahaya dan Gelap, dengan mempartisi pencucian tersebut dengan predikat yang berhasil jika suatu item adalah Cahaya.

[Sunting: golf -5 berkat Fatalize ]

TessellatingHeckler
sumber
1
l('L').lebih pendek 5 byte daril(X):-X='L'.
Fatalize
@Fatalize - terima kasih! Diedit dalam.
TessellatingHeckler
2

Japt , 13 12 10 byte

2Æf¥"LD"gX

Mengujinya ( -Qmenandai untuk tujuan visualisasi saja)


Penjelasan

Input array secara implisit U.

Hasilkan array [0,1]dan lewati setiap elemen melalui fungsi, dengan Xmenjadi elemen saat ini.

Saring Udengan memeriksa persamaan ...

"LD"gX

... dengan karakter dalam string LDdi index X.

Shaggy
sumber
"Hmm, melepas ¥harus bekerja ..." [["L","L","D","D"],[]]"Tidak, tidak pergi ke sana :)" - saya 2017
ETHproduksi
@ ETProduksi: Ha-ha! Ya, saya mencoba banyak cara untuk membuatnya bekerja tanpa ¥.
Shaggy
1

Javascript (ES6), 37 byte

Ini didasarkan pada jawaban Javascript (ES6) yang sekarang dihapus.

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

Versi tidak disatukan:

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

Cuplikan kode contoh:

f=

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

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

Herman L.
sumber
1

C #, 61 byte

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

Versi Lengkap / Diformat:

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();
    }
}
TheLethalCoder
sumber
1

F # , 37 byte

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

Cobalah online!

Mengambil input sebagai daftar string, dan mengembalikan dua daftar, yang pertama dengan elemen mana fun a -> a="L"benar dan yang lainnya dengan elemen yang menghasilkan false.


sumber
1

Jelly , 10 byte

ẎfЀ⁾LDW€€

Cobalah online!

Dalam Jelly, string adalah daftar string Python 1-char, misalnya ['a', 'b', 'c']. Itu sebabnya Anda mendapatkan hasil seperti [[['L'], ['L']], [['D'], ['D'], ['D']]], karena string 1-char Jelly berperilaku sama.

Tidak berfungsi sebagai program lengkap, karenanya ÇŒṘdi bagian bawah.

Erik the Outgolfer
sumber
@ Leo Hmm, Anda mungkin benar ... diperbaiki.
Erik the Outgolfer
Tampaknya masukan Jelly berbeda dari keluaran Jelly? Apakah penerjemah melakukannya secara string->char[]otomatis?
nmjcman101
1
@ nmjcman101 Pada string berbeda, karena input dalam format Python dan output dalam format Jelly. Itu sebabnya saya butuh W€€bagian.
Erik the Outgolfer
1

Perse , 21 byte

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

Saya mungkin atau mungkin belum menerapkan fungsi partisi daftar khusus untuk tantangan ini. Mengambil input sebagai array string.

faso
sumber
1

Sekam , 7 byte

Mof-"DL

Cobalah online!

Penjelasan

Mof-"DL
M   "DL    For each character in ['D','L']:
 of-         keep only those strings that are not empty if that character is removed
Leo
sumber
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 terima kasih kepada @Nevay .

Penjelasan:

Coba di sini.

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
Kevin Cruijssen
sumber
1
Anda dapat menyimpan l dan d dalam array untuk menghapus pernyataan if-else. a->{String[]r={"",""};for(char c:a)r[c/69]+=c;return new char[][]{r[1].toCharArray(),r[0].toCharArray()};}(-4 byte)
Nevay
1

Oktaf, 21 byte

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

Input adalah array karakter, output adalah array sel. Daur ulang dari jawaban saya di sini .

Contoh eksekusi di ideone .

gelas kimia
sumber
1

Julia, 26 byte

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

PowerShell , 27 byte

($args-eq'L'),($args-eq'D')

Cobalah online!


Sunting: sebelumnya $args.where({$_-eq'L'},'sp')selama 28 byte. Bisa jadi $args.where({+"0x$_"},'sp')untuk 27 jika bukan karena aturan bahwa L's harus didahulukan.

TessellatingHeckler
sumber
0

CJam , 14 byte

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

Input adalah daftar karakter (string), output adalah daftar daftar karakter (daftar string).

Cobalah online!

Penjelasan:

"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"]
Buah Esolanging
sumber