Wskaźnik ukończenia alfabetu

32

Wprowadzenie

Ile alfabetu angielskiego używa dany ciąg? Poprzednie zdanie używa 77%. Ma 20 unikalnych liter (howmucftenglisapbdvr) i 20/26 ≃ 0,77.

Wyzwanie

W przypadku ciągu wejściowego zwróć procent liter alfabetu angielskiego obecnych w ciągu.

  • Odpowiedź może być procentowa lub dziesiętna.

  • Łańcuch wejściowy może zawierać wielkie i małe litery, a także znaki interpunkcyjne. Można jednak założyć, że nie mają znaków diakrytycznych ani znaków akcentowanych.

Przypadki testowe

Wkład

"Did you put your name in the Goblet of Fire, Harry?" he asked calmly.

Niektóre prawidłowe dane wyjściowe

77%, 76.9, 0.7692

Wkład:

The quick brown fox jumps over the lazy dog

Wszystkie ważne dane wyjściowe:

100%, 100, 1

Oczekiwany wynik dla "@#$%^&*?!"i ""wynosi 0.

Teleportacja kozy
źródło
3
Sugerowane przypadki testowe: "@#$%^&*?!",""
Adam
4
Jeśli 77%i 76.9zostanie zaakceptowane, to 77również zostanie zaakceptowane?
Grzegorz Oledzki
Wartości procentowe mogą również zawierać części dziesiętne ...
Jo King
2
@Shaggy Ostatnia edycja OP była 16 godzin temu, twoja odpowiedź była na 15, a twój komentarz na 14. To znaczy, masz rację, ale ???
Veskah
6
Jeśli 20/26 można zaokrąglić do 0,7692, 0,769 lub 0,77, czy mogę również zaokrąglić do 0,8, 1 lub 0? ;-)
Noiralef

Odpowiedzi:

18

Python 3 , 42 bajty

lambda s:len({*s.upper()}-{*s.lower()})/26

Wypróbuj online!

Filtrujemy wszystkie znaki niealfabetyczne z ciągu, biorąc (ustawioną) różnicę reprezentacji wielkich i małych liter. Następnie bierzemy długość i dzielimy przez 26.

Python 3 , 46 bajtów

lambda s:sum(map(str.isalpha,{*s.lower()}))/26

Wypróbuj online!

Policz unikalne znaki alfabetyczne (małe litery) i podziel przez 26. W Pythonie 2 wymagałoby to 3 dodatkowych znaków; dwa do zmiany {*...}na set(...)i jeden do uczynienia 26 pływakiem:, 26.aby uniknąć podziału podłogi.

Python 3 , 46 bajtów

lambda s:sum('`'<c<'{'for c in{*s.lower()})/26

Wypróbuj online!

Ta sama długość, zasadniczo taka sama jak poprzednia, ale bez „wbudowanej” metody łańcuchowej.

ArBo
źródło
Dlaczego drugi powraca, 1.0a nie 1? (Nie chciałem tego specjalnie zabraniać, żeby nie szkodziło to konkretnym językom, ale jestem ciekawy)
Teleportacja Kozła
10
@TeleportingGoat Division z pojedynczym ukośnikiem zawsze daje liczby zmiennoprzecinkowe w Pythonie 3, nawet jeśli operandy są liczbami całkowitymi. W przypadku podziału na liczby całkowite użyłbyś //, ale wtedy zawsze byłby to podział na liczby całkowite, co oczywiście nie jest tym, czego chcemy tutaj. Ma to sens, że nie uzależniali typu danych wyjściowych od konkretnych wartości argumentów, co oznacza, że ​​zawsze jest zmiennoprzecinkowe, nawet jeśli jest to liczba całkowita.
ArBo
11

MATL , 8 bajtów

2Y2jkmYm

Wypróbuj w MATL Online

Wyjaśnienie

2Y2    % Predefined literal for 'abcdefghijklmnopqrstuvwxyz'
j      % Explicitly grab input as a string
k      % Convert to lower-case
m      % Check for membership of the alphabet characters in the string. 
       % Results in a 26-element array with a 1 where a given character in 
       % the alphabet string was present in the input and a 0 otherwise
Ym     % Compute the mean of this array to yield the percentage as a decimal
       % Implicitly display the result
Suever
źródło
8

Octave / MATLAB, 33 bajty

@(s)mean(any(65:90==upper(s)',1))

Wypróbuj online!

Wyjaśnienie

@(s)                               % Anonymous function with input s: row vector of chars
             65:90                 % Row vector with ASCII codes of uppercase letters
                    upper(s)       % Input converted to uppercase
                            '      % Transform into column vector
                  ==               % Equality test, element-wise with broadcast. Gives a
                                   % matrix containing true and false
         any(                ,1)   % Row vector containing true for columns that have at
                                   % least one entry with value true
    mean(                       )  % Mean
Luis Mendo
źródło
7

05AB1E , 8 7 6 bajtów

lASåÅA

-1 bajt dzięki @LuisMendo .

Wypróbuj online lub sprawdź kilka innych przypadków testowych .

6 bajtów alternatywnych dostarczonych przez @Grimy :

láÙg₂/

Wypróbuj online lub sprawdź kilka innych przypadków testowych .

Oba programy wyświetlają dane w postaci dziesiętnej.

Wyjaśnienie:

l       # Convert the (implicit) input-string to lowercase
 AS     # Push the lowercase alphabet as character-list
   å    # Check for each if it's in the lowercase input-string
        # (1 if truthy; 0 if falsey)
    ÅA  # Get the arithmetic mean of this list
        # (and output the result implicitly)

l       # Convert the (implicit) input-string to lowercase
 á      # Only leave the letters in this lowercase string
  Ù     # Uniquify it
   g    # Get the amount of the unique lowercase letters by taking the length
    ₂/  # Divide this by 26
        # (and output the result implicitly)
Kevin Cruijssen
źródło
@LuisMendo alternatywnie láêg₂/jest również 6-bajtowy.
Grimmy
1
@LuisMendo Dzięki (i ty także Grimy )! :)
Kevin Cruijssen
7

C # (interaktywny kompilator Visual C #) , 56 49 bajtów

a=>a.ToUpper().Distinct().Count(x=>x>64&x<91)/26f

Wypróbuj online!

-6 bajtów dzięki innat3

Wygasły dane
źródło
1
można zapisać 6 bajtów, porównując wartości dziesiętne znaków 50 bajtów ( kody znaków )
Innat3
@ Innat3 49 bajtów, zmieniając &&się &.
Kevin Cruijssen
@KevinCruijssen ~ 2 minuty od uzyskania -1 bajtu kredytu, już to zrobiłem i edytowałem
Data
@ExpiredData Np, to był oczywisty golf. Kierował to głównie do Innat :)
Kevin Cruijssen
6

APL (Dyalog Extended) , 10 bajtów SBCS

Anonimowa ukryta funkcja prefiksu. Zwraca ułamek dziesiętny.

26÷⍨∘≢⎕A∩⌈

Wypróbuj online!

 duże litery

⎕A∩ skrzyżowanie z dużych liter A lphabet

 długość całkowita

 następnie

26÷⍨ podzielić przez dwadzieścia sześć

Adám
źródło
⌹∘≤⍨⎕A∊⌈­­­­­
ngn
@ngn To bardzo sprytne, ale zupełnie inne. Śmiało i opublikuj to sam. Z przyjemnością wstawię wyjaśnienie, jeśli chcesz.
Adám
6

Perl 6 , 27 24 bajtów

-3 bajty dzięki nwellnhof

*.uc.comb(/<:L>/).Set/26

Wypróbuj online!

Jo King
źródło
1
+1 Ponadto, chociaż działa to dobrze (i .lcdziałałoby również), z punktu widzenia „poprawności” .fcmoże być lepsze (szczególnie jeśli wyzwanie zawiera litery nieangielskie)
user0721090601
6

Narzędzia Bash i Gnu ( 81 78 68 60 42 bajtów)

bc -l<<<`grep -io [a-z]|sort -fu|wc -l`/26

-8 bajtów dzięki @wastl

-18 bajtów dzięki Nahuelowi, który wykorzystał kilka sztuczek, których nie znałem:

  • sort -fi grep -izignoruj ​​wielkość liter
  • sort -u jest zamiennikiem dla | uniq
Grzegorz Oledzki
źródło
1
60 bajtów :echo $(tr A-Z a-z|tr -cd a-z|fold -1|sort -u|wc -l)/26|bc -l
odpady
Dobrze. Zmienna jest przypomnieniem po kolejnej próbie. Dzięki!
Grzegorz Oledzki
3
42 bajty
Nahuel Fouilleul
Czy „grep -io [az]” nie może być skrócony do „grep -o [Az]”?
Gnudiff
@Gnudiff Zakładając ASCII, to również pasuje do wszystkich [\ ^ _ `].
jnfnt
6

K (oK) , 19 15 bajtów

Rozwiązanie:

1%26%+/26>?97!_

Wypróbuj online!

Wyjaśnienie:

Konwertuj dane wejściowe na małe litery, modulo 97 („az” to 97-122 w ASCII, modulo 97 daje 0-25), weź unikalne, sumujące wyniki, które są mniejsze niż 26, i konwertuj na procent 26.

1%26%+/26>?97!_ / the solution
              _ / lowercase
           97!  / modulo (!) 97
          ?     / distinct
       26>      / is 26 greater than this?
     +/         / sum (+) over (/)
  26%           / 26 divided by ...
1%              / 1 divided by ...

Uwagi:

  • -1 bajtów dzięki ngn, 1-%[;26]=>1-1%26%
  • -3 bajty inspirowane przez ngn #(!26)^=>+/26>?
streetster
źródło
1
Nie mogę się doczekać wyjaśnienia! Nie mam pojęcia, co 97tu się dzieje
Teleportacja Kozła
Kolejna 19 bajtów alternatywa
streetster
1
%[;26]->1%26%
ngn
1
1%26%+/26>?97!_dla 15
streetster
6

PowerShell , 55 52 bajtów

($args|% *per|% t*y|sort|gu|?{$_-in65..90}).count/26

Wypróbuj online!

Pierwsza próba, wciąż próbowanie przypadkowych pomysłów

EDYCJA: @Veskah wskazał, że ToUpper zapisuje bajt ze względu na zakres liczb, również usunął dodatkowe ()i spację

Ekspansja:
($args|% ToUpper|% ToCharArray|sort|get-unique|where{$_-in 65..90}).count/26

Zmienia ciąg na wszystkie małe litery, rozwija się do tablicy, sortuje elementy i wybiera unikalne litery (gu wymaga posortowanych danych wejściowych), zachowuje tylko znaki o wartości ascii od 97 do 122 (od a do z) od 65 do 90 (od A do Z), policz sumę i podziel przez 26 dla wyniku dziesiętnego

Sinusoid
źródło
Wielkie
litery
1
och, właśnie zauważyłem, że masz dodatkowe miejsce po -w.
Veskah
6

R , 47 bajtów

function(x)mean(65:90%in%utf8ToInt(toupper(x)))

Wypróbuj online!

Konwertuje na wielkie litery, a następnie na punkty kodowe ASCII i sprawdza wartości 65:90 odpowiadające A: Z.

Robin Ryder
źródło
1
Nie udaje się to, gdy na wejściu są cudzysłowy.
C. Braun
1
@ C.Braun Nie w moich testach ... Na przykład pierwszy przypadek testowy w TIO zawiera cytaty i daje poprawny wynik. Czy możesz podać przykład?
Robin Ryder
1
Nie do końca rozumiem, co zrobiłeś w części nagłówkowej w TIO, ale uruchomienie tylko powyższego kodu w interpreterie R. nie działa. Wygląda na to, że zmieniasz definicję, scanaby nie dzielić znaków cudzysłowu, tak jak domyślna?
C. Braun
1
@ C.Braun Rozumiem, dziękuję! Jawnie przekształciłem ją w funkcję (kosztem 3 bajtów) i myślę, że teraz jest OK.
Robin Ryder
4

Retina 0.8.2 , 45 bajtów

T`Llp`ll_
+`(.)(.*\1)
$2
.
100$*
^
13$*
.{26}

Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:

T`Llp`ll_

Małe litery i usuń znaki interpunkcyjne.

+`(.)(.*\1)
$2

Deduplikacja.

.
100$*

Pomnóż przez 100.

^
13$*

Dodaj 13.

.{26}

Liczba całkowita dzieli przez 26 i przelicza na dziesiętne.

Neil
źródło
Myślę, że siatkówka jest tutaj jedynym językiem, w którym dane wyjściowe są podawane w procentach!
Teleportacja Kozła
Och, niezła sztuczka z dodaniem pojedynczej 13 przed podzieleniem! Dlaczego nie pomyślałem o tym ...>.> To dałoby moją odpowiedź 44 bajty . Nadal jednak opuszczę moją poprzednią wersję.
Kevin Cruijssen
@TeleportingGoat Prawdopodobnie dlatego, że Retina jest również jedynym językiem spośród opublikowanych do tej pory, który nie ma dostępnego podziału dziesiętnego. Możliwy jest tylko (jednoargumentowy) podział na liczby całkowite.
Kevin Cruijssen
4

APL (Dyalog Extended) , 8 bajtów

⌹∘≤⍨⎕A∊⌈

Wypróbuj online!

luźno oparty na odpowiedzi Adáma

 duże litery

⎕A∊wektor boolowski (0 lub 1) o długości 26 wskazujący, które litery alfabetu angielskiego A znajdują się w ciągu

⌹∘≤⍨ średnia arytmetyczna, tj. podział macierzy argumentu i wektor all-1 o tej samej długości

ngn
źródło
3

Węgiel drzewny , 11 bajtów

I∕LΦβ№↧θι²⁶

Wypróbuj online! Link jest do pełnej wersji kodu. Dane wyjściowe są w postaci dziesiętnej (lub w 1przypadku pangrams). Wyjaśnienie:

  L         Length of
    β       Lowercase alphabet
   Φ        Filtered on
     №      Count of
        ι   Current letter in
      ↧     Lowercased
       θ    Input
 ∕          Divided by
         ²⁶ Literal 26
I           Cast to string
            Implicitly printed
Neil
źródło
3

Partia, 197 bajtów

@set/ps=
@set s=%s:"=%
@set n=13
@for %%c in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)do @call set t="%%s:%%c=%%"&call:c
@cmd/cset/an/26
@exit/b
:c
@if not "%s%"==%t% set/an+=100

Pobiera dane wejściowe na STDIN i generuje zaokrąglony procent. Wyjaśnienie:

@set/ps=

Wpisz ciąg.

@set s=%s:"=%

Rozwiń cytaty, ponieważ są to bóle głowy w Batch.

@set n=13

Zacznij od połowy litery do celów zaokrąglania.

@for %%c in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)do @call set t="%%s:%%c=%%"&call:c

Usuń kolejno każdą literę z ciągu. Wywołaj podprogram, aby sprawdzić, czy coś się zmieniło, ze względu na sposób, w jaki Batch analizuje zmienne.

@cmd/cset/an/26

Oblicz wynik jako procent.

@exit/b
:c

Rozpoczęcie podprogramu.

@if not "%s%"=="%t%" set/an+=100

Jeśli usunięcie litery zmieniło ciąg, zwiększ liczbę liter.

Neil
źródło
3

Pepe , 155 138 bajtów

rEeEeeeeeEREeEeEEeEeREERrEEEEErEEEeReeReRrEeeEeeeeerEEEEREEeRERrErEErerREEEEEeREEeeRrEreerererEEEEeeerERrEeeeREEEERREeeeEEeEerRrEEEEeereEE

Wypróbuj online! Dane wyjściowe są w postaci dziesiętnej.

Wyjaśnienie:

rEeEeeeeeE REeEeEEeEe # Push 65 -> (r), 90 -> (R)
REE # Create loop labeled 90 // creates [65,66,...,89,90]
  RrEEEEE # Increment (R flag: preserve the number) in (r)
  rEEEe # ...then move the pointer to the last
Ree # Do this while (r) != 90

Re # Pop 90 -> (R)
RrEeeEeeeee rEEEE # Push 32 and go to first item -> (r)
REEe # Push input -> (R)
RE RrE # Push 0 on both stacks, (r) prepend 0
rEE # Create loop labeled 0 // makes input minus 32, so the
    # lowercase can be accepted, since of rEEEEeee (below)
  re # Pop 0 -> (r)
  rREEEEEe REEee # Push item of (R) minus 32, then go to next item 
  RrE # Push 0 -> (R)
ree # Do while (R) != 0

rere # Pop 0 & 32 -> (r)
rEEEEeee # Remove items from (r) that don't occur in (R)
         # Remove everything from (r) except the unique letters
rE # Push 0 -> (r)
RrEeee # Push reverse pointer pos -> (r)
REEEE # Move pointer to first position -> (R)
RREeeeEEeEe # Push 26 -> (R)
rRrEEEEee reEE # Divide it and output it
niezdefiniowany
źródło
Ponieważ Pepe jest tylko 4 językiem poleceń, tak naprawdę ma 34,5 bajtów, jeśli kodujesz go jako 2 bity na RE?
Data wygasła
3

K (oK) , 19 bajtów

1%26%26-#(!26)^97!_

Wypróbuj online!

J , 30 bajtów

26%~26-u:@(97+i.26)#@-.tolower

Wypróbuj online!

Galen Iwanow
źródło
1
32!jest zbyt szerokie - to sprawia, że resztę treat ekspresji niektórych znaków interpunkcyjnych jak litery, na przykład spróbuj dodać: w przykładzie wejścia
NGN
@ngn Na początku nie testowałem interpunkcji. Dzięki za przypomnienie.!
Galen Iwanow
3

Retina , 57 46 35 bajtów

.
$L
[^a-z]

D`.
.
100*
^
13*
_{26}

-11 bajtów inspirowanych sztuczką @Neil polegającą na dodaniu jednych 13 przed podzieleniem .
Kolejne -11 bajtów dzięki @Neil bezpośrednio.
Zaokrągla (poprawnie) do całej liczby całkowitej.

Wypróbuj online.

57 46 40 bajtowa wersja, która działa z wyjściem dziesiętnym:

.
$L
[^a-z]

D`.
.
1000*
C`_{26}
-1`\B
.

Same -11 bajtów, a także dodatkowe -6 bajtów dzięki @Neil .

0.153842615.315.41000×unique_letters26

Wypróbuj online.

Wyjaśnienie:

Konwertuj wszystkie litery na małe:

.
$L

Usuń wszystkie nie-litery:

[^a-z]

Ujednolic wszystkie litery:

D`.

Zastąp każdą unikalną literę 1000 podkreślnikami:

.
1000*

Policz, ile razy pasuje do niego 26 sąsiadujących podkreślników:

C`_{26}

Wstaw kropkę we właściwym miejscu:

-1`\B
.
Kevin Cruijssen
źródło
1
.*Może być tylko .na oszczędność 1 bajt, ale można zaoszczędzić kolejne 10 bajtów za pomocą Deduplicate zamiast robić to ręcznie!
Neil
@Neil Ah, nie wiedziałem o D-budcie, dzięki! I nie jestem pewien, dlaczego użyłem .*zamiast .… Dzięki za -11 bajtów w obu wersjach! :)
Kevin Cruijssen
1
Do waszej informacji miałem nieco inne podejście do tej samej liczby bajtów: Wypróbuj online!
Neil
1
Dla wersji dziesiętnej znalazłem, że -1`\Bpasuje ona bezpośrednio do żądanej pozycji wstawiania.
Neil
@Neil Jeszcze raz dziękuję.
Kevin Cruijssen
3

Java 8, 62 59 bajtów

s->s.map(c->c&95).distinct().filter(c->c%91>64).count()/26.

-3 bajty dzięki @ OlivierGrégoire .

Wypróbuj online.

Wyjaśnienie:

s->                     // Method with IntStream as parameter and double return-type
  s.map(c->c&95)        //  Convert all letters to uppercase
   .distinct()          //  Uniquify it
   .filter(c->c%91>64)  //  Only leave letters (unicode value range [65,90])
   .count()             //  Count the amount of unique letters left
    /26.                //  Divide it by 26.0
Kevin Cruijssen
źródło
1
59 bajtów
Olivier Grégoire
@ OlivierGrégoire Thanks! Z jakiegoś powodu zawsze zapominam o c&95połączeniu c%91>64. Myślę, że już kilka razy zasugerowałeś mi golfa.
Kevin Cruijssen
Tak, już je zasugerowałem, ale to OK, nie martw się ;-)
Olivier Grégoire
O wiele dłuższy, ale bardziej zabawny: s->{int r=0,b=0;for(var c:s)if((c&95)%91>64&&b<(b|=1<<c))r++;return r/26.;}(75 bajtów)
Olivier Grégoire
3

Julia 1.0 , 34 bajty

s->sum('a':'z'.∈lowercase(s))/26

Używa wektoryzowanej wersji operatora ∈, sprawdzając zawartość ciągu w przypadku wszystkich znaków z zakresu od a do z. Następnie sumuje wynikowy BitArray i dzieli przez całkowitą liczbę możliwych liter.

Wypróbuj online!

TimD
źródło
Witamy i świetna pierwsza odpowiedź!
mbomb007
2

C, 96 bajtów

float f(char*s){int i=66,l[256]={};for(;*s;)l[1+*s++&~32]=1;for(;i<92;*l+=l[i++]);return*l/26.;}

Wypróbuj online!

Steadybox
źródło
2

Stax , 9 bajtów

░║üy$}╙+C

Uruchom i debuguj

rekurencyjny
źródło
1
Możesz zdjąć bajt z rozpakowanej wersji, upuszczając ją ui używając |b, ale oszczędności znikają podczas pakowania. Mogę mieć 8 bajtów, ale tłumacz online jest dziwny i zawiera błędy.
Khuldraeseth na'Barya
@ Khuldraesethna'Barya: Ładne znalezisko. Myślę, że błąd jest prawdopodobnie mutacją tablicową. Widzę teraz niektóre z tych zachowań. Praca nad minimalnym repro ...
rekurencyjny
Oto reprodukcja problemu, z którym chyba masz problem |b. Niepoprawnie mutuje swój operand, zamiast robić kopię. Utworzyłem błąd github dla tego błędu. github.com/tomtheisen/stax/issues/29 Jako obejście tego problemu |bbędzie działać poprawnie za pierwszym razem. Następnie może być konieczne ponowne załadowanie strony. Jeśli znalazłeś inny błąd, jeśli możesz zapewnić reprodukcję, prawdopodobnie będę w stanie go naprawić.
rekurencyjny
Stax 1.1.4, 8 bajtów. Instrukcje: rozpakuj, włóż vna początku, włóż |bpo Va, uruchom, usuń pierwszy v, usuń |b, przepakuj. Tak, to jest błąd, który znalazłem.
Khuldraeseth na'Barya
@ Khuldraesethna'Barya: Wydałem 1.1.5 i uważam, że ten błąd został już naprawiony. Możesz dać mi znać, jeśli nadal masz problemy. Dzięki.
rekurencyjny
2

Galaretka , 8 bajtów

ŒuØAe€Æm

Wypróbuj online!

Wyjaśnienie

Œu       | Convert to upper case
  ØAe€   | Check whether each capital letter is present, returning a list of 26 0s and 1s
      Æm | Mean
Nick Kennedy
źródło
2

Python 3 , 51 49 bajtów

51 -> 49 bajtów, dzięki alexz02

lambda s:len({*filter(str.isalpha,s.lower())})/26

Wypróbuj online!

ruohola
źródło
49 bajtówlambda s:len({*filter(str.isalpha,s.lower())})/26
alexz02
@ alexz02 Dziękujemy! :)
ruohola
1

Japt , 9 bajtów

;CoU Ê/26

Spróbuj

;CoU Ê/26     :Implicit input of string U
;C            :Lowercase alphabet
  oU          :Remove the characters not included in U, case insensitive
     Ê        :Length
      /26     :Divide by 26
Kudłaty
źródło
1

C, 95 bajtów

f(char*s){int a[256]={},z;while(*s)a[*s++|32]=1;for(z=97;z<'z';*a+=a[z++]);return(*a*100)/26;}

(uwaga: zaokrągla w dół)

Alternatywna wersja ze znakiem dziesiętnym (95 bajtów):

float f(char*s){int a[256]={},z;while(*s&&a[*s++|32]=1);for(z=97;z<'z';*a+=a[z++]);return*a/26.;}

Pożycza to część odpowiedzi @Steadybox.

Anonimowy
źródło
1
Witamy! Dobra pierwsza odpowiedź. Może być pomocne dla osób czytających twoją odpowiedź, jeśli podasz krótkie wyjaśnienie swojego kodu lub wersji bez golfisty. Pomocne może być również podanie linku do tłumacza online z kodem, który można uruchomić (przykłady można znaleźć w innych odpowiedziach). Wielu używa TIO, a tutaj jest interpreter gcc
mbomb007