Znak liczby całkowitej do oceny

30

Biorąc pod uwagę dodatnią liczbę całkowitą (0 i więcej, bez maksimum), zamień ją na ocenę zgodnie z następującymi zasadami:

A = 100+  
B = 90 - 99  
C = 80 - 89  
D = 70 - 79  
E = 60 - 69  
F = 59 and less.

To wydawało się trochę nudne, więc zrób ocenę a, +jeśli jest to 7,8 lub 9, a a -jeśli to 0,1 lub 2. Zignoruj ​​to dla przypadków F i A.

Przykład:

Wkład:

65

Wydajność:

E

Przypadki testowe:

0  -> F
20 -> F
65 -> E
72 -> D-
75 -> D
80 -> C-
99 -> B+
102 -> A
864 -> A

Brak spacji końcowych. Jedna nowa linia po wyjściu jest w porządku, ale zachowaj spójność. Funkcje i pełne programy są w porządku.

To jest kod golfowy, więc wygrywa najkrótszy kod. Inspiracją było pytanie Ask Ubuntu: Jak napisać skrypt powłoki, aby przypisać oceny literowe do zakresów liczbowych? . Odpowiedzi są w bash i python, więc nieco spoilery.


Tabela liderów:

Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.

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 Njest 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

Tim
źródło
1
Czy nie byłoby A+i A-? Nie rozumiem, dlaczego je ignorujemy.
ASCIIThenANSI
1
@ASCIIThenANSI sprawia, że ​​bardziej interesujące są wyjątki, a dla A nie ma maksimum, więc nie+
Tim
1
Ta tablica klasyfikacyjna ma błąd: wersja ryby jest starsza, a moja odpowiedź jest wcześniej.
Ismael Miguel
@IsmaelMiguel Zostało napisane, gdy najwcześniejszy post nie był jeszcze domyślnym przerywnikiem remisów (więc w ogóle nie zamawia remisów). Spróbuję to naprawić w pewnym momencie (prawdopodobnie nie dla tego wyzwania, ale przynajmniej źródło meta).
Martin Ender
@ MartinBüttner Właśnie zwróciłem na to uwagę.
Ismael Miguel

Odpowiedzi:

21

Python 2, 72 70 62 bajtów

lambda n:"FA"[n>59:1+n/100]or chr(75-n/10)+"+-"[(n+3)%10/3::2]

Jest to anonimowa funkcja, która pobiera liczbę całkowitą i zwraca ocenę jako ciąg znaków.

(podziękowania dla @ MartinBüttner, @grc i @TheNumberOne za wskazówki)

Sp3000
źródło
4
"EDCB"[n/10-6]->chr(75-n/10)
grc
Cóż za sprytny sposób na wybranie postaci, która może być pusta!
xnor
11

CJam, 34 33 32 bajty

riAmd)4/"- +"=S-\Ae<5e>_~'L+o5%<

OK, próbowałem już wielu podejść i nie jestem w stanie uzyskać tego poniżej 33, więc oto wyjaśnienie:

ri                                 e# Read the input and convert to integer
  Amd                              e# Take divmod of the input with 10. This leaves the
                                   e# number/10 and number%10 on stack
     )4/                           e# Increment the mod by 1 and integer divide by 4.
        "- +"=S-                   e# This converts 0,1,2 to 0 and 7,8,9 to 2. Pick - or +
                                   e# respectively and remove space in case of 3,4,5 and 6
                \Ae<5e>            e# To the divisor by 10 scope it to range of [5,10]
                       _~          e# Take a copy and do number * -1 - 1
                         'L+       e# Add it to char L. This gets us the required grade
                            o      e# Output the grade. This removes it from stack
                             5%    e# We now have scoped divisor on stack. Do mod with 5
                               <   e# Both 5 and 10 will return 0, in which case, we don't
                                   e# want the + or -. So we do a substr(0, 0).
                                   e# 5 represents F and 10, A. For others, it will do
                                   e# substr(0,X) where X > 0. Since the string is only
                                   e# 1 char long, it doesn't affect at all.

AKTUALIZACJA : 1 bajt zapisany dzięki wskaźnikowi Dennisa

Wypróbuj online tutaj

Optymalizator
źródło
Czego szrobić?
Dennis
@Dennis konwertuje char + / - / spację do łańcucha dla ostatniego<
Optimizer
To nie powinno być konieczne. Character String -popycha ciąg.
Dennis
@Dennis Ah, masz rację. Myślę, że w przypadku niektórych poprzednich wersji użycie było inne.
Optymalizator
8

Siatkówka, 43 + 15 = 58 bajtów

...+
A
.[012]
$&-
.[789]
$&+
^9.
B
^8.
C
^7.
D
6.
E
\d.*
F

Retina to język wyrażeń regularnych stworzony przez Martina Büttnera, w którym nieparzyste pliki są wyrażeniami regularnymi do dopasowania, a pliki o liczbach parzystych są tym, co należy zastąpić. Każda linia to osobny plik, więc do każdego dodatkowego pliku dodałem 15 bajtów.

Wyjaśnienie

Zaczyna się od zrobienia czegokolwiek z 3 lub więcej cyframi A. Dodaje, -jeśli jest to dwucyfrowa liczba kończąca się na 0, 1 lub 2, a +jeśli kończy się na 7, 8 lub 9. Liczby są następnie mapowane na ich ocena (np. liczba rozpoczynająca się od 9 otrzymuje B). Każda pozostała liczba jest automatycznie oznaczona literą F. Niestety, ;`musi zostać dodana do wszystkich oprócz ostatniego wyrażenia regularnego, aby stłumić pośrednie wyjście. Aktualizacja: wersja 0.5.0 ma domyślnie wyłączone wyjście pośrednie, co pozwala mi zaoszczędzić kilka bajtów.

NinjaBearMonkey
źródło
Czy jesteś pewien, że nie wyprowadza on + i - w przypadku F?
Tim
1
@Tim Nie powinno tak być, ponieważ \d.*dopasowuje i zastępuje cały ciąg znaków +.
NinjaBearMonkey
Ahh dobrze - teraz to widzę! :)
Tim
8

C, 99 bajtów

Jestem tu nowy, mam nadzieję, że przestrzegam zasad.

char b[3];char*f(n){b[1]=0;n<60?*b=70:n>99?*b=65:(*b=75-n/10,b[1]=n%10<3?45:n%10>6?43:0);return b;}

Ta funkcja przyjmuje znak jako parametr i zwraca ocenę jako ciąg zakończony znakiem NULL.

Wyjaśnienie

Dodano białe znaki:

char b[3];

char *f(n) {
    b[1] = 0;
    n<60 ? *b = 70 :
    n>99 ? *b = 65 :
    (
        *b = 75 - n / 10,
        b[1] = n % 10 < 3 ? 45 : n % 10 > 6 ? 43 : 0
    );

    return b;
}

Zmienne globalne są automatycznie inicjowane na zero, więc b jest wypełnione zerami. Ponieważ dotykane są tylko pierwsze dwie postacie, musimy się martwić o wstawienie NULL wb [1], jeśli ocena ma tylko jedną postać. Ten NULL jest wstawiany na samym początku funkcji. Parametr n jest domyślnie int. Jeśli ocena jest mniejsza niż 60, to jest ustawiona na „F”, jeśli jest większa niż 99, jest ustawiona na „A”. W innych przypadkach ocena bazowa jest podana przez 'E' - (n - 60) / 10, co upraszcza 75 - n / 10.n % 10pobiera cyfrę jednostki znaku. Jeśli jest mniejsza niż 3, to dołącza się a -, jeśli jest większa niż 6, dodaje się a +, w przeciwnym razie b [1] jest zerowane (co już było).

Przypadki testowe

#include <stdio.h>

char b[3];char*f(n){b[1]=0;n<60?*b=70:n>99?*b=65:(*b=75-n/10,b[1]=n%10<3?45:n%10>6?43:0);return b;}

int main() {
    printf("  0 -> %s\n", f(0));
    printf(" 20 -> %s\n", f(20));
    printf(" 65 -> %s\n", f(65));
    printf(" 72 -> %s\n", f(72));
    printf(" 75 -> %s\n", f(75));
    printf(" 80 -> %s\n", f(80));
    printf(" 99 -> %s\n", f(99));
    printf("102 -> %s\n", f(102));
    printf("864 -> %s\n", f(864));

    return 0;
}

Output:
  0 -> F
 20 -> F
 65 -> E
 72 -> D-
 75 -> D
 80 -> C-
 99 -> B+
102 -> A
864 -> A
Andrea Biondo
źródło
Idealnie :) Nic złego.
Tim
różnica między twoim kodem a moim to jedno słowo „printf”, które powinno zaoszczędzić więcej niż 3 bajty na wypadek zignorowania :)
Abr001am
7

Pyth, 33 bajty

+C-75K@S[/QTT5)1<-@"- +"/heQ4d%K5

Wypróbuj online: pakiet demonstracyjny lub testowy

Wyjaśnienie:

                                     implicit: Q = input
        [/QTT5)                      create the list [Q/10, 10, 5]
       S                             sort
      @        1                     take the element in the middle
     K                               store in K (this results in a number between 5 and 10)
  -75K                               75 - K
 C                                   char with ASCII-value ...
                  @"- +"/heQ4        "- +"[(Q%10 + 1) / 4]
                 -           d       remove spaces
                <             %K5    slice [:K%5]
+                                    add these two chars and print
Jakube
źródło
7

> <> (Ryba), 78 71 bajtów

iii0)?/:0({:'6'(@@+?/'{'01.
;$-o:'4'(?\'7'(?;'+'o
 ;o'A'\   \'-'o;o'F'\

Metoda:

  • Odczytujemy współrzędne pierwszych 3 znaków x,y,zz wejścia. Jeśli znak nie jest obecny, wartość jego zmiennej będzie -1niejawna. ( ord(c)zaznaczy punkt kodowy znaku c)
  • Jeśli z > 0(3 cyfry) wydrukuj Ai wyjdź.
  • Jeśli x < ord('6') or y < 0(wprowadź <60) wydrukuj Fi wyjdź.
  • Wydrukuj znak za pomocą punktu kodowego 123 - x.
  • Jeśli y < ord('4') print-` i wyjdź.
  • Jeśli y > ord('6') print+ `i wyjdź.
  • Wyjście.
randomra
źródło
7

C, 67 65

Zaskakujące jest to dość zbliżone do rozwiązania python.

f(i){printf(i<60?"F":i>99?"A":"%c%s",75-i/10,"-\0+"+(i%10+1)/4);}

Aby jednak ten program doszedł do tak krótkiego czasu, trzeba było poświęcić:

  • Jeśli drukowany jest an Flub an, nawet nie patrzy na pozostałe przekazane argumenty. To dość paskudny hack.Aprintf

  • Jeśli (i%10+1)/4wartość jest równa 1(nie +lub -powinna być dołączona do oceny), %sformatyzator otrzymuje wskaźnik do \0bajtu, więc nic nie jest drukowane. Również dość zabawne, ponieważ nie wiedziałem, że możesz wziąć adres zindeksowanego łańcucha literału. (np. &"string"[i]) ( edycja : "string"+ijest jeszcze krótsza ! Dzięki @nutki)

Tutaj wynik programu dla liczb od 57 do 102. Zrobiłem go jako zrzut heksadecymalny, więc możemy być pewni, że nie \0zostały wydrukowane żadne dziwne bajty.

% seq 44 115 | xargs -n1 ./grade | xxd
0000000: 4646 4646 4646 4646 4646 4646 4646 4646  FFFFFFFFFFFFFFFF
0000010: 452d 452d 452d 4545 4545 452b 452b 452b  E-E-E-EEEEE+E+E+
0000020: 442d 442d 442d 4444 4444 442b 442b 442b  D-D-D-DDDDD+D+D+
0000030: 432d 432d 432d 4343 4343 432b 432b 432b  C-C-C-CCCCC+C+C+
0000040: 422d 422d 422d 4242 4242 422b 422b 422b  B-B-B-BBBBB+B+B+
0000050: 4141 4141 4141 4141 4141 4141 4141 4141  AAAAAAAAAAAAAAAA

Zastosowana mainmetoda:

main(c,v)char**v;{f(atoi(v[1]));}
MarcDefiant
źródło
1
&"string"[i]jest niepotrzebny, ponieważ odpowiada krótszemu, "string"+idzięki któremu można zapisać 2 bajty.
nutki
muszę być obiektywny i upomnieć się o to :) gratulacje, pobiłeś wszystkie rekordy C
Abr001am
6

CJam, 41 39 37 34 bajtów

To zdecydowanie za długo, ale nie sądzę, żebym teraz grał w golfa.

qiAmd'K@Ae<5e>:X-X5%g@)4/"- +"=*S-

Sprawdź to tutaj. Lub uruchom tutaj wszystkie przypadki testowe.

Trzy bajty zapisane przez Optymalizator.

Wyjaśnienie

(Nieco przestarzałe)

qi                                    e# Read input and convert to integer.
  'K1$                                e# Push the character K, then copy the input.
      A/                              e# Divide by 10.
        Ae<5e>                        e# Clamp the result to the range 5..10.";
              -                       e# Subtract from K to get the grade.
               _'Am                   e# Duplicate get difference to A.
                   5%g                e# Check that its neither 0 (A) nor 5 (F).
                      @               e# Pull up the other copy of the input.
                       A%)4/          e# ((i % 10) + 1) / 4
                            "- +"=    e# Use that to select -, space, or +.
                                  *   e# Multiply it with the earlier boolean so that
                                      e# it vanishes for A and F.
                                   S- e# Remove the space if there is one.
Martin Ender
źródło
6

GNU sed, 73 + 1 = 74 bajty

+ 1 dotyczy parametru -r.

s/^[1-5]?.$/F/
s/.{3,}/A/
s/[7-9]$/+/
s/[3-6]$//
s/[0-2]$/-/
y/9876/BCDE/
Cyfrowa trauma
źródło
5

Python 2, 94 88 84 69 bajtów

lambda g:g>99and'A'or[chr(75-g/10)+'-+'[g%10>2:1-(g%10>6)],'F'][g<60]
Numer jeden
źródło
5

JavaScript (ES6), 66 bajtów

Prosto.

F=n=>n<60?'F':n>99?'A':'EDCB'[n/10-6|0]+(n%10>6?'+':n%10<3?'-':'')

// TEST (in Firefox)

for(i=0;i<111;i++)document.write(i+'='+F(i)+' ')

edc65
źródło
4

R, 107 105 99 bajtów

Obawiam się, że to niezbyt dobry wysiłek, ale spróbuję zagrać w golfa później.

cat(LETTERS[11-(r=min(max(scan(),59),100))%/%10],if(r>59&r<100)c('-','','+')[(r%%10+1)/4+1],sep='')

Edytuj Upuściłem kilka ifs. Naprawiono skrzynkę i nieprawidłowy wynik dla 100. Teraz pozbyć się ifelses . Pozbyłem się ifelses.

MickyT
źródło
Myślę, że LETTERSraczej chcesz letters.
Alex A.
3

Perl, 66 62 bajtów

To może być bardziej golfa. Również inny sposób może być lepszy.

$_=$_>99?A:$_<60?F:s/\d$/$&>6?"+":$&<3?"-":""/re;y/9876/BCDE/

+1 dla -p

Biegnij z:

echo 72 | perl -pE'$_=$_>99?A:$_<60?F:s/\d$/$&>6?"+":$&<3?"-":""/re;y/9876/BCDE/'
hmatt1
źródło
Dlaczego nie użyć -pi upuścić say?
ThisSuitIsBlackNot 10'15
@ThisSuitIsBlackNie dziękuję! Zaktualizowano
hmatt1
2

JavaScript (ES6), 78 79 bajtów

To naprawdę nie jest najmądrzejsza opcja, ale zrobiłem, co mogłem.

F=n=>'FEDCBA'[n[2]?5:n<60?0:n[0]-5]+(n[2]||n<60?'':'-+\n'[n[1]<3?0:n[1]>6?1:2])

Po prostu zdaj ocenę jako ciąg , a ona zwróci jej literę oceny.

Część smyczkowa jest bardzo ważna jest .

Możesz sprawdzić walizkę testową tutaj:

console._RELAY_TO_DOC=true;

//non-es6 version:

function F(n){return 'FEDCBA'[n[2]?5:n<60?0:n[0]-5]+(n[2]||n<60?'':'-+\n'[n[1]<3?0:n[1]>6?1:2])}



var testcases=[0,20,65,72,75,77,80,90,99,100,102,180,1000],
    results={};

for(var i in testcases)
{
  results[testcases[i]]=F(testcases[i]+'');
}

console.log(results);
<script src="http://ismael-miguel.github.io/console-log-to-document/files/console.log.min.js"></script>

Jeśli dodatkowe miejsce po literze nie jest dozwolone, chętnie go usunę. Nie było! To zwiększyło mój kod o 1 bajt, ale nic (zbyt) poważnego.

Ismael Miguel
źródło
1
@Tim Naprawiono. Mam nadzieję, że to wystarczy. Cytując siebie: „ One newline after output is fine, but keep it consistent.”. Myślę, że to wystarczająco spójne.
Ismael Miguel
2

C #, 143 127 112 88 bajtów

string g(int n){return n>=100?"A":n<=59?"F":(char)(75-n/10)+(n%10>6?"+":n%10<3?"-":"");}

Próbowałem być sprytny, modyfikując liczby ASCII, ale wygląda na to, że nie byłem sam!

Dzięki Timowi za porady na temat list zamiast ifs.

Dzięki DarcyThomas za wskazanie, że mogłem użyć zagnieżdżonych operatorów trójskładnikowych.

Transmisja
źródło
1
Czy nie możesz zmniejszyć liczby ifs za pomocą list?
Tim
Nie jestem pewien, co masz na myśli mówiąc o listach, czy mógłbyś coś wyjaśnić?
Transmisja
W Pythonie mogę to zrobić: [item1,item2][condition]. Jeśli warunek jest spełniony, to daje 2-szy przedmiot, a Fałsz pierwszy.
Tim
Dobry pomysł! Dodano to.
Transmisja
Myślę, że można by użyć trójskładnikowych instrukcji, np. return <condition> ? <true result> : <false result>Uwaga: można je także zagnieżdżaćreturn <condition> ? <true result> : <condition> ? <2nd true result> : < 2nd false result>
DarcyThomas
1

Haskell, 78 bajtów

Pierwszy wiersz wydaje się marnotrawny, kosztuje 14 bajtów, ale bez niego nie mogłem znaleźć krótszej wersji.

(#)=replicate
a="A":a
f=(!!)$60#"F"++[g:s|g<-"EDCB",s<-3#"-"++4#""++3#"+"]++a

Wyjaśnienie

Operator #jest skrótem do tworzenia n kopii drugiego argumentu. Lista ajest nieskończoną listą ciągów „A”. Funkcja findeksuje do listy wszystkich ocen dla n = 0,1, ... Zrozumienie listy buduje „środkową część” tej listy (oceny od E do B); gjest pojedynczym Char, który jest dołączony do ciągus (który może być pusty).

Stosowanie

ghci> map f [0,20,65,72,75,80,99,102,864]
["F","F","E","D-","D","C-","B+","A","A"]
użytkownik40671
źródło
1

C, 102 bajty

int f(int h){int b,c;printf("%c%c",b?65:!c?70:75-h/10,!(b=h>99)*(c=h>59)*(((h%10<3)*45+(h%10>6)*43)));

}

Stosowanie

#include <stdio.h>
int f(int );
int main(){
    int c;
    scanf("%d",&c);
    f(c);
}
Abr001am
źródło
Brakuje części + i -.
Optymalizator
ah ok .... tęsknię
Abr001am
za długo :( ....
Abr001am
1

dc, 52

[Anq]sa[Fnq]sf[q]sn16o?A~rd9<ad6>f20r-n1+4/d1=n45r-P

Wydajność

$ for i in {0,20,65,72,75,80,99,102,864}; do printf "{%s -> %s} " $i $(dc -e '[Anq]sa[Fnq]sf[q]sn16o?A~rd9<ad6>f20r-n1+4/d1=n45r-P' <<< $i); done
{0 -> F} {20 -> F} {65 -> E} {72 -> D-} {75 -> D} {80 -> C-} {99 -> B+} {102 -> A} {864 -> A} $ 
$ 
Cyfrowa trauma
źródło
1

TI-Basic, 79 74 76 bajtów

Input N
If N>99
105->N
sub("FFFFFFEDCBA",1+int(N.1),1
If Ans!="F
Ans+sub("---    +++",1+fPart(N.1),1
Ans
Timtech
źródło
To nie działa dla liczb mniejszych niż 10.
lirtosiast
Niezły chwyt, Tom, brakowało1+
Timtech
Ma także (niewidoczne) końcowe spacje, gdy nie ma znaku + ani -.
lirtosiast
1

TI-BASIC, 69 68 66 bajtów

.1Ans
sub("F?E-E+D-D+C-C+B-B+A",1+2max(0,min(9,int(2Ans)-11)),int(e^(Ans<10 and Ans≥6 and iPart(2.2-5fPart(Ans

TI-BASIC nie jest dobry do manipulacji ciągami.

Wprowadź dane na ekranie głównym kalkulatora w postaci [liczba]: [nazwa programu].

Sformatowany:

.1Ans
sub(                      //Syntax for the substring command is sub(string, index, length)

    "F?E-E+D-D+C-C+B-B+A"                  //String that encodes possible grades

    ,1+2max(0,min(9,            ))         //Starts at "F" if input <60, "A" if >=100
                   int(2Ans)-11           //(Input-55)/5, so starts at "E" from 60 to 64,
                                          //second E from 65-69, D from 70 to 74, &c.

    ,int(e^(                                   //length 1 if false, 2 (includes +/-) if true
            Ans<10 and Ans≥6 and               //grade between 60 and 100        
                                 iPart(               //1 if abs. val. of below >= 0.2
                                       2.2-5fPart(Ans  //2.2-.5(last digit)    

Prawdopodobnie można to jeszcze pograć w golfa.

lirtosiast
źródło
0

C #, 82 bajty

Func<int,string>g=s=>s>99?"A":s<60?"F":(char)(75-s/10)+(s%10<3?"-":s%10>6?"+":"");

Oto skrzypce z niektórymi przypadkami testowymi.

Blorgbeard
źródło
0

JavaScript (ES6), 86 83 bajtów

To, co naprawdę zjada postacie, to String.fromCharCodewarunek +/- ... Podejrzewam, że istnieje sprytny sposób na skrócenie co najmniej jednego z nich.

f=n=>n>99?'A':n<60?'F':String.fromCharCode(75.9-n/10|0)+(n%10<3?'-':n%10>6?'+':'');
vvye
źródło
Jeśli chcesz mieć krótki kod, String.fromCharCode jest prawie zawsze bezużyteczny. Użyj indeksowania ciągów (zobacz inne odpowiedzi na javascript)
edc65
W każdym razie, ~~(.1*-n+75.9)->75.9-n/10|0
edc65
@ edc65 Dzięki za radę golfa! Będę pamiętać o indeksowaniu łańcuchów na następną okazję.
vvye
0

PHP 5.5, 73 bajty

Jeszcze raz nie najkrótszy.

Ale to działa!

<?=($n=$_GET[n])<59?F:($n>99?A:'BCDE'[$n[0]-6].'+-'[$n[1]<3?1:2*$n[1]<5])

Sklasyfikowałem go pod PHP5.5, a nie tylko PHP, ponieważ korzysta ze składni, która jest poprawna tylko dla PHP5.5 i PHP5.6.

O wykreślaniu łańcuchów i tablic można przeczytać w instrukcji:
http://php.net/manual/en/migration55.new-features.php

Ismael Miguel
źródło
0

Perl, 52

#!perl -p
$_=$_>99?A:$_<60?F:"$_"^"s";y/JK7890-6/BC+++\-\--/d
nutki
źródło
0

Ruby, 58 bajtów

Nie mogłem uwierzyć, że nie ma tu rubinów. Po zastanowieniu jest dość podobny do niektórych, które już tu są, ale i tak:

->x{x<60?'F':x>99?'A':(75-x/10).chr+'+-'[(x+3)%10/3].to_s}

Wypróbuj tutaj

RichieAHB
źródło
0

Excel, 100 bajtów

=IF(A1<60,"F",IF(A1>99,"A",MID("EDCB",INT(A1/10)-5,1)&IF(MOD(A1,10)<3,"-",IF(MOD(A1,10)>6,"+",""))))
Wernisch
źródło