Yıkama yapmama yardım et


21

Yardım et! Benim Acı Ayırıcı V3001.01 itibaren Tamamen Otomatik Işıklar kırdı! :(

Kuralları


Görev

L harfi veya D harfi (ışıklar veya karanlıkları temsil eden) herhangi bir miktarda dizenin (veya bazı dillerde bir listenin) girdisini alacak bir program yazın ve iki dizi içeren bir dizi çıktısı alın. tüm L'ler ile ve bir de D'ler ile.


kurallar

  • Kod golf, bayt cinsinden en kısa cevap kazanır
  • Girdi yalnızca hiç büyük harf içerecek
  • Girişte olduğu gibi çıktıda aynı L sayısı bulunmalıdır, aynı D'ler için de geçerli
  • Giriş sadece bir elemente sahip olabilir (veya belki de sıfır elementler)
  • Çıktı dizilerinden biri veya her ikisi de eleman içermiyorsa, boş bir liste çıktılayın (bazı dillerde bu, bir dizge çıkarmanız gerekebileceği anlamına gelir)
  • Her zaman ilk dizinin L's dizisi olması

Örnek çıktı:

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

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

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

[] -> [[],[]]


3
Dizge olarak girdi / çıktı alabilir miyiz? Örneğin: "LDLDD" -> "LL DDD"ya da bunun gibi bir şey?
Yoldaş SparklePony

3
Ya da iki dizinin bir listesi olarak çıktı, örneğin “LDLDD” -> ["LL", "DDD"]
Yoldaş SparklePony

Cevabım buna bağlı olarak da, bir cevap istiyorum
Skidsdev

Karışık çıktıya ne dersiniz? Bir dize ve bir dize dizisi içeren bir dizide olduğu gibi? ör ["L","L",["D","D","D"]].
Shaggy

Hayır, çıktı bir dizi / liste olmalıdır. @ComradeSparklePony
Amorris

Yanıtlar:


12

APL, 8 bayt

'DL'~⍨¨⊂

Açıklama:

  • : kapalı giriş
  • ~⍨¨: her biri olmadan
  • 'DL': 'D' ve 'L'

Örnekler:

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

Neden öyle 'DL'değil 'LD'mi?
Sızdıran Rahibe

@LeakyNun: açıklama eklendi. Doğru olanı seçmek yerine yanlış karakteri kaldırarak çalışır.
marinus

1
'LD'∩⍨¨⊂veya ⍞∘∩¨'LD'açıklamak daha kolay olabilir.
Adám



4

PHP, 46 bayt

Verilen listenin: $arr = ['L','L','D','D','L','D','D','D','D','L'];

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


3
Varsayılan bir G / Ç kuralı olarak, girişin bir değişkende saklandığını
varsayamazsınız

@KeyuGan argh! Yeterince adil
ScottMcGready,

2
Kullanım $argvyerine $arrkomut dosyasını kullanabilirsiniz ve komut dosyasının komut satırından çalıştırılmasını php -f golf.php L L D D L D D D D L
bekleyin

1
Bu şekilde kullanarak en kısa çözümler for(;$b=$argv[++$i];)$a[$b][]=$b;print_r($a);ya da<?foreach($_GET as$b)$a[$b][]=$b;print_r($a);
Jörg Hülsermann

Yıllar sonra ilk golf girişimim gizleniyor ve hala tamamen amatörüm! Geribildirim (ve oylar) için herkese rağmen teşekkürler :)!
ScottMcGready,

3

Mathematica, 27 bayt

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

Girdi olarak Ls ve Ds (sembol, karakter / karakter değil) listesini alan ve iki listenin bir listesini döndüren saf işlev . Örneğin,

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

döner {{L, L, L}, {D, D}}. Çevrimiçi deneyin!

Gatherkendi başımıza istediklerimize yakın, ancak iki şekilde belirtimi karşılayamıyor: giriş eksik Lveya eksikse boş listeler üretmiyor Dve her zaman Lsola göre sıralamıyor. Girdiyi değiştirmek aynı anda her iki sorunu #da {L,D}~Join~#çözer: en az bir Lve en az bir tane olacağı Dve Ls ilk Lkarşılaştığından beri ilk önce geri döneceği anlamına gelir . Rest/@sonra başlangıç ​​kaldırır LveD .

(Kullanarak bir çözüm denedim Count, ancak sorunların körüklenmesi nedeniyle kısa gözükmüyordu: ±q_:=#~Table~Count[q,#]&/@{L,D}31 bayttır.)


TIO bağlantısı (matematik)?
Sızdıran Rahibe

1
Cases@@@{{#,L},{#,D}}&22 bayt için nasıl ?
Ağaç değil

Harika bir fikir, bir ağaç değil! Bu cevabı göndermelisin
Greg Martin




2

PHP7, 52 45 bayt

@ Jörg Hülsermann sayesinde -7 bayt

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

CLI ile kullan php -r a.php L L L D D L D

Betik, sağlanan argümanları gözden geçirir ve bunları değerini temel alan bir diziye ekler.


1
Kullanarak 45 byte -ryerine seçeneği -fkaldır <?phpsonra boşluk ve bırakas
Jörg Hülsermann

2

Ortak Lisp, 66 65 bayt

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

Çevrimiçi deneyin!

Dizeler yerine, semboller kullanırsak, o zaman çok daha kısa olur:

Ortak Lisp, 42 41 40 bayt

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

Çevrimiçi deneyin!

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

2

Raket , 48 bayt

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

Sadece bu isimsiz işlevi, örneğin '(L D L D D L)


2

Mathematica, 22 18 bayt

CalculatorFeline dehası tarafından kaydedilen 4 bayt!

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

Çevrimiçi deneyin ya da Wolfram sanal alanında !

Girdi sembollerin bir listesi Lve Ddeğil dizeleri, gibi kendi başlarına sadece harfler, - Greg Martin'in cevabı . Sözdizimi #|Liçin kısaltmadır Alternatives[#,L], ancak @@@sözdizimi kafa değiştirir Alternativesile Casesbu kod eşdeğerdir, böylece {Cases[#,L],Cases[#,D]}&.


1
{#,x}olabilir #|x-4 byte için.
Hesap MakinesiFeline

@CalculatorFeline, vay, bu numara şaşırtıcı! Teşekkür ederim!
Bir ağaç değil

1
@@ve @@@sadece herhangi bir kafa ile çalışmayın List. Eğer |değil işliyor, hala bazı durumlarda kaydedebilir &&, ||ya da **.
CalculatorFeline

Ayrıca .ve aritmetik operatörleri kullanabilirsiniz .
Hesap MakinesiFeline

Ayrıca, öncelikli kötüye kullanım sizin için daha fazla tasarruf sağlar (çıktı biçimi değişikliği ile):#.L|#.D
CalculatorFeline

2

Java 8, 105 bayt

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

İpuçları hoş geldiniz.


PPCG'de yeni import java.util.*;import java.util.stream.*;olan bayt sayımına dahil etmek zorunda mıyım ?


Rekabet etmeyen, boş bir giriş ile boş listeler oluşturmaz. Bazı baytları kaydettiğiniz için Nevay'a teşekkür ederiz.


2
İthalat sayılmalı ya da kısaltılmışsa sınıf adınızı tam olarak niteleyebilirsiniz.

1
Sen kullanabilirsiniz Stream#ofyerine Arrays#streamithalatın azaltılması java.util.stream.*ve "D"::equalsyerine k->k.equals("D"). Bunun yanında kod, eğer yok L/ yok ise boş bir liste çıkarmadığı için gereklilikleri karşılamıyor D(test durumları 2-4).
Nevay

PPCG'ye Hoşgeldiniz! Ne yazık ki, geçersiz cevaplar rakipsiz olarak işaretlenemez. Geçerli olması için bu cevabı değiştirebilirsin, fakat şimdilik silinmeli. (Muhtemelen kendiniz silmelisiniz; eğer bir mod silerse, çalışan bir çözüm
bulduğunuzda


2

Japt , 13 12 10 bayt

2Æf¥"LD"gX

Test et ( -Qyalnızca görselleştirme amaçlı bayrak)


açıklama

Dizinin örtük girişi U.

Diziyi oluşturun [0,1]ve her öğeyi Xgeçerli öğe olarak işlevden geçirin.

UEşitliği kontrol ederek filtrele ...

"LD"gX

... dizedeki karakterin bulunduğu LDdizinde X.


"Hmm, ¥işi kaldırmalı ..." [["L","L","D","D"],[]]"Hayır, oraya gitmiyor :)" - ben 2017
ETHproductions

@ETHproductions: Ha-ha! Evet, onsuz çalışmasını sağlamak için birçok yol denedim ¥.
Shaggy



1

Javascript (ES6), 37 bayt

Bu bir (şimdi silinmiş) Javascript (ES6) cevabına dayanmaktadır.

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

Ungolfed versiyonu:

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

Örnek kod pasajı:

f=

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

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


1

C #, 61 bayt

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

Tam / Biçimli Sürüm:

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 bayt

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

Çevrimiçi deneyin!

Dizelerin bir listesi olarak girdiyi alır ve ilkini fun a -> a="L"doğru olan elementlerle, diğerini de yanlış yapan sonuçlarla iki liste döndürür .


1

Jöle , 10 bayt

ẎfЀ⁾LDW€€

Çevrimiçi deneyin!

Jelly'te bir dize 1-karakterli Python dizelerinin bir listesidir, örn ['a', 'b', 'c']. Bu yüzden çıktı alırsınız [[['L'], ['L']], [['D'], ['D'], ['D']]], çünkü 1-char Jelly dizeleri aynı davranır.

Tam bir program olarak çalışmaz, bu nedenle ÇŒṘalt kısımda.


@Leo Hmm, haklı olabilirsin ... düzeltildi.
Outgolfer Erik,

Jelly girişinin Jelly çıkışından farklı olduğu görülüyor mu? Tercüman otomatik olarak çalışıyor mu string->char[]?
nmjcman101

1
@ nmjcman101 Dizgelerde, girdi Python biçiminde ve çıktı Jelly biçiminde olduğundan farklıdır. Bu yüzden W€€parçaya ihtiyacım var .
Outgolfer Erik,

1

Perse , 21 bayt

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

Liste bölümleme işlevini özellikle bu görev için özel olarak kullanabilir veya uygulamamış olabilirim. Girdiyi bir dizi dizisi olarak alır.



1

Java 8, 110 106 bayt

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

@Nevay sayesinde -4 bayt .

Açıklama:

Burada dene.

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
İf-else ifadesini kaldırmak için l ve d'yi bir dizide saklayabilirsiniz. a->{String[]r={"",""};for(char c:a)r[c/69]+=c;return new char[][]{r[1].toCharArray(),r[0].toCharArray()};}(-4 bayt)
Nevay

1

Octave, 21 bayt

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

Giriş bir karakter dizisi, çıkış bir hücre dizisidir. Cevabımdaki geri dönüşümü burada .

İdeone üzerinde örnek uygulama .



1

Julia, 26 bayt

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



0

CJam , 14 bayt

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

Giriş bir karakter listesidir (dize), çıktı karakter listesidir (dizeler listesi).

Çevrimiçi deneyin!

Açıklama:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.