Wyzwanie
Biorąc pod uwagę ciąg wejściowy i liczbę całkowitą n - obcina wszelkie serie kolejnych znaków do maksymalnej długości n . Znaki mogą być dowolne, w tym znaki specjalne. Funkcja powinna rozróżniać małe i wielkie litery, a n może wynosić od 0 do nieskończoności.
Przykładowe wejścia / wyjścia:
f("aaaaaaabbbccCCCcc", 2) //"aabbccCCcc"
f("aaabbbc", 1) //"abc"
f("abcdefg", 0) //""
f("aaaaaaabccccccccCCCCCC@", 4) //"aaaabccccCCCC@"
Punktacja
Wynik jest oparty na liczbie użytych bajtów. A zatem
function f(s,n){return s.replace(new RegExp("(.)\\1{"+n+",}","g"),function(x){return x.substr(0, n);});}
będzie 104 punktów.
Miłej gry w golfa!
Edycja: usunęłem ograniczenia językowe, ale nadal chciałbym zobaczyć odpowiedzi w javascript
Odpowiedzi:
Python 2, 52 bajty
Zapisane jako program (54 bajty):
Iteruje przez ciąg wejściowy
s
, dołączając każdy znak do ciągu wyjściowego,r
chyba że ostatnien
znakir
to ten znak.Myślałem, że to się nie powiedzie,
n==0
ponieważr[-0:]
nie ma ostatnich 0 znaków (pusty ciąg), ale cały ciąg. Ale działa, ponieważ ciąg znaków pozostaje pusty, więc dopasowuje ciąg znaków 0-znakowych.Rekursywny
lambda
dał 56 z powodu powtórzeniaAlternatywna strategia polegająca na prowadzeniu licznika
i
powtórzeń ostatniej postaci również okazała się dłuższa niż tylko sprawdzenie ostatniejn
postaci.źródło
DO,
8178Modyfikuje przychodzący ciąg.
Program testowy
Wymaga dwóch parametrów, pierwszy to łańcuch do obcięcia, drugi to limit długości.
Wyjaśnienie:
Działa to, ponieważ wskaźnik źródłowy zawsze będzie równy lub większy niż wskaźnik docelowy, więc możemy pisać nad ciągiem podczas jego analizy.
źródło
Haskell, 36 bajtów
Wersja bez punktów
\n s -> concatMap (take n) (group s)
.źródło
JavaScript ES6,
60545543 bajtów-12 bajtów dzięki @ TestSubject06 i @Downgoat
Przykładowe przebiegi:
źródło
RegExp("(.)\\1*","g")
na/(.)\1*/g
(s,n)
nas=>n
, a użycie staje sięf("aaaaaaabbbccCCCcc")(2)
MATL, 9 bajtów
Wypróbuj online
Wyjaśnienie
źródło
CJam, 12 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Pyth,
1612 bajtówWypróbuj online!
źródło
Python 2, 56 bajtów
źródło
gs2, 6 bajtów
Zakodowane w CP437 :
Jest to anonimowa funkcja (blok), która oczekuje liczby na szczycie stosu i ciągu poniżej.
Wypróbuj online. (Kod jest tutaj
lines, dump, read number, [the answer], run-block
.)źródło
Perl 6 ,
3836 bajtówWyjaśnienie:
Test:
źródło
JavaScript ES5, 73
Ponownie używa wyrażenia regularnego Lynn z jej odpowiedzi w języku Python .
źródło
new
słowo kluczowe dla -4 bajtów.Perl 5, 50 bajtów
Kod 46 bajtów + 3 dla
-i
i 1 dla-p
Pobiera numer do obcięcia za pośrednictwem
-i
.Stosowanie
źródło
-p
tylko jeden bajt?-e
tymi opcjami, zajmuje tylko 1 bajt. Jeśli skrypt musi zostać uruchomiony z pliku, kosztuje on 3 za miejsce i sam się oflaguje. Próbuję znaleźć meta post, ale jestem teraz na telefonie komórkowym.Bash 46 bajtów
Użycie: Wprowadź liczbę znaków do ograniczenia, naciśnij enter i wprowadź ciąg. Ctrl+, Daby wyjść
sed
(wysłać EOF).źródło
Java 7,
107106 bajtówPoprzednia alternatywna pętla for-line dla konkatenacji ciągów (która jest o 1 bajt większa niż
String s="";for(int i=-1;++i<j;)s+="$1";
niestety):Przypadki bez golfa i testy:
Wypróbuj tutaj.
Wynik:
źródło
JavaScript (przy użyciu zewnętrznej biblioteki) (115 bajtów)
Link do lib: https://github.com/mvegh1/Enumerable
Objaśnienie kodu: Załaduj ciąg do biblioteki, która wewnętrznie analizuje jako tablicę znaków. Zastosuj akumulator w sekwencji, przekazując niestandardowy obiekt jako wartość początkową. Właściwość a to bieżący element, b to ciąg znaków zakumulowany, a c to sekwencyjna liczba bieżącego elementu. Akumulator sprawdza, czy bieżąca wartość iteracji, n, jest równa ostatniej wartości elementu, ca Jeśli nie, resetujemy licznik do 1 i ustawiamy bieżący element. Jeśli liczba bieżącego elementu jest mniejsza lub równa pożądanej długości, kumulujemy ją do ciągu zwracanego. Na koniec zwracamy właściwość b, skumulowany ciąg. Nie jest to najbardziej golfowy kod, ale cieszę się, że mam rozwiązanie, które działa ...
źródło
J,
3130 bajtówGrupuje ciąg wejściowy w przebiegi (podłańcuchy) o identycznych znakach i przyjmuje minimalną długość tego przebiegu i maksymalną długość, która została wprowadzona w celu obcięcia łańcucha. Następnie tyle razy kopiuje pierwszy znak każdego uruchomienia.
Stosowanie
Wyjaśnienie
źródło
Dyalog APL ,
2220 bajtówMonituje o n i przyjmuje ciąg wejściowy jako argument.
(
Funkcja milcząca ...∊
spłaszczenia⊢↑¨⍨
każdy element argumentu (np każdej partycji) z dokładnością do⎕⌊⍴¨
minimum przez numeryczne i aktualnej długości)
[końcowego funkcji milczące] stosuje się do⊢⊂⍨
wejścia podzielono u ᴛʀᴜᴇ s1,
ᴛʀᴜᴇ poprzedzał (The pierwszy znak nie jest równy nieistniejącemu poprzednikowi)2≠/⊢
pary nierównoznaczny znaków na wejściuźródło
Rubinowy, 32 bajty
źródło
TCC,
75 bajtówDane wejściowe to ciąg i liczba oddzielone spacją.
Wypróbuj online!
źródło
tcc.lua
plikiem ze znacznikiem czasu 16-07-25 16:57 UTC, który nie był w stanie odczytać wielu danych naraz. Jeśli twoja odpowiedź wymaga wersji językowej, która opublikowała wyzwanie, musisz oznaczyć ją w nagłówku jako niekonkurującą . Kiedy to zrobię, usunę moją opinię.