Czy nie nienawidzisz go, gdy chcesz skopiować i wkleić listę liczb (wektor, tablica ...) z jednego programu do drugiego, ale format, w którym masz numery, nie odpowiada formatowi, w którym go potrzebujesz ?
Na przykład w MATLAB możesz mieć listę rozdzieloną spacjami, taką jak ta:
[1 2 3 4 5] (you can also have it comma separated, but that's not the point)
W Pythonie trzeba wstawić przecinki, aby ta lista była prawidłowym wejściem, więc trzeba by ją przekonwertować
[1, 2, 3, 4, 5]
aby działało. W C ++ możesz chcieć czegoś takiego:
{16,2,77,29}
i tak dalej.
Aby uprościć wszystkim życie, utwórzmy konwerter list, który pobiera listę w dowolnym formacie * i wyświetla listę w innym określonym formacie.
Prawidłowe nawiasy kwadratowe to:
[list]
{list}
(list)
<list>
list (no surrounding brackets)
Prawidłowe ograniczniki to:
a,b,c
a;b;c
a b c
a, b, c <-- Several spaces. Must only be supported as input.
a; b; c <-- Several spaces. Must only be supported as input.
a b c <-- Several spaces. Must only be supported as input.
Uwaga: dane wejściowe mogą zawierać dowolną liczbę spacji między liczbami, ale dane wyjściowe mogą mieć zerowe spacje (jeśli ,
lub ;
są używane jako separator) lub pojedyncze spacje (jeśli są rozdzielane spacjami).
Oprócz listy wejściowej pojawi się ciąg (lub dwa znaki) określający format wyjściowy. Ciąg formatu zostaną najpierw typ uchwyt otwierania (tylko), [
, (
, <
, {
lub (ostatni z nich jest pojedyncza przestrzeń stosowany, gdy nie ma otaczające wspornik). Po typie nawiasu następuje typ separatora
,
, ;
lub (ostatni to spacja). Dwa znaki formatu wejściowego należy traktować jako pojedynczy argument (ciąg znaków lub dwa kolejne znaki) w kolejności opisanej powyżej.
Kilka przykładów ciągów formatu:
[, <-- Output format: [a,b,c]
{; <-- Output format: {a;b;c}
<-- Two spaces, output list has format: a b c
Zasady:
- Dane wyjściowe nie mogą mieć spacji wiodących
- Dane wyjściowe mogą zawierać końcowe spacje i nowy wiersz
- Wynikiem powinna być tylko lista liczb, a nie
ans =
podobna
- Wynikiem powinna być tylko lista liczb, a nie
- Dane wejściowe to lista liczb całkowitych lub dziesiętnych (zarówno dodatnich, jak i ujemnych (i zero)) oraz ciąg dwóch znaków
- Jeśli dane wejściowe składają się tylko z liczb całkowitych, lista wyjściowa powinna zawierać tylko liczby całkowite. Jeśli lista wejściowa składa się z liczb całkowitych i liczb dziesiętnych, wszystkie liczby wyjściowe mogą być liczbami dziesiętnymi. (Opcjonalne jest zachowanie liczb całkowitych jako liczb całkowitych)
- Maksymalna liczba cyfr po przecinku, która musi być obsługiwana, to 3.
- Dane wejściowe będą dwoma argumentami. Oznacza to, że liczby są w jednym argumencie, a ciąg formatu jest pojedynczym argumentem.
- Kod może być programem lub funkcją
- Dane wejściowe mogą być argumentem funkcji lub STDIN
Kilka przykładów:
1 2 3 4
[,
[1,2,3,4]
<1; 2; 3>
; <-- Space + semicolon
1;2;3
not valid: 1.000;2.000;3.000 (Input is only integers => Output must be integers)
{-1.3, 3.4, 4, 5.55555555}
[,
[-1.300,3.400,4.000,5.556] (5.555 is also valid. Rounding is optional)
also valid: [-1.3,3.4,4,5.55555555]
Najkrótszy kod w bajtach wygrywa. Jak zawsze zwycięzca zostanie wybrany tydzień po opublikowaniu wyzwania. Odpowiedzi zamieszczone później mogą nadal wygrywać, jeśli są krótsze niż obecny zwycięzca.
Tabela liderów
Fragment kodu na dole tego postu generuje katalog na podstawie odpowiedzi a) jako listy najkrótszych rozwiązań dla każdego języka oraz b) jako ogólnej tabeli wyników.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
## Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
## Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
_
do oznaczania elementów ujemnych. :(Odpowiedzi:
CJam, 27 bajtów
Wypróbuj tutaj.
Wyjaśnienie
źródło
JavaScript (ES6), 75
82Jako funkcja anonimowa
Edycja: zapisano 2 bajty thx @ user81655 (i 5 kolejnych tylko przegląda)
Testowy fragment kodu
źródło
CJam,
3534 bajtówSprawdź to tutaj.
Oczekuje formatu w pierwszym wierszu i listy w drugim.
Wyjaśnienie
źródło
Pyth, 33 bajty
Wypróbuj online: pakiet demonstracyjny lub testowy
Wyjaśnienie:
źródło
PowerShell,
1081009585 bajtów(zobacz historię zmian dla poprzednich wersji)
Golfed kolejne 15 bajtów poprzez usunięcie
$b
i$s
zmienne i zmiany parens na wewnętrznym sznurkiem.Trwa to wejście jako dwa ciągi i zapisuje je do
$i
a$z
, następnie budujemy nowy ciąg wyjściowy. Pareny wewnętrzne-split
s$i
z wyrażeniem regularnym, aby wybrać tylko cyfry, a następnie-join
s z powrotem wraz z żądanym ogranicznikiem. Łączymy to z pierwszym znakiem wejściowym separatora (np.[
) I zamykamy go indeksowaniem do łańcucha na podstawie wartości ASCII pierwszego znaku i pewnych sztuczek formułowania. Zewnętrzne.Trim()
usuwa wszelkie spacje wiodące lub końcowe.źródło
"]})>"["[{(< ".IndexOf($b[0])]
czymś takim' }) >]'[($b[0]-32)%6]
.($b[0]-32)%6
Daje0,2,4,5,1
do otwarcia znaki wspornikach, które można wykorzystać do indeksu w ciągu nawiasu zamykającego' }) >]'
. Może istnieć krótsza „formuła”, ale wydaje się to wystarczająco dobre.()
będąc tuż obok siebie, ale pozostałe nawiasy mają znak pomiędzy, więc zacząłem indeksować. Dzięki!String.Replace()
zamiast-replace
operatora kupiłoby ci kolejne 2 bajty (nie musisz uciekać ani definiować klasy postaci[]
).Replace('[]{}()<>;,',' ')
nie brakuje, nie złapie pojedynczych postaci, ale zamiast tego spróbuje dopasować symboliczną całość, która nie istnieje. Musielibyśmy użyć Regex.Replace , który obejmuje[regex]::
wywołanie .NET i zamiast tego wydłużyłby kod.-ne''
zamiast|?{$_}
.Python 2, 96 bajtów
Zadzwoń jako:
Wynik:
źródło
JavaScript (ES6),
829211692 bajtyAnonimowa funkcja, uruchom ją w ten sposób
Prawdopodobnie można to pograć w golfa dalej ..
Nie golfił
źródło
The input will be a list of integer or decimal numbers (both positive and negative (and zero)), and a string of two characters
. Naprawiono, dziękiMathematica, 108 bajtów
Matematyka jest na ogół niezdarna z wprowadzaniem ciągów, chyba że ciąg ma być interpretowany jako tekst.
Wyjaśnienie
StringCases[t,NumberString]
zwraca listę ciągów liczb.Riffle
wstawia separatory między liczbami./.Thread[c@"[ {<(" -> c@"] }>)"])
zastępuje lewy „wspornik” prawym wspornikiem.<>
jest formą infixStringJoin
. Skleja ze sobą podłoża.źródło
Matlab, 85 bajtów
Przykładowe zastosowanie:
źródło
Julia, 95 bajtów
Jest to funkcja,
f
która akceptuje dwa ciągi i zwraca ciąg.Nie golfowany:
źródło
Bash + GNU Utilities, 90
źródło