Invali Inval ไม่ถูกต้อง


27

ความคิดนี้ขึ้นอยู่กับข้อความแชทของ @ TùxCräftîñgอย่างหลวม ๆ

ดูลำดับตัวอย่างด้านล่าง:

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

หลังจากINVALID9นั้นจะเป็นเช่นนี้:

INVALI0, INVALI1, INVALI2, INVALI3...INVALI9

และหลังจากINVALI9นั้นก็เป็นเช่นนี้:

INVAL0, INVAL1, INVAL2, INVAL3...INVAL9

หลังจากนั้นINVAL9ก็เป็นเช่นนี้:

INVA0, INVA1, INVA2, INVA3...INVA9

สังเกตว่าเราจะลบจดหมายออกจากคำINVALIDในแต่ละครั้ง

คุณจะทำซ้ำจนกว่าจะถึงตัวอักษรเดียวนั่นคือตัวอักษรI:

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

ตอนนี้งานของคุณคือการรับอินพุตของคำและสร้างลำดับจากมันเหมือนตัวอย่างข้างต้น รหัสของคุณจะต้องทำงานด้วยตัวอักษรเดียวและในกรณีนั้นลำดับผลลัพธ์จะสั้นลง

คุณสามารถเลือกรูปแบบอินพุตและเอาต์พุตใดก็ได้ที่คุณต้องการ (มีหรือไม่มีตัวคั่นตามที่คุณต้องการ) แต่คุณต้องระบุว่าคุณเลือกรูปแบบใด

ลำดับจะต้องอยู่ในลำดับที่ระบุแน่นอน

รหัสที่สั้นที่สุดในหน่วยไบต์ซึ่งจะทำสิ่งที่ท้าทายให้สำเร็จชนะการท้าทาย

ลำดับเต็มในตัวอย่างข้างต้น:

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

ตัวอย่างอื่น ๆ :

อินพุต: MAYBE(ตัวพิมพ์ใหญ่และตัวพิมพ์เล็กไม่สำคัญ)

เอาท์พุท:

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


การป้อนข้อมูล: AFTER

เอาท์พุท:

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


การป้อนข้อมูล: 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

ลีดเดอร์บอร์ด


1
คุณสามารถโพสต์ลำดับทั้งหมดได้ในครั้งเดียวหรือไม่ อาจเป็นไปได้ที่มีตัวอย่างเพิ่มเติมหรือไม่ นอกจากนี้อินพุตอาจมีอะไรบ้าง
DJMcMayhem

1
ไม่มีตัวคั่น (เช่นINVALID0INVALID1INVALID2) รูปแบบเอาต์พุตที่ถูกต้องหรือไม่?
DLosc

@DLosc ใช่มันเป็น
บัฟเฟอร์อ่านมากกว่า

3
เพียงเพื่อให้คุณรู้ว่ามันเป็นกำลังใจให้ยอมรับคำตอบอย่างรวดเร็วหลังจากโพสต์ความท้าทาย การยอมรับเร็วเกินไปอาจทำให้ผู้ใช้ไม่สามารถโพสต์คำตอบใหม่ได้ ไม่ได้หมายความว่าคุณไม่สามารถตอบคำถามได้ แต่ฉันขอแนะนำให้คุณรออีกต่อไปในครั้งต่อไป
DJMcMayhem

@DJMcMayhem ตกลง!
Buffer Over อ่าน

คำตอบ:


5

เยลลี่ขนาด 7 ไบต์

ḣJṚp⁵Ḷ¤

ลองออนไลน์!

มันทำงานอย่างไร

ḣ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ไบต์ ฉันแค่อยากรู้ว่ามีใครบางคนคิดอย่างไรกับการสร้างรหัสที่ถูกต้องกับกอล์ฟรหัส
haykam

8

05AB1E , 10 8 ไบต์

.pžmâ€JR

คำอธิบาย

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

ลองออนไลน์!

บันทึก 2 ไบต์ต้องขอบคุณAdnan


1
.pเทียบเท่ากับŒ¹g£:)
Adnan

1
@Adnan: อย่างจริงจังฉันจะลืมมันได้อย่างไรอีกครั้ง! ขอบคุณ! ดูเหมือนว่าฉันควรหยุดพัก: P
Emigna

8

Javascript (ES6), 53 47 ไบต์

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

บันทึกแล้ว 6 ไบต์ขอบคุณ Peanut & Neil

เอาต์พุต: คำทั้งหมดเป็นสตริงเดียวโดยไม่มีตัวคั่น

ตัวอย่าง

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>


บันทึกหนึ่งไบต์ลดให้เหลือ52 ไบต์เพื่อไม่ใช้ตัวคั่น(ซึ่งอนุญาต)โดยไม่ต่อท้ายช่องว่างระหว่างรายการในรูปแบบ ลองที่นี่!
haykam

คุณไม่สามารถใช้s&&แทนs?... :''?
Neil

นอกจากนี้คุณสามารถลดขนาดได้ถึง49 ไบต์ด้วยการลบ+''ส่วนหนึ่งออกจากรหัสสุดท้ายที่ฉันโพสต์ ลองที่นี่!
haykam

ฉันใช้ Firefox และข้อความไม่ได้ถูกคั่นด้วยช่องว่าง มันไม่จำเป็นสำหรับคำถามนี้ แต่ฉันคิดว่าฉันจะบอกให้คุณรู้
บัฟเฟอร์อ่านมากกว่า

1
@TheBitByte - แย่จัง ไม่มีตัวคั่นอีกต่อไป (ตามที่แนะนำโดย Peanut) แต่ฉันลืมอัปเดตคำตอบตามนั้น ขอบคุณที่สังเกต!
Arnauld

7

Perl, 29 ไบต์

รวม +1 สำหรับ -n

รันด้วยอินพุตบน STDIN:

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

เพียงแค่รหัส:

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

รหัสที่ดีมาก ฉันไม่เข้าใจว่าครั้งสุดท้าย^... ดูเหมือนว่าจะทำงานได้เหมือน(*FAIL)กัน แต่ฉันไม่เห็นว่าทำไม คุณช่วยอธิบายได้ไหม
Dada

@Dada ใช่การบังคับให้ล้มเหลวนั้นเป็นสิ่งที่ทำ เนื่องจากมันจับคู่อย่างน้อย 1 ตัวอักษรตั้งแต่เริ่มต้นของสตริงจึงไม่สามารถเริ่มต้นได้อีกต่อไปดังนั้น^สาเหตุที่ทำให้การแข่งขันล้มเหลวซึ่งบังคับให้ regex ก่อนหน้านั้นจะย้อนกลับ
Ton Hospel

โอเคขอบคุณ. ฉันคาดหวังว่ามันจะทำงานกับตัวละครที่ไม่ได้อยู่ในอินพุต แต่ดูเหมือนจะทำงานกับ^... ฉันหมายถึงตัวอย่างของคุณทำไม,/ไม่ทำงาน แต่^/ทำไม่ได้?
Dada

มันเป็นรายละเอียดการนำไปใช้ของเครื่องมือเพิ่มประสิทธิภาพ regex ถ้าคุณใส่อักขระเฉพาะที่ไม่ได้อยู่ในสตริงมันก็ฉลาดพอที่จะรู้ว่า regex ไม่สามารถจับคู่ได้และการจับคู่ regex จริงยังไม่เริ่มต้น ^อยู่นอกเหนือความเข้าใจในปัจจุบันของเครื่องมือเพิ่มประสิทธิภาพ พฤติกรรมสองอย่างใดอย่างหนึ่งอาจเปลี่ยนแปลงได้ในอนาคต ..
Ton Hospel

ตกลงฉันเข้าใจแล้วฉันคิดว่ามันเป็นอย่างนั้น แต่ก็ไม่แน่ใจ ขอบคุณมาก
Dada

6

Haskell, 47 43 ไบต์

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

ตัวอย่างการใช้: f "IN"->["IN0","IN1","IN2","IN3","IN4","IN5","IN6","IN7","IN8","IN9","I0","I1","I2","I3","I4","I5","I6","I7","I8","I9"] ->

วิธีการเรียกซ้ำง่าย ต่อท้ายแต่ละหลักด้วยคำและผนวกการเรียกซ้ำด้วยการลบจดหมายสุดท้าย


6

Pyth, 9 ไบต์

sM*_._QUT

โปรแกรมที่รับอินพุตของสตริงที่ยกมาบน STDIN และพิมพ์รายการของสตริง

ลองออนไลน์

มันทำงานอย่างไร

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 ไบต์

ใช้คำว่าเป็นอาร์กิวเมนต์ cmdline เอาต์พุตที่ไม่มีตัวคั่น

Wa&Oa.,tDQa

ลองออนไลน์!

คำอธิบาย:

             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 ไบต์

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

ลองออนไลน์!

เนื่องจากสิ่งนี้มีอักขระที่ไม่สามารถพิมพ์ได้นี่คือรูปแบบที่สามารถอ่านได้:

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

และนี่คือ hexdump:

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

คำอธิบาย:

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 ไบต์:

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

เพียงวนลูปผ่านลำดับ[Length of Input,1]และระหว่างการวนซ้ำแต่ละครั้งเอาต์พุตคำอินพุตไปที่ความยาวของค่าการวนซ้ำปัจจุบันที่9มีจำนวนแต่ละครั้ง[0,9]ต่อท้ายแต่ละ9สำเนาของคำ bash A.sh "blah blah blah"ดำเนินการได้ภายในไฟล์และคำพูดหรือคำในเครื่องหมายคำพูดเช่น


4

Floroid - 50 47 31 ไบต์

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

ขณะนี้ใช้วิธีที่คล้ายกันกับ@JonathanAllanใช้กับวิธีแบบเรียกซ้ำครั้งที่สองของเขา

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 ไบต์

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

Lambdabot เป็นบอท IRC ที่ #haskell มันนำเข้าโมดูลจำนวนมากโดยอัตโนมัติData.Listซึ่งรวมถึงที่ที่initsมีการถ่ายทอดสด และเนื่องจากภาษาถูกกำหนดโดยการนำไปใช้ฉันจึงสามารถเรียก lambdabot นี้ว่ามีลูกได้และไม่จ่ายไบต์สำหรับการนำเข้า

Haskell ปกติ:

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

คุณแน่ใจtailsเหรอ
Bergi

@Bergi โดยสิ้นเชิงลืมเกี่ยวกับการนำเข้าขอบคุณสำหรับการชี้ให้เห็นว่า :)
blackcap

ผมไม่ได้หมายความว่าการนำเข้าที่ฉันหมายความว่ามันผลิตการส่งออกที่ไม่ถูกต้อง:INVALID, NVALID, VALID, ALID, LID, ID, D,
Bergi

@ Bergi, Yikes! คุณถูก. 8 ไบต์สำหรับฉันอีกแล้ว
BlackCap

3

braingasm , 34 33 31 28 ไบต์

ที่สถานะปัจจุบัน braingasm เป็นเพียง brainfuck สรรเสริญเพียงไม่กี่ ( เช่น 3?คุณสมบัติพิเศษ ) ฉันใช้เวลาส่วนใหญ่ในการพัฒนาทำให้ "กล้าได้กล้าเสีย" ที่สุดเท่าที่จะทำได้แทนที่จะเพิ่มคุณสมบัติ ...

อย่างไรก็ตามรหัสต่อไปนี้ควรทำงานกับภาพรวมการพัฒนาล่าสุด ใช้อินพุต newline-less จาก stdin, like $ echo -n INVALID | braingasm invalid.bgและพิมพ์ไปที่ stdout

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

คำอธิบาย:

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

แก้ไข: ดูเหมือนว่าตกลงเพื่อข้ามการใช้สตริงว่างเป็นตัวคั่น


2

Python 2, 53 55 ไบต์

+2 ไบต์: การประกาศ f เป็นสิ่งที่จำเป็นเมื่อเรียกซ้ำ (ตามที่ระบุโดย @ แตงโมที่ทำลายได้)

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

เรียกซ้ำไปยังสตริงว่าง (ให้ผลลัพธ์รายการว่าง) ตัดอักขระทีละครั้งและเสริมด้วยรายการสตริงสิบบรรทัดปัจจุบันที่มีตัวเลข 0-9 ต่อท้ายแต่ละตัว

ทดสอบบนideone

Python 3, 54 56 ไบต์

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

ทดสอบบนideone


2
ฉันค่อนข้างแน่ใจว่าถ้าแลมบ์ดาของคุณมีการเรียกตัวเองคุณต้องมีf=ส่วน (เช่นวิธีที่คุณไม่สามารถคิดว่าตัวแปรมีค่า)
Destructible Lemon

2

Swift 3, 150 Bytes

ไม่ใช่วิธีที่สั้นที่สุด แต่ไม่น่ากลัวสำหรับ 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);}

ทดสอบออนไลน์นี้ใน IBM Swift Sandbox

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

ทับทิม, 51

ไม่มีการใช้ตัวคั่น

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

เพิ่มรายการต่อไปนี้หลังจากi%10สำหรับตัวคั่น:

,$/สำหรับบรรทัดใหม่,?|สำหรับ|(คล้ายกับอักขระที่พิมพ์ได้) ,' 'สำหรับช่องว่าง

ในการทดสอบโปรแกรม

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

f[gets.chomp]

2

PHP, 64 56 ไบต์

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


เป็นวิธีที่ดีในการป้องกันการวนซ้ำอีกครั้ง คุณสามารถประหยัด byte ได้โดยการลบช่องว่างหลังจาก echo
aross

2

Haskell, 49 46 ไบต์

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

คุณสามารถบันทึกไบต์โดย infixing แผนที่แผนที่f=(>>=( ['0'..'9']).snoc).tail.reverse.inits3 โดยใช้ fmap:f=(>>=(<$>['0'..'9']).snoc).tail.reverse.inits
BlackCap

โอ้และถ้าคุณทำreverse.tail.initsแทนคุณtail.reverse.initsก็จะได้ผลลัพธ์ที่ถูกต้องด้วย)
BlackCap

@BlackCap: ขอบคุณฉันสงสัยจริงๆว่าทำไมไม่มีการพลิกแผนที่ (f) ในไลบรารีมาตรฐาน แต่ไม่ได้คิดถึงส่วน เกี่ยวกับtailผมคิดว่าผมหมายinitแต่มันแลกกับผลงานกลับปรับทั้ง :-)
Bergi

2

C #, 107 102 ไบต์

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-loop และเพิ่ม++หลังจากการใช้งานkเช่นนี้: 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;}นอกจากนี้เครื่องหมายจุลภาคไม่จำเป็นต้องใช้กับความท้าทายของ OP แม้ว่าคุณจะชอบที่จะเก็บมันไว้ โดยที่ไม่เป็นเช่นนี้: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 ไบต์

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

ถ้าสตริงว่างให้ส่งคืนอาร์เรย์ว่าง มิฉะนั้นสร้างสตริง + หมายเลขในแต่ละหมายเลขจาก 0 ถึง 9 และโทรfด้วยสตริงที่ไม่มีอักขระตัวสุดท้าย

บันทึก 5 ไบต์ด้วย @LevelRiverSt


ฉันคิดว่าคุณไม่เคยเล่นกอล์ฟใน Ruby มาก่อน ตรวจสอบคำตอบของฉันคำถามนี้ (หรือหลายคำตอบทับทิมอื่น ๆ บนเว็บไซต์นี้) เพื่อดูวิธี golfy เพื่อกำหนดฟังก์ชั่นโดยไม่รวมถึงผู้ที่สิ้นเปลืองและdef endคุณสามารถสร้างแลมบ์ดาเพื่อที่คุณจะไม่ได้ตั้งชื่อมันตราบใดที่คุณกำหนดให้กับตัวแปรและเรียกมันด้วยอาร์กิวเมนต์ในวงเล็บเหลี่ยม
เลเวลริเวอร์เซนต์

@LevelRiverSt การใช้แลมบ์ดานานกว่า 1 ไบต์
TuxCrafting

ตกลงฉันพลาดความจริงที่ว่าคุณจำเป็นต้องตั้งชื่อเพราะมันเป็นแบบเรียกซ้ำ แต่ยังคงf=->s{if s=="";return[];end;(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}สั้นกว่า 5 ไบต์
เลเวลริเวอร์เซนต์

@LevelRiverSt โอ้ฉันไม่รู้เกี่ยวกับ->ไวยากรณ์
TuxCrafting

f=->s{s==""&&(return[]);(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}บันทึกอีก 4 ไบต์ Ruby ประเมินค่านิพจน์บูลีนจากซ้ายไปขวาและไม่ประเมินค่าคำศัพท์ในภายหลังเว้นแต่จำเป็นต้องระบุผลลัพธ์ เทคนิคการตีกอล์ฟแบบเดียวกันนั้นสามารถใช้ใน C. ฉันไม่รู้ว่าทำไมต้องใช้()รอบreturn[]ในกรณีนี้
เลเวลริเวอร์เซนต์

2

Perl 6, 32 = 31 ไบต์ + 1 สำหรับ -p

ฉันไม่ใช่ทุกคนที่มีความเชี่ยวชาญใน Perl 6 ดังนั้นอาจมีวิธีที่จะลดได้มากกว่านี้

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

มันใช้-pในการประเมินหนึ่งครั้งสำหรับแต่ละบรรทัดอินพุต บรรทัดจะถูกวางลงใน$_และหลังจากที่โปรแกรมรันมันจะพิมพ์$_ออกมา

(~$_,*.chop...^!*)คือรายการที่องค์ประกอบแรกคือ stringified ( ~) นำเข้าแต่ละองค์ประกอบที่ตามมาจะได้รับโดยการตัดตัวอักษรตัวสุดท้ายออกก่อนหน้านี้หนึ่ง ( *.chop) และต่อไปจนกว่าสตริงว่างเปล่า ( !*) ไม่รวมกรณีสตริงที่ว่างเปล่า (คน^ใน...^ ) .

X~สร้างคู่ของรายการทั้งหมดทางซ้ายและขวาโดยใช้การดำเนินการที่ระบุในกรณีนี้การต่อสตริง ( ~) กับรายการเหล่านั้น ^10เป็นรายการของ 0, 1, ... 9

ในที่สุดรายการจะถูกทำให้เป็นสตริงอีกครั้งโดย~ให้คำที่ต้องการพร้อมช่องว่างเป็นตัวคั่น


2

PowerShell v2 +, 60 ไบต์

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

1ลูปจากความยาวของลงสายเข้ากับ แต่ละย้ำตั้งผู้ช่วยเท่ากับลบหมายเลขปัจจุบัน$i 1สิ่งนี้จำเป็นเนื่องจาก.lengthเป็นจำนวนอักขระทั้งหมด แต่การจัดทำดัชนีสตริงเป็นแบบ 0 จากนั้นเราจะห่วงจากไป0 9แต่ละวงใน, แบ่งสตริงอินพุต$nตามค่าของลูปภายนอกของเรา, -joinมันกลับเข้าไปในสตริง, และสตริงเชื่อมต่อกับจำนวนลูปภายใน ผลลัพธ์ลูปแต่ละรายการจะถูกวางไว้บนไพพ์ไลน์และเอาต์พุตนั้นจะบอกเป็นนัยเมื่อโปรแกรมเสร็จ

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 ไบต์

ส่งคืนรายการสตริง

,⎕D∘.,⍨⌽,\⍞

, ฟัง (ทำตารางลงในรายการ)

⎕D ตัวเลขทั้งหมด

∘.,⍨ ต่อท้ายทั้งหมด (เช่นทำให้การรวมกันทั้งหมดด้วย)

รายการที่กลับรายการของ

,\ การต่อข้อมูลสะสมของ

ป้อนข้อความ

ลองใช้ออนไลน์!


คงที่ ฉันใช้
หม้อต้มน้ำ

2

Groovy (58 ไบต์)

ไม่มีความคิดว่าทำไมฉันถึงต้องรำคาญที่จะโพสต์คำตอบ Groovy ... ขนาดขั้นต่ำที่จำเป็นสำหรับสนามกอล์ฟ Groovy คือ 2 ขึ้นอยู่กับความต้องการการปิดดังนั้นคำตอบที่ดีที่สุดคือขนาดที่เล็กที่สุดของฉัน

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

ลองที่นี่: https://groovyconsole.appspot.com/script/5148433803378688



2

Java 7, 105 98 ไบต์

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 ไบต์ขอบคุณที่@Poke

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

รหัสทดสอบ:

ลองที่นี่

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

เอาท์พุท:

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
คุณสามารถบันทึก 7 ไบต์โดยการรวมสำหรับลูปและทำตรรกะพิเศษบางอย่างเพื่อกำหนดคำต่อท้ายและสตริงย่อยโดยปริยาย 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 ไบต์

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

ไม่ใช้การเรียกซ้ำเหมือนคำตอบอื่น ๆ

เหตุผลที่x+" "มีอยู่: -0 ยังคงเป็นศูนย์และเราไม่สามารถใช้เครื่องหมายลบเพื่อรับสตริงทั้งหมดด้วยวิธีนี้ดังนั้นค่าสูงสุดที่เราสามารถไปได้คือลบหนึ่งดังนั้น "" จึงเป็นแผ่น สตริง


1

C, 72 , 70 ไบต์

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

รับสายเป็นคู่ตัวชี้ / ขนาด ทดสอบหลัก:

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

เรติน่า 37 ไบต์

จำนวนไบต์ถือว่าการเข้ารหัส ISO 8859-1

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

ลองออนไลน์!

คำอธิบาย

M&!r`.+

รับส่วนนำหน้าทั้งหมดของอินพุตโดยการจับคู่และพิมพ์การจับคู่ที่ซ้อนทับทั้งหมดจากด้านขวา

m`$
0

ผนวก a 0เข้ากับแต่ละบรรทัด

%{`$
¶$%`

ตัว{บ่งชี้ว่าสามขั้นตอนที่เหลือจะถูกดำเนินการในลูปจนกว่าพวกเขาจะล้มเหลวในการเปลี่ยนสตริง %บอกว่าพวกเขาควรจะนำไปใช้กับแต่ละบรรทัดแยกต่างหาก

สเตจเองทำซ้ำบรรทัดสุดท้าย (เริ่มแรกนี่เป็นเพียงแค่บรรทัดที่รันอยู่ แต่การทำซ้ำของสามสเตจจะเพิ่มอีกหนึ่งบรรทัด)

T`w`d`.$

เพิ่มตัวเลขในแถวสุดท้ายโดยดำเนินการเปลี่ยนตัวอักขระต่อไปนี้:

from: _0123456789AB...
to:   0123456789

และในที่สุดก็:

G10`

เก็บเพียง 10 INPUT9บรรทัดแรกเพื่อให้เราลบบรรทัดที่เราเพิ่งเพิ่มเข้ามาหลังจาก


1

สกาลา, 73 70 ไบต์

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

f("INVALID")เรียกว่าเหมือน ส่งคืนลำดับของตัวอักษร

คำอธิบาย

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

โซลูชันทางเลือก 73 ไบต์

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

กำหนดฟังก์ชั่นที่ไม่ระบุชื่อ หากต้องการเรียกว่าเขียน

val f = ...

และเรียกมันว่าสิ่งนี้

f("INVALID")

มันส่งคืนลำดับของสตริงซึ่งจะมีลักษณะเช่นนี้เมื่อพิมพ์:

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)

คำอธิบาย

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

โซลูชันแบบเรียกซ้ำของคุณคือ 3 ไบต์น้อยกว่าแบบวนซ้ำ
TuxCrafting

คุณพูดถูกฉันต้องปรับมันให้เหมาะสมหลังจากนับ
corvus_192

1

CJam, 29 28 ไบต์

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

คำอธิบาย:

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

ลองออนไลน์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.