解放してください!


34

コードゴルファーとして、私たちは(確かに)リリースすることに慣れていません。そのためには、いくつかのツールが必要になります。

もちろん、新しいリリースのマーケティングを支援するには、素敵で光沢のあるリリースバージョンが必要です。バージョン3.0.0を聞いても興奮しないのは誰ですか?

仕事

あなたの仕事はプログラム/ルーチン/ ...を書いてバージョン番号を増やすことです。

バージョン番号を増やし、「重要度の低い」もの(つまり、パッチバージョン)をリセットする必要があります。

2つの引数を取得します。文字列としての現在のバージョン(「1.0.3」など)と、どちらを更新するかを知るためのインデックス(0または1のインデックス)。

例、0インデックス付き:

next-version("1.0.3", 0) # 2.0.0
next-version("1.2.3.4.5", 2) # 1.2.4.0.0
next-version("10.0", 0) # 11.0
next-version("3", 0) # 4
next-version("1", 7) # ERROR
next-version("01", 0) # ERROR

バージョンは文字列で、各部分は数字で、ドットで区切られています。先頭、末尾、または連続するドット(および数字/ドット以外)は存在できません。バージョン文字列のサイズに制限はありません。

^[1-9]\d*(\.[1-9]\d*)*$

エラーの場合(最後の2つの例)は未定義の動作です。入力を間違えた場合に起こることは、この課題とは無関係です。

いつものように、標準的な抜け穴は禁止されています。文字列を印刷または返すことができます。


1
最初にインデックス、次にバージョン番号を入力として受け取るように要求できますか?
レオ

@Leoはい、順序は問題ではありません。
ベン

文字列の最後の数字をインクリメントするためのテストケース、またはテストするサンプルまたは何かを追加する場合があります。
nmjcman101 16

@ nmjcman101特別な場合はどうですか?
ベン

3
勝利条件で「最も読みやすい」と同じ挑戦をして、誰かが実際の仕事で使用するためにこれらを書くことを望んでいます。=)
jpmc26 16

回答:


12

Japt、16 11バイト

¡V«´V+ÂX}'.

オンラインでテストしてください!入力番号は1から始まります。

JavaScriptの回答に基づきます。これは、Japtの最も役立つ機能の1つを利用します。各項目をマッピングする前に1つの文字列を別の文字列に分割し、マッピング後にその文字列に再び結合します。

非ゴルフと説明

¡  V«  ´ V+Â X}'.
Um@V&&!--V+~~X}'.
                   Implicit: U = input string, V = input number
Um@           }'.  Split U at periods, then map each item X by this function:
   V&&               If V is 0, return V.
      !--V+~~X       Otherwise, decrement V and return X + !V (increments X iff V was 1).
               '.  Re-join the result with periods.
                   Implicit: output last expression

2
本当に素敵な機能です!
ジョナサンアラン

1
いいね、袋に入れたと思った。すみません、Vの回答に夢中になって、最後の1バイトをすべて絞ります。:P
DJMcMayhem

11

Vim 20 25バイト

残念ながら、最後の番号を更新する場合は処理できないことに気づいたため、バイトを追加する必要がありました。これは1インデックスです。

DJA.0@"t.qq2wcw0@qq@qx

TryItOnline

印刷できないもの:

DJA.^[0@"t.^Aqq2wcw0^[@qq@qx

これは、別々の行として、逆の順序で引数を取ります。

3
1.2.3.4.5

説明:

DJ                           # Delete the input argument, and join lines
  A.^[0                      # Add a period to the end
       @"t.                  # Move to the "Copy register"th period
           ^A                # Increment the number under the cursor
             qq       @qq@q  # Until an error
               2w            # Move the cursor forward to the next number
                 cw0^[       # Change the number to 0
                           x # Delete the last '.'

1
いいね!説明が参考になる
KritixiのLithos

@KritixiLithosが追加されました。残念ながら、最終バージョン番号のインクリメントを処理するためにバイトを追加する必要がありましたが、それは起こります。
nmjcman101 16

私はあなたが0インデックスを行った場合、あなただけ行うことができると思うDJ@"t.<C-a>qq2wcw0<esc>@qq@qバックダウン20にある
DJMcMayhem

@DJMcMayhem私はそれができないと思う。なぜなら、0と1を区別できないからだ。
nmjcman101

1
ええ、良い点。どうDJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@q
DJMcMayhem

11

JavaScript(ES6)、44 42 40 37バイト

@Neilのおかげで3バイト節約

x=>i=>x.replace(/\d+/g,n=>i&&+n+!--i)

入力番号は1から始まります。

テストスニペット

f = x=>i=>x.replace(/\d+/g,n=>i&&+n+!--i)

console.log(f("1.0.3")(1))
console.log(f("1.2.3.4.5")(3))
console.log(f("10.0")(1))
console.log(f("1")(8))



1
@KritixiLithosブラウザーの何が問題になっていますか?cubeupload.com/im/ofJySU.png
グスタボロドリゲス

n=>i&&+n+!--i
ニール

@ニールありがとう!私はどのようにゴルフに見つけ出すことができなかったという表現は任意の更...
ETHproductions

10

V13、12のバイト

Àñf.ñò2wcw0

オンラインでお試しください!

これは0インデックスです。

そこにctrl-a(ASCII 0x01)があるので、ここに読みやすいバージョンがあります:

Àñf.ñ<C-a>ò2wcw0

説明:

À                   " 'arg1' times
 ñ  ñ               " Repeat the following:
  f.                "   Move to the next '.' character
     <C-a>          " Increment the next number
          ò         " Recursively:
           2w       "   Move two words forward
              cw    "   Change this word
                0   "   to a '0'

7

Perl、40 37 34 + 1 = 35バイト

@Dadaのおかげで-2バイト。@ETHproductionsのJaptコードを読んで得たアイデアのおかげで、-3バイトになりました。

-pフラグを指定して実行します。

$a=<>;s/\d+/$a--<0?0:$&+!($a+1)/ge

オンラインでお試しください!

コードの内訳

-p          #Wraps the program in a while(<>){ ... print$_} statement.
            #Input is read into the $_ variable
$a=<>;s/\d+/$a--<0?0:$&+!($a+1)/ge
$a=<>;                              #Reads the version update into $a
      s/   /                   /ge  #Substitution regex:
                                g   #Repeats the substitution after first match
                                 e  #Interprets replacement as Perl code
       \d+                          #Matches 1 or more digits, and stores match in $&
                  ? :               #Ternary operation
            $a--<0                  #Checks if $a is negative and then decrements $a
                  ?0                #If negative, we've passed our match; print 0 instead
                    :$&+!($a+1)     #Otherwise, we're either printing $& + 0 (if $a was positive) or $& + 1 (if $a was 0).
#Since substitution implicitly modifies $_, and -p prints $_, it prints our answer

両側のすべての括弧を削除してください!(そして$&その代わりに$1
ダダ

私は何かが欠けていることを知っていました!ありがとう!
ガブリエルベナミー16

1のインデックス番号を使用すると、4バイト節約できます。オンラインで試してください!
Xcali

5

ゼリー19 17 バイト

ṣ”.V€‘⁹¦µJ’<⁹×j”.

1インデックス。

TryItOnline!

どうやって?

ṣ”.V€‘⁹¦µJ’<⁹×j”. - Main link: currentVersion, theIndex
ṣ”.               - ṣplit left (currentVersion) at occurences of '.'
   V€             - eVal €ach (creates a list of integers)
      ⁹           - right argument (theIndex)
       ¦          - apply to given index(es)
     ‘            -    increment
        µ         - monadic chain separation (call the above result z)
         J        - range(length(z))  i.e. ([1,2,3,...,length])
          ’       - decrement         i.e. ([0,1,2,...,length-1])
            ⁹     - right argument (theIndex)
           <      - less than?        i.e. ([1,1,...,(1 at theIndex),0...,0,0,0]
             ×    - multiply by z (vectortises) - zeros out all of z after theIndex
              j”. - join with '.'

3
10kおめでとうございます!!
ルイスメンドー

Jelly 2.0を待つことができないので、それを取り除くことができますV€:)。
ベン

@LuisMendo-ありがとう!私はあまり観察していません(デニスは、私がやる前に私の1Kマイルストーンに気づきました)。
ジョナサンアラン

5

MATLAB、85バイト

function f(s,j);a=split(s,'.');a(j)=string(double(a(j))+1);a(j+1:end)='0';join(a,'.')

1つに基づいた、ゴルフの最初の試み!


よくやった!初めて私は新しいstringタイプのアクションを見ます:-)
ルイスメンドー

5

C#116 104バイト

using System.Linq;(v,i)=>string.Join(".",v.Split('.').Select(int.Parse).Select((x,n)=>n==i?x+1:n>i?0:x));

説明

using System.Linq;(v,i)=>   //Anonymous function and mandatory using
    string.Join(".",                    //Recreate the version string with the new values
        v.Split('.')                    //Get individual pieces
            .Select(int.Parse)          //Convert to integers
                .Select(            
                    (x,n)=>             //Lambda with x being the part of the version and n being the index in the collection
                        n==i                    
                            ?x+1        //If n is the index to update increment x
                            :n>i        //Else if n is greater than index to update
                                ?0      //Set to zero
                                :x));   //Otherwise return x

ここで試してみてください


あなたは必要としないstringint、匿名関数のシグネチャで
TheLethalCoder

@TheLethalCoderああ、もちろんそうです、ありがとう。
JustinM -復活モニカ

4

Python 2、84バイト

これは本当に短くなると思います。非列挙オプションを使用する方法が必要になる場合があります。

lambda s,n:'.'.join(str([-~int(x)*(i==n),x][i<n])for i,x in enumerate(s.split('.')))

バージョンを文字列のリストとして取得できた場合、75バイトのソリューションがあります。

g=lambda s,n:(str(-~int(s[0]))+'.0'*~-len(s))*(n<1)or s[0]+'.'+g(s[1:],n-1)

さらに、入力と出力の両方が数値のリストである場合、64バイトのソリューションがあります。

g=lambda s,n:([-~s[0]]+[0]*~-len(s))*(n<1)or [s[0]]+g(s[1:],n-1)

4

V 14 20バイト

繰り返しになりますが、最終桁をインクリメントするコーナーケースのコードを追加する必要がありました。(1インデックス付き)

DJA.0@"t.ò2wcw0òx

TryItOnline

印刷できないもの:

DJA.^[0@"t.^Aò2wcw0^[òx

これは、別々の行として、逆の順序で引数を取ります。

3
1.2.3.4.5

1
いい答えだ!他の誰かがVを使用しているのを見るのはいつも嬉しいです!ちょうどあなたが知っているように、最初の入力を「args」に入れると、レジスタ「a」がその番号に事前定義されるので、バイトを節約する必要がある@a(またはさらに短くするÀ)ことができます。
DJMcMayhem

4

バッチ、119バイト

@set s=%1
@set i=%2
@set t=
@for %%i in (%s:.=,%)do @set/an=!!i*(%%i+!(i-=!!i))&call set t=%%t%%.%%n%%
@echo %t:~1%

1インデックス。


4

Perl 6、67バイト、0インデックス付き

->$v,$i {$v.split('.').map({++$>$i??($++??0!!$_+1)!!$_}).join: '.'}

説明:

->$v,$i {$v.split('.').map({++$>$i??($++??0!!$_+1)!!$_}).join: '.'}
->$v,$i {                                                         } # function taking version/index to increment
         $v.split('.')                                              # split by dot
                      .map({                          })            # for each version number
                            ++$>$i??                                # if an anonymous variable ($), incremented,
                                                                    #  is greater than $i (index to increment)
                                    ($++??       )                  # if it's not the first time we've been over $i
                                                                    # (using another anonymous value, which gets default-init'd to 0)
                                          0                         # then 0 (reset lower version numbers)
                                           !!$_+1                   # otherwise, increment the number at $i
                                                  !!$_              # otherwise return the number part
                                                        .join: '.'  # join with a dot

3
ちょうどfyi、自己回答は完全に適格です。実際、彼らも奨励され
DJMcMayhem

@DJMcMayhem私はこれを知っていたが、私は、彼らは資格がないと思っていた
ヴェン

3

PowerShell 3 +、75 74バイト

($args[0]-split'\.'|%{$m=!$b;$b=$b-or$args[1]-eq$i++;(+$b+$_)*$m})-join'.'

非ゴルフ

(
    $args[0] -split '\.' | 
        ForEach-Object -Process {
            $m= -not $b
            $b = $b -or ($args[1] -eq $i++)
            (([int]$b) + $_) * $m
        }
) -join '.'

説明

パラメータは$args配列を使用して受け入れられます。

  1. バージョン文字列を分割する .で、次に各要素に対して:
    1. $mに設定されます-not $b。最初の実行で$bは、は未定義になり、これはに合体されるため$false$mとして開始され$trueます。$mは常に0また1は後で使用される乗数になることを目的としています。$mここで評価する必要があるのは、最後の反復の$b値にです。
    2. $b-orイテレータ$i$args[1](インデックスパラメータ)を比較した結果自体に設定されます。これは、インクリメントされる要素に到達すると、ここ$bに設定されることを意味し$trueます。さらに、$true条件は-or現在の値で「d」されるます。
    3. $b単項を使用して数値に変換されます+$false=>0$true=> 1)され、現在のバージョン要素$_a [string]に追加されますが、PowerShellは常に右側の引数を左側の型に結合しようとするため、算術が実行されます。文字列連結ではありません。次に、この値にが乗算され$mます。[bool]ですが、暗黙的に合体されます。
  2. 結果の配列を再結合します .ます。

だから、最初の繰り返し$bとなり$true$bあったであろう$false時に$m評価した作り、$m同等$trueの乗数を保つであろうが、1

その実行中にがに$bなり$true、バージョン要素に(として1)追加され、それによって増分されます。乗数はまだな1ので、最終結果になります。

そのため、次の反復で$bは、がに等しくなり$true、乗数がになります。以来永遠になります今、乗数は常になります返されたすべての要素があることになるので、あまりにも。$m$false0$b$true00


2

R、100 95 92 86バイト

Rでは珍しく、これは0インデックスを使用します。2つの引数(文字列と整数)を持つ匿名関数。少しだけゴルフをすることができます。

function(v,i)cat((x=scan(t=el(strsplit(v,"\\."))))+c(rep(0,i),1,-x[-(0:i+1)]),sep=".")

2

05AB1E、22バイト

'.¡vy²N‹i0*}²NQi>})'.ý

オンラインでお試しください!

05AB1Eでif-elseを実行する方法がわからないため、これは本来よりも長くなります。


1
私が誤解していない場合、私はこれが機能するとは思わない。質問では、マイナーバージョンを0から1.0.0.0.3, 3削除する必要があるため、を生成し1.0.0.1.0ないようにし1.0.0.1.3ます。
ラムダベータ16

@LambdaBetaの誤読、修正。
魔法のタコUr

2

コーヒースクリプト:77 67バイト

f=(p,i)->((z<i&&v||z==i&&~~v+1||0)for v,z in p.split '.').join '.'

すごい!ベータリリースのケーキとコーヒーの時間。

@venと@Cyoceのおかげで10バイト削りました!


いいね!ただし、ここでparseIntが必要かどうかわかりませんか?
ヴェン

ところで、あなたはparenlessコールを使用して(すなわち2つのバイトを保存することができます.join '.'.split '.'
ヴェン

使用+の代わりに、parseInt(使用~~あなたはそれを整数にキャストする必要がある場合)
Cyoce

2

Python 3、89 86バイト

lambda v,c:'.'.join((str((int(x)+1)*(i==c)),x)[i<c]for i,x in enumerate(v.split('.')))

物事を成し遂げる非常に素朴な方法

編集:@kadeを参照して条件を書き直しました


2

PHP、81バイト

ひどく長い。少なくとも:ElephpantはまだPythonに勝っています。

foreach(explode(".",$argv[1])as$i=>$v)echo"."[!$i],($i<=$n=$argv[2])*$v+($i==$n);

ドットで分割された最初の引数をループします。最初"."[!$i]は空で、他のすべての要素はドットです。 ($i<=$n)そして、($i==$n)暗黙的に整数にキャストされている0か、1整数算術演算のために。


2

JavaScript(ES6)、 57 55 bytes

(s,x)=>s.split`.`.map((j,i)=>i==x?+j+1:i>x?0:j).join`.`

例:

n=(s,x)=>s.split`.`.map((j,i)=>i==x?+j+1:i>x?0:j).join`.`

console.log(n('1.0.3', 0))
console.log(n('1.2.3.4.5', 2))
console.log(n('10.0', 0))
console.log(n('3', 0))
console.log(n('1', 7))

最高のJS実装ではありませんが、かなりシンプルで、期待どおりのロジックに従います。


Okay, that wasn't terribly clear, thanks.
Florrie

1

Pyth - 21 bytes

j\.++<Kcz\.Qhs@KQmZ>K

Test Suite


3
No, this isn't quite correct. Your 10.0 test case gives 11.0.0, that's one too many part!
Ven

1

Powershell, 80 100 95 92 Bytes

Saved 5 bytes by using a const for the -1..if

Saved 3 bytes by using !$b instead of $b-eq0

filter x($a,$b){[int[]]$y=$a.Split('.');-1..((-$b,-1)[!$b])|%{$y[$_]=0};$y[$b]++;$y-join'.'}

Explanation:

filter x($a,$b){
    [int[]]$y=$a.Split('.') #Split input into integer array
    $y[$b]++ #Increment 'major' version no. ($b) by one
    -1..((-$b,-1)[!$b])|%{$y[$_]=0} #Set all trailing numbers to 0, now also checks for $b=0 cases.
    $y-join'.' #Join back into '.' seperated Array
}

Test Cases:

x "1.0.3" 0
x "1.2.3.4.5" 2
x "10.0" 0
x "1" 7
2.0.0
1.2.4.0.0
11.0
Index was outside the bounds of the array.

Nice! I love seeing more powershell here.
briantist

@briantist honestly a lightweight uncompiled version of C# which can interface with everything is a godsend, I deal with a lot of Microsoft stuff at work and absolutely love it.
colsw

Oh absolutely; PowerShell is my jam, but not a lot of people think to use it for golfing. It has some features that are great for golfing, and others that make it suck for golfing, but overall it's a solid choice! I'm toying with the idea of doing a presentation about golfing in PowerShell at my next PSUG.
briantist

@briantist the default aliases are beautiful, but I'd love to be able to use a pre-defined set of a few common commands as single char aliases f for golfing, if say it could compete with some actual golfing languages if we could use r instead of random
colsw

Funny thing about random, it's not an an alias! It's a result of PowerShell's command evaluation. As it looks to find a command in aliases, functions, cmdlets, native applications, etc., the very last thing it tries to do is prepend Get- to whatever it is. So you're actually calling Get-Random, but technically not as an alias. You can see this working by running service, or childitem, or for maximum irony, alias.
briantist

1

Objective-C 531 Bytes

#import<Foundation/Foundation.h>
int main(int argc,const char *argv[]){@autoreleasepool{NSString *s=[NSString stringWithUTF8String:argv[1]];NSInteger n=strtol(argv[2],NULL,0);NSArray *c=[s componentsSeparatedByString:@"."];if(c.count<=n)NSLog(@"ERROR");else{int i=0;NSMutableString *v=[[NSMutableString alloc]init];for(;i<n;++i)[v appendFormat:@"%@.",[c objectAtIndex:i]];[v appendFormat:@"%li", strtol(((NSString *)[c objectAtIndex:i++]).UTF8String,NULL,0)+1l];for(;i<c.count;++i)[v appendString:@".0"];NSLog(@"%@",v);}}return 0;}

compile:

clang -fobjc-arc -Os main.m -o main

usage:

./main 1.2.3 1

Welcome to CodeGolf. In the title, You should tell the size of the source code, not the byte code. And the source should, of course, be as short as possible (no unnecessary whitespace, single character variable names etc.). Good Luck.
Titus

can probably use 0 instead of NULL and remove the return 0; at the end of the main. NSString *s can probably have the space removed. **argv is 1 byte shorter than *argv[]. @autoreleasepool{} is probably unnecessary.
Ven

1

Javascript ES6: 60 bytes

n.split(".").map((n,r)=>{return r>i?n=0:n}).join("."),n[i]++}

2
Welcome to PPCG! This doesn't seem to be valid, as it is does not take input in any way, and there is an extra } at the end. On golfing: one of the features of arrow functions is implicit return, so you can replace (n,r)=>{return r>i?n=0:n} with (n,r)=>r>i?n=0:n to save some bytes.
ETHproductions

1

R, 75 bytes

f=function(a,b){n=scan(t=a,se=".");m=-n;m[b]=1;m[1:b-1]=0;cat(n+m,sep=".")}

Indexing is 1-based. You can play with it online here.


1

APL (Dyalog), 31 bytes

Requires ⎕IO←0 (Index Origin 0), which is default on many systems. Full program body; prompts for text input (version) and then numeric input (index).

' 'R'.'⍕⎕(⊢∘≢↑↑,1+⊃)⊃⌽'.'VFI

Try it online!

 prompt for text input

'.'⎕VFIVerify and Fix Input using period as field separator (fields' validities, fields' values)

 reverse (to put the values in front)

 pick the first (the values)

⎕(...) apply the following tacit function to that, using evaluated input as left argument:

To explain the non-tacit equivalents of each function application we will now use to indicate the left argument (the index) and to indicate the right argument (the list of individual numbers of the originally inputted current version number).

 equivalent to (⍺⊃⍵) use to pick an element from

1+ add one to that 

↑, equivalent to (⍺↑⍵), prepend numbers taken from

⊢∘≢↑ equivalent to (⍺⊢∘≢⍵)↑ equivalent to (≢⍵)↑ take as many numbers from that as there are elements in , padding with zeros if necessary

 format (stringify with one space between each number)

' '⎕R'.' PCRE Replace spaces with periods


1

Java 8, 130 bytes

s->n->{String r="",a[]=s.split("\\.");for(int l=a.length,i=-1;++i<l;)r+=(i>n?0:new Long(a[i])+(i<n?0:1))+(i<l-1?".":"");return r;}

Explanation:

Try it here.

s->n->{                 // Method with String and Integer parameters and String return-type
  String r="",          //  Result-String
  a[]=s.split("\\.");   //  String-array split by the dots
  for(int l=a.length,   //  Length of the array
      i=-1;++i<l;)      //  Loop from 0 to `l` (exclusive)
    r+=                 //   Append the result-String with:
       (i>n?            //    If index `i` is beyond input `n`:
        0               //     Append a zero
       :                //    Else:
        new Long(a[i])  //     Convert the current String to a number
        +(i<n?          //     If index `i` is before input `n`
           0            //      Leave the number the same by adding 0
          :             //     Else:
           1))          //      Add 1 to raise the version at index `n`
       +(i<l-1?         //    If we've haven't reached the last iteration yet:
          "."           //     Append a dot
         :              //    Else:
          ""            //     Append nothing
   );                   //  End of loop
   return r;            //  Return the result-String
}                       // End of method

1

LiveScript, 53 52 bytes

->(for e,i in it/\.
 [+e+1;0;e][(i>&1)+2*(i<&1)])*\.

-1 byte thanks to @ASCII-only!

Old Explanation:

(a,b)->x=a/\.;x[b]++;(x[to b] ++ [0]*(x.length-1-b))*\.
(a,b)->                                                 # a function taking a and b (version and index)
       x=a/\.;                                          # split a on dot, store in x
              x[b]++;                                   # increment at the given index
                     (x[to b]                           # slice be from 0 to the index
                              ++                        # concat (both spaces are necessary so it's not interpreted as an increment operator
                                 [0]*(x.length-1-b))    # with enough zeros to fill the array back to its original size (x's size)
                                                    *\. # join on dot

Another self-answer... Not that anyone golfes in LiveScript anyway. :P

I was working on another version:

(a,b)->(a/\.=>..[b]++;..[b to *]=0)*\.

But * is too overloaded to be recognized in a splicing index, thus =0 will try to access 0[0]. So you need to write something like ..[b to ..length- b]=[0]*(..length-1-b) and it's longer in the end.


1
sadly f=(a,b)->(for e,i in a/\.<newline> if i<b then e else if i>b then 0 else+e+1)*\. is way longer :(
ASCII-only

@ASCII-only I think it's possible to compress if i<b then e else if i>b then 0 else+e+1 in i.e. [+e+1;0;e;e][i>b+(2*i<b)] or something along those lines, maybe even ([+e;-1][i>b+(2*i<b)]||e-1)+1
Ven

(a,b)->(for e,i in a/\.<newline> [+e+1;0;e][(i>b)+2*(i<b)])*\., 54
ASCII-only

Then let's remove the signature: ->(for e,i in it/\.<newline> [+e+1;0;e][(i>&1)+2*(i<&1)])*\. for 52
Ven

btw you can replace ; with space. also... looks like that's basically as far down as it'll go with this approach
ASCII-only

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.