指定された範囲内でラッキーチケットを数える


18

ロシアでは、伝統のようなものがあります。ラッキーチケットを探すのが好きです。

通常のチケットは次のようになります。

バスチケット

ご覧のとおり、チケットには6桁の番号があります。

最初の3桁の合計が最後の3桁の合計に等しい場合、6桁の数字はラッキーと見なされます。

写真の数字は幸運ではありません:

038937
038 937
0 + 3 + 8 = 11
9 + 3 + 7 = 19
11 != 19

チャレンジ

範囲の制限(両端を含む)を指定すると、その範囲に含まれるラッキーチケット番号の数を返します。

パラメーター

  • 入力:2つの整数:範囲内の最初と最後の整数
  • 入力は0から999999の間です
  • 出力:1整数:範囲内のラッキーナンバーの数
  • 入力を受け取り、受け入れ可能な形式で出力を返すことができます
  • 100000未満の数字の先行ゼロを想定します。

0, 1 => 1
100000, 200000 => 5280
123456, 654321 => 31607
0, 999999 => 55252

これはので、すべての言語でバイト単位の最短回答が勝ちます。

更新:ここに幸運な人がいます ラッキーなもの


回答:


10

05AB1E8(または10?) 11(または13?)バイト

Ÿʒ₄n+¦S3ôOË

オンラインそれを試してみてくださいまたはいくつかのより多くのテストケースを検証します

注:05AB1Eでは、文字列と整数は交換可能であるため、出力番号に先行ゼロは含まれません。ただし、これは1バイト(12バイト)を追加することで修正できます

Ÿ₄n+€¦ʒS3ôOË

オンラインそれを試してみてくださいまたはいくつかのより多くのテストケースを検証します

長さ3以下(範囲[000000, 000999])のバグ修正番号に+3バイト。

説明:

Ÿ          # Create an inclusive (on both sides) range from the two inputs
           #  i.e. 038920 and 038910 → 
           #   [38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920]
 ʒ         # Filter this list by:
  n+      #  Add 1,000,000 to the number
     |     #  And remove the leading 1
           #   i.e. 38910 → 1038910 → '038910'
  S        #  Transform it to a list of digits
           #   i.e. '038910' → ['0','3','8','9','1','0']
   3ô      #  Split it into chunks of length 3
           #   i.e. ['0','3','8','9','1','0'] → [['0','3','8'],['9','1','0']]
     O     #  Sum the digits in both parts
           #   i.e. [['0','3','8'],['9','1','0']] → [11,10]
      Ë    #  Check if they are equal (if they are, they remain in the filtered list)
           #   i.e. [11,10] → 0

編集:私(および他のほとんどの回答)は、チャレンジをわずかに誤読しているようで、範囲内の数字自体ではなく、数字の量が求められています。その場合、末尾}gを追加することができます(フィルターを閉じ、フィルターされたリストに残っている数字の量を取得します)ので、代わりに10 13 バイトです:

Ÿʒ₄nS3ôOË}g

オンラインそれを試してみてくださいまたはいくつかのより多くのテストケースを検証します


範囲が1000未満(たとえば[0; 1000])の場合、結果は少しずれているようです(1000のラッキーナンバーが見つかりました)。
frosqh

1
課題を正しく理解している場合、各数値に1.000.000を追加して最初の文字を削除すると、この問題が解決します。また、を使用することもなくなりRます。
アドナン

@Adnanありがとう、それは実際にそれを処理するためのかなり良い方法です。
ケビンCruijssen

これは、要求されたカウントである(と出力が先行ゼロを必要としない)ので、13、
ジョナサン・アラン・

9

C#(.NET Core)、93 + 18 = 111バイト

a=>b=>Enumerable.Range(a,b-a+1).Select(e=>$"{e:D6}").Count(e=>e[0]+e[1]+e[2]==e[3]+e[4]+e[5])

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

の場合は18バイトusing System.Linq;。私は、入力および出力形式が柔軟である可能性があると考えました。したがって、入力として2つの整数(範囲を含む)を取ります。

いくつかのテスト結果:

a=1000
b=1100

Lucky numbers = 3 [001001, 001010, 001100]

a=2000
b=2100

Lucky numbers = 3 [002002, 002011, 002020]

a=222000
b=222100

Lucky numbers = 7 [222006, 222015, 222024, 222033, 222042, 222051, 222060]

a=0
b=999999

Lucky numbers = 55252 (that's 5.5% of the total numbers)

8

JavaScript(ES6)、66バイト

カリー化構文(m)(n)で入力を受け取ります。ここで、m排他的包括的上限で、nは包括的下限です。

m=>g=n=>n<=m&&![...n+=''].reduce((t,d,i)=>t-=n[i+3]?d:-d,0)+g(-~n)

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

どうやって?

各数字をテストするには、数字を調べて合計を更新します。d i tndit

  • ttdiこの数字の後に少なくとも3つの数字が残っている場合は
  • tt+diそれ以外の場合

プロセスの最後にがある場合、はラッキーナンバーです。nt=0n


JavaScript(ES6)、67バイト

同じ入力形式。

m=>g=n=>n<=m&&!eval([...n/1e3+''].join`+`.split`+.`.join`^`)+g(n+1)

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

どうやって?

各番号:n

  • 割る:例100038937 --> 38.937
  • 文字列に強制して分割します: ['3','8','.','9','3','7']
  • 参加する+"3+8+.+9+3+7"
  • 置き換える+.^"3+8^+9+3+7"
  • 0241119

もし、何小数点が発生しないと評価式がない限り、単に正の和(falsy)であり、(truthy)。これは、両方のケースで予想される結果です。n = 0n0(mod1000)n=0


包括的です。
ジョナサンアラン


6

Japt38 15バイト

õV Ëì ò3n)mx r¥

-23シャギーに感謝します!

私の最初のJapt提出。助けてくれたShaggyに感謝します!

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


Japtへようこそ!:)
シャギー

@Shaggyありがとう!それはかなりきちんとした言語です!
Amphibological

あなたが始めるのを助けるために。ご質問がある場合は、チャットでお気軽にお問い合わせください。
シャギー

@Shaggyそれはすごい。私は間違いなくそれから多くのことを学びました。自分の答えとして投稿する予定はありますか?あなたがすべき!
Amphibological

いいえ、あなたはそれを持つことができます:)私が言ったように、あなたが始めるのを助けるために。
シャギー

6

Pythonの3、117の 113 106 135バイト

これが私の最初の回答ですので、改善の余地があると確信しています。

def x(a,b):
    n=0
    for i in range(a,b+1):
        if sum(map(int,str(i//1000)))==sum(map(int,str(i%1000))):n+=1
    print(n)
  • WWのおかげで-4バイト
  • Asone Tuhidのおかげで-7バイト
  • 関数を作成するには+29バイト

整数除算で最初の3桁を取得し、モジュロで最後の3桁を取得します。範囲内の最初と最後の整数は、それぞれとxとして、関数の引数として入力されます。出力は、印刷されます。abn

ゴルフをしていない:

def x(a, b):
    n = 0
    for i in range(a, b + 1):
        if sum(map(int, str(i // 1000))) == sum(map(int, str(i % 1000))):
            n += 1
    print(n)

1
if btwの後のインデントは必要ありません。また、最初または最後の3桁を取得する前に文字列に変換する方がおそらく安価です。
小麦ウィザード

2
PPCGへようこそ!チェックアウトPythonでゴルフをするためのヒントのヒントやトリックのために、もし興味があるなら、ほとんどの言語で同様のスレッドがあります。また、デモとしてTIOリンクを含めることをお勧めします。
Asone Tuhid

私は交換することをお勧めしたいn=n+1n+=1右のif文の後に、それを動かす(if...:n+=1
Asone Tuhid

あなたは取ることができないab事前に宣言された変数として。あなたは関数を持っているか、入力を介してそれらを取る必要があります
ジョーキング

1
あなたは関数としてそれを維持している場合は、移動することができますn=0ように、ヘッダに一部をdef x(a,b,n=0)
ジョー・キング

6

R93 86バイト

@ Giuseppe /の最後の賛辞の短いロジック

function(a,b){for(i in sprintf("%06d",a:b)){x=utf8ToInt(i);F=F+!sum(x[1:3]-x[4:6])}
F}

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

整数入力。それらをパディングします0。6つのASCIIコードポイントに変換します。F組み込みを乱用します。


その関数から返されるNAを取得しています。
ロバートS.

編集をロールバックしました。scipen問題のため、新しいバージョンは0で失敗します。しかたがない。
ngm



6

、12バイト

#ȯ§¤=Σ↓↑3↔d…

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

説明

#(§¤=Σ↓↑3↔d)…  -- example input: 100000 101000
            …  -- inclusive range: [100000,100001..100999,101000]
#(         )   -- count elements where (example with 100010)
          d    -- | digits: [1,0,0,0,1,0]
         ↔     -- | reversed: [0,1,0,0,0,1]
  §     3      -- | fork elements (3 and [0,1,0,0,0,1])
       ↑       -- | | take: [0,1,0]
      ↓        -- | | drop: [0,0,1]
   ¤=          -- | > compare the results by equality of their
     Σ         -- | | sums 1 == 1
               -- | : 1
               -- : 3

あなたのソリューションには私の初期バージョンと同じ欠陥があるようです:[000000, 001001]結果は2000000001001)であるはずですが、結果はそう1001です。(そのための修正として1,000,000末尾を追加および削除しました1が、Huskでどれだけ簡単/バイト効率が良いかはわかりません。)
Kevin Cruijssen

1
@KevinCruijssen:このチャレンジは当初明確ではなかったことを思い出すことができると思います。それを調べる時間がないので、正しいと思われる最初の提出にロールバックしました。
ბიმო

5

、15バイト

ILΦ…·NN⁼Σι⊗Σ÷ιφ

オンラインでお試しください!リンクは、コードの詳細バージョンです。編集:私はもともと、それが必要であったラッキーナンバーのリストだと思っていました。これは、14バイトで(リストの長さをとるを削除することで)実行できます。または、適切なフォーマットが必要な場合は20バイトで実行できます。

EΦ…·NN⁼Σι⊗Σ÷ιφ﹪%06dι

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

    NN                  Input the range endpoints
  …·                    Inclusive range
 Φ                      Filter
        ι               Current value
       Σ                Sum of digits
            ι           Current value
             φ          Predefined variable 1000
           ÷            Integer divide
          Σ             Sum of digits
         ⊗              Doubled
      ⁼                 Equals
E                       Map over results
                   ι    Current value
               %06d     Literal string
              ﹪         Format value
                        Implicitly print each result on its own line


3

Pythonの389の 86バイト

-2 Xcoder氏に感謝します。

-3 Asone Tuhidの回答から刺激を受けました。

lambda a,b:sum(sum(map(int,str(i)))==2*sum(map(int,str(i)[-3:]))for i in range(a,b+1))

テスト結果:

Example 1 : 
a = 0
b = 1
Lucky numbers : 1 

Example 2 : 
a = 100000
b = 200000
Lucky numbers : 5280 

Example 3 : 
a = 123456
b = 654321
Lucky numbers : 31607 

Example 3 : 
a = 0
b = 999999
Lucky numbers : 55252 

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


1
カウントバージョンでは、sumブラケットはので、任意の発電作ることができる[...] 必要とされていません
氏Xcoder

range(a,b+1)specに「包括的」と表示されるようになりました(そうでない場合は*r、代わりに使用できますa,b-Python 2の回答を参照してください)。また、仕様では、実際に出力されるカウントであることを確認していることに注意してください。
ジョナサンアラン

3

MATL、24バイト

&:1e3&\,!'%03d'&V2&sw]=s

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

(ルイスメンドーのおかげで2バイト。)

&: -与えられた2つの数値の間に包括的な範囲を作成します

1e3&\ -'divrem'-1000で除算し、リマインダーとフロア付き商を2つの配列で取得します。

, -二度行う

!'03d'&V -各値をゼロで埋められた3幅の文字列に置き換えて変換します

&s -各行の値を合計する

w -リマインダー配列を表示するように切り替え、その上でこれを再度行います

] -終了ループ

= -等しいかどうかを確認します(配列が等しい場所に1を返します)

s -それらを合計してカウントを取得します(暗黙的な出力)


3

Kotlin152 119バイト

{a:Int,b:Int->(a..b).map{String.format("%06d",it)}.filter{it[0].toInt()+it[1].toInt()+it[2].toInt()==it[3].toInt()+it[4].toInt()+it[5].toInt()}.count()}

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

2つの整数を使用して、6つのシンボル文字列に変換してカウントします。

mazzyと彼の119バイトのソリューションのおかげで最適化されました。

{a:Int,b:Int->(a..b).count{val d="%06d".format(it);(d[0]-'0')+(d[1]-'0')+(d[2]-'0')==(d[3]-'0')+(d[4]-'0')+(d[5]-'0')}}

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


1
あなたは、133のバイトまでそれを圧縮することができます{a:Int,b:Int->(a..b).map{"%06d".format(it)}.filter{(it[0]-'0')+(it[1]-'0')+(it[2]-'0')==(it[3]-'0')+(it[4]-'0')+(it[5]-'0')}.count()}
mazzy

3

dc、44バイト

sb[d]sD[dA00~[rA~rA~++rx]dx=D1+dlb!<L]dsLxkz

空のスタックから2つの引数を取り、スタックの先頭に出力します。

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

ここで賢いのは、他の3桁の部分で自分自身のコピーを実行するために、実行前に複製された名前のない(つまり、保存されていない)マクロの使用です。

説明

内側のマクロに[rA~rA~++rx]は、「スタックの2番目から3桁の数字の合計を計算してから、スタックの元のトップをマクロとして実行する」という効果があります。

メインプログラム:

sb             Saves the upper bound as b so we'll know when to quit
[d]sD          Defines the macro D, which contextually is "increment stack depth"
[              Start the main loop - the next number to test is on top 
  d              Make a copy to increment later for loop purposes
  A00            The literal "1000"
  ~              Quotient and remainder, so "123456" is now "123 456"
  [rA~rA~++rx]d  Stack is now "123 456 M M", where M is the anonymous macro
  x              Run M on the stack "123 456 M", which (see definition 
                 above) ends up running M on the stack "123 15", which
                 leaves "15 6" (and executes the 6, which is a no-op)
  =D             If the two sums were equal, increment the stack depth
  1+             Increment the current test number
  dlb!<L         Loop unless the test number is now larger than b
]dsLx          Name and start the loop
kz             Current depth is 1+answer, so throw away top and return

3

パスカル(FPC)163 153バイト

var a,b:Int32;begin read(a,b);for a:=a to b do if a div$186A0+a div$2710mod$A+a div$3E8mod$A=a div$64mod$A+a div$Amod$A+a mod$Athen b:=b+1;write(b-a)end.

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

説明

最初に、通常の外観のコードをいくつか示します。

var a,b,i,s,c,d:Int32;
begin
  read(a,b);
  s:=0;
  for i:=a to b do begin
    c:=i div 1000;
    d:=i mod 1000;
    if c div 100+(c div 10) mod 10+c mod 10=d div 100+(d div 10) mod 10+d mod 10 then begin s:=s+1; {writeln(i)} end;
  end;
  write('There are ',s,' numbers');
end.

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

次に、forループの動作を悪用しました。

  • ループ値は事前に設定されているため(from aからb)、aループ変数dropとして再利用できますi
  • forループの終わりで、ループ変数は最終値(bループ前の値)のままになります。私bはコンテナとして使用し、ラッキーナンバーが見つかり、ループの終わりbにラッキーナンバーの量だけ古い値から離れているときにインクリメントしb-a、正しい結果を与えます。これは落ちましたs

d操作を直接オンに置き換えるとa、ループが短縮されます。交換cで直接操作してa線量ループを短く、しかし、滴下した後でないdと、ループのbeginend不要であり、私は唯一の2変数を使用して終わった:)

$ゴルフコードの16進定数を開始します。バイトを保存しませんが、10進定数の前に必要なスペースを削除します。


3

Java(OpenJDK 8)、162バイト

...上記のKotlinの例から借用しています。

import java.util.stream.IntStream;

(a,b)->IntStream.range(a,b+1).mapToObj(i->String.format("%06d",i).getBytes()).filter(c->c[0]+c[1]+c[2]==c[3]+c[4]+c[5]).count();

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

文字列のバイトの合計を比較することは、実際の数字を合計するのと同じくらい良いです。


2
あなたは(カリー化でバイトを保存することができますa->b->)、しかし、あなたは完全に修飾する必要がありますIntStream、それはではありませんので、java.lang
ヤコブ

PPCGへようこそ!@Jakobが述べたように、インポートはバイトカウントの一部java.util.stream.であるIntStreamため、コードとバイトカウントの前に追加する必要があります。Jakobでも言及されているようにa->b->、を使用してバイトを保存できます。また、に変更String.formatすることで追加のバイトを保存できます"".formatオンラインそれを試してみてください:139バイト。いい最初の答えですが。私から+1。滞在を楽しんで!
ケビンCruijssen

2

PHP、131バイト

<?$f='array_sum(str_split(str_split(sprintf("%06d",$i),3)[';for($i=$argv[1]-1;$i++<$argv[2];)eval("\$a+=$f 0]))==$f 1]));");echo$a;

実行するには:

php -n <filename> <from> <to>

例:

php -n lucky_tickets.php 100 100000

または、オンラインでお試しください!



2

ゼリー 9  8 バイト

-1 Dennisに感謝(rµ...E)S-> r...E€Sすべてがベクトル化されるため。)

rdȷD§E€S

範囲の2つのエンドポイントを受け入れるダイアディックリンク(どちらにしても)、ラッキーチケットのカウントを生成します。

オンラインでお試しください!またはテストスイートを見る

どうやって?

1000000N1000
バツ=N1000

Y=Nモッド1000
N=1000×バツ+Y

バツYN

rdȷD§E€S - Link: integer a; integer b
r        - inclusive range [a,b] (either [a,a+1,a+2,...,b] or [a,a-1,a-2,...,b])
         -                              e.g.: 0       or 78        or 7241
  ȷ      - literal 1000
 d       - divmod (vectorises)                [0,0]      [0,78]       [7,241]
   D     - to decimal lists (vectorises)      [[0],[0]]  [[0],[7,8]]  [[7],[2,4,1]]
    §    - sum each (vectorises)              [0,0]      [0,15]       [7,7]
     E€  - for €ach: all equal?               1          0            1
       S - sum (counts the 1s in the resulting list)

E€Sを保存しµます。
デニス

@デニスああはい、私は途中ですべてをベクトル化しない別のソリューションで働いていました!
ジョナサンアラン

2

Powershell、85バイト

($args[0]..$args[1]|%{'{0:D6}'-f$_}|?{+$_[0]+$_[1]+$_[2]-eq+$_[3]+$_[4]+$_[5]}).count

テストスクリプト:

$f = {

($args[0]..$args[1]|%{'{0:D6}'-f$_}|?{+$_[0]+$_[1]+$_[2]-eq+$_[3]+$_[4]+$_[5]}).count

}

@(
    ,((0,1), 1)
    ,((1000,2000), 3)
    ,((2000,3000), 6)
    ,((10000, 20000), 282)
    ,((101000, 102000), 6)
    ,((201000, 202000), 10)
    ,((901000, 902000), 63)
    ,((100000, 200000), 5280)
    ,((123456, 654321), 31607)
    #,((0, 999999), 55252)
) | % {
    $c, $e = $_
    "      $c"
    $r = &$f $c[0] $c[1]
    "$($e-eq$r): actual=$r expected=$e"
}

出力:

      0 1
True: actual=1 expected=1
      1000 2000
True: actual=3 expected=3
      2000 3000
True: actual=6 expected=6
      10000 20000
True: actual=282 expected=282
      101000 102000
True: actual=6 expected=6
      201000 202000
True: actual=10 expected=10
      901000 902000
True: actual=63 expected=63
      100000 200000
True: actual=5280 expected=5280
      123456 654321
True: actual=31607 expected=31607

パワーシェル?私は本当に1が来ていることがわかりませんでした:D
ДмитрийАрхипенко

2

Kotlin、95バイト

{a:Int,b:Int->(a..b).count{val d="%06d".format(it);d.chars().sum()==2*d.take(3).chars().sum()}}

.kt テスト用:

var  f = {a:Int,b:Int->(a..b).count{val d="%06d".format(it);d.chars().sum()==2*d.take(3).chars().sum()}}

fun main(args: Array<String>) {
    println(f(0,1))             // 1
    println(f(1000,2000))       // 3
    println(f(2000,3000))       // 6
    println(f(101000, 102000))  // 6
    println(f(201000, 202000))  // 10
    println(f(901000, 902000))  // 63
    println(f(10000, 20000))    // 282
    println(f(100000, 200000))  // 5280
    println(f(123456, 654321))  // 31607
    println(f(0, 999999))       // 55252
}

説明

すべての数字の合計が最初の3桁の二重合計に等しい範囲から数字をカウントします。



1

パイソン2 83の  80バイト

-3 Asone Tuhidの観察を使用して- クレジットを与えてください!

lambda a,b:sum(sum(map(int,`v/1000`))*2==sum(map(int,`v`))for v in range(a,b+1))

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

私のゼリーの答えとよく似ています(ただし、入力はここでソートする必要があります(例a<=b))


入力用に75バイトa, b+1(つまり、範囲は右境界を除外します):

lambda*r:sum(sum(map(int,`v/1000`))*2==sum(map(int,`v`))for v in range(*r))

これを試して


1

Clojure、102バイト

#(count(for[i(range %(inc %2)):when(=(let[d(map int(format"%06d"i))](apply +(map -(drop 3 d)d)))0)]i))

文字列と数学を混ぜることはあまり楽しくありません。



1

C(gcc)、90 88バイト

l=10;u(c,k,y){for(y=0;c<=k;)c++%l+c/l%l+c/100%l-c/1000%l-c/10000%l-c/100000%l?:++y;c=y;}

私のJava 回答のポート。こちらからオンラインでお試しください。2バイトのゴルフをしてくれたceilingcatに感謝します。

ゴルフをしていない:

l=10; // constant, we will be using the number 10 rather a lot
u(c, k, // function returning an integer and taking two integer arguments: lower and upper bound
  y) { // abusing the argument list to declare a variable of type integer: the number of lucky tickets found in the range
    for(y = 0; c <= k; ) // set count to 0 and loop through the range
        c++ %l + c/l %l + c/100 %l // if the digit sum of the second half of the ticket number ...
        - c/1000 %l - c/10000 %l - c/100000 %l // ... is the same as the digit sum of the first half ...
        ?: ++y; // ... it's a lucky ticket: increment the count
    c = y; // return the count
}

提案L'✐'の代わり10000と割り当て10変数に。
ceilingcat

Iそのようにそれは私に余分な変数名を与えますが、私はいずれかを救うことができなかった10を割り当てることにより、バイト@ceilingcat:bit.ly/2O5ND2YについてはL'…'きちんとだトリックを、。しかし、それはバイトを節約しますか?それはマルチバイト文字であるように思えますので、文字を保存している間、バイトを保存することはできません...またはできますか?
OOBalance

@ceilingcat間違いは、変数に10を割り当てることで2バイトを節約できることです。ありがとうございました。
OOBalance

1

Java 8、101 99バイト

u->l->{int n=0,d=10;for(;l<=u;)if(l++%d+l/d%d+l/100%d==l/1000%d+l/10000%d+l/100000%d)++n;return n;}

他のJava回答とは異なるアプローチ。ストリームと文字列を使用する代わりに、これはループを使用して、数値を直接評価します。こちらからオンラインでお試しください。

2バイトのゴルフをしてくれたceilingcatに感謝します。

ゴルフをしていない:

u -> l -> { // lambda taking two integer arguments in currying syntax and returning an integer
    int n = 0, // the counter
        d = 10; // auxiliary constant, we will be using the number 10 rather a lot
    for(; l <=u ; ) // loop over all ticket numbers in the range
        if(l++ %d + l/d %d + l/100 %d // if the digit sum of the second half of the number ...
           == l/1000 %d + l/10000 %d + l/100000 %d) // ... is the same as the digit sum of the first half ...
            ++n; // ... it's a lucky ticket, add 1 to the counter
    return n; // return the count
}

1

VBA(Excel)、159バイト

[A1] [A2]入力としてイミディエイトウィンドウとセルを使用します。

c=[A1]-[A2]:d=IIf(c<0,[A1],[A2]):For x=d To d+Abs(c):e=String(6-Len(x),"0")&x:For y=1To 3:i=i+Mid(e,y,1):j=j+Mid(e,7-y,1):Next:z=IIf(i=j,z+1,z):i=0:j=0:Next:?z

1

F#、110バイト

let t=string>>Seq.sumBy(int>>(-)48)
let r s e=Seq.where(fun n->t(n/1000)=t(n-(n/1000)*1000)){s..e}|>Seq.length

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

t文字列を数値に変換し、それらを合計します。rからsまでの数値の範囲を取り、e不運な数値を除外します。最初の3桁はによって収集されn/1000ます。次の3桁はによって計算されn-(n/1000)*1000ます。

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