Geçersiz Invali Inval


27

Bu fikir gevşekçe @ T @xCräftîñg'in sohbet mesajına dayanıyor .

Aşağıdaki örnek diziye bir göz atın:

INVALID0, INVALID1, INVALID2 INVALID3, INVALID4...INVALID9

Sonra INVALID9böyle devam eder:

INVALI0, INVALI1, INVALI2, INVALI3...INVALI9

Ve sonra INVALI9, bu böyle:

INVAL0, INVAL1, INVAL2, INVAL3...INVAL9

Sonra, INVAL9bu böyle:

INVA0, INVA1, INVA2, INVA3, ...INVA9

INVALIDHer seferinde kelimeden bir mektubu nasıl çıkardığımızı fark et .

Bunu, tek bir harfe, yani şu harfe ulaşana kadar tekrarlamaya devam edersiniz I:

I0, I1, I2, I3, I4...I9

Şimdi, sizin görevin, bir kelimenin girişini almak ve yukarıdaki örnekte olduğu gibi ondan bir sıra üretmek. Kodunuz ayrıca tek harflerle de çalışmalıdır ve bu durumda ortaya çıkan sıra daha kısa olacaktır.

Tercih ettiğiniz herhangi bir giriş ve çıkış biçimini seçebilirsiniz (istediğiniz gibi bir ayırıcı ile veya ayırıcı olmadan), ancak hangisini seçtiğinizi belirtmeniz gerekir.

Sıralamanın belirtilen sırada olması gerekir.

Bayt cinsinden bu mücadeleyi başarıyla tamamlayan en kısa kod mücadeleyi kazanır.

Yukarıdaki örnekte tam dizi:

INVALID0, INVALID1, INVALID2, INVALID3, INVALID4, INVALID5, INVALID6, INVALID7, INVALID8, INVALID9, INVALI0, INVALI1, INVALI2, INVALI3, INVALI4, INVALI5, INVALI6, INVALI7, INVALI8, INVALI9, INVAL0, INVAL1, INVAL2, INVAL3, INVAL4, INVAL5, INVAL6, INVAL7, INVAL8, INVAL9, INVA0, INVA1, INVA2, INVA3, INVA4, INVA5, INVA6, INVA7, INVA8, INVA9, INV0, INV1, INV2, INV3, INV4, INV5, INV6, INV7, INV8, INV9, IN0, IN1, IN2, IN3, IN4, IN5, IN6, IN7, IN8, IN9, I0, I1, I2, I3, I4, I5, I6, I7, I8, I9

Diğer örnekler:

Giriş: MAYBE(Büyük harf ve küçük harf farketmez)

Çıktı:

MAYBE0, MAYBE1, MAYBE2, MAYBE3, MAYBE4, MAYBE5, MAYBE6, MAYBE7, MAYBE8, MAYBE9, MAYB0, MAYB1, MAYB2, MAYB3, MAYB4, MAYB5, MAYB6, MAYB7, MAYB8, MAYB9, MAY0, MAY1, MAY2, MAY3, MAY4, MAY5, MAY6, MAY7, MAY8, MAY9, MA0, MA1, MA2, MA3, MA4, MA5, MA6, MA7, MA8, MA9, M0, M1, M2, M3, M4, M5, M6, M7, M8, M9


Giriş: AFTER

Çıktı:

AFTER0, AFTER1, AFTER2, AFTER3, AFTER4, AFTER5, AFTER6, AFTER7, AFTER8, AFTER9, AFTE0, AFTE1, AFTE2, AFTE3, AFTE4, AFTE5, AFTE6, AFTE7, AFTE8, AFTE9, AFT0, AFT1, AFT2, AFT3, AFT4, AFT5, AFT6, AFT7, AFT8, AFT9, AF0, AF1, AF2, AF3, AF4, AF5, AF6, AF7, AF8, AF9, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9


Giriş: WHAT ARE YOU DOING

WHAT ARE YOU DOING0, WHAT ARE YOU DOING1, WHAT ARE YOU DOING2, WHAT ARE YOU DOING3, WHAT ARE YOU DOING4, WHAT ARE YOU DOING5, WHAT ARE YOU DOING6, WHAT ARE YOU DOING7, WHAT ARE YOU DOING8, WHAT ARE YOU DOING9, WHAT ARE YOU DOIN0, WHAT ARE YOU DOIN1, WHAT ARE YOU DOIN2, WHAT ARE YOU DOIN3, WHAT ARE YOU DOIN4, WHAT ARE YOU DOIN5, WHAT ARE YOU DOIN6, WHAT ARE YOU DOIN7, WHAT ARE YOU DOIN8, WHAT ARE YOU DOIN9, WHAT ARE YOU DOI0, WHAT ARE YOU DOI1, WHAT ARE YOU DOI2, WHAT ARE YOU DOI3, WHAT ARE YOU DOI4, WHAT ARE YOU DOI5, WHAT ARE YOU DOI6, WHAT ARE YOU DOI7, WHAT ARE YOU DOI8, WHAT ARE YOU DOI9, WHAT ARE YOU DO0, WHAT ARE YOU DO1, WHAT ARE YOU DO2, WHAT ARE YOU DO3, WHAT ARE YOU DO4, WHAT ARE YOU DO5, WHAT ARE YOU DO6, WHAT ARE YOU DO7, WHAT ARE YOU DO8, WHAT ARE YOU DO9, WHAT ARE YOU D0, WHAT ARE YOU D1, WHAT ARE YOU D2, WHAT ARE YOU D3, WHAT ARE YOU D4, WHAT ARE YOU D5, WHAT ARE YOU D6, WHAT ARE YOU D7, WHAT ARE YOU D8, WHAT ARE YOU D9, WHAT ARE YOU 0, WHAT ARE YOU 1, WHAT ARE YOU 2, WHAT ARE YOU 3, WHAT ARE YOU 4, WHAT ARE YOU 5, WHAT ARE YOU 6, WHAT ARE YOU 7, WHAT ARE YOU 8, WHAT ARE YOU 9, WHAT ARE YOU0, WHAT ARE YOU1, WHAT ARE YOU2, WHAT ARE YOU3, WHAT ARE YOU4, WHAT ARE YOU5, WHAT ARE YOU6, WHAT ARE YOU7, WHAT ARE YOU8, WHAT ARE YOU9, WHAT ARE YO0, WHAT ARE YO1, WHAT ARE YO2, WHAT ARE YO3, WHAT ARE YO4, WHAT ARE YO5, WHAT ARE YO6, WHAT ARE YO7, WHAT ARE YO8, WHAT ARE YO9, WHAT ARE Y0, WHAT ARE Y1, WHAT ARE Y2, WHAT ARE Y3, WHAT ARE Y4, WHAT ARE Y5, WHAT ARE Y6, WHAT ARE Y7, WHAT ARE Y8, WHAT ARE Y9, WHAT ARE 0, WHAT ARE 1, WHAT ARE 2, WHAT ARE 3, WHAT ARE 4, WHAT ARE 5, WHAT ARE 6, WHAT ARE 7, WHAT ARE 8, WHAT ARE 9, WHAT ARE0, WHAT ARE1, WHAT ARE2, WHAT ARE3, WHAT ARE4, WHAT ARE5, WHAT ARE6, WHAT ARE7, WHAT ARE8, WHAT ARE9, WHAT AR0, WHAT AR1, WHAT AR2, WHAT AR3, WHAT AR4, WHAT AR5, WHAT AR6, WHAT AR7, WHAT AR8, WHAT AR9, WHAT A0, WHAT A1, WHAT A2, WHAT A3, WHAT A4, WHAT A5, WHAT A6, WHAT A7, WHAT A8, WHAT A9, WHAT 0, WHAT 1, WHAT 2, WHAT 3, WHAT 4, WHAT 5, WHAT 6, WHAT 7, WHAT 8, WHAT 9, WHAT0, WHAT1, WHAT2, WHAT3, WHAT4, WHAT5, WHAT6, WHAT7, WHAT8, WHAT9, WHA0, WHA1, WHA2, WHA3, WHA4, WHA5, WHA6, WHA7, WHA8, WHA9, WH0, WH1, WH2, WH3, WH4, WH5, WH6, WH7, WH8, WH9, W0, W1, W2, W3, W4, W5, W6, W7, W8, W9

Liderler Sıralaması


1
Tüm sekansı bir kerede gönderebilir misiniz? Muhtemelen biraz daha fazla numune ile? Ayrıca, girdi muhtemelen neler içerebilir?
DJMcMayhem

1
Ayırıcı eksikliği (örn. INVALID0INVALID1INVALID2) Geçerli bir çıktı formatı mıdır?
DLosc

@DLosc Evet, öyle.
Buffer Over Read

3
Sadece bildiğiniz gibi, genellikle soruyu gönderdikten sonra bu kadar çabuk bir cevabı kabul etmekten çekinirsiniz. Çok erken kabul etmek, kullanıcıların yeni cevaplar göndermesini engelleyebilir. Bu , kabul edilen cevabı tutamayacağınız anlamına gelmez , ama bir dahaki sefere daha fazla beklemenizi tavsiye ederim.
DJMcMayhem

@DJMcMayhem Tamam!
Buffer Over Read

Yanıtlar:


5

Jöle , 7 bayt

ḣJṚp⁵Ḷ¤

Çevrimiçi deneyin!

Nasıl çalışır

ḣJṚp⁵Ḷ¤  Main link. Argument: s (string)

 J       Yield all (1-based) indices of s.
ḣ        Head; for each index k, take the first k characters of s.
  Ṛ      Reverse the result.
      ¤  Combine the two links to the left into a niladic chain.
    ⁵      Yield 10.
     Ḷ     Unlength; yield [0, ..., 9].
   p     Return the Cartesian product of the prefixes and the range.
         (implicit) Print the Cartesian product without separators.

6
7 bayt. Ben sadece birisinin bu kodun kod golf ile çalışmasını sağlama fikrinin nasıl olduğunu bilmek istiyorum.
haykam

8

05AB1E , 10 8 bayt

.pžmâ€JR

açıklama

.p        # get prefixes of input
  žmâ     # cartesian product with [9..0]
     €J   # join each
       R  # reverse

Çevrimiçi deneyin!

Adnan sayesinde 2 bayt kaydedildi


1
.peşittir Œ¹g£:).
Adnan

1
@Adnan: Cidden, bunu tekrar nasıl unutabilirdim! Teşekkürler! Mola vermeliyim gibi görünüyor: P
Emigna 3:16

8

Javascript (ES6), 53 47 bayt

f=(s,n=0)=>s&&s+n+f(n-9?s:s.slice(0,-1),++n%10)

Peanut & Neil sayesinde 6 bayt kaydedildi

Çıktı: Tüm sözcükler ayırıcı olmayan tek bir dize olarak.

Örnek

var f=(s,n=0)=>s&&s+n+f(n-9?s:s.slice(0,-1),++n%10)

document.getElementsByTagName('div')[0].innerHTML = f('INVALID')
<div style="word-wrap:break-word"></div>


Desendeki öğeler arasında boşluk bırakarak ayırıcıları kullanmamaya izin veren, bir bayttan 52 bayta düşürerek tasarruf sağlar. Burada dene!
haykam

... s&&yerine kullanamaz mısın? s?:''
Neil

Ayrıca, parçayı son koyduğum son koddan kaldırarak 49 bayta azaltabilirsiniz +''. Burada dene!
haykam

Firefox kullanıyorum ve metin boşluklarla ayrılmıyor. Bu soru için gerekli değil, ama size bildiririm diye düşündüm.
Buffer Over Read

1
@ TheBitByte - Benim kötü. Artık bir ayırıcı yok (Peanut tarafından önerildiği gibi), ancak cevabımı buna göre güncellemeyi unuttum. Fark ettiğiniz için teşekkürler!
Arnauld,

7

Perl, 29 bayt

İçin +1 içerir -n

STDIN'de giriş ile çalıştırın:

perl -nE '/^.+(?{map{say$&.$_}0..9})^/' <<< PERL

Sadece kod:

/^.+(?{map{say$&.$_}0..9})^/

Çok güzel kod. Sonuncusunu ^bile anlamadım ... Görünüşe göre aynı işi yapıyor (*FAIL)ama nedenini bilmiyorum. Açıklar mısın
Dada

@Dada Evet, başarısızlığa zorlamak tam olarak yaptığı şeydir. Dizenin başlangıcından itibaren en az 1 karakter eşleştiği için artık başlangıçta olamaz, bu nedenle ^eşleşmenin başarısız olmasına neden olur, bu daha önce
regex'i

Tamam teşekkürler. Girdide olmayan herhangi bir karakterle çalışmasını bekliyordum, ama sadece çalıştığı görünüyor ^... Örneğiyle demek istediğim, neden ,/çalışmıyor, değil ^/mi?
Dada

Bu, regex optimizer’ın bir uygulama detayıdır .. Eğer dizgeye değil belirli bir karakter koyarsanız, regex'in asla eşleşemeyeceğini ve gerçek regex eşleşmesinin bile başlamadığını bilmek yeterince akıllıdır. ^optimize edicinin mevcut anlayışının ötesindedir. İki davranıştan biri gelecekte değişebilir ..
Ton Hospel

Tamam anladım, böyle bir şey olduğunu düşünmüştüm ama emin değildim. Çok teşekkürler
Dada

6

Haskell, 47 43 bayt

f""=[]
f x=map((x++).show)[0..9]++f(init x)

Kullanım örneği: f "IN"-> ["IN0","IN1","IN2","IN3","IN4","IN5","IN6","IN7","IN8","IN9","I0","I1","I2","I3","I4","I5","I6","I7","I8","I9"].

Basit özyinelemeli yaklaşım. Her basamağı sözcüğe ekleyin ve son harf kaldırılmış olarak özyinelemeli bir arama ekleyin.


6

Pyth, 9 bayt

sM*_._QUT

STDIN'de kote edilmiş bir dizenin girişini alan ve bir dizi listesi basan bir program.

Çevrimiçi deneyin

Nasıl çalışır

sM*_._QUT  Program. Input: Q
    ._     List of prefixes of Q
   _       Reverse
       UT  Unary range up to 10, yielding [0, 1, 2, ..., 9]
  *        Cartesian product of the above two
sM         Map concatenate over the above
           Implicitly print

5

Pip , 12 11 bayt

Sözcüğü bir cmdline argümanı olarak alır. Ayırıcısız çıkışlar.

Wa&Oa.,tDQa

Çevrimiçi deneyin!

Açıklama:

             Implicit: a = 1st cmdline arg, t = 10
Wa           While a (i.e. while it's not the empty string)
   Oa.,t     Concatenate range(10) to a and output
               (Pip concatenates a string to a range itemwise)
  &          The output operation is &-ed to the loop condition to save on curly braces
        DQa  Dequeue from a, removing the final character on each iteration

4

V , 20 bayt

A0òYpó.10/0/e
$hòd

Çevrimiçi deneyin!

Bu, yazdırılamayan karakterler içerdiğinden, okunabilir format:

A0<esc>òYp<C-a>ó.10/0/e
$hòd

Ve işte bir hexdump:

0000000: 4130 1bf2 5970 01f3 2e31 302f 302f 650a  A0..Yp...10/0/e.
0000010: 2468 f264                                $h.d

Açıklama:

A0<esc>                 "Append a '0' to the input
       ò                "Recursively:
        Yp              "  Yank this line and paste it
          <C-a>         "  Increment the first number on this line
               ó        "  Substitute:
                .10     "    Any single character followed by '10'
                   /0   "    Replace it with a '0'
                     /e "    Ignore errors if this is not found
$h                      "  Move to the end of the end of this line than back one.
                        "  This makes it so the loop ends once there is only one
                        "  character on this line.
  ò                     "End the loop
   d                    "Delete a line (since we create one too many)  

4

Bash + coreutils, 54 bayt:

for i in `seq ${#1} 1`;{ printf "${1:0:i}%s " {0..9};}

Basitçe bir dizi [Length of Input,1]boyunca döngüler ve her bir yineleme sırasında, giriş kelimesini kelimenin her bir kopyasına eklenmiş 9olan her sayıyla birlikte geçerli yineleme değeri zamanlarının uzunluğuna çıkarır . Bir dosya içinde ve kelimeyi veya kelimeyi tırnak içinde, yani içinde uygulayın .[0,9]9bash A.sh "blah blah blah"


4

Floroid - 50 47 31 bayt

f=Ba:aM[a+b KbIhd]+f(a[:-1])H[]

Şu anda @JonathanAllan ikinci özyinelemeli yönteminde kullandığı gibi benzer bir yöntem kullanıyor.

Ben dilde daha dikkatli kartezyen ürünü uyguladık olsaydı bu da olabilirdi: Bc:ca([c]+[c[:-a-1]KaIw(Z(c)-1)],hd).

testcases

Input: ABC
Output: ['ABC0', 'ABC1', 'ABC2', 'ABC3', 'ABC4', 'ABC5', 'ABC6', 'ABC7', 'ABC8', 'ABC9', 'AB0', 'AB1', 'AB2', 'AB3', 'AB4', 'AB5', 'AB6', 'AB7', 'AB8', 'AB9', 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9']

Input: M
Output: ['M0', 'M1', 'M2', 'M3', 'M4', 'M5', 'M6', 'M7', 'M8', 'M9']

3

(lambdabot) Haskell - 49 bayt

f q=[x++show n|x<-reverse.tail$inits q,n<-[0..9]]

Lambdabot #haskell adresindeki bir IRC botudur; otomatik olarak, bulunduğu Data.Listyer de dahil olmak üzere, bir demet modülü içe aktarır inits. Ve bir dil uygulaması tarafından tanımlandığı için, bu lambdabot haskell diyebilirim ve ithalatın baytını ödeyemem.

Düzenli Haskell:

import Data.List
f q=[x++show n|x<-reverse.tail$inits q,n<-[0..9]]

İşe tailsyaradığından emin misin?
Bergi

@Bergi, ithalatı tamamen unutmuş, bunu gösterdiğiniz için teşekkürler :)
BlackCap

İthalatı kastetmedim, demek istediğim yanlış çıktı:INVALID, NVALID, VALID, ALID, LID, ID, D,
Bergi

@ Bergi, Yikes! Haklısın. Benim için 8 bayt daha sonra
BlackCap

3

beyin fırtınası , 34 33 31 28 bayt

Mevcut durumda, beyin fırtınası sadece birkaç beyin fırtınası ile yüceltilir ( 3? ) Ekstra özellikle . Geliştirme zamanının çoğunu, aslında özellikler eklemek yerine, olabildiğince "girişimci" yapmak için harcıyorum.

Neyse, aşağıdaki kod en son geliştirme anlık görüntüsüyle çalışmalıdır. Stdin, like gibi yeni satırsız girişleri alır $ echo -n INVALID | braingasm invalid.bgve stdout'a yazdırır.

,[>,]#[48+10[#<[.>]<+]0,<0,]

Açıklama:

,[>,]                 lay down the input on the tape
#[                    (length of input - 1) times do
  48+                   add '0' at the end of the tape
  10[                   10 times do
     #<[.>]               move to start of tape, then print the tape
     <+                   increase the number at the end of the tape
  ]                     done printing current word with 0 through 9
  0,                    erase the number by writing 0 onto it
  <0,                   likewise, remove one character
]                     done

düzenleme: Görünüşe göre sınırlayıcı olarak boş dize kullanımı atlamak için tamam


2

Python 2, 53 55 bayt

+2 bayt: f ifadesini yinelemeyle gereklidir (@ Yıkılabilir Karpuz'un işaret ettiği gibi)

f=lambda s:s and[s+`n`for n in range(10)]+f(s[:-1])or[]

Boş dizgiyi aşağıya çeker (boş bir liste verir), her seferinde bir karakteri keser ve her birine 0-9 basamak eklenmiş geçerli dizinin on'unun bir listesini hazırlar.

İdeone Testi

Python 3, 54 56 bayt

f=lambda s:s and[s+n for n in'0123456789']+f(s[:-1])or[]

İdeone Testi


2
Eğer lambda'nız kendine bir çağrı içeriyorsa, bir f=kısmına sahip olmanız gerektiğine eminim (biraz değişkenlerin nasıl değer alacağını tahmin edemezsiniz)
Destructible Lemon

2

Swift 3, 150 Bayt

En kısa çözüm değil, Swift için korkunç değil

func a(s: String){var c=s.characters,r="";while(c.count>0){var k = "";for d in c{k+=String(d)};for i in 0...9{r+="\(k)\(i) "};c.removeLast()};print(r);}

Bunu çevrimiçi olarak IBM Swift Sandbox'ta test edin

Ungolfed

func a(s s: String){
    var c = s.characters, r = ""
    while(c.count > 0){
        var k = ""
        for d in c{
            k+=String(d)
        }
        for i in 0...9{
            r+="\(k)\(i) "
        }
        c.removeLast()
    }
    print(r)
}

2

Ruby, 51

Ayırıcı kullanılmadı.

->s{(10*n=s.size).times{|i|print s[0,n-i/10],i%10}}

i%10Ayırıcılar için aşağıdakileri ekleyin :

,$/yeni satır için, ,?|için |(basılabilir karakterler için benzeri), ,' 'alan.

Test programında

f=->s{(10*n=s.size).times{|i|print s[0,n-i/10],i%10}}

f[gets.chomp]

2

PHP, 64 56 bayt

for($i=9;$a=substr($argv[1].a,0,-++$i/10);)echo$a.$i%10;

for(;$a=substr($argv[1].a,$i=0,-++$l);)for(;$i<10;)echo $a.$i++;


Başka bir for-loop'u önlemenin iyi bir yolu. Sen yankı sonra boşluk kaldırarak bir byte kaydedebilirsiniz
aross

2

Haskell, 49 46 bayt

f=(>>=(<$>['0'..'9']).snoc).reverse.tail.inits

Harita f=(>>=(haritasını yerleştirerek bir bayt kaydedebilirsiniz ['0'..'9']).snoc).tail.reverse.inits. Fmap kullanarak 3:f=(>>=(<$>['0'..'9']).snoc).tail.reverse.inits
BlackCap

Oh, ve reverse.tail.initsyerine tail.reverse.initsyaparsanız doğru çıktıyı da elde edersiniz;)
BlackCap

@ BlackCap: Teşekkürler, neden standart kütüphanede döndürülmüş (f) harita bulunmadığını merak ettim ama bölümleri düşünmedim. İlgili tailben demek sanırım init:-), ama iyi ya ters işler ile takas
Bergi

2

C #, 107 102 Bayt

string f(string i){var o="";while(i!=""){for(int k=0;k<=9;)o+=i+k++;i=i.Remove(i.Length-1);}return o;}

Ungolfed

string f(string i)
{
   string o = "";
   while(i != "")
   {
      for (int k = 0; k <= 9;)
         o += i + k++;
      i = i.Remove(i.Length - 1);
   }
   return o;
}

1
k++For-döngüsünden çıkardıktan sonra biraz golf oynayabilir ve kullandıktan ++sonra ekleyebilirsin k, bunun gibi: string f(string i){var o="";while(i!=""){for(int k=0;k<=9;)o+=i+k+++",";i=i.Remove(i.Length-1);}return o;}Ayrıca, virgülün OP'nin mücadelesi için zorunlu olması gerekmez, ancak tabii ki onları saklayabilmenizi tercih ediyorsanız. Bu olmadan:string f(string i){var o="";while(i!=""){for(int k=0;k<=9;)o+=i+k++;i=i.Remove(i.Length-1);}return o;}
Kevin Cruijssen

2

Ruby, 90 85 bayt

f=->s{if s=="";return[];end;(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}

Dize boşsa, boş bir dizi döndür. Aksi takdirde, 0'dan 9'a kadar olan her bir sayıdaki string + sayıyı oluşturun vef ve son karakterin bulunmadığı dize ile .

@LevelRiverSt sayesinde 5 bayt kaydedildi


Sanırım daha önce Ruby'de golf oynamadın. Bu israfa cevap vermeden (veya bu sitedeki diğer birçok Ruby cevabı) cevabımı kontrol edin defve bu israfı içermeyen bir fonksiyonu tanımlamanın golf yolunu görün end. Bir lambda yapabilirsiniz, böylece bir değişkene atadığınız ve köşeli parantez içindeki argümanlarla çağırdığınız sürece bir isim bile vermezsiniz.
Seviye River St

@LevelRiverSt Bir lambda kullanmak 1 byte daha uzundur
TuxCrafting 5:16

Tamam, özyinelemeli olduğu için onu isimlendirmen gerek, gerçeğini özledim. Ancak yine f=->s{if s=="";return[];end;(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}de 5 bayt daha kısa.
Level River St

@LevelRiverSt Oh, ->sözdizimi hakkında bir şey bilmiyordum
TuxCrafting

f=->s{s==""&&(return[]);(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}başka bir 4 bayt kaydeder. Ruby, boolean ifadelerini soldan sağa değerlendirir ve sonucu belirlemek için gerekli olmadıkça sonraki şartları değerlendirmez. Aynı golf tekniği C de kullanılabilir . Bu durumda neden ()etrafta return[]gerekli olduğunu bilmiyorum .
Level River St

2

Perl 6, 32 = 31 bayt + 1p

Ben Perl 6 konusunda uzman değilim, bu yüzden daha da azaltmanın yolları olabilir.

$_= ~((~$_,*.chop...^!*)X~ ^10)

Bu kullanan -pher giriş hattı için bir kez değerlendirmek. Satır içine yerleştirilir $_ve program çalıştıktan sonra yazdırılır $_.

Bu (~$_,*.chop...^!*), ilk elemanın stringify ( ~) girişi olduğu, sonraki her elemanın önceki karakterden ( *.chop) en son karakterin kıyılmasıyla elde edildiği !*ve boş karakter dizisinin ( ^in ...^) boş olduğu durumda karakter dizisi boşalana kadar devam eden bir listedir . .

X~Belirtilen işlemi kullanarak soldaki ve sağdaki listelerin tüm çiftlerini oluşturur, bu durumda ~üzerlerindeki string birleştirme ( ). ^100, 1, ... 9'un bir listesidir.

Son olarak, liste, ~boşlukla birlikte gerekli sözcükleri ayırıcı olarak vererek tekrar dizilir .


2

PowerShell v2 +, 60 bayt

param($n)$n.length..1|%{$i=$_-1;0..9|%{-join$n[0..$i]+"$_"}}

Giriş dizgisinin uzunluğundan aşağıya doğru döner 1. Her yineleme, yardımcı $ieksi mevcut sayıya eşit ayarlayın 1. Bu gereklidir, çünkü .lengthtoplam karakter sayısı, ancak bir dizginin indekslenmesi 0 tabanlıdır. Ardından, 'dan' 0a dönüyoruz 9. Her iç döngü, $ndış dizgimizin değerine bağlı olarak girdi dizisini keser, -jointekrar bir dizgeye dönüştürür ve iç döngü sayımı üzerinde dize bitiştirir. Her bir ayrı döngü sonucu boru hattına yerleştirilir ve çıktı programın tamamlanmasında gizlidir.

PS C:\Tools\Scripts\golfing> .\invalid-invali-inval.ps1 'foo'
foo0
foo1
foo2
foo3
foo4
foo5
foo6
foo7
foo8
foo9
fo0
fo1
fo2
fo3
fo4
fo5
fo6
fo7
fo8
fo9
f0
f1
f2
f3
f4
f5
f6
f7
f8
f9

2

Dyalog APL , 14 11 bayt

Dizelerin listesini döndürür.

,⎕D∘.,⍨⌽,\⍞

, listelemek (listeye tablo yapmak)

⎕D tüm basamaklar

∘.,⍨ hepsine eklenir (yani, tüm kombinasyonları yapma)

tersine çevrilmiş listesi

,\ birikimli birleştirme

metin girişi

TryAPL çevrimiçi!


Sabit. Bir klişe kullanmak ve bunu doldurmak için unuttum.
Adam


2

Toplu, 85 83 bayt

@for /l %%i in (0,1,9)do @echo %1%%i
@set s=%1
@if not "%s:~,-1%"=="" %0 %s:~,-1%

2

Java 7, 105 98 bayt

void c(String s){for(int x=0,l=s.length();x<l*10;)System.out.print(s.substring(0,l-x/10)+x++%10);}

@Poke sayesinde -7 bayt .

Ungolfed :

void c(String s){
  for(int x = 0, l = s.length(); x < l*10; ){
    System.out.print(s.substring(0, l - x/10) + x++ % 10);
  }
}

Test kodu:

Burada dene.

class M{
  static void c(String s){for(int x=0,l=s.length();x<l*10;)System.out.print(s.substring(0,l-x/10)+x++%10);}

  public static void main(String[] a){
    c("INVALID");
    System.out.println();
    c("MAYBE");
    System.out.println();
    c("AFTER");
    System.out.println();
    c("WHAT ARE YOU DOING");
  }
}

Çıktı:

INVALID0INVALID1INVALID2INVALID3INVALID4INVALID5INVALID6INVALID7INVALID8INVALID9INVALID0INVALID1INVALID2INVALID3INVALID4INVALID5INVALID6INVALID7INVALID8INVALID9INVALI0INVALI1INVALI2INVALI3INVALI4INVALI5INVALI6INVALI7INVALI8INVALI9INVAL0INVAL1INVAL2INVAL3INVAL4INVAL5INVAL6INVAL7INVAL8INVAL9INVA0INVA1INVA2INVA3INVA4INVA5INVA6INVA7INVA8INVA9INV0INV1INV2INV3INV4INV5INV6INV7INV8INV9IN0IN1IN2IN3IN4IN5IN6IN7IN8IN9I0I1I2I3I4I5I6I7I8I9
MAYBE0MAYBE1MAYBE2MAYBE3MAYBE4MAYBE5MAYBE6MAYBE7MAYBE8MAYBE9MAYBE0MAYBE1MAYBE2MAYBE3MAYBE4MAYBE5MAYBE6MAYBE7MAYBE8MAYBE9MAYB0MAYB1MAYB2MAYB3MAYB4MAYB5MAYB6MAYB7MAYB8MAYB9MAY0MAY1MAY2MAY3MAY4MAY5MAY6MAY7MAY8MAY9MA0MA1MA2MA3MA4MA5MA6MA7MA8MA9M0M1M2M3M4M5M6M7M8M9
AFTER0AFTER1AFTER2AFTER3AFTER4AFTER5AFTER6AFTER7AFTER8AFTER9AFTER0AFTER1AFTER2AFTER3AFTER4AFTER5AFTER6AFTER7AFTER8AFTER9AFTE0AFTE1AFTE2AFTE3AFTE4AFTE5AFTE6AFTE7AFTE8AFTE9AFT0AFT1AFT2AFT3AFT4AFT5AFT6AFT7AFT8AFT9AF0AF1AF2AF3AF4AF5AF6AF7AF8AF9A0A1A2A3A4A5A6A7A8A9
WHAT ARE YOU DOING0WHAT ARE YOU DOING1WHAT ARE YOU DOING2WHAT ARE YOU DOING3WHAT ARE YOU DOING4WHAT ARE YOU DOING5WHAT ARE YOU DOING6WHAT ARE YOU DOING7WHAT ARE YOU DOING8WHAT ARE YOU DOING9WHAT ARE YOU DOING0WHAT ARE YOU DOING1WHAT ARE YOU DOING2WHAT ARE YOU DOING3WHAT ARE YOU DOING4WHAT ARE YOU DOING5WHAT ARE YOU DOING6WHAT ARE YOU DOING7WHAT ARE YOU DOING8WHAT ARE YOU DOING9WHAT ARE YOU DOIN0WHAT ARE YOU DOIN1WHAT ARE YOU DOIN2WHAT ARE YOU DOIN3WHAT ARE YOU DOIN4WHAT ARE YOU DOIN5WHAT ARE YOU DOIN6WHAT ARE YOU DOIN7WHAT ARE YOU DOIN8WHAT ARE YOU DOIN9WHAT ARE YOU DOI0WHAT ARE YOU DOI1WHAT ARE YOU DOI2WHAT ARE YOU DOI3WHAT ARE YOU DOI4WHAT ARE YOU DOI5WHAT ARE YOU DOI6WHAT ARE YOU DOI7WHAT ARE YOU DOI8WHAT ARE YOU DOI9WHAT ARE YOU DO0WHAT ARE YOU DO1WHAT ARE YOU DO2WHAT ARE YOU DO3WHAT ARE YOU DO4WHAT ARE YOU DO5WHAT ARE YOU DO6WHAT ARE YOU DO7WHAT ARE YOU DO8WHAT ARE YOU DO9WHAT ARE YOU D0WHAT ARE YOU D1WHAT ARE YOU D2WHAT ARE YOU D3WHAT ARE YOU D4WHAT ARE YOU D5WHAT ARE YOU D6WHAT ARE YOU D7WHAT ARE YOU D8WHAT ARE YOU D9WHAT ARE YOU 0WHAT ARE YOU 1WHAT ARE YOU 2WHAT ARE YOU 3WHAT ARE YOU 4WHAT ARE YOU 5WHAT ARE YOU 6WHAT ARE YOU 7WHAT ARE YOU 8WHAT ARE YOU 9WHAT ARE YOU0WHAT ARE YOU1WHAT ARE YOU2WHAT ARE YOU3WHAT ARE YOU4WHAT ARE YOU5WHAT ARE YOU6WHAT ARE YOU7WHAT ARE YOU8WHAT ARE YOU9WHAT ARE YO0WHAT ARE YO1WHAT ARE YO2WHAT ARE YO3WHAT ARE YO4WHAT ARE YO5WHAT ARE YO6WHAT ARE YO7WHAT ARE YO8WHAT ARE YO9WHAT ARE Y0WHAT ARE Y1WHAT ARE Y2WHAT ARE Y3WHAT ARE Y4WHAT ARE Y5WHAT ARE Y6WHAT ARE Y7WHAT ARE Y8WHAT ARE Y9WHAT ARE 0WHAT ARE 1WHAT ARE 2WHAT ARE 3WHAT ARE 4WHAT ARE 5WHAT ARE 6WHAT ARE 7WHAT ARE 8WHAT ARE 9WHAT ARE0WHAT ARE1WHAT ARE2WHAT ARE3WHAT ARE4WHAT ARE5WHAT ARE6WHAT ARE7WHAT ARE8WHAT ARE9WHAT AR0WHAT AR1WHAT AR2WHAT AR3WHAT AR4WHAT AR5WHAT AR6WHAT AR7WHAT AR8WHAT AR9WHAT A0WHAT A1WHAT A2WHAT A3WHAT A4WHAT A5WHAT A6WHAT A7WHAT A8WHAT A9WHAT 0WHAT 1WHAT 2WHAT 3WHAT 4WHAT 5WHAT 6WHAT 7WHAT 8WHAT 9WHAT0WHAT1WHAT2WHAT3WHAT4WHAT5WHAT6WHAT7WHAT8WHAT9WHA0WHA1WHA2WHA3WHA4WHA5WHA6WHA7WHA8WHA9WH0WH1WH2WH3WH4WH5WH6WH7WH8WH9W0W1W2W3W4W5W6W7W8W9

1
Ekleri ve alt dizgiyi örtük olarak belirlemek için for döngüler birleştirerek ve bazı ekstra mantıklar yaparak 7 bayt tasarruf edebilirsiniz. void c(String s){for(int x=0,l=s.length();x<l*10;)System.out.print(s.substring(0,l-x/10)+x++%10);}
Poke

1

Python 3, 62 bayt

lambda x:[(x+" ")[:~i//10]+str(i%10)for i in range(len(x)*10)]

Diğer cevaplar gibi özyineleme kullanmaz.

Sebebi "" x+" "var: -0 hala sıfır, ve bu yüzden dizenin tamamını bu şekilde almak için eksi gösterimini kullanamayız, bu yüzden gidebileceğimiz en yüksek eksi bir, yani "" dizi


1

C, 72 , 70 bayt

j;F(char*s,int l){while(l--)for(j=0;j<10;)printf("%.*s%d",l+1,s,j++);}

Dizeleri işaretçi / boyut çiftleri olarak alır. Ana test:

int main() {
  F("INVALID", 7); putchar('\n');
  F("MAYBE", 5); putchar('\n');
  F("AFTER", 5); putchar('\n');
  F("WHAT ARE YOU DOING", 18); putchar('\n');
}

1

Retina , 37 bayt

Bayt sayısı, ISO 8859-1 kodlamasını varsayar.

M&!r`.+
m`$
0
%{`$
¶$%`
T`w`d`.$
G10`

Çevrimiçi deneyin!

açıklama

M&!r`.+

Üst üste gelen tüm eşleşmeleri sağdan eşleştirerek ve yazdırarak girişin tüm öneklerini alın.

m`$
0

0Her satıra bir a ekleyin .

%{`$
¶$%`

{Onlar dizesini değiştirmek için başarısız kadar kalan üç aşama bir döngü içinde yürütülür olduğunu gösterir. %Ayrı ayrı her satırın uygulanması gerektiğini söylüyor.

Sahnenin kendisi son satırı çoğaltır (başlangıçta bu sadece çalıştırılan satırdır, ancak üç aşamadaki her yineleme başka bir satır ekler).

T`w`d`.$

Aşağıdaki karakter değiştirmeyi gerçekleştirerek rakamı son satırda artırın:

from: _0123456789AB...
to:   0123456789

Ve sonunda:

G10`

Yalnızca ilk 10 satırı koruyalım, böylece yeni eklediğimiz satırı kaldırırız INPUT9.


1

Scala, 73 70 bayt

def g(s:String):String=if(s=="")""else(0 to 9 flatMap(s+_))++g(s.init)

Öyle çağır f("INVALID"). Karakter Sırasını döndürür.

açıklama

def g(s:String):String= //defines a method g taking a String as a parameter
                        //and returning a String
if(s=="")""             //guard to prevent infinite recursion
else
    (0 to 9             //create a Range from 0 to 9 (inclusive)
    flatMap(            //map:
        s+_                 //append each number to the string
    ))                  //and flatten
    ++ g(s.init)        //concatenate with g applied to everything but the last element of s

Alternatif çözüm, 73 bayt

(s:String)=>s.scanLeft("")(_+_).tail.reverse.flatMap(x=>(0 to 9)map(x+_))

İsimsiz bir işlevi tanımlar. Aramak için yazmak

val f = ...

ve buna böyle çağır

f("INVALID")

Yazdırıldığında şöyle görünecek bir dizi dizisi döndürür:

Vector(INVALID0, INVALID1, INVALID2, INVALID3, INVALID4, INVALID5, INVALID6, INVALID7, INVALID8, INVALID9, INVALI0, INVALI1, INVALI2, INVALI3, INVALI4, INVALI5, INVALI6, INVALI7, INVALI8, INVALI9, INVAL0, INVAL1, INVAL2, INVAL3, INVAL4, INVAL5, INVAL6, INVAL7, INVAL8, INVAL9, INVA0, INVA1, INVA2, INVA3, INVA4, INVA5, INVA6, INVA7, INVA8, INVA9, INV0, INV1, INV2, INV3, INV4, INV5, INV6, INV7, INV8, INV9, IN0, IN1, IN2, IN3, IN4, IN5, IN6, IN7, IN8, IN9, I0, I1, I2, I3, I4, I5, I6, I7, I8, I9)

açıklama

s.scanLeft("")(_+_)    //accumulate letters from left to right -> Vector("", "I", "IN", "INV", "INVA", "INVAL", "INVALI", "INVALID")
.tail                  //drop the first element
.reverse               //reverse it
.flatMap(x =>          //map each element called x
    (0 to 9)           //create a Range from 0 to 9 (inclusive)
    map(x+_)           //append each number to x
)                      //and flatten

Özyinelemeli çözümünüz yinelemeli olandan 3 bayt daha az
TuxCrafting

Haklısın, saydıktan sonra optimize etmiş olmalıyım.
corvus_192

1

CJam, 29 28 bayt

ls_,,:)W%]~{_[X<aA*A,]zo}fX;

Açıklama:

ls                              read input as string
  _                             duplicate input
   ,,                           create range of length input
      :)W%]                     add 1 to all elements and reverse
           ~                    dump array on stack
            {            }fX    for loop
             _                  duplicate input string
              [X<aA*            slice input string and multiply by 10
                    A,]         range(10)
                       zo       zip array and print (no separator)
                            ;   clear stack

Çevrimiçi deneyin

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.