0
0

More than 3 years have passed since last update.

ビット演算による、与えられた文字列の中の全ての文字列(順序入れ替えなし)を出力するコード(Python)

Last updated at Posted at 2020-01-04

ビット演算によって、与えられた文字列の中の全ての文字列を出力するコードです。Cで書いていましたが、日本語に対応させるため、pythonで書き直しました。

alice.py
#!/usr/bin/python3

import sys
word=sys.argv[1]
K=1
N=len(word)
t=1

def nextset(x):
  smallest=x & -x
  ripple = x + smallest
  new_smallest = ripple & - ripple
  ones =((new_smallest // smallest) >>1)-1
  return ripple | ones

def printset(s):
  for i in range(N):
    if (s & 1):
      print( word[i] , end="")
    s=s>>1
  print("")

def conv(k):
  global t
  x= (1 << (k)) -1
  while True:
    if (x&~((1<<(N))-1)):
      break
    print(str(t)+" : ",end="")
    printset(x)
    x=nextset(x)
    t=t+1

t=1
for K in range(N):
  conv(K+1)

実行例

$ alice.py たんすいかぶつ
1 : た
2 : ん
3 : す
4 : い
5 : か
6 : ぶ
7 : つ
8 : たん
9 : たす
10 : んす
11 : たい
12 : んい
13 : すい
14 : たか
15 : んか
16 : すか
17 : いか
18 : たぶ
19 : んぶ
20 : すぶ
21 : いぶ
22 : かぶ
23 : たつ
24 : んつ
25 : すつ
26 : いつ
27 : かつ
28 : ぶつ
29 : たんす
30 : たんい
31 : たすい
32 : んすい
33 : たんか
34 : たすか
35 : んすか
36 : たいか
37 : んいか
38 : すいか
39 : たんぶ
40 : たすぶ
41 : んすぶ
42 : たいぶ
43 : んいぶ
44 : すいぶ
45 : たかぶ
46 : んかぶ
47 : すかぶ
48 : いかぶ
49 : たんつ
50 : たすつ
51 : んすつ
52 : たいつ
53 : んいつ
54 : すいつ
55 : たかつ
56 : んかつ
57 : すかつ
58 : いかつ
59 : たぶつ
60 : んぶつ
61 : すぶつ
62 : いぶつ
63 : かぶつ
64 : たんすい
65 : たんすか
66 : たんいか
67 : たすいか
68 : んすいか
69 : たんすぶ
70 : たんいぶ
71 : たすいぶ
72 : んすいぶ
73 : たんかぶ
74 : たすかぶ
75 : んすかぶ
76 : たいかぶ
77 : んいかぶ
78 : すいかぶ
79 : たんすつ
80 : たんいつ
81 : たすいつ
82 : んすいつ
83 : たんかつ
84 : たすかつ
85 : んすかつ
86 : たいかつ
87 : んいかつ
88 : すいかつ
89 : たんぶつ
90 : たすぶつ
91 : んすぶつ
92 : たいぶつ
93 : んいぶつ
94 : すいぶつ
95 : たかぶつ
96 : んかぶつ
97 : すかぶつ
98 : いかぶつ
99 : たんすいか
100 : たんすいぶ
101 : たんすかぶ
102 : たんいかぶ
103 : たすいかぶ
104 : んすいかぶ
105 : たんすいつ
106 : たんすかつ
107 : たんいかつ
108 : たすいかつ
109 : んすいかつ
110 : たんすぶつ
111 : たんいぶつ
112 : たすいぶつ
113 : んすいぶつ
114 : たんかぶつ
115 : たすかぶつ
116 : んすかぶつ
117 : たいかぶつ
118 : んいかぶつ
119 : すいかぶつ
120 : たんすいかぶ
121 : たんすいかつ
122 : たんすいぶつ
123 : たんすかぶつ
124 : たんいかぶつ
125 : たすいかぶつ
126 : んすいかぶつ
127 : たんすいかぶつ
$
0
0
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0