Inval Inval không hợp lệ


27

Ý tưởng này dựa trên thông điệp trò chuyện của @ TùxCräftîñg .

Hãy xem trình tự ví dụ dưới đây:

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

Sau INVALID9đó, nó tiếp tục như thế này:

INVALI0, INVALI1, INVALI2, INVALI3...INVALI9

Và sau INVALI9đó, nó như thế này:

INVAL0, INVAL1, INVAL2, INVAL3...INVAL9

Sau INVAL9đó, nó như thế này:

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

Lưu ý cách chúng tôi tiếp tục xóa một chữ cái khỏi từ INVALIDmỗi lần.

Bạn sẽ tiếp tục lặp lại điều này cho đến khi bạn đạt được một chữ cái, đó là chữ cái I:

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

Bây giờ, nhiệm vụ của bạn là, lấy đầu vào của một từ và tạo ra một chuỗi từ nó giống như ví dụ trên. Mã của bạn cũng phải hoạt động với các chữ cái đơn và trong trường hợp đó, chuỗi kết quả sẽ ngắn hơn.

Bạn có thể chọn bất kỳ định dạng đầu vào và đầu ra nào bạn thích (có hoặc không có dấu phân cách, như bạn muốn), nhưng bạn phải chỉ định định dạng nào bạn đã chọn.

Trình tự cần phải theo thứ tự chính xác.

Mã ngắn nhất, tính bằng byte, hoàn thành thành công thử thách này, chiến thắng thử thách.

Trình tự đầy đủ trong ví dụ trên:

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

Những ví dụ khác:

Dữ liệu vào: MAYBE(Chữ hoa và chữ thường không quan trọng)

Đầu ra:

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


Đầu vào: AFTER

Đầu ra:

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


Đầu vào: 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

Bảng xếp hạng


1
Bạn có thể gửi toàn bộ chuỗi cùng một lúc? Có thể với một số mẫu hơn? Ngoài ra, những gì đầu vào có thể chứa?
DJMcMayhem

1
Là thiếu dấu phân cách (ví dụ INVALID0INVALID1INVALID2) một định dạng đầu ra hợp lệ?
DLosc

@DLosc Vâng, đúng vậy.
Bộ đệm đã đọc

3
Chỉ để bạn biết, nói chung là không khuyến khích chấp nhận một câu trả lời nhanh như vậy sau khi đăng thử thách. Chấp nhận quá sớm có thể không khuyến khích người dùng đăng câu trả lời mới. Điều đó không có nghĩa là bạn không thể giữ câu trả lời được chấp nhận, nhưng tôi khuyến khích bạn nên đợi lâu hơn vào lần tới.
DJMcMayhem

@DJMcMayhem Được rồi!
Bộ đệm đã đọc

Câu trả lời:


5

Thạch , 7 byte

ḣJṚp⁵Ḷ¤

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

ḣ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 byte. Tôi chỉ muốn biết làm thế nào một người nào đó nghĩ ra ý tưởng làm cho mã chính xác này hoạt động với mã golf.
haykam

8

05AB1E , 10 8 byte

.pžmâ€JR

Giải trình

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

Hãy thử trực tuyến!

Đã lưu 2 byte nhờ Adnan


1
.ptương đương với Œ¹g£:).
Ad Nam

1
@Adnan: Nghiêm túc mà nói, làm thế nào tôi có thể quên điều đó một lần nữa! Cảm ơn! Có vẻ như tôi nên nghỉ ngơi: P
Emigna

8

Javascript (ES6), 53 47 byte

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

Đã lưu 6 byte nhờ Peanut & Neil

Đầu ra: tất cả các từ dưới dạng một chuỗi không có dấu phân cách.

Thí dụ

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>


Tiết kiệm cho bạn một byte, giảm xuống còn 52 byte , để không sử dụng các dấu phân cách (được phép) bằng cách không nối thêm khoảng trắng giữa các mục trong mẫu. Hãy thử nó ở đây!
haykam

Bạn không thể sử dụng s&&thay vì s?... :''?
Neil

Ngoài ra, bạn có thể giảm xuống còn 49 byte bằng cách xóa +''phần này khỏi mã cuối cùng tôi đã đăng. Hãy thử nó ở đây!
haykam

Tôi đang sử dụng Firefox và văn bản không bị ngăn cách bởi khoảng trắng. Nó không bắt buộc cho câu hỏi, nhưng tôi nghĩ tôi sẽ cho bạn biết.
Bộ đệm đã đọc

1
@TheBitByte - Xấu của tôi. Không còn dấu phân cách nữa (như được đề xuất bởi Peanut) nhưng tôi quên cập nhật câu trả lời của mình cho phù hợp. Cảm ơn đã chú ý!
Arnauld

7

Perl, 29 byte

Bao gồm +1 cho -n

Chạy với đầu vào trên STDIN:

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

Chỉ cần mã:

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

Mã rất đẹp. Tôi không hiểu điều đó cuối cùng ^... Có vẻ như nó làm công việc tương tự (*FAIL), nhưng tôi không hiểu tại sao. Bạn có thể giải thích?
Dada

@Dada Vâng, buộc một thất bại là chính xác những gì nó làm. Vì nó khớp với ít nhất 1 ký tự từ đầu chuỗi, nên nó không thể bắt đầu được nữa, do đó, ^nguyên nhân khiến trận đấu thất bại khiến cho regex trước đó phải quay lại
TonMedel

Được rồi cảm ơn. Tôi đã mong đợi nó hoạt động với bất kỳ ký tự nào không có trong đầu vào, nhưng dường như nó chỉ hoạt động với ^... Ý tôi là với ví dụ của bạn, tại sao ,/không hoạt động, nhưng ^/có phải không?
Dada

Đó là một chi tiết triển khai của trình tối ưu hóa regex .. Nếu bạn đặt một ký tự cụ thể không nằm trong chuỗi, nó đủ thông minh để biết rằng regex không bao giờ có thể khớp và kết hợp regex thực sự thậm chí không bắt đầu. ^vượt quá sự hiểu biết hiện tại của trình tối ưu hóa. Một trong hai hành vi có thể thay đổi trong tương lai ..
TonMedel

Ok tôi hiểu rồi, tôi nghĩ nó giống như vậy nhưng không chắc chắn. Cảm ơn rất nhiều
Dada

6

Haskell, 47 43 byte

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

Ví dụ sử dụng: f "IN"-> ["IN0","IN1","IN2","IN3","IN4","IN5","IN6","IN7","IN8","IN9","I0","I1","I2","I3","I4","I5","I6","I7","I8","I9"].

Phương pháp đệ quy đơn giản. Nối từng chữ số vào từ và nối một cuộc gọi đệ quy với chữ cái cuối cùng bị xóa.


6

Bình thường, 9 byte

sM*_._QUT

Một chương trình lấy đầu vào của một chuỗi được trích dẫn trên STDIN và in danh sách các chuỗi.

Dùng thử trực tuyến

Làm thế nào nó hoạt động

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 byte

Lấy từ làm đối số cmdline. Đầu ra không có dải phân cách.

Wa&Oa.,tDQa

Hãy thử trực tuyến!

Giải trình:

             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 byte

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

Hãy thử trực tuyến!

Vì phần này chứa các ký tự không thể in được, đây là định dạng có thể đọc được:

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

Và đây là một hexdump:

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

Giải trình:

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 byte:

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

Đơn giản chỉ cần lặp qua một chuỗi [Length of Input,1]và trong mỗi lần lặp, xuất từ ​​đầu vào theo độ dài của thời 9gian giá trị lặp hiện tại với mỗi số được [0,9]gắn vào mỗi 9bản sao của từ. Thực hiện nó trong một tập tin và từ hoặc từ trong ngoặc kép, nghĩa là bash A.sh "blah blah blah".


4

Floroid - 50 47 31 byte

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

Hiện tại sử dụng một phương thức tương tự như @JonathanAllan sử dụng phương thức đệ quy thứ hai của mình.

Có thể là điều này nếu tôi đã triển khai sản phẩm cartesian cẩn thận hơn bằng ngôn ngữ : Bc:ca([c]+[c[:-a-1]KaIw(Z(c)-1)],hd).

Tủ thử

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 byte

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

Lambdabot là một bot IRC tại #haskell; nó tự động nhập một loạt các mô-đun, bao gồm cả Data.Listnơi initsđang sống. Và bởi vì một ngôn ngữ được xác định bởi việc triển khai nó, tôi có thể gọi lambdabot haskell này và không trả các byte cho việc nhập khẩu.

Haskell thường xuyên:

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

Bạn có chắc chắn tailslàm việc?
Bergi

@Bergi, hoàn toàn quên về việc nhập khẩu, cảm ơn vì đã chỉ ra điều đó :)
BlackCap

Tôi không có nghĩa là nhập khẩu, tôi có nghĩa là nó tạo ra đầu ra sai:INVALID, NVALID, VALID, ALID, LID, ID, D,
Bergi

@Bergi, Yike! Bạn đúng. Thêm 8 byte cho tôi sau đó
BlackCap

3

braingasm , 34 33 31 28 byte

Ở trạng thái hiện tại của nó, braingasm chỉ là bộ não được tôn vinh với một vài tính năng bổ sung ( như, 3? ). Tôi đã dành phần lớn thời gian phát triển để biến nó thành "enterprisy" nhất có thể, thay vì thực sự thêm các tính năng ...

Dù sao, đoạn mã sau sẽ hoạt động với ảnh chụp nhanh phát triển mới nhất. Nó nhận đầu vào không có dòng mới từ stdin, thích $ echo -n INVALID | braingasm invalid.bgvà in ra thiết bị xuất chuẩn.

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

Giải trình:

,[>,]                 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

chỉnh sửa: Có vẻ như không sao khi bỏ qua sử dụng chuỗi rỗng làm dấu phân cách


2

Python 2, 53 55 byte

+2 byte: khai báo f là cần thiết với đệ quy (như được chỉ ra bởi dưa hấu @Desturationible)

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

Truy xuất xuống chuỗi trống (thu được một danh sách trống), loại bỏ một ký tự tại một thời điểm và thêm vào danh sách mười chuỗi hiện tại có các chữ số 0-9 được thêm vào mỗi chuỗi.

Kiểm tra trên ideone

Python 3, 54 56 byte

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

Kiểm tra trên ideone


2
Tôi khá chắc chắn rằng nếu lambda của bạn bao gồm một cuộc gọi đến chính nó, bạn cần phải có f=một phần (giống như cách bạn không thể giả sử các biến có giá trị)
Lemon

2

Swift 3, 150 byte

Không hẳn là giải pháp ngắn nhất, nhưng không khủng khiếp cho Swift

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);}

Kiểm tra điều này trực tuyến trong IBM Swift Sandbox

Bị đánh cắp

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

Không có dải phân cách được sử dụng.

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

Thêm các mục sau i%10cho dấu phân cách:

,$/cho dòng mới, ,?|cho |(tương tự cho bất kỳ ký tự có thể in), ,' 'cho không gian.

Trong chương trình thử nghiệm

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

f[gets.chomp]

2

PHP, 64 56 byte

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++;


Cách tốt đẹp để ngăn chặn một vòng lặp for. Bạn có thể tiết kiệm một byte bằng cách loại bỏ các khoảng trắng sau tiếng vang
aross

2

Haskell, 49 46 byte

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

Bạn có thể lưu một byte bằng cách trộn bản f=(>>=(đồ bản đồ ['0'..'9']).snoc).tail.reverse.inits. 3 bằng cách sử dụng fmap:f=(>>=(<$>['0'..'9']).snoc).tail.reverse.inits
BlackCap

Ồ, và nếu bạn làm reverse.tail.initsthay vì tail.reverse.initsbạn cũng nhận được đầu ra chính xác;)
BlackCap

@BlackCap: Cảm ơn, tôi thực sự tự hỏi tại sao không có bản đồ (f) lật trong thư viện tiêu chuẩn, nhưng không nghĩ đến các phần. Về tailý nghĩa, tôi đoán ý tôi là vậy init, nhưng hoán đổi nó với công việc ngược lại cũng tốt :-)
Bergi

2

C #, 107 102 byte

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;}

Bị đánh cắp

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
Bạn có thể đánh gôn một chút bằng cách xóa k++vòng lặp for và thêm ++sau khi sử dụng k, như thế này: 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;}Ngoài ra, dấu phẩy không bắt buộc bởi thách thức của OP, mặc dù nếu bạn thích thì dĩ nhiên bạn có thể giữ chúng. Không có cái này: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 byte

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

Nếu chuỗi rỗng, trả về một mảng trống. Mặt khác, tạo chuỗi + số trong mỗi số từ 0 đến 9 và gọi fvới chuỗi không có ký tự cuối cùng.

Đã lưu 5 byte nhờ @LevelRiverSt


Tôi hiểu rằng bạn chưa chơi gôn ở Ruby trước đây. Kiểm tra câu trả lời của tôi cho câu hỏi này (hoặc nhiều câu trả lời khác của Ruby trên trang web này) để xem cách chơi golf để xác định hàm mà không bao gồm những câu lãng phí defend. Bạn có thể tạo một lambda để bạn thậm chí không đặt tên cho nó, miễn là bạn gán cho một biến và gọi nó bằng các đối số trong ngoặc vuông.
Cấp sông St

@LevelRiverSt Sử dụng lambda dài hơn 1 byte
TuxCrafting

Ok, tôi đã bỏ lỡ thực tế là bạn cần phải đặt tên cho nó bởi vì nó đệ quy. Nhưng vẫn f=->s{if s=="";return[];end;(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}ngắn hơn 5 byte.
Cấp sông St

@LevelRiverSt Ồ, tôi không biết về ->cú pháp
TuxCrafting

f=->s{s==""&&(return[]);(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}tiết kiệm thêm 4 byte. Ruby đánh giá các biểu thức boolean từ trái sang phải và không đánh giá các thuật ngữ sau trừ khi cần thiết để xác định kết quả. Kỹ thuật chơi gôn tương tự có thể được sử dụng trong C. Tôi không biết tại sao ()xung quanh lại return[]được yêu cầu trong trường hợp này.
Cấp sông St

2

Perl 6, 32 = 31 byte + 1 cho -p

Tôi không thành thạo với Perl 6, vì vậy có thể có nhiều cách để giảm nó hơn nữa.

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

Nó sử dụng -pđể đánh giá một lần cho mỗi dòng đầu vào. Dòng được đặt vào $_và sau khi chương trình chạy, nó sẽ in $_.

Các (~$_,*.chop...^!*)là một danh sách mà các yếu tố đầu tiên được chuyển đổi thành chuỗi ( ~) đầu vào, mỗi phần tử tiếp theo là thu được bằng cách cắt các ký tự cuối cùng ra khỏi trước đó ( *.chop) và tiếp tục cho đến khi chuỗi rỗng ( !*), trừ trường hợp chuỗi rỗng (các ^năm ...^) .

X~tạo ra tất cả các cặp danh sách ở bên trái và bên phải, bằng cách sử dụng thao tác được chỉ định, trong trường hợp này, nối chuỗi ( ~) trên chúng. ^10là danh sách 0, 1, ... 9.

Cuối cùng, danh sách được xâu chuỗi lại ~, đưa ra các từ cần thiết có khoảng trắng làm dấu phân cách.


2

PowerShell v2 +, 60 byte

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

Vòng lặp từ độ dài của chuỗi đầu vào xuống 1. Mỗi lần lặp, đặt trình trợ giúp $ibằng số trừ hiện tại 1. Điều này là cần thiết bởi vì .lengthtổng số ký tự, nhưng lập chỉ mục một chuỗi là dựa trên 0. Sau đó, chúng tôi lặp từ 0đến 9. Mỗi vòng lặp bên trong, cắt chuỗi đầu vào $ndựa trên giá trị của vòng lặp bên ngoài của chúng tôi, -joinchuỗi đó trở lại thành chuỗi và nối chuỗi trên số lượng vòng lặp bên trong. Mỗi kết quả vòng lặp riêng lẻ được đặt trên đường ống và đầu ra được ẩn khi hoàn thành chương trình.

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

APL Dyalog , 14 11 byte

Trả về danh sách các chuỗi.

,⎕D∘.,⍨⌽,\⍞

, listify (lập bảng thành danh sách)

⎕D tất cả các chữ số

∘.,⍨ gắn vào tất cả (nghĩa là thực hiện tất cả các kết hợp với)

danh sách đảo ngược của

,\ sự tích lũy tích lũy của

nhập văn bản

Dùng thử trực tuyến!


Đã sửa. Tôi sử dụng một cái nồi và quên điền nó vào.
Adám

2

Groovy (58 byte)

Không biết tại sao tôi thậm chí còn bận tâm đăng câu trả lời Groovy ... Kích thước tối thiểu cần thiết cho một Groovy golf là 2 dựa trên việc cần đóng cửa, vì vậy câu trả lời tốt nhất ở đây là gấp đôi kích thước tối thiểu của tôi.

   {s->(s.length()-1..0).each{c->10.times{print s[0..c]+it}}}

Dùng thử tại đây: https://groovyconsole.appspot.com/script/5148433803378688


2

Hàng loạt, 85 83 byte

@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 byte

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);}

-7 byte nhờ @Poke .

Ung dung :

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);
  }
}

Mã kiểm tra:

Hãy thử nó ở đây.

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");
  }
}

Đầu ra:

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
Bạn có thể lưu 7 byte bằng cách kết hợp các vòng lặp for và thực hiện một số logic bổ sung để xác định ngầm định hậu tố và chuỗi con. 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);}
Chọc

1

Python 3, 62 byte

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

Không sử dụng đệ quy như câu trả lời khác.

Lý do "" trong x+" "đó là: -0 vẫn bằng 0 và vì vậy chúng ta không thể sử dụng ký hiệu trừ để có được tất cả các chuỗi theo cách này vì vậy mức cao nhất chúng ta có thể đi là trừ một, vì vậy "" là để đệm chuỗi,


1

C, 72 , 70 byte

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

Lấy chuỗi là cặp con trỏ / kích thước. Kiểm tra chính:

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

Võng mạc , 37 byte

Số lượng byte giả định mã hóa ISO 8859-1.

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

Hãy thử trực tuyến!

Giải trình

M&!r`.+

Nhận tất cả các tiền tố của đầu vào bằng cách khớp và in tất cả các kết quả trùng lặp từ bên phải.

m`$
0

Nối một 0dòng vào mỗi dòng.

%{`$
¶$%`

Dấu {hiệu cho thấy ba giai đoạn còn lại được thực hiện trong một vòng lặp cho đến khi chúng không thay đổi chuỗi. Các% nói rằng chúng nên được áp dụng cho từng dòng riêng biệt.

Bản thân giai đoạn chỉ đơn giản là sao chép dòng cuối cùng (ban đầu đây chỉ là dòng này được chạy, nhưng mỗi lần lặp của ba giai đoạn lại thêm một dòng khác).

T`w`d`.$

Tăng chữ số ở hàng cuối cùng bằng cách thực hiện thay thế ký tự sau:

from: _0123456789AB...
to:   0123456789

Và cuối cùng:

G10`

Chỉ giữ lại 10 dòng đầu tiên để chúng tôi xóa dòng chúng tôi vừa thêm sau INPUT9.


1

Scala, 73 70 byte

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

Gọi nó như thế f("INVALID") . Trả về một chuỗi các ký tự.

Giải trình

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

Giải pháp thay thế, 73 byte

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

định nghĩa một hàm ẩn danh. Để gọi nó, viết

val f = ...

và gọi nó như thế này

f("INVALID")

Nó trả về một chuỗi các chuỗi, sẽ trông như thế này khi được in:

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)

Giải trình

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

Giải pháp đệ quy của bạn ít hơn 3 byte so với giải pháp lặp lại
TuxCrafting

Bạn nói đúng, tôi phải tối ưu hóa nó sau khi đếm.
corvus_192

1

CJam, 29 28 byte

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

Giải trình:

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

Dùng thử trực tuyến

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.