洗濯を手伝ってください


21

助けて!私の濃色セパレータV3001.01からは完全に自動化されたライトが壊れました!:(

ガイドライン


仕事

文字Lまたは文字D(明暗を表す)の任意の量の文字列の配列(または一部の言語のリスト)の入力を受け取り、2つの配列を含む配列を出力するプログラムを作成します。すべてのLと1つ、すべてのDと1つです。


ルール

  • コードゴルフなので、バイト単位の最短回答が勝ちます
  • 入力には大文字のみが含まれます
  • 出力には、入力と同じ数のLがなければなりません。Dについても同じことが言えます。
  • 入力には要素が1つしか含まれない場合があります(または要素がゼロの場合もあります
  • 出力配列の一方または両方に要素が含まれていない場合、空のリストを出力します(言語によっては、文字列を出力する必要がある場合があります)
  • 常に最初の配列を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
または、おそらく2つの文字列のリストとして出力します。たとえば、 "" LDLDD "-> [" LL "、" DDD "]
同志SparklePony

私の答えはこれに依存しているので、答えもしたいと思います
-Skidsdev

混合出力はどうですか?1つの文字列と1つの文字列の配列を含む配列のように?例えば、["L","L",["D","D","D"]]
シャギー

いいえ、出力は配列/リストでなければなりません。@ComradeSparklePony
アモリス

回答:


12

APL、8バイト

'DL'~⍨¨⊂

説明:

  • :囲まれた入力
  • ~⍨¨:それぞれなし
  • 'DL': 'D'および 'L'

例:

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

なぜそれで'DL'はありませんか'LD'
リーキー修道女

@LeakyNun:説明を追加しました。正しい文字を選択するのではなく、間違った文字を削除することで機能します。
マリナス

1
'LD'∩⍨¨⊂または⍞∘∩¨'LD'説明しやすいかもしれません。
アダム



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ガン

@KeyuGan argh!十分な
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);
イェルクHülsermann

数年後の私の最初のゴルフの試みは、まだ完全なアマチュアです!みなさんにもフィードバック(および投票)をありがとう:)!
-ScottMcGready

3

Mathematica、27バイト

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

入力としてLsとDs(文字/文字列ではなくシンボル)のリストを取り、2つのリストのリストを返す純粋な関数。例えば、

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

を返します{{L, L, L}, {D, D}}オンラインでお試しください!

Gatherそれ自体は私たちが望むものに近いですが、2つの方法で仕様を満たすことができません:入力にLsまたはDs がない場合、空のリストを生成せず、Lsを常に左にソートしません。入力#を置き換えると、{L,D}~Join~#両方の問題が一度に解決されます。つまり、少なくとも1つとL少なくとも1つが存在しDL最初にが検出されてからsが最初に返されLます。Rest/@その後、イニシャルLとを削除しDます。

(私はを使用して解決策を試みましたCountが、問題をカリー化するため、短くはないようでした:±q_:=#~Table~Count[q,#]&/@{L,D}31バイトです。)


TIOリンク(数学)?
リーキー修道女

1
どの程度Cases@@@{{#,L},{#,D}}&、22バイトのために?
ツリーではない

素晴らしいアイデア、木ではありません!その答えを投稿する必要があります。私は賛成票を投じます:)
グレッグマーティン




2

PHP7、52の 45バイト

@JörgHü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
使用して45バイト-rの代わりに、オプションの-f削除を<?php後にスペースをドロップas
イェルクHülsermann



2

Mathematica、22 18バイト

CalculatorFelineの天才によって4バイトが節約されました!

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

オンライン試すか、Wolframサンドボックス試してください

入力シンボルのリストであるLDのように、自分自身にだけ文字、文字列ではなく- グレッグ・マーティンの答え。構文#|Lはの省略形ですAlternatives[#,L]が、@@@構文は頭AlternativesCasesに置き換えているため、このコードはと同等{Cases[#,L],Cases[#,D]}&です。


1
{#,x}#|x-4バイトにすることができます。
CalculatorFeline

@CalculatorFeline、すごい、そのトリックは素晴らしいです!ありがとうございました!
未木

1
@@そして@@@任意の頭部を持つ作品だけではなく、List。場合|ではない仕事をして、あなたはまだでいくつかのケースで保存することができ&&||または**
電卓

また.、算術演算子も使用できます。
CalculatorFeline

また、優先度の乱用により、より多くの節約が得られます(出力形式を変更):#.L|#.D
CalculatorFeline

2

Java 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を使用してjava.util.stream.*、との"D"::equals代わりにインポートを削減できますk->k.equals("D")。それに加えて、L/ Dが存在しない場合は空のリストを出力しないため、コードは要件を満たしません(テストケース2〜4)。
ネヴァイ

PPCGへようこそ!残念ながら、無効な回答は非競合としてマークできません。この回答を修正して有効にすることはできますが、現時点では削除する必要があります。(おそらく自分で削除する必要があります
。MODで

2

プロローグ(SWI) 42、37のバイト

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

オンラインでお試しください!

それを考えるとW、洗濯のリストでw/3統一されますLと、Dアイテムが軽い場合は成功述語に対して洗濯物を分割することにより、それぞれ明暗のリストに。

[編集:Fatalizeのおかげでゴルフ-5を獲得 ]


1
l('L').より短い5バイトl(X):-X='L'.
17

@Fatalize-ありがとう!で編集
TessellatingHeckler

2

Japt13 12 10バイト

2Æf¥"LD"gX

テストする-Q視覚化の目的でのみフラグを立てる)


説明

arrayの暗黙的な入力U

配列[0,1]を生成し、各要素をX現在の要素として関数に渡します。

U同等性をチェックすることでフィルタリング...

"LD"gX

...文字列中の文字とLDインデックスでX


「うーん、削除する¥必要があります...」[["L","L","D","D"],[]]「いや、そこに行きません:)」-私2017
ETHproductions

@ETHproductions:ハハ!うん、私はそれなしで動作するようにしようとするために非常に多くの方法を試しました¥
シャギー



1

Javascript(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

オンラインでお試しください!

入力を文字列のリストとして取得し、2つのリストを返します。最初の要素fun a -> a="L"はtrueの要素で、もう1つは結果がfalseの要素です。


1

ゼリー、10バイト

ẎfЀ⁾LDW€€

オンラインでお試しください!

Jellyでは、文字列は1文字のPython文字列のリストです(例:)['a', 'b', 'c'][[['L'], ['L']], [['D'], ['D'], ['D']]]1文字のJellyストリングは同じように動作するため、のような出力が得られるのはそのためです。

完全なプログラムとして機能しないためÇŒṘ、下部にあります。


@レオうーん、あなたは正しいかもしれません...修正されました。
エリックアウトゴルファー

Jellyの入力はJellyの出力と異なるようですか?インタプリタはstring->char[]自動的に行われますか?
nmjcman101

1
@ nmjcman101入力はPython形式で、出力はJelly形式であるため、文字列では異なります。だから私はこのW€€部品が必要です。
エリックアウトゴルファー

1

Perse、21バイト

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

私は、このチャレンジ専用のリストパーティション機能を実装したかもしれないし、実装していないかもしれない。入力を文字列の配列として受け取ります。



1

Java 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






0

CJam、14バイト

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

入力は文字のリスト(文字列)、出力は文字のリストのリスト(文字列のリスト)です。

オンラインでお試しください!

説明:

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