'<.*?>' ではなくて '<[^<>]*>'
text = '<br />あか<br />あお<br />みどり<br />きいろ<br />'
gsub('<.*?>', '', text)
gsub('<[^<>]*>', '', text)
両方とも 'あかあおみどりきいろ' になる。
text = '<<<foo>>>'
gsub('<.*?>', '', text)
gsub('<[^<>]*>', '', text)
上は '>>',下は '<<>>' になる。
'<.*?>' ではなくて '<[^<>]*>'
text = '<br />あか<br />あお<br />みどり<br />きいろ<br />'
gsub('<.*?>', '', text)
gsub('<[^<>]*>', '', text)
両方とも 'あかあおみどりきいろ' になる。
text = '<<<foo>>>'
gsub('<.*?>', '', text)
gsub('<[^<>]*>', '', text)
上は '>>',下は '<<>>' になる。
標準出力でSh1ma
を出力してください。ルールは以下の通りです。
""
, ''
)を含んではいけないchr
, ord
の禁止できる方はどうぞ。
というのがあったので,Python で書いてみた。
後で,R でも書いてみよう。
import string
w = string.digits
w = w[len(w):len(w)]
A = list(string.ascii_uppercase)
A.pop(); A.pop(); A.pop(); A.pop(); A.pop()
A.pop(); A.pop()
print(A.pop(), end=w)
a = list(string.ascii_lowercase)
a.pop(); a.pop(); a.pop(); a.pop(); a.pop()
a.pop(); a.pop(); a.pop(); a.pop(); a.pop()
a.pop(); a.pop(); a.pop(); a.pop(); a.pop()
a.pop(); a.pop(); a.pop()
print(a.pop(), end=w)
d = list(string.digits)
d.pop(); d.pop(); d.pop(); d.pop(); d.pop()
d.pop(); d.pop(); d.pop()
print(d.pop(), end=w)
a = list(string.ascii_lowercase)
a.pop(); a.pop(); a.pop(); a.pop(); a.pop()
a.pop(); a.pop(); a.pop(); a.pop(); a.pop()
a.pop(); a.pop(); a.pop()
print(a.pop(), end=w)
a.pop(); a.pop(); a.pop(); a.pop(); a.pop()
a.pop(); a.pop(); a.pop(); a.pop(); a.pop()
a.pop()
print(a.pop())
R では,別のアルゴリズム(おおげさ)で書いてみる
zero = pi - pi
one = pi / pi
two = one + one
four = two + two
string.pi = as.character(pi)
cat(LETTERS[four * four + two + one], letters[four * two],
substr(string.pi, two + one, two + one),
letters[four * two + four + one],
letters[one], sep=substr(string.pi, one, zero))
Python だと
import string
from math import pi
zero = int(pi - pi)
one = int(pi / pi)
two = one + one
four = two + two
LETTERS = list(string.ascii_uppercase)
letters = list(string.ascii_lowercase)
print(LETTERS[four * four + two], letters[four * two - one],
str(pi)[two:two + one],
letters[four * two + four],
letters[zero], sep=str(pi)[one:one])
> fivenum(1:7587)
[1] 1.0 1897.5 3794.0 5690.5 7587.0
である(わざと変な個数の数列にしておく)
Python では,scipy.stats.scoreatpercentile() とか,numpy.percentile() がある。
>>> import numpy as np
>>> from scipy.stats import scoreatpercentile
>>> x = np.arange(7587)+1
>>> scoreatpercentile(x, [25, 75], interpolation_method='fraction')
array([1897.5, 5690.5])
>>> scoreatpercentile(x, [25, 75], interpolation_method='lower')
array([1897., 5690.])
>>> scoreatpercentile(x, [25, 75], interpolation_method='higher')
array([1898., 5691.])
>>> np.percentile(x, [25, 75], interpolation = 'linear')
array([1897.5, 5690.5])
>>> np.percentile(x, [25, 75], interpolation = 'lower')
array([1897, 5690])
>>> np.percentile(x, [25, 75], interpolation = 'higher')
array([1898, 5691])
>>> np.percentile(x, [25, 75], interpolation = 'midpoint')
array([1897.5, 5690.5])
>>> np.percentile(x, [25, 75], interpolation = 'nearest')
array([1897, 5691])
ということで,np.percentile() の interpolation = ' midpoint' のようだ
と,書いたけどちょっと違うみたいなので,R の fivenum() を Python に移植した
import math
def fivenum(x):
n = len(x)
x = sorted(x)
n4 = ((n + 3)//2)/2
return 0.5 * (x[math.floor(n4 - 1)] + x[math.ceil(n4 - 1)]), 0.5 * (x[math.floor(n - n4)] + x[math.ceil(n - n4)])