W języku angielskim rzeczowniki mogą przybierać dwie różne formy w zależności od tego, czy są w liczbie pojedynczej (jedna) czy mnogiej (cokolwiek innego). Na przykład powiedzielibyśmy „1 pies”, ale „2 psy”, „0 psów”, „57 psów” i tak dalej.
W języku rosyjskim istnieją trzy kategorie. Zamiast „1 pies, 2 psy, 5 psów”, w języku rosyjskim byłoby to „1 собака, 2 собака, 5 собак”.
Kategorie są podzielone zgodnie z następującą logiką:
- „Liczba pojedyncza”: używana dla 1 i dowolnej liczby kończącej się na 1, z wyjątkiem liczb kończących się na 11.
- Przykłady: 1 собака, 21 собака, 101 собака
- „Niewiele”: używane dla 2, 3 i 4 oraz dowolnej liczby kończącej się na 2, 3 lub 4, z wyjątkiem liczb kończących się na 12, 13 i 14.
- Przykłady: 2 собаки, 3 собаки, 4 собаки, 32 собаки, 43 собаки, 104 собаки
- „Wiele”: wszystko, co nie jest uważane za „Liczba pojedyncza” lub „Mało”.
- Przykłady: 0 lat, 5 lat, 11 lat, 13 lat, 25 lat, 111 lat, 114 lat, 114 lat
Wyzwanie
Biorąc pod uwagę liczbę całkowitą z zakresu [0, 1000], zwróć, 1
jeśli należy do kategorii „liczba pojedyncza”, 2
jeśli należy do kategorii „kilka” i 5
jeśli należy do kategorii „wiele”.
Twój program może być funkcją lub może korzystać ze STDIN. Możesz wydrukować do STDOUT lub zwrócić wartość z funkcji
Jest to wyzwanie dla golfa , więc wygrywa rozwiązanie z najmniejszą liczbą bajtów.
źródło
1
,2
oraz5
w szczególności? Ponadto, dlaczego nie mogę używać kodów wyjścia?Odpowiedzi:
Python 2 , 36 bajtów
Wypróbuj online!
Ta sama długość arytmetycznie:
Najpierw spójrzmy na prostszy kod, który nie uwzględnia nastolatków.
Chcemy tutaj odwzorować cyfrę tej cyfry na wyjście, które działa podobnie
Ale zamiast wziąć
n
modulo 10 (%10
), możemy to zrobićn%-10
, który odwzorowuje interwały,[-9..0]
dając resztki:To obiecujące, ponieważ dwie pierwsze pozycje
0
i-9
są daleko od siebie, a oni muszą być wysyłane do różnych wyjść. Ponadto,-10
może być skrócony do~9
.Odtąd dzielenie podłogi
/-3
daje 3 kawałki z właściwym punktem początkowymAby uzyskać pożądany wynik, musimy teraz tylko zmapować
0->5, 1->5, 2->2, 1->1
, co robimy z wyborem ciągu'5521'[_]
.Teraz potrzebujemy również liczb kończących się od 11 do 15, aby zawsze podawać
5
. Najpierw robimy to, wykrywając, czy jest to cyfra dziesiątek1
. Biorącn/10
do usunięcia ostatnią cyfrę, aplikujemy%~9
jak poprzednio, aby uzyskać wynikidla odpowiednich cyfr końcowych. Cyfra 1, którą chcemy wykryć, jest odwzorowana na wartość ekstremalną
-9
. Dzielenie podłogi-9
zmienia się na 1, a wszystko inne na 0.Wreszcie, sprawiamy, że ten wskaźnik
1
zawsze daje wynik 5. Robi się to poprzez przesunięcie bitowe wynikun%~9/-3
prawo o wskaźnik. Wynik0,1,2,3
zawsze przesuwa bit w prawo do 0 lub 1, co daje wynik 5 zgodnie z potrzebami.źródło
Python 2 , 45 bajtów
Wypróbuj online!
źródło
(s+'5'*10+s*9)
110 znaków?Perl 5 , 26 bajtów
25 bajtów kodu +
-p
flaga.Wypróbuj online!
Jeszcze jeden bajt
$_=/(?<!1)[1-4]$/?2-/1$/:5
.Objaśnienia: (w wersji 27-bajtowej; 26 jest dość symetryczny)
Zarówno „liczba pojedyncza”, jak i „kilka” kończą się na „nie 1, a po nim cyfra od 1 do 4” (testowane na
(?<!1)[1-4]$/
). W takim przypadku wynikiem jest 2, minus 1, jeśli liczba kończy się na 1 (2-/1$/
). W przeciwnym razie wynik, jeśli 5.źródło
JavaScript (ES6),
5349484039383736 bajtówSpróbuj
źródło
1[1-4]
może być1.
i/1$/.test(s)
może być+s%10==1
. Nigdy nie zapomnij o jednym+
!+
w ogóle potrzebował jedności ,s%10
powinien konwertowaćs
na liczbę.n%10
->n%5
zapisuje bajtGalaretka ,
1918 bajtówŁącze monadyczne przyjmujące i zwracające nieujemne liczby całkowite.
Wypróbuj online!lub zobacz trzy grupy od 0 do 1000 włącznie w tym zestawie testów .
W jaki sposób?
źródło
05AB1E ,
3819 bajtówUżywa sztuczki indeksu z odpowiedzi pytona Rod
Wypróbuj online!
Wyjaśnienie
źródło
PHP> = 7,1, 44 bajtów
Wersja online
źródło
<?=$argn[-2]!=1&($m=($argn+9)%10)<4?2-!$m:5;
.Zestaw MCxxxx , 123 bajty
Uwaga:
TiO nie obsługuje tego języka, który jest używany w grze Zachtronics Shenzhen I / O , więc nie ma łącza do przetestowania tego.
Wyjaśnienie:
Ta funkcja pobiera dane wejściowe przez port XBus x0 i dane wyjściowe przez port x1. Jest zbyt długi, aby wykonać go na MC4000, ale ładnie pasuje do pamięci MC6000. Porty XBus, dla osób nieznanych, umożliwiają przesyłanie dyskretnych pakietów danych cyfrowych.
Jedna informacja, która może być pomocna w czytaniu tego: w zestawie MCxxxx instrukcje testowe ustawiają flagę wskazującą, którą gałąź należy podjąć. Linie rozpoczynające się od
+
są wykonywane tylko wtedy, gdy ostatni test zwrócił wartość true, a linie rozpoczynające się od-
są wykonywane tylko wtedy, gdy test był fałszywy.Linia po linii:
Uwaga na temat punktacji: zestaw MCxxxx nie ma funkcji jako takich, ale jest to tak blisko funkcji, jak to tylko możliwe - to program, który pasuje do jednego węzła wykonawczego, pobiera dane wejściowe przez jeden port i dane wyjściowe przez inny. W rezultacie zdobyłem to jak funkcję (tj. Bez zliczania bajtów niezbędnych do utworzenia prawidłowego pliku emulatora MCxxxx).
źródło
Siatkówka ,
2521 bajtówWypróbuj online! -4 bajty dzięki Neilowi.
źródło
!`.$
do wyodrębnienia ostatniej cyfry. Wypróbuj online!Haskell ,
6258 bajtówWypróbuj online!
Wyjaśnienie
To buduje następujący ciąg:
5122255555555555555551222555555122255555512225555551222555555122255555512225555551222555555122255555 ...
Która jest tabelą, w której komórka
n
zawiera odpowiedź nanth
liczbę. Tabela jest poprawna tylko dla pierwszych 100 elementów, stądmod
.źródło
f n|s<-"5122255555"=(s++('5'<$[0..9])++cycle s)!!mod n 100
Scala, 110 bajtów
źródło
Turtlèd, 35 bajtów
Wypróbuj online!
Ta funkcja wymaga, aby dane wejściowe zaczynały się od>, co, jak sądzę, jest w porządku, ponieważ python2 używa danych wejściowych semi regularnie, a to wymaga cudzysłowów.
Wyjaśnienie:
źródło
>
jakiś cel w Turtled, czy jest to dowolna postać, którą dodałeś do wkładu?