Kabuk Küresi Golf


11

Bu görev, glob genişletmesinden sonra bir dosyaya en kısa yolu çıkarmaktır.

Kabuk globbing nedir? Çoğu kabukta, *konumdaki herhangi bir karakteri temsil etmek için bir yoldaki karakteri kullanabilirsiniz . Örneğin, dizin foodosyaları içeriyorsa bar bazve asdfsonra foo/b*da genişler foo/bar foo/baz.

Şimdi, geçerli dizinin adında bir dosya içerdiğini ihavealongnameve başka bir şey olmadığını söyleyelim . Bu dosyaya başvurmak istersem *, tam adı yazmak yerine yalnızca bir dosyayı temsil edecek şekilde yazabilirim .

Dizin de adlı bir dosya içeriyorsa, her iki dosyayla eşleşeceği için ialsohavealongnameyapamam *. En azından yapmak zorundayım ih*.

*Desen de aradığım dosyasının üzerinde dizinleri eşleşen için çalışır. Orada sadece iki dizin ise foove barfakat foosadece bir dosya içeren bazve bardosyayı içeren asdf, ben eşleşebilir foo/bazile */baz. Veya daha kısaca */b*,. Eğer barboştu */*çalışacak.

Göreviniz: "Geçerli dizini" temsil eden bir yol dizesi dizisi ve tek bir hedef yol verildiğinde, * s genişletildikten sonra yalnızca bu hedef yola genişletilecek olası en kısa dizeyi çıktılayın.

Hedef yol, kendi dizesi olarak, yol dizisine bir dizin olarak, iletilen yol dizisindeki ilk öğe olarak veya sabit kodlama yapmayan başka bir uygun yol olarak alınabilir. Emin değilseniz yorumlarda sorun.

Hedef yolun "geçerli dizinde" olması garanti edilir.

Tüm yolların yalnızca alfasayısal ASCII (ve /s) içerdiğini varsayabilirsiniz . Köklü (başlangıç /) veya göreli (başlangıç ​​değil) olarak giriş yolları olarak kabul edebilirsiniz /.

Birden fazla eşit derecede kısa olasılık varsa, bunlardan herhangi birini veya hepsini iade edin.

Bu , en az bayt kazanır!

Kevin Cruijssen sayesinde test senaryoları .


4
Bu yüzden dosya isimleri boşluk içermez varsayabiliriz, yeni satırlar, ters eğik çizgi, *, ?, [ vs? Dosya ve dizin adlarının alfasayısal olduğunu belirtmeniz en kolayı olabilir
Ton Hospel

3
Gerçek disk G / Ç kısmı birçok dilde sıkıcı olacaktır. Örneğin perl'de sadece dosya adını alıp tüm yol bileşenlerini değiştirir *ve globilgili olabilecek tüm dosya adlarını almak için perl komutunu çalıştırırdım (örn. foo/bar/bazolur */*/*). Bundan sonra bir dize işleme meydan okuma haline gelir. Ve bu meydan okuma zaten yeterince zor. Bence bu meydan okuma daha temiz olurdu "alfasayısal (ve /) göreli yolların bir listesi göz önüne alındığında , sadece bu mevcut hedef yolla eşleşen en kısa
küreyi bulun

1
@KevinCruijssen Tabii, eğlenceli bir meydan okuma ve çoğunlukla saf golf dillerini uzak tutmalıyım Sanırım gerçek bir programa ihtiyacınız olacak (sıkıcı ve üstel olarak patlayacak en kısa çalışana kadar mümkün olan tüm dizeleri üretmedikçe). ele almanız gereken vakaları zar zor örtmeye başlayın. Kullanım: İşte anter durum a*fseçmek için azzfgelen azzf, azzg, bzzf. a*b*c
İhtiyaca göre

2
@TonHospel İkna oldum. Artık girdi olarak bir yol dizisi alıyorsunuz.
Pavel

4
@ WeijunZhou Girdi hakkındaki fikrimi değiştirdim. Artık bir dizi yol izleyebilirsiniz.
Pavel

Yanıtlar:


8

Perl 5 , 136 107 102 bayt

içerir +2içinn0

STDIN'deki dosyaların listesini verin. İlki hedef dosya olarak kabul edilir

perl -n0E '@a="";for$a(@a){s%%s/(?=$a
)/;/g;$$_//=push@a,map$_.$a,/./g,"\\w*";/^;/>/
;/&&1/!say$a=~s/\\w//gr%e}'
foo/barber/test
foo/barber/testing
foo/barber/coding
foo/test
foo/bar/test
^D

Yeni satırları değişmez hale getirmeden kod:

@a="";for$a(@a){s%%s/(?=$a\n)/;/g;$$_//=push@a,map$_.$a,/./g,"\\w*";/^;/>/\n;/&&1/!say$a=~s/\\w//gr%e}

Çözeltiyi yazdırdıktan sonra bilerek çöküyor.

Hala çok uzun görünüyor (kullanımı $ave 1/0çok garip), ancak bu bir başlangıç ​​ve makul derecede verimli olmalı.

Çevrimiçi deneyin!

Nasıl çalışır

Program aday globları, boş dize ile başlayarak arkadan öne doğru büyüterek oluşturur. Bu bir genişlik ilk bir şekilde, 0 uzunluğunda birinci Neználkovo çalışılmıştır etmez (sadece ``), uzunluk 1 (gibi t, i, *), (gibi bir sonraki uzunluk 2. fb, i*, *g, **), bir sonraki uzunluk 3 ve böylece kadar sadece ilk yolla eşleşen glob bulunur. Bu daha sonra sorunu çözen en kısa glob olacaktır (aynı uzunlukta diğerleri olabilir).

Uzunluğu Neználkovo n+1uzunluğunun Neználkovo oluşturulur nyolları listesini her karakter prepending ile ve aynı zamanda *uzunluğu her bir topak önünde n. Yani mesela uzunluk 3 glob *i*uzunluğu 4 globs katkıda bulunacak f*i*, o*i*, o*i*, /*i*, b*i*... s*i*, t*i*ve nihayet **i*. Giriş yolları listesindeki her karakterin, birden fazla kez görünse veya hiçbir anlam ifade etmese bile önceden eklenmiş olduğuna dikkat edin, çünkü asla eşleşemeyen bir şeye yol açar.

Bunu safça yapmak kombinatoryal bir patlamaya yol açacaktır. Bu nedenle, her aday glob, glob tam bir globun sonunda kullanıldıysa yollardaki hangi noktalarla eşleşebileceğini belirleyerek ne kadar yararlı olduğunu değerlendirir. Bunu ;, eşleşmenin mümkün olduğu her yere bir takarak yapıyorum . Örneğin glob için t*ben dize alacak:

foo/barber/;tes;t
foo/barber/;tes;ting
foo/barber/coding
foo/;tes;t
foo/bar/;tes;t

Bu, globun "ayırt edici gücünü" temsil eder. Tam olarak aynı ayırt edici güce sahip olan her küre eşit derecede iyidir. Tam bir kürenin sonunda bunları birbiri ile değiştirirseniz, hepsi aynı yollarla eşleşir. Böylece en kısa olanı da kullanabilirsiniz.

Bu yüzden uzunluk ngloblarını düşünürken önce ayırt edici gücüne bakıyorum. Daha önce görülmüş nve daha önce düşünülmüş ve genişletilmiş başka bir uzunluk veya daha kısa glob varsa, bu glob anlamsızdır ve budanır. Bu, örneğin **i*aynı ayırt edici güç zaten görüleceği için adaylardan kurtulacak *i*. Ayrıca f*i*, ayırt edici ipin;ve sadece yolların orijinal listesi olun. Sadece ilk imkansız glob kabul edilecektir, diğerlerinin hepsi aynı ayırt edici güce sahip olarak görülecek ve budanacaktır. Ve bu birincisi bile tüm genişlemeleri hala imkansız olduğu ve dikkate alındığında budanacakları için gerçekten genişletilmeyecek. Simüler in*olarak budama i*vb.

Yukarıdakiler çok agresif budamaya yol açar ve bu nedenle program karmaşık vakaları çok kısa sürede halledebilir. Bununla birlikte, büyük bir verimsizlik, aday globlara sadece ;ayırt edici dizenin hedef yol kısmındaki bir öncekinden değil, tüm olası karakterlerle ön ek oluşturmasıdır . A'nın önünde olmayan tüm eklenen karakterler ;sorun değildir çünkü dikkate alındığında budanacak olan imkansız bir küreye yol açarlar, ancak bu karakterleri daha önce ;diğer yollarda bırakır . Sonuçta, program ayrıca verilen yolların herhangi bir kombinasyonunu eşleştirebilecek globs oluşturur. İlk yola konsantre olması gerektiği hakkında hiçbir fikri yok.

Şimdi soruna bir çözüm düşünün. Verilen örnekte olabilir */*er/t. Bu, aşağıdaki ayırt edici dizeyi verir:

;f;o;o;/barber/test
foo/barber/testing
foo/barber/coding
foo/test
foo/bar/test

Bir çözümü ;ilk konumda (böylece ilk yolla eşleşir) ve ;başka bir yolun başında a olmayan (yani diğerleri eşleşmez)

Açıklanan algoritma ile şimdi gerçek programa:

Aday globlar, şu anda @aüzerinde $adurulan glob'u içeren değişkeni kullanarak döngü yaptığım dizide olacaktır . Yerine *topak ben ancak kullanacak \w*böylece $ayerine bir topak bir düzenli ifade aslında. Ben döngü çalışırken döngü dizi dizi öğeleri ekleyebilirsiniz döngü için perl tuhaflık kötüye gidiyorum ve bu yeni öğeler döngüde alacak. Uzunluk n+1globları oluştururken tüm uzunluk nglobları zaten dizi üzerindedir, @abu öncelikle genişliktir.

-n0Seçenek nedeniyle (tüm girdinin üzerinde örtülü döngü) yol listesi, $_her yol bir satırsonu ile sonlandırılmış büyük bir dize olarak bulunur

@a="";                    Start everything with the length 0 glob
for$a(@a){    }           Loop over candidates in a breadth first way

İçinde { }var:

s/(?=$a\n)/;/g            Loop over the paths and insert a ; at every
                          position that the suffix glob can match by
                          looking ahead and checking that the regex
                          under consideration can match up to the end of
                          the path we are in. The distinguishing sting is
                          now in `$_`.

Hata! Sadece yok $_ettim ve bir sonraki döngü için buna ihtiyacım olacak. Yani gerçek çalışma kodunu içine sarın

s%%  ...code.. %e

Bu, başlangıcındaki boş dizeyle eşleşir ve $_neyle değiştirileceğini belirlemek için kod çalıştırmanıza olanak tanır. Emin yaparsanız boş bir dize için bu kod değerlendirir o $_sonunda irade bile ben değişim değişmeden kalır $_sırasında code.

Ben $_ayırt edici dize ile değiştirdikten hemen sonra geri dönme :

$$_//= expression

Bu şöyle:

$seen{$_} //= expression

//perl olduğunu 'defined or. orİkinci argümanın sadece ilk argüman olduğu durumlarda değerlendirildiği kısa bir devre gibidir undef. Ve +=diğer bazı dillerde olduğu gibi bir ödevle birleştirilebilir . Yani eğer anahtar $_karma %seenolduğu undefancak o zaman ifadeyi yürütmek ve anahtarına değer olarak atayın (var olmayan bir eleman erişirken ne olsun hangi) $_. Bu yüzden expressiongeri dönmediğinden emin olursam undef, temelde "sadece bu ayırt edici dizeyi ilk defa gördüğümüzde ifadeyi değerlendir" anlamına gelir. Ve $_içerdiği garanti edildiği \niçin, perl global karmasını ayırt edici dizeleri saklamak için kötüye kullanmak aslında güvenlidir $$_.$seen{$_}

İçin expressionben kullanımı:

push@a,map$_.$a,/./g,"\\w*"

Temel olarak "ayırt edici dize her karakter için (satırsonu hariç) ve aynı zamanda *geçerli glob başına ve aday glob dizi itin". Yürütmek \w*için *geçerli bir regex almak için kullanın ( ''yerine ""bir ters eğik kurtulmak için kullanabilirsiniz ama sonra komut satırından kodumu çalıştıramadı). Uyarı Bu da alır o ;ve aday Neználkovo ekler ama daha sonra restore bunları test ederken $_hiçbir olan ;yine imkansız bir topak olacak ve budanmış olsun o.

/^;/>/\n;/ &&      If the distinguishing string corresponds to a solution

say$a=~s/\\w//gr   Then replace all \w* back to * and print the solution

1/!                Say returns 1 so this becomes a division by 0.
                   The program exits by crashing after solving it

/^;/>/\n;/Bir çözüm bulunamaması durumunda boş dizeye eşdeğer bir değere sahip olduğuna dikkat edin , bu boş değiştirme dizesi olarak işlev görür ve $_geri yüklenir


Ben olsun TIO bir hata ama yerel olarak çalışır. Bunun neden olduğunu biliyor musun?
Pavel

1
@Pavel En -Eson dil seviyesini etkinleştirir. Sen az Perl ihtiyacınız 5.10.0kullanmak mümkün say. Bu yüzden use 5.10.0;başlık bölümüne koyun ve işe yarayacaktır. Dil düzeyini ayarlama seçenekleri, bunu yapamasanız bile yine de ücretsiz olarak sayılır -E. Aslında tüm seçenekler bugünlerde ücretsiz olarak sayılır (bu yüzden saymak zorunda bile değilim n0) ama perl için çok yumuşak olduğunu düşünüyorum
Ton Hospel

2
Hata ile çıkmak iyidir , bu nedenle 1/çözümünüz geçerlidir! Bunu da hatırlamam gerekiyor ...
Dom Hastings

7

Java 10, 854 824 796 738 728 703 688 655 652 647 624 bayt

import java.util.*;a->f->{var L=new Stack();List<String>s;int i=999,j,k;for(var t:f.split("/")){s=new java.util.concurrent.CopyOnWriteArrayList();s.add(t);for(k=1;k>0;){k=0;for(var x:s)for(j=0;j<x.length();)if(!s.contains(f=x.substring(0,j)+"~"+x.substring(++j))){s.add(f);k=1;}}for(var x:s)s.add(x.replaceAll("~+","\\*"));L.add(s);}p(L,s=new Stack(),0,f="");for(var y:s){k=0;for(var x:a)if(x.matches(y.replace("*",".*"))&x.split("/").length==y.split("/").length)k++;if(k==1&(j=y.length())<i){f=y;i=j;}}return f;};void p(List L,List r,int d,String c){if(d==L.size())r.add(c);else for(var o:(List)L.get(d))p(L,r,d+1,c+"/"+o);}

Ne dağınıklık .. Bu kesinlikle Java kolay bir meydan okuma değil. Kesinlikle birkaç yüz bayt tarafından golf edilebilir, ama sonunda çalıştığı için mutluyum. Sana söylemiştim. :) @ceilingcat
sayesinde -5 bayt . -23 bayt Java 8'den Java 10'a geçiş

Dosya yollarının bir String dizisi olarak (dizinler ayrılmış öğeler olarak /ve bir satır aralığı içeren tüm öğelerle ) ve girilecek girdi dosya yoluna sahip bir String olarak girin.

Açıklama:

Çevrimiçi deneyin. ( ialsohavealongname/ İle test vakalarının ihavealongnameaswelluzunluğu biraz azaltılır ve yerine 60+ sn sonra zaman aşımı yerine TIO'da 5-10 saniye içinde çalışmak s.add(x.replaceAll("~+","\\*"));üzere değiştirilir {s.remove(x);s.add(x.replaceAll("~+","\\*"));}.)

import java.util.*;   // Required import for List and Stack

// Method with String-array and String parameters and String return-type
a->f->{
  var L=new Stack();  //  Create a List of Lists
  List<String>s;      //  List of Strings (uninitialized)
  int i=999,j,k;      //  Three integers (`i` starting at 999,
                      //   because 260 is the maximum file-path length in Windows)
  for(var t:f.split("/")){
                      //  Loop over the input file-path split by "/":
    s=new java.util.concurrent.CopyOnWriteArrayList();
                      //  Create a List (which we can modify while iterating it)
    s.add(t);         //  Add the input to this List
    for(k=1;k>0;){    //  Loop as long as there are new items added to the List
      k=0;            //   Reset the newAdded-flag to false
      for(var x:s)    //   And inner loop over the List
        for(j=0;j<t.length();)
                      //    Inner loop `j` in range [0,length-of-item):
          if(!s.contains(f=x.substring(0,j)+"~"+x.substring(++j))){
                      //     Replace the character at index `j` with a '~'
                      //     And if it's a new item:
            s.add(f); //      Add it to the List
            k=1;}}    //      And set the newAdded-flag to true
    for(var x:s)      //  Loop over the List again
      s.add(x.replaceAll("~+","\\*")));
                      //   And replace all 1 or more '~' with a single asterisk
                      //   (NOTE: To reduce bytes it doesn't remove the existing items)
    L.add(s);}        //   Add this List to the List of Lists
  p(L,s=new Stack(),0,"");
                      //  Generate all permutations of the groppings
                      //  (List `s` now contains all groppings of the given file-path)
  for(var y:s){       //  Loop over the groppings in the String-List:
    k=0;              //   Reset integer `k` to 0
    for(var x:a)      //   Inner loop over the input file-paths:
      if(x.matches(y.replace("*",".*"))
                      //    If the current file-path matches the current gropping
         x.split("/").length==y.split("/").length)
                      //    and the amount of slashes are the same:
         k++;         //     Increase integer `k` by 1
    if(k==1           //   If only one of the file-paths matched,
       &(j=y.length())<i){
                      //   and the length is shorter than `i`:
      f=y;            //    Replace the result with this gropping file-path
      i=j;}}          //    And also replace `i` with this shorter `j`
  return f;}          //  Finally return this shortest gropping file-path

// Separated method to generate gropping file-path permutations given a List of Lists
void p(List L,List r,int d,String c){
  if(d==L.size())     //  If we've reached the final depth
    r.add(c);         //   Add the current gropping-file path to the result-List
  else                //  Else:
    for(var o:(List)L.get(d))
                      //   Loop over the List of the current depth:
      p(L,r,d+1,      //    Recursive call with depth+1,
        c+"/"+o);}    //    and current + "/" + item of loop

Ek genel açıklama:

Örnek: /foo, /foo/bar, /foo/barber, /foo/bar/test, /foo/barber/test, /foo/barber/testing, /foo/barber/coding, /foo/testVerilen dosya yollarını ve foo/bar/testgirilecek girdi dosya yolunu ele alalım .

1) Dosya yolu girişini bölerek /başlarım ve bu ayrı kelimelerin tüm groppings'lerini oluşturuyorum:

foo: [foo, *oo, f*o, fo*, *o, *o*, f*, *]
bar: [bar, *ar, b*r, ba*, *r, *a*, b*, *]
test: [test, *est, t*st, te*t, tes*, *st, *e*t, *es*, t*t, t*s*, te*, *t, *s*, *e*, t*, *]

2) Daha sonra bu kelimelerle tüm permütasyonları aynı sırayla üretiyorum ( /arasındaki ve önündeki yeniden uygulama):

[/foo/bar/test, /foo/bar/*est, /foo/bar/t*st, /foo/bar/te*t, /foo/bar/tes*, /foo/bar/*st, /foo/bar/*e*t, /foo/bar/*es*, /foo/bar/t*t, /foo/bar/t*s*, /foo/bar/te*, /foo/bar/*t, /foo/bar/*s*, /foo/bar/*e*, /foo/bar/t*, /foo/bar/*, /foo/*ar/test, /foo/*ar/*est, /foo/*ar/t*st, /foo/*ar/te*t, /foo/*ar/tes*, /foo/*ar/*st, /foo/*ar/*e*t, /foo/*ar/*es*, /foo/*ar/t*t, /foo/*ar/t*s*, /foo/*ar/te*, /foo/*ar/*t, /foo/*ar/*s*, /foo/*ar/*e*, /foo/*ar/t*, /foo/*ar/*, /foo/b*r/test, /foo/b*r/*est, /foo/b*r/t*st, /foo/b*r/te*t, /foo/b*r/tes*, /foo/b*r/*st, /foo/b*r/*e*t, /foo/b*r/*es*, /foo/b*r/t*t, /foo/b*r/t*s*, /foo/b*r/te*, /foo/b*r/*t, /foo/b*r/*s*, /foo/b*r/*e*, /foo/b*r/t*, /foo/b*r/*, /foo/ba*/test, /foo/ba*/*est, /foo/ba*/t*st, /foo/ba*/te*t, /foo/ba*/tes*, /foo/ba*/*st, /foo/ba*/*e*t, /foo/ba*/*es*, /foo/ba*/t*t, /foo/ba*/t*s*, /foo/ba*/te*, /foo/ba*/*t, /foo/ba*/*s*, /foo/ba*/*e*, /foo/ba*/t*, /foo/ba*/*, /foo/*r/test, /foo/*r/*est, /foo/*r/t*st, /foo/*r/te*t, /foo/*r/tes*, /foo/*r/*st, /foo/*r/*e*t, /foo/*r/*es*, /foo/*r/t*t, /foo/*r/t*s*, /foo/*r/te*, /foo/*r/*t, /foo/*r/*s*, /foo/*r/*e*, /foo/*r/t*, /foo/*r/*, /foo/*a*/test, /foo/*a*/*est, /foo/*a*/t*st, /foo/*a*/te*t, /foo/*a*/tes*, /foo/*a*/*st, /foo/*a*/*e*t, /foo/*a*/*es*, /foo/*a*/t*t, /foo/*a*/t*s*, /foo/*a*/te*, /foo/*a*/*t, /foo/*a*/*s*, /foo/*a*/*e*, /foo/*a*/t*, /foo/*a*/*, /foo/b*/test, /foo/b*/*est, /foo/b*/t*st, /foo/b*/te*t, /foo/b*/tes*, /foo/b*/*st, /foo/b*/*e*t, /foo/b*/*es*, /foo/b*/t*t, /foo/b*/t*s*, /foo/b*/te*, /foo/b*/*t, /foo/b*/*s*, /foo/b*/*e*, /foo/b*/t*, /foo/b*/*, /foo/*/test, /foo/*/*est, /foo/*/t*st, /foo/*/te*t, /foo/*/tes*, /foo/*/*st, /foo/*/*e*t, /foo/*/*es*, /foo/*/t*t, /foo/*/t*s*, /foo/*/te*, /foo/*/*t, /foo/*/*s*, /foo/*/*e*, /foo/*/t*, /foo/*/*, /*oo/bar/test, /*oo/bar/*est, /*oo/bar/t*st, /*oo/bar/te*t, /*oo/bar/tes*, /*oo/bar/*st, /*oo/bar/*e*t, /*oo/bar/*es*, /*oo/bar/t*t, /*oo/bar/t*s*, /*oo/bar/te*, /*oo/bar/*t, /*oo/bar/*s*, /*oo/bar/*e*, /*oo/bar/t*, /*oo/bar/*, /*oo/*ar/test, /*oo/*ar/*est, /*oo/*ar/t*st, /*oo/*ar/te*t, /*oo/*ar/tes*, /*oo/*ar/*st, /*oo/*ar/*e*t, /*oo/*ar/*es*, /*oo/*ar/t*t, /*oo/*ar/t*s*, /*oo/*ar/te*, /*oo/*ar/*t, /*oo/*ar/*s*, /*oo/*ar/*e*, /*oo/*ar/t*, /*oo/*ar/*, /*oo/b*r/test, /*oo/b*r/*est, /*oo/b*r/t*st, /*oo/b*r/te*t, /*oo/b*r/tes*, /*oo/b*r/*st, /*oo/b*r/*e*t, /*oo/b*r/*es*, /*oo/b*r/t*t, /*oo/b*r/t*s*, /*oo/b*r/te*, /*oo/b*r/*t, /*oo/b*r/*s*, /*oo/b*r/*e*, /*oo/b*r/t*, /*oo/b*r/*, /*oo/ba*/test, /*oo/ba*/*est, /*oo/ba*/t*st, /*oo/ba*/te*t, /*oo/ba*/tes*, /*oo/ba*/*st, /*oo/ba*/*e*t, /*oo/ba*/*es*, /*oo/ba*/t*t, /*oo/ba*/t*s*, /*oo/ba*/te*, /*oo/ba*/*t, /*oo/ba*/*s*, /*oo/ba*/*e*, /*oo/ba*/t*, /*oo/ba*/*, /*oo/*r/test, /*oo/*r/*est, /*oo/*r/t*st, /*oo/*r/te*t, /*oo/*r/tes*, /*oo/*r/*st, /*oo/*r/*e*t, /*oo/*r/*es*, /*oo/*r/t*t, /*oo/*r/t*s*, /*oo/*r/te*, /*oo/*r/*t, /*oo/*r/*s*, /*oo/*r/*e*, /*oo/*r/t*, /*oo/*r/*, /*oo/*a*/test, /*oo/*a*/*est, /*oo/*a*/t*st, /*oo/*a*/te*t, /*oo/*a*/tes*, /*oo/*a*/*st, /*oo/*a*/*e*t, /*oo/*a*/*es*, /*oo/*a*/t*t, /*oo/*a*/t*s*, /*oo/*a*/te*, /*oo/*a*/*t, /*oo/*a*/*s*, /*oo/*a*/*e*, /*oo/*a*/t*, /*oo/*a*/*, /*oo/b*/test, /*oo/b*/*est, /*oo/b*/t*st, /*oo/b*/te*t, /*oo/b*/tes*, /*oo/b*/*st, /*oo/b*/*e*t, /*oo/b*/*es*, /*oo/b*/t*t, /*oo/b*/t*s*, /*oo/b*/te*, /*oo/b*/*t, /*oo/b*/*s*, /*oo/b*/*e*, /*oo/b*/t*, /*oo/b*/*, /*oo/*/test, /*oo/*/*est, /*oo/*/t*st, /*oo/*/te*t, /*oo/*/tes*, /*oo/*/*st, /*oo/*/*e*t, /*oo/*/*es*, /*oo/*/t*t, /*oo/*/t*s*, /*oo/*/te*, /*oo/*/*t, /*oo/*/*s*, /*oo/*/*e*, /*oo/*/t*, /*oo/*/*, /f*o/bar/test, /f*o/bar/*est, /f*o/bar/t*st, /f*o/bar/te*t, /f*o/bar/tes*, /f*o/bar/*st, /f*o/bar/*e*t, /f*o/bar/*es*, /f*o/bar/t*t, /f*o/bar/t*s*, /f*o/bar/te*, /f*o/bar/*t, /f*o/bar/*s*, /f*o/bar/*e*, /f*o/bar/t*, /f*o/bar/*, /f*o/*ar/test, /f*o/*ar/*est, /f*o/*ar/t*st, /f*o/*ar/te*t, /f*o/*ar/tes*, /f*o/*ar/*st, /f*o/*ar/*e*t, /f*o/*ar/*es*, /f*o/*ar/t*t, /f*o/*ar/t*s*, /f*o/*ar/te*, /f*o/*ar/*t, /f*o/*ar/*s*, /f*o/*ar/*e*, /f*o/*ar/t*, /f*o/*ar/*, /f*o/b*r/test, /f*o/b*r/*est, /f*o/b*r/t*st, /f*o/b*r/te*t, /f*o/b*r/tes*, /f*o/b*r/*st, /f*o/b*r/*e*t, /f*o/b*r/*es*, /f*o/b*r/t*t, /f*o/b*r/t*s*, /f*o/b*r/te*, /f*o/b*r/*t, /f*o/b*r/*s*, /f*o/b*r/*e*, /f*o/b*r/t*, /f*o/b*r/*, /f*o/ba*/test, /f*o/ba*/*est, /f*o/ba*/t*st, /f*o/ba*/te*t, /f*o/ba*/tes*, /f*o/ba*/*st, /f*o/ba*/*e*t, /f*o/ba*/*es*, /f*o/ba*/t*t, /f*o/ba*/t*s*, /f*o/ba*/te*, /f*o/ba*/*t, /f*o/ba*/*s*, /f*o/ba*/*e*, /f*o/ba*/t*, /f*o/ba*/*, /f*o/*r/test, /f*o/*r/*est, /f*o/*r/t*st, /f*o/*r/te*t, /f*o/*r/tes*, /f*o/*r/*st, /f*o/*r/*e*t, /f*o/*r/*es*, /f*o/*r/t*t, /f*o/*r/t*s*, /f*o/*r/te*, /f*o/*r/*t, /f*o/*r/*s*, /f*o/*r/*e*, /f*o/*r/t*, /f*o/*r/*, /f*o/*a*/test, /f*o/*a*/*est, /f*o/*a*/t*st, /f*o/*a*/te*t, /f*o/*a*/tes*, /f*o/*a*/*st, /f*o/*a*/*e*t, /f*o/*a*/*es*, /f*o/*a*/t*t, /f*o/*a*/t*s*, /f*o/*a*/te*, /f*o/*a*/*t, /f*o/*a*/*s*, /f*o/*a*/*e*, /f*o/*a*/t*, /f*o/*a*/*, /f*o/b*/test, /f*o/b*/*est, /f*o/b*/t*st, /f*o/b*/te*t, /f*o/b*/tes*, /f*o/b*/*st, /f*o/b*/*e*t, /f*o/b*/*es*, /f*o/b*/t*t, /f*o/b*/t*s*, /f*o/b*/te*, /f*o/b*/*t, /f*o/b*/*s*, /f*o/b*/*e*, /f*o/b*/t*, /f*o/b*/*, /f*o/*/test, /f*o/*/*est, /f*o/*/t*st, /f*o/*/te*t, /f*o/*/tes*, /f*o/*/*st, /f*o/*/*e*t, /f*o/*/*es*, /f*o/*/t*t, /f*o/*/t*s*, /f*o/*/te*, /f*o/*/*t, /f*o/*/*s*, /f*o/*/*e*, /f*o/*/t*, /f*o/*/*, /fo*/bar/test, /fo*/bar/*est, /fo*/bar/t*st, /fo*/bar/te*t, /fo*/bar/tes*, /fo*/bar/*st, /fo*/bar/*e*t, /fo*/bar/*es*, /fo*/bar/t*t, /fo*/bar/t*s*, /fo*/bar/te*, /fo*/bar/*t, /fo*/bar/*s*, /fo*/bar/*e*, /fo*/bar/t*, /fo*/bar/*, /fo*/*ar/test, /fo*/*ar/*est, /fo*/*ar/t*st, /fo*/*ar/te*t, /fo*/*ar/tes*, /fo*/*ar/*st, /fo*/*ar/*e*t, /fo*/*ar/*es*, /fo*/*ar/t*t, /fo*/*ar/t*s*, /fo*/*ar/te*, /fo*/*ar/*t, /fo*/*ar/*s*, /fo*/*ar/*e*, /fo*/*ar/t*, /fo*/*ar/*, /fo*/b*r/test, /fo*/b*r/*est, /fo*/b*r/t*st, /fo*/b*r/te*t, /fo*/b*r/tes*, /fo*/b*r/*st, /fo*/b*r/*e*t, /fo*/b*r/*es*, /fo*/b*r/t*t, /fo*/b*r/t*s*, /fo*/b*r/te*, /fo*/b*r/*t, /fo*/b*r/*s*, /fo*/b*r/*e*, /fo*/b*r/t*, /fo*/b*r/*, /fo*/ba*/test, /fo*/ba*/*est, /fo*/ba*/t*st, /fo*/ba*/te*t, /fo*/ba*/tes*, /fo*/ba*/*st, /fo*/ba*/*e*t, /fo*/ba*/*es*, /fo*/ba*/t*t, /fo*/ba*/t*s*, /fo*/ba*/te*, /fo*/ba*/*t, /fo*/ba*/*s*, /fo*/ba*/*e*, /fo*/ba*/t*, /fo*/ba*/*, /fo*/*r/test, /fo*/*r/*est, /fo*/*r/t*st, /fo*/*r/te*t, /fo*/*r/tes*, /fo*/*r/*st, /fo*/*r/*e*t, /fo*/*r/*es*, /fo*/*r/t*t, /fo*/*r/t*s*, /fo*/*r/te*, /fo*/*r/*t, /fo*/*r/*s*, /fo*/*r/*e*, /fo*/*r/t*, /fo*/*r/*, /fo*/*a*/test, /fo*/*a*/*est, /fo*/*a*/t*st, /fo*/*a*/te*t, /fo*/*a*/tes*, /fo*/*a*/*st, /fo*/*a*/*e*t, /fo*/*a*/*es*, /fo*/*a*/t*t, /fo*/*a*/t*s*, /fo*/*a*/te*, /fo*/*a*/*t, /fo*/*a*/*s*, /fo*/*a*/*e*, /fo*/*a*/t*, /fo*/*a*/*, /fo*/b*/test, /fo*/b*/*est, /fo*/b*/t*st, /fo*/b*/te*t, /fo*/b*/tes*, /fo*/b*/*st, /fo*/b*/*e*t, /fo*/b*/*es*, /fo*/b*/t*t, /fo*/b*/t*s*, /fo*/b*/te*, /fo*/b*/*t, /fo*/b*/*s*, /fo*/b*/*e*, /fo*/b*/t*, /fo*/b*/*, /fo*/*/test, /fo*/*/*est, /fo*/*/t*st, /fo*/*/te*t, /fo*/*/tes*, /fo*/*/*st, /fo*/*/*e*t, /fo*/*/*es*, /fo*/*/t*t, /fo*/*/t*s*, /fo*/*/te*, /fo*/*/*t, /fo*/*/*s*, /fo*/*/*e*, /fo*/*/t*, /fo*/*/*, /*o/bar/test, /*o/bar/*est, /*o/bar/t*st, /*o/bar/te*t, /*o/bar/tes*, /*o/bar/*st, /*o/bar/*e*t, /*o/bar/*es*, /*o/bar/t*t, /*o/bar/t*s*, /*o/bar/te*, /*o/bar/*t, /*o/bar/*s*, /*o/bar/*e*, /*o/bar/t*, /*o/bar/*, /*o/*ar/test, /*o/*ar/*est, /*o/*ar/t*st, /*o/*ar/te*t, /*o/*ar/tes*, /*o/*ar/*st, /*o/*ar/*e*t, /*o/*ar/*es*, /*o/*ar/t*t, /*o/*ar/t*s*, /*o/*ar/te*, /*o/*ar/*t, /*o/*ar/*s*, /*o/*ar/*e*, /*o/*ar/t*, /*o/*ar/*, /*o/b*r/test, /*o/b*r/*est, /*o/b*r/t*st, /*o/b*r/te*t, /*o/b*r/tes*, /*o/b*r/*st, /*o/b*r/*e*t, /*o/b*r/*es*, /*o/b*r/t*t, /*o/b*r/t*s*, /*o/b*r/te*, /*o/b*r/*t, /*o/b*r/*s*, /*o/b*r/*e*, /*o/b*r/t*, /*o/b*r/*, /*o/ba*/test, /*o/ba*/*est, /*o/ba*/t*st, /*o/ba*/te*t, /*o/ba*/tes*, /*o/ba*/*st, /*o/ba*/*e*t, /*o/ba*/*es*, /*o/ba*/t*t, /*o/ba*/t*s*, /*o/ba*/te*, /*o/ba*/*t, /*o/ba*/*s*, /*o/ba*/*e*, /*o/ba*/t*, /*o/ba*/*, /*o/*r/test, /*o/*r/*est, /*o/*r/t*st, /*o/*r/te*t, /*o/*r/tes*, /*o/*r/*st, /*o/*r/*e*t, /*o/*r/*es*, /*o/*r/t*t, /*o/*r/t*s*, /*o/*r/te*, /*o/*r/*t, /*o/*r/*s*, /*o/*r/*e*, /*o/*r/t*, /*o/*r/*, /*o/*a*/test, /*o/*a*/*est, /*o/*a*/t*st, /*o/*a*/te*t, /*o/*a*/tes*, /*o/*a*/*st, /*o/*a*/*e*t, /*o/*a*/*es*, /*o/*a*/t*t, /*o/*a*/t*s*, /*o/*a*/te*, /*o/*a*/*t, /*o/*a*/*s*, /*o/*a*/*e*, /*o/*a*/t*, /*o/*a*/*, /*o/b*/test, /*o/b*/*est, /*o/b*/t*st, /*o/b*/te*t, /*o/b*/tes*, /*o/b*/*st, /*o/b*/*e*t, /*o/b*/*es*, /*o/b*/t*t, /*o/b*/t*s*, /*o/b*/te*, /*o/b*/*t, /*o/b*/*s*, /*o/b*/*e*, /*o/b*/t*, /*o/b*/*, /*o/*/test, /*o/*/*est, /*o/*/t*st, /*o/*/te*t, /*o/*/tes*, /*o/*/*st, /*o/*/*e*t, /*o/*/*es*, /*o/*/t*t, /*o/*/t*s*, /*o/*/te*, /*o/*/*t, /*o/*/*s*, /*o/*/*e*, /*o/*/t*, /*o/*/*, /*o*/bar/test, /*o*/bar/*est, /*o*/bar/t*st, /*o*/bar/te*t, /*o*/bar/tes*, /*o*/bar/*st, /*o*/bar/*e*t, /*o*/bar/*es*, /*o*/bar/t*t, /*o*/bar/t*s*, /*o*/bar/te*, /*o*/bar/*t, /*o*/bar/*s*, /*o*/bar/*e*, /*o*/bar/t*, /*o*/bar/*, /*o*/*ar/test, /*o*/*ar/*est, /*o*/*ar/t*st, /*o*/*ar/te*t, /*o*/*ar/tes*, /*o*/*ar/*st, /*o*/*ar/*e*t, /*o*/*ar/*es*, /*o*/*ar/t*t, /*o*/*ar/t*s*, /*o*/*ar/te*, /*o*/*ar/*t, /*o*/*ar/*s*, /*o*/*ar/*e*, /*o*/*ar/t*, /*o*/*ar/*, /*o*/b*r/test, /*o*/b*r/*est, /*o*/b*r/t*st, /*o*/b*r/te*t, /*o*/b*r/tes*, /*o*/b*r/*st, /*o*/b*r/*e*t, /*o*/b*r/*es*, /*o*/b*r/t*t, /*o*/b*r/t*s*, /*o*/b*r/te*, /*o*/b*r/*t, /*o*/b*r/*s*, /*o*/b*r/*e*, /*o*/b*r/t*, /*o*/b*r/*, /*o*/ba*/test, /*o*/ba*/*est, /*o*/ba*/t*st, /*o*/ba*/te*t, /*o*/ba*/tes*, /*o*/ba*/*st, /*o*/ba*/*e*t, /*o*/ba*/*es*, /*o*/ba*/t*t, /*o*/ba*/t*s*, /*o*/ba*/te*, /*o*/ba*/*t, /*o*/ba*/*s*, /*o*/ba*/*e*, /*o*/ba*/t*, /*o*/ba*/*, /*o*/*r/test, /*o*/*r/*est, /*o*/*r/t*st, /*o*/*r/te*t, /*o*/*r/tes*, /*o*/*r/*st, /*o*/*r/*e*t, /*o*/*r/*es*, /*o*/*r/t*t, /*o*/*r/t*s*, /*o*/*r/te*, /*o*/*r/*t, /*o*/*r/*s*, /*o*/*r/*e*, /*o*/*r/t*, /*o*/*r/*, /*o*/*a*/test, /*o*/*a*/*est, /*o*/*a*/t*st, /*o*/*a*/te*t, /*o*/*a*/tes*, /*o*/*a*/*st, /*o*/*a*/*e*t, /*o*/*a*/*es*, /*o*/*a*/t*t, /*o*/*a*/t*s*, /*o*/*a*/te*, /*o*/*a*/*t, /*o*/*a*/*s*, /*o*/*a*/*e*, /*o*/*a*/t*, /*o*/*a*/*, /*o*/b*/test, /*o*/b*/*est, /*o*/b*/t*st, /*o*/b*/te*t, /*o*/b*/tes*, /*o*/b*/*st, /*o*/b*/*e*t, /*o*/b*/*es*, /*o*/b*/t*t, /*o*/b*/t*s*, /*o*/b*/te*, /*o*/b*/*t, /*o*/b*/*s*, /*o*/b*/*e*, /*o*/b*/t*, /*o*/b*/*, /*o*/*/test, /*o*/*/*est, /*o*/*/t*st, /*o*/*/te*t, /*o*/*/tes*, /*o*/*/*st, /*o*/*/*e*t, /*o*/*/*es*, /*o*/*/t*t, /*o*/*/t*s*, /*o*/*/te*, /*o*/*/*t, /*o*/*/*s*, /*o*/*/*e*, /*o*/*/t*, /*o*/*/*, /f*/bar/test, /f*/bar/*est, /f*/bar/t*st, /f*/bar/te*t, /f*/bar/tes*, /f*/bar/*st, /f*/bar/*e*t, /f*/bar/*es*, /f*/bar/t*t, /f*/bar/t*s*, /f*/bar/te*, /f*/bar/*t, /f*/bar/*s*, /f*/bar/*e*, /f*/bar/t*, /f*/bar/*, /f*/*ar/test, /f*/*ar/*est, /f*/*ar/t*st, /f*/*ar/te*t, /f*/*ar/tes*, /f*/*ar/*st, /f*/*ar/*e*t, /f*/*ar/*es*, /f*/*ar/t*t, /f*/*ar/t*s*, /f*/*ar/te*, /f*/*ar/*t, /f*/*ar/*s*, /f*/*ar/*e*, /f*/*ar/t*, /f*/*ar/*, /f*/b*r/test, /f*/b*r/*est, /f*/b*r/t*st, /f*/b*r/te*t, /f*/b*r/tes*, /f*/b*r/*st, /f*/b*r/*e*t, /f*/b*r/*es*, /f*/b*r/t*t, /f*/b*r/t*s*, /f*/b*r/te*, /f*/b*r/*t, /f*/b*r/*s*, /f*/b*r/*e*, /f*/b*r/t*, /f*/b*r/*, /f*/ba*/test, /f*/ba*/*est, /f*/ba*/t*st, /f*/ba*/te*t, /f*/ba*/tes*, /f*/ba*/*st, /f*/ba*/*e*t, /f*/ba*/*es*, /f*/ba*/t*t, /f*/ba*/t*s*, /f*/ba*/te*, /f*/ba*/*t, /f*/ba*/*s*, /f*/ba*/*e*, /f*/ba*/t*, /f*/ba*/*, /f*/*r/test, /f*/*r/*est, /f*/*r/t*st, /f*/*r/te*t, /f*/*r/tes*, /f*/*r/*st, /f*/*r/*e*t, /f*/*r/*es*, /f*/*r/t*t, /f*/*r/t*s*, /f*/*r/te*, /f*/*r/*t, /f*/*r/*s*, /f*/*r/*e*, /f*/*r/t*, /f*/*r/*, /f*/*a*/test, /f*/*a*/*est, /f*/*a*/t*st, /f*/*a*/te*t, /f*/*a*/tes*, /f*/*a*/*st, /f*/*a*/*e*t, /f*/*a*/*es*, /f*/*a*/t*t, /f*/*a*/t*s*, /f*/*a*/te*, /f*/*a*/*t, /f*/*a*/*s*, /f*/*a*/*e*, /f*/*a*/t*, /f*/*a*/*, /f*/b*/test, /f*/b*/*est, /f*/b*/t*st, /f*/b*/te*t, /f*/b*/tes*, /f*/b*/*st, /f*/b*/*e*t, /f*/b*/*es*, /f*/b*/t*t, /f*/b*/t*s*, /f*/b*/te*, /f*/b*/*t, /f*/b*/*s*, /f*/b*/*e*, /f*/b*/t*, /f*/b*/*, /f*/*/test, /f*/*/*est, /f*/*/t*st, /f*/*/te*t, /f*/*/tes*, /f*/*/*st, /f*/*/*e*t, /f*/*/*es*, /f*/*/t*t, /f*/*/t*s*, /f*/*/te*, /f*/*/*t, /f*/*/*s*, /f*/*/*e*, /f*/*/t*, /f*/*/*, /*/bar/test, /*/bar/*est, /*/bar/t*st, /*/bar/te*t, /*/bar/tes*, /*/bar/*st, /*/bar/*e*t, /*/bar/*es*, /*/bar/t*t, /*/bar/t*s*, /*/bar/te*, /*/bar/*t, /*/bar/*s*, /*/bar/*e*, /*/bar/t*, /*/bar/*, /*/*ar/test, /*/*ar/*est, /*/*ar/t*st, /*/*ar/te*t, /*/*ar/tes*, /*/*ar/*st, /*/*ar/*e*t, /*/*ar/*es*, /*/*ar/t*t, /*/*ar/t*s*, /*/*ar/te*, /*/*ar/*t, /*/*ar/*s*, /*/*ar/*e*, /*/*ar/t*, /*/*ar/*, /*/b*r/test, /*/b*r/*est, /*/b*r/t*st, /*/b*r/te*t, /*/b*r/tes*, /*/b*r/*st, /*/b*r/*e*t, /*/b*r/*es*, /*/b*r/t*t, /*/b*r/t*s*, /*/b*r/te*, /*/b*r/*t, /*/b*r/*s*, /*/b*r/*e*, /*/b*r/t*, /*/b*r/*, /*/ba*/test, /*/ba*/*est, /*/ba*/t*st, /*/ba*/te*t, /*/ba*/tes*, /*/ba*/*st, /*/ba*/*e*t, /*/ba*/*es*, /*/ba*/t*t, /*/ba*/t*s*, /*/ba*/te*, /*/ba*/*t, /*/ba*/*s*, /*/ba*/*e*, /*/ba*/t*, /*/ba*/*, /*/*r/test, /*/*r/*est, /*/*r/t*st, /*/*r/te*t, /*/*r/tes*, /*/*r/*st, /*/*r/*e*t, /*/*r/*es*, /*/*r/t*t, /*/*r/t*s*, /*/*r/te*, /*/*r/*t, /*/*r/*s*, /*/*r/*e*, /*/*r/t*, /*/*r/*, /*/*a*/test, /*/*a*/*est, /*/*a*/t*st, /*/*a*/te*t, /*/*a*/tes*, /*/*a*/*st, /*/*a*/*e*t, /*/*a*/*es*, /*/*a*/t*t, /*/*a*/t*s*, /*/*a*/te*, /*/*a*/*t, /*/*a*/*s*, /*/*a*/*e*, /*/*a*/t*, /*/*a*/*, /*/b*/test, /*/b*/*est, /*/b*/t*st, /*/b*/te*t, /*/b*/tes*, /*/b*/*st, /*/b*/*e*t, /*/b*/*es*, /*/b*/t*t, /*/b*/t*s*, /*/b*/te*, /*/b*/*t, /*/b*/*s*, /*/b*/*e*, /*/b*/t*, /*/b*/*, /*/*/test, /*/*/*est, /*/*/t*st, /*/*/te*t, /*/*/tes*, /*/*/*st, /*/*/*e*t, /*/*/*es*, /*/*/t*t, /*/*/t*s*, /*/*/te*, /*/*/*t, /*/*/*s*, /*/*/*e*, /*/*/t*, /*/*/*]

3) Daha sonra yukarıdaki bu listedeki öğelerin üzerine dönüp dosya yollarının giriş dizisindeki tek bir dosya yoluyla eşleşip eşleşmediğini doğrularım. (Bunu iki şeyi kontrol ederek yaparım: eğik çizgi miktarı aynıdır ve her *birinin yerini aldığı normal ifade ile eşleşir .*.)
Eğer yaparsa: sonunda geri döndüğümüz (ilk) en kısa tutun.


Nedir >>>? >>Bitsel sağa kaydırma olduğunu biliyorum .
Pavel

2
@Pavel Pozitif tamsayılar >>>için olduğu gibi çalışır >>. Ancak negatif tamsayılar için parite bitini 0 olarak değiştirir ( burada " >> vs >>> " bölümünde bazı örnekler görebilirsiniz ). -1>>>1daha kısa bir çeşididir Integer.MAX_VALUE(ve 1<<31olur Integer.MIN_VALUE).
Kevin Cruijssen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.