Wyzwanie
Napisz program, który, biorąc pod uwagę ciąg o x
długości 10 znaków i znak y
, wypisuje liczbę wystąpień znaku y
w ciągu x
.
Najkrótszy program w bajtach do wygrania wygrywa.
Przykład
Input: tttggloyoi, t
Output: 3
Input: onomatopoe, o
Output: 4
Odpowiedzi:
Pyth, 3 bajty
Przykładowy przebieg:
Oczywiście użytkownik może wprowadzić mniej więcej 10 liter przy pierwszym wprowadzeniu, ale nie musimy się martwić, co się stanie, gdy użytkownik naruszy specyfikację.
źródło
/
po prostu zlicza liczbę wystąpień w pierwszym ciągu wejściowym drugiego ciągu wejściowego.w
pobiera wiersz danych wejściowych.Pyth - 3 bajty
Inna, mniej oczywista odpowiedź Pytha o tym samym rozmiarze. Składa się licząc na wejściu.
Pakiet testowy .
źródło
JavaScript, 32
źródło
Bash, 24 znaki
Przykładowy przebieg:
źródło
Siatkówka , 12 bajtów
Po prostu regex, który pasuje do znaku równego ostatniemu znakowi na wejściu (oprócz siebie). Po podaniu jednego wyrażenia regularnego Retina po prostu zwraca liczbę dopasowań.
źródło
Labirynt ,
32292724 bajtówOdczytuje najpierw pojedynczy znak, a następnie ciąg, w którym należy policzyć, i zakłada, że w łańcuchu nie ma bajtów zerowych.
Wyjaśnienie
Kod zaczyna się od
),}
, która ustawia spód stosu1
, odczytuje pierwszy znak i przenosi go do stosu pomocniczego do przyszłego użytku.1
Będzie nasz licznik (offset 1 zostanie anulowana później i jest niezbędne dla IP do podjęcia wymaganych obroty).Adres IP zostanie teraz przesunięty w dół, aby odczytać pierwszy znak ciągu wyszukiwania za pomocą
,
. Wartość jest negowana`
, ponownie, aby uzyskać prawidłowe zachowanie podczas skręcania. Podczas odczytywania znaków ze STDIN adres IP będzie teraz podążał za tą pętlą:{:}
tworzy kopię zapisanego kodu znaków i+
dodaje go do bieżącej wartości. Jeśli wynikiem jest0
(tj. Obecna postać jest tą, której szukamy), IP porusza się prosto:-
po prostu pozbywając się0
,)
zwiększa licznik,{}
nie ma możliwości.Jeśli jednak wynik po
+
jest niezerowy, nie chcemy liczyć bieżącego znaku. Dlatego adres IP skręca w prawo. To ślepy zaułek, więc kod jest wykonywany dwukrotnie, raz do przodu i raz do tyłu. Oznacza to, że rzeczywisty kod w tym przypadku staje się);___;)+-){}
.);
pozbywa się tej niezerowej różnicy,___
wypycha 3 zera, ale;
odrzuca jedno z nich.)
zwiększa jeden z dwóch pozostałych dwóch zer,+
dodaje je do jednego1
,-
odejmuje od licznika i)
zwiększa licznik. Innymi słowy, stworzyliśmy bardzo rozbudowany system no-op.Kiedy uderzamy w EOF,
,
popycha-1
, co`
zmienia się,1
a IP skręca w prawo.-
odejmuje1
licznik (anulowanie początkowego przesunięcia).!
wypisuje licznik i@
kończy program.źródło
Python 3, 29 bajtów
To było łatwe. Zakłada, że wejście jest ciągiem dziesięciu liter.
źródło
f=lambda x,y:x.count(y)
byłbyś krótszy? (Przepraszam, jeśli to nie działa, jestem na telefonie komórkowym i nie mogę sprawdzić)print input().count(input())
luba,b=input();print a.count(b)
taką samą kwotęSnowman 1.0.2 , 16 znaków
Zaskakująco krótki. Wyjaśnienie:
źródło
C ++ Metaprogramowanie,
160154116 bajtówTylko na chichoty.
Dzięki byłemu bartowi za grę w golfa!
Użycie: Pierwszym znakiem w instannacji szablonu jest szukana postać.
Skompiluj z clang -std = c ++ 11 -c -> wynik znajduje się na początku komunikatu o błędzie.
Skompiluj z gcc -std = c ++ 11 -c -> wynik znajduje się na dole komunikatu o błędzie.
Wyszukaj A < 3 , „t”, „\ 000”> i A < 3 , „t”, „\ x00”>
Wersja 154 bajtów
Wersja 160 bajtów:
źródło
((x==y)?1:0)
aby(x==y)
zaoszczędzić około 6 bajtów (tak myślę).bool
doint
nawrócenia.enum
zamiaststatic const
. Użyj0
zamiast,'\0'
aby zakończyć. Użyjint
zamiastchar
. Użyj nieco innej deklaracji, aby zainicjować. Usuń nową linię superflouos.template<int w,int x,int y,int...s>class A{enum{a=A<w+(x==y),x,s...>::a};};A<0,'t','t','t','t','g','g','l','o','y','o','i',0>a;
. Sprawdzone za pomocą g ++ i clang.Bash + grep, 26 bajtów
źródło
JavaScript (ES6), 26 bajtów
To szybkie i łatwe rozwiązanie definiuje anonimową funkcję. Aby go użyć, dodaj deklarację zmiennej na początku. Wypróbuj to:
Pokaż fragment kodu
EDYCJA: Och, widzę, że jest już bardzo podobne rozwiązanie. Mam nadzieję, że to w porządku.
źródło
Haskell, 21 bajtów
źródło
C ++, 78 bajtów
Zadzwoń tak:
źródło
Element , 23 bajty
Nowa linia jest częścią programu. Właściwie używam go jako nazwy zmiennej .
Ten program działa w zasadzie, przechowując znak docelowy w zmiennej, trzymając bieżący ciąg na górze stosu, a następnie zapętlając proces „rąbania, porównywania i przenoszenia wyniku pod”, sumując wyniki na końcu.
Nowa linia jako nazwa zmiennej pochodzi z używania nowej linii na końcu danych wejściowych poprzez odcięcie jej i zapisanie w niej. Nowa linia w kodzie to miejsce, w którym z niej czytam.
Dane wejściowe są takie:
Dane wyjściowe są takie
źródło
Julia,
2625 bajtówThe
findin
Zwraca indeksy w pierwszym argumentem w którym drugi argument występuje w postaci wektora. Długość wektora to liczba wystąpień.Oszczędność jednego bajtu dzięki Glenowi O.
źródło
endof
zaoszczędzi ci bajt zamiastlength
.APL,
73 bajtyTo tworzy ciąg funkcji. Działa, tworząc wektor zer i jedynek odpowiadających indeksom, przy których znak pojawia się w ciągu (
⍷
). Wektor jest następnie sumowany (+/
).Zaoszczędzono 4 bajty dzięki kirbyfan64sos i NBZ!
źródło
+/⍷
(nie znam APL, więc mogę się mylić).Perl,
2116 znaków(13-znakowy kod + 3-znakowa opcja wiersza poleceń.)
Przykładowy przebieg:
źródło
<>
!-l
i upewniając się, że twój wpis nie ma końcowego nowego wiersza:echo -en 'onomatopoe\no' | perl -pe '$_=eval"y/".<>."//"'
perl -pe '$_+=s/${\<>}//g'
+=
potrzebny?=
wydaje się działać równie dobrze (i powinien nadal działać, gdy dane wejściowe zaczynają się od niektórych cyfr).PHP,
3635 bajtówUżycie:
Wywołaj skrypt z dwoma argumentami.
php script.php qwertzqwertz q
PHP, 23 bajty
Jeśli zarejestrujesz zmienne globalne (możliwe tylko w PHP 5.3 i niższych), możesz zapisać 12 bajtów (dzięki Martijn )
Użycie:
Wywołaj skrypt i zadeklaruj zmienne globalne
php script.php?a=qwertzqwertz&b=q
źródło
script.php?a=qwertzqwertz&b=q
i zrobić<?=substr_count($a,$b);
23 znakiDyalog APL , 3 bajty
Tj. „Suma równych bajtów”. Na przykład:
Lub tylko
Tym razem K nie pokonuje APL.
Wypróbuj online.
źródło
T-SQL,
9940 bajtówPo prostu robi różnicę między łańcuchem wejściowym a łańcuchem z usuniętym znakiem. Pobiera dane z tabeli t
Edycja została zmieniona, aby usunąć problem z liczeniem spacji i uwzględnić aktualne dopuszczalne dane wejściowe dla SQL. Dzięki @BradC za wszystkie zmiany i oszczędności
źródło
SELECT LEN(s)-LEN(REPLACE(s,c,''))FROM t
, gdziet
jest wstępnie wypełniona tabela wprowadzania z polamis
ic
.A B C D
ten koniec spacji (jeśli zostaniesz poproszony o zliczenie spacji), ponieważLEN
ignoruje końcowe spacje.space
SELECT 11-LEN(REPLACE(s,c,'')+'x')FROM t
Octave / Matlab, 33 bajty
źródło
J, 5 bajtów
Wydaje mi się, że J miałby do tego wbudowaną funkcję, ale nie udało mi się jej znaleźć - może jeden z aktywnych użytkowników J może mnie oświecić. Zamiast tego obowiązuje to pierwsze
=
do danych wejściowych, zamieniając każdy znak,1
jeśli jest równy żądanemu lub w0
inny sposób. Następnie+/
oblicza sumę tej listy.źródło
Plik wsadowy, 121 bajtów
Ponieważ jestem masochistą ...
Ostrzeżenie: zakłada, że
_
nie występuje w ciągu wejściowym. Jeśli tak, zmiennae
musi zostać odpowiednio dostosowana.To ustawia naszą zmienną licznika
c
i naszą rozgraniczenie końca łańcucha jako_
, przed dołączeniem tego do naszego ciągu wejściowego%1
i ustawieniem łańcucha konkatenowanego nat
. Następnie wchodzimy do pętli:l
, ustawiamy tymczasową zmienną znakowąa
jako pierwszą postaćt
, sprawdzamy, czy pasuje ona do naszego drugiego ciągu wejściowego%2
i zwiększamy,c
jeśli jest to prawda, a następnie usuwamy pierwszy znakt
. Nasz warunek końca pętli sprawdzat
naszą demarkację końca łańcucha i zapętla się, jeśli nie. Następnieecho
wyliczamy wartość naszego licznika.Prawdopodobnie byłoby możliwe użycie
FOR
zamiast tego pętli, ale wymagałoby to włączenia Opóźnionej Ekspansji , która moim zdaniem będzie w rzeczywistości dłuższa bajtowo niż ta. Weryfikację pozostawiono czytelnikowi jako ćwiczenie.źródło
CJam, 5 bajtów
Wyjaśnienie
źródło
PowerShell, 32 bajty
Cztery za jednego! I wszystkie są tej samej długości! :)
lub
Alternatywnie,
lub
The first two styles use the inline operator
-split
, while the second two implicitly casts the first argument as a String and uses the.Split()
string-based operator. In all instances an array is returned, where we must decrement Count by one, since we're getting back one more array item than occurrences of the second argument.This one was kinda fun...
źródło
Julia, 21 bytes
Note that it requires that
c
be a char, not a single-character string. So you use it asf("test me",'e')
(which returns 2) and notf("test me","e")
(which returns 0, because'e'!="e"
).źródło
><> (Fish), 30 bytes
Takes the string, then character to count. Input isn't separated (at least in the online interpreter). Try it on the online interpreter: http://fishlanguage.com I counted the bytes by hand, so let me know if I'm wrong.
Explanation
First off, ><> is 2 dimensional and and loops through a line or column until it hits a
;
or error. This means that if it's proceeding left to right (like it does at the beginning of a program), it will wrap around the line if it reaches the end and is not moved or told to stop the program. Some characters per line will be repeated because they have different functions depending on the direction of the pointer, and the fourth line will have characters in reverse order because the pointer moves right to left.A summary of the program is provided below. Look at the instructions listed for ><> on esolangs to see what each individual character does.
Line 1:
0&v
Line 2:
=?\ilb
(starting where line 1 moves the pointer to, i.e. the third character)
line 3:
=?\:@=&+&l1
(starting at the third character)
Line 4:
n&/;
(starting at the third character)
źródło
Ruby,
2220 bytesDemo: http://ideone.com/MEeTd2
The
-1
is due to the fact thatgets
retrieves the input, plus a newline character. Ruby'sString#count
counts the number of times any character from the argument occurs in the string.For example, for the input [
test\n
,t\n
], thet
occurs twice and the\n
occurs once, and needs to be subtracted.źródło
$><<
and reduce 4 bytes.p gets.count(gets)-1
Ruby, 18 bytes
Usage:
źródło
Japt, 2 bytes
Try it online!
źródło