Napisz program, który akceptuje pojedyncze małe litery jako dane wejściowe i wypisuje liczbę par liter, które mają taką samą liczbę liter w słowie jak w alfabecie.
Na przykład w słowie „natura” mamy 4 pary:
- nr: ponieważ między słowem (a, t, u) są trzy litery i trzy litery między nimi w alfabecie (o, p, q)
- ae: ponieważ są trzy litery między słowem (t, u, r) i trzy litery między nimi w alfabecie (b, c, d)
- tu: ponieważ nie ma między nimi liter i nie ma liter w alfabecie
- tr: ponieważ jest jedna litera między nimi w słowie (u) i jedna litera między nimi w alfabecie (ach)
Ponieważ są cztery pary, wynik w tym przypadku powinien wynosić 4.
rjjjnfffr
? Czy byłaby to jedna para (nr
) czy dwie pary (nr
irn
)? A coabzab
? Czy to dwie paryab
czy jedna?Odpowiedzi:
Pyth, 19 bajtów
Wypróbuj online: demonstracja
Wyjaśnienie:
źródło
R, 110 bajtów
Degolfed:
źródło
Oktawa, 41 bajtów
źródło
CJam, 36 bajtów
Wypróbuj online.
źródło
J, 27 bajtów
Stosowanie:
Wyjaśnienie:
Wypróbuj online tutaj.
źródło
CJam, 25 bajtów
Wypróbuj online
Wyjaśnienie:
źródło
JavaScript (ES6), 98 bajtów
Stosowanie
Wyjaśnienie
źródło
Python 2, 91 znaków
źródło
MATLAB, 84 bajty
Ten wiersz wymaga podania ciągu jako danych wejściowych. Następnie tworzy wszystkie możliwe pary liter i robi to samo dla odpowiadających im indeksów. Następnie ustalamy, czy (bezwzględna) różnica wartości się zgadza, aby ostatecznie zsumować wszystkie przypadki, w których ma to miejsce. Wynik zostanie wyświetlony w oknie poleceń.
źródło
JavaScript ES7, 93
Korzystanie ze zrozumienia tablic . ES6 z
.map.map.map
jest o 2 bajty dłuższy.Przetestuj poniższy fragment kodu w przeglądarce Firefox
źródło
PowerShell,
114100 bajtówCałkiem proste, ale wykorzystuje kilka sztuczek.
param(..)
bierze nasz wkład, zapisuje go$a
.$b
być.length
naszego wejścia. To oszczędza bajt później.0..($b-1)|%{..}
jest odpowiednikiemfor($i=0;$i-le($b-1);$i++){..}
pętli, ale o wiele krótszym.$i
, aby utrzymać ją w ...($_+1)..$b|%{..}
następnafor
pętla, ponieważ$_
jest tylko pozycjonowana względem wewnętrznej pętli.+
aby zapisać wiązkę bajtów) jest zgodna z różnicą-eq
pozycyjną w tablicy. Ponieważ otrzymaliśmy wyraźnie małe litery, nie musimy wykonywać konwersji wielkości liter. To stwierdzenie powróci alboTrue
alboFalse
.$o
, więcTrue
dodamy 1, aFalse
dodamy 0.$o
. Zauważ, że musimy wykonać tę samą sztuczkę z cast-to-int,+
aby uniknąć drukowania,False
jeśli nie było żadnych dopasowań.źródło
Ruby, 74
Nic super interesującego tutaj. Chciałbym używać,
eval("s[i].#{["succ"]*(j-i)*?.}")
ale ... wydawało się, że jest za długi.źródło
Matlab
(94)(80)funkcja dwumianowa rzuca głupi wyjątek, gdy k jest większe niż n i nie mogę złapać wyjątków wewnątrzKto potrzebuje wbudowanej funkcji?arraycell
funkcji, w przeciwnym razie mógłbym zagrać w nią bardziej.Teraz mógłbym to zrobić ręcznie, upraszczając dwumianowy (n, 2) = n / (2 (n-2)!) = N (n-1) / 2. zauważ, że ta ostatnia wartość reprezentuje sumę liczb całkowitych od 1 do n-1, nie rzuca to żadnego wyjątku w matlab, Boże błogosław matematykę.
Ps: ta metoda różni się od metody slvrbld
Wykonanie
źródło