ตัวอักษรแนวทแยงมุมกับอินพุต


26

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

ความท้าทาย

กำหนดอินพุตระหว่าง 1-26 โดยรวมให้พิมพ์ตัวอักษรแนวทแยงมุม แต่เริ่มพิมพ์ในแนวตั้งที่ดัชนีของอินพุตที่กำหนด

ตัวอย่าง

รับอินพุต:

16

โปรแกรมของคุณควรส่งออก:

a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
               q
               r
               s
               t
               u
               v
               w
               x
               y
               z

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

4

เอาท์พุท:

a
 b
  c
   d
   e
   f
   g
   h
   i
   j
   k
   l
   m
   n
   o
   p
   q
   r
   s
   t
   v
   w
   x
   y
   z

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

1

เอาท์พุท:

a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z

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

26

เอาท์พุท:

a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
                q
                 r
                  s
                   t
                    u
                     v
                      w
                       x
                        y
                         z

เกณฑ์การให้คะแนน

นี่คือดังนั้นคำตอบที่สั้นที่สุดในแต่ละภาษาจะเป็นผู้ชนะ

โชคดี!


6
เราสามารถเลือกที่จะใช้การจัดทำดัชนี 0- หรือ 1 หรือไม่?
notjagan

พื้นที่ชั้นนำที่สอดคล้องกันเป็นที่ยอมรับได้หรือไม่?
Giuseppe

ช่องว่างต่อท้ายยอมรับได้หรือไม่
Dom Hastings

เราขอใช้ตัวพิมพ์ใหญ่ได้ไหม
อดัม

เราขอคืนรายการสตริงได้ไหม
อดัม

คำตอบ:


13

ถ่าน 9 ไบต์

↘✂β⁰N↓✂βη

ลองออนไลน์!

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

↘✂β⁰N↓✂βη
 ✂β⁰N         the alphabet from position 0 to the input
↘               print diagonally, down and to the right
        ✂βη    the alphabet starting from the position of the input
       ↓        print downwards

การแก้ปัญหานี้ไม่ได้ทำงานในรุ่นปัจจุบันของถ่าน (ส่วนใหญ่น่าจะเกิดจากการแก้ไขข้อผิดพลาด) แต่ปัญหาได้รับการแก้ไขเป็นเวลา 10 ↘✂β⁰N↓✂βIθไบต์ด้วย


2
ฉันไม่แน่ใจว่าทำไมถึงได้ผล อาจเป็นข้อผิดพลาดที่ถูกนำมาใช้เมื่อสองสามสัปดาห์ก่อน (ปกติคุณจะต้องใช้Iθแทนη)
Neil

@Neil วันนี้ดูเหมือนจะแตก การใช้ Iθ แก้มัน
JP de la Torre

บันทึก 1 ไบท์โดยใช้แทน…βN ✂β⁰N
Neil

7

05AB1E , 11 ไบต์

AvNI<‚Wysú,

ครั้งแรกที่ลองใช้ 05AB1E ฉันจึงเปิดรับเคล็ดลับ

ลองออนไลน์!

หากมีการป้อนข้อมูลศูนย์การจัดทำดัชนีจาก0การ25ที่ได้รับอนุญาตนี้อาจเป็น 10 <ไบต์โดยถนัด


Niiice! สิ่งที่ฉันได้รับ ฉันลอง "ยก" แต่มันไม่ทำงานตามแผนที่วางไว้ ฉันคิดว่ามันค่อนข้างดีที่สุด :)
Magic Octopus Urn

4

JavaScript (ES2017), 73 72 71 66 ไบต์

บันทึกบางไบต์ด้วย @JustinMariner

f=(n,x=26)=>x?f(n,x-1)+(x+9).toString(36).padStart(x<n?x:n)+`
`:''

1
นี้จะเพิ่ม10หลังจากzที่สิ้นสุดเนื่องจากมีก่อน++x x.toString()การแก้ไขข้อผิดพลาดและเล่นกอล์ฟถึง 68 ไบต์โดยใช้padStart: TIO
Justin Mariner

@JustinMariner ขอบคุณฉันคิดว่าฉันอาจเปลี่ยนไปใช้ ES8 สำหรับที่ ...
ETHproductions

คุณช่วยอะไรได้บ้างโดยการแกง? n=>g=(x=26)=>x?f(x-1)+(x+9).toString(36).padStart(x<n?x:n)+'\n':""
Shaggy

@Shaggy บางทีฉันไม่รู้ว่าได้รับอนุญาตการแกงชนิดนั้นหรือไม่
ETHproductions

อ้าถั่วดูเหมือนข้อเสนอของคุณที่จะอนุญาตไม่ให้มีฉันทามติอีกต่อไป :(
Shaggy

4

Python 2, 61 58 57 ไบต์

n=input()-1
for i in range(26):print(' '*i)[:n]+chr(i+97)

-3 ไบต์ต้องขอบคุณ Rod

-1 ไบต์เพิ่มเติมขอบคุณ Mr. Xcoder



@Pavel จะไม่ทำงานตั้งแต่นั้นinputจะถูกเรียกทุกครั้งที่forวนซ้ำวนซ้ำแม้ว่าจะมีอินพุตเพียงบรรทัดเดียว
notjagan


57 ไบต์โดยใช้ตัวห้อย
Mr. Xcoder


4

Ruby, 51 46 43 ไบต์

->n{(0..25).map{|x|(' '*x)[0,n-1]<<(x+97)}}

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

ดูเหมือนว่าพวกหลามจะมีบางสิ่งที่มีตัวห้อย -5 ไบต์โดยรับแรงบันดาลใจจากการปรับปรุงของ Mr. Xcoder ในการแก้ปัญหาของ ppperry

โซลูชันก่อนหน้าด้วยrjust(51 ไบต์):

->n{i=0;(?a..?z).map{|c|c.rjust i+=n>c.ord-97?1:0}}


3

R, 99 89 ไบต์

@MickeyT บันทึก 10 ไบต์

ฟังก์ชัน

function(x)for(i in 1:26)cat(paste(c(rep(" ",min(x,i)),letters[i]),collapse=""),sep="\n")

การสาธิต

f <- function(x)for(i in 1:26)cat(paste(c(rep(" ",min(x,i)),letters[i]),collapse=""),sep="\n")
f(1)
f(10)
f(15)
f(26)

1
ประหยัดเล็กน้อย แต่แล้วลอง ifelse สามารถแทนที่ด้วยด้วยในการวาง สามารถกลับรถตรง วงเล็บปีกกาสำหรับฟังก์ชั่นร่างกายสามารถลดลงได้ minprint.noquotecat'\n'\n
MickyT

คุณสามารถประหยัดได้มากขึ้นโดยใช้writeแทนcatและpaste:write(c(rep(" ",min(x,i)),letters[i]),"",26,,"")
2390246

3

เรติน่า , 72 68 ไบต์

^
z
{2=`
$`
}T`l`_l`^.
\D
$.`$* $&¶
\d+
$* 
s`( *)( +)(?=.*¶\1 $)
$1

ลองออนไลน์! เอาท์พุทรวมถึงช่องว่างต่อท้าย บันทึก 1 ไบต์ด้วยการลบพื้นที่ก่อน$ถ้าอนุญาตให้ทำดัชนีเป็นศูนย์ แก้ไข: บันทึกแล้ว 4 ไบต์โดยใช้เครื่องสร้างตัวอักษรของ @ MartinEnder คำอธิบาย:

^
z
{2=`
$`
}T`l`_l`^.

ใส่ตัวอักษร

\D
$.`$* $&¶

เส้นทแยงมุมมัน

\d+
$* 

แปลงอินพุตให้พร้อมกันเป็นช่องว่าง

s`( *)( +)(?=.*¶\1 $)
$1

ตัดแต่งเส้นที่ยาวเกินไปเพื่อไม่ให้มีเส้นใดยาวเกินกว่าบรรทัดว่างที่ท้าย



2

Pyth , 21 17 15 ไบต์

ทำบนโทรศัพท์ด้วยแบตเตอรี่ 3%

VlG+*d?>QNNQ@GN

คำอธิบาย:

VlG        For each character in the alphabet (G)
+          Concatenate...
 *d        Space (d) times...
   ?>QNNQ  Ternary; if Q (input) is less than N, return N, else Q
 @GN       The Nth character of the alphabet (G)

ลองออนไลน์!


1
@tallyallyhuman ฉันเพิ่งมีพิซซ่าที่น่าอัศจรรย์ในลาสเวกัส, นิวเม็กซิโก
Stan Strum

พบวิธีการมากสั้นบางส่วนและฉันตัดสินใจที่จะโพสต์คำตอบของตัวเอง
Mr. Xcoder

@ Mr.Xcoder ใช่ทำงานได้ดีมาก
Stan Strum



2

Pythonขนาด 52 ไบต์

ค่อนข้างแปลกใจที่ไม่มีใครสังเกตเห็นวิธีการที่ชัดเจนก็สั้นเหมือนคนอื่น ๆ

lambda k:[(i*" ")[:k-1]+chr(i+97)for i in range(26)]

ลองออนไลน์!

Pythonขนาด 53 ไบต์

lambda k:[min(k-1,i)*" "+chr(i+97)for i in range(26)]

ลองออนไลน์!


2

Haskell, 58 54 ไบต์

f n=do m<-[1..26];([2..min n m]>>" ")++['`'..]!!m:"\n"

ลองออนไลน์!

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

f n=                  -- input number is n
  do m<-[1..26]       -- for each m from [1..26], construct a string and concatenate
                      -- them into a single string. The string is:
   [2..min n m]>>" "  -- min(n,m)-1 spaces,
      ++              -- followed by
   ['`'..]!!m         -- the m-th char after `
      :               -- followed by
   "\n"               -- a newline 

แก้ไข: @Lynn บันทึก 4 ไบต์ ขอบคุณ!



@Lynn; ขอบคุณ! ฉันมักจะลืมเกี่ยวกับการทำเครื่องหมายสำหรับรายการ
nimi


2

Gaiaขนาด 12 ไบต์

…26⊃§×¦₵a+†ṣ

ลองออนไลน์!

คำอธิบาย

…             Range 0..input-1
 26⊃          Repeat the last number enough times to make it have length 26
    §×¦       Turn each number into a string of that many spaces
       ₵a+†   Add the corresponding letter to each
           ṣ  Join with newlines

1

JavaScript (Node.js)ขนาด 72 ไบต์

n=>[..."abcdefghijklmnopqrstuvwxyz"].map((e,i)=>" ".repeat(i<n?i:n-1)+e)

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

ลองออนไลน์!


ฉันขอถามได้ไหมว่าทำไม node.js ดูเหมือนว่าปกติ JS ที่ถูกต้อง
Downgoat

@Downgoat มันเป็นรูปแบบอัตโนมัติของ TIO
Conor O'Brien

btw คุณสามารถบันทึก bytes โดยใช้.padStart
Downgoat

เดี๋ยวก่อน nmm วิธีที่ฉันคิดโดยทั่วไปทำให้เป็นคำตอบของ ETH
Downgoat

สลับไป ES8 และบันทึกไบต์ที่มีแทนpadEnd repeat
Shaggy


1

Python 2 , 52 ไบต์

lambda n:['%*c'%(min(i+1,n),i+97)for i in range(26)]

ลองออนไลน์!

ฉันสมมติว่ารายการสตริงเป็นเรื่องปกติ ...

สั้นที่สุดที่ฉันจะได้รับเมื่อเรียกซ้ำ:

f=lambda n,i=0:i<26and['%*c'%(min(i+1,n),i+97)]+f(n,i+1)or[]





1

C # (.NET Core) , 66 + 18 ไบต์

n=>new int[26].Select((x,i)=>$"{(char)(i+97)}".PadLeft(i<n?i+1:n))

จำนวนไบต์ยังรวมถึง

using System.Linq;

ลองออนไลน์!

สิ่งนี้จะส่งคืนชุดของสตริงหนึ่งรายการสำหรับแต่ละบรรทัด หากไม่ได้รับอนุญาตคำตอบจะเพิ่มขึ้น 17 ไบต์string.Concat()\nสตริงและภายในสตริง

คำอธิบาย:

n =>
    new int[26]                      // Create a new collection of size 26
    .Select((x, i) =>                // Replace its members with:
        $"{(char)(i + 97)}"          // String of an alphabet character corresponding to the index
        .PadLeft(i < n ? i + 1 : n)  // Add spaces to the left
    )

1

MATL, 14 ไบต์

26:tiXl2Y2oZ?c

ลองใช้ที่MATL Online

คำอธิบาย

26      % number literal
:       % range; vector of equally spaced values [1...26]
t       % duplicate
i       % explicitly grab the input
Xl      % clamp the array to have a maximum value of the input
2Y2     % predefined literal: ['a'...'z']
o       % convert to a numeric array
Z?      % create sparse matrix using the first two inputs as the rows/columns 
        % and the letters 'a'...'z' as the values
c       % convert back to character and implicitly display

1

Pyth , 12 ไบต์

j.e+<*kdtQbG

ลองที่นี่!

หากอนุญาตให้ใช้รายการของ Strings สามารถทำให้สั้นลงได้11 ไบต์ :

.e+<*kdtQbG

Pyth , 12 ไบต์

VG+<*dxGNtQN

ลองที่นี่!

Pyth , 14 ไบต์

jm+<*d;tQ@Gd26

ลองที่นี่

หากรายชื่อของสายจะได้รับอนุญาตนี้สามารถลงไป13 ไบต์ :

m+<*d;tQ@Gd26

ทำงานเหล่านี้ได้อย่างไร

ไม่เหมือนคำตอบอื่น ๆ ส่วนใหญ่แผนที่นี้ / วนซ้ำตามตัวอักษรตัวเล็กในทั้ง 3 โซลูชัน

คำอธิบาย # 1

j.e+<*kdtQbG - Full program.

 .e        G - Enumerated map over "abcdefghijklmnopqrstuvwxyz", with indexes k and values b.
     *kd     - Repeat a space a number of times equal to the letter's index.
    <   tQ   - Crop the spaces after the input.
   +      b  - Concatenate with the letter.
j            - (Optional): Join by newlines.

คำอธิบาย # 2

VG+<*dxGNtQN  - Full program.

VG            - For N in "abcdefghijklmnopqrstuvwxyz".
      xGN     - Index of the letter in the alphabet.
    *d        - Repeat the space a number of times equal to the index above.
   <     tQ   - But crop anything higher than the input.
  +        N  - Append the letter (at the end)

คำอธิบาย # 3

jm+<*d;tQ@Gd26 - Full program.

 m          26 - Map over [0...26) with a variable d.
    *d;        - Space repeated d times.
   <   tQ      - Crop anything whose length is higher than the input.
  +      @Gd   - Concatenate with the letter at that index in the alphabet.
j              - (Optional): Join by newlines.



1

q / kdb +, 33 31 ไบต์

วิธีการแก้:

-1{(&[x-1;til 26]#'" "),'.Q.a};

ตัวอย่าง:

q)-1{(&[x-1;til 26]#'" "),'.Q.a}16;
a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
               q
               r
               s
               t
               u
               v
               w
               x
               y
               z

คำอธิบาย:

สร้างรายการของช่องว่าง (26) จนถึงความยาวต่ำสุดของอินพุตและช่วง0..25) เข้าร่วมกับตัวอักษรแต่ละตัวแล้วพิมพ์ไปยัง stdout

-1{(&[x-1;til 26]#'" "),'.Q.a}; / solution
-1                            ; / print result to stdout and swallow return
  {                          }  / lambda function
                         .Q.a   / "abcd..xyz"
                       ,'       / concatenate (,) each
   (                  )         / do all this together
    &[   ;      ]               / minimum of each 
      x-1                       / implicit input (e.g. 10) minus 1 (e.g. 9)
          til 26                / 0 1 2 ... 23 24 25
                   '#" "        / take " " each number of times (0 1 2 )

หมายเหตุ:

  • -2 ไบต์โดยการใส่วงเล็บอีกครั้ง

1

Java 1.8 (ไม่มีแลมบ์ดา), 98 ไบต์

void m(int i){int c=0,o=97;String s="";for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);}

ตรรกะตรงไปตรงมา ไม่มีการตรวจสอบความถูกต้องของข้อมูลอินพุตแย่มาก!

  • อัปเดต: ฟังก์ชั่นเท่านั้น! ขอบคุณ @Olivier Grégoire

1
หากต้องการสำรองไบต์ให้ใช้for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);นอกจากนี้คุณสามารถเขียนเฉพาะฟังก์ชั่นหรือแลมบ์ดาแทนโปรแกรมเต็มรูปแบบ
Olivier Grégoire

ถ้าฉันจะรวมเฉพาะเนื้อหาของฟังก์ชั่นแล้วผู้อ่านจะรู้ได้อย่างไรว่าอะไรa[0]หมายถึงอะไร ฉันคิดว่าตัวอย่างไม่ยุติธรรมหากพวกเขาไม่รวบรวม ความท้าทายเป็นเรื่องที่น่าสนใจเช่นเดียวกับภาษาที่มีเนื้อหาหลากหลาย
ดักลาสจัดขึ้น

1
สวัสดี! ฉันพูดฟังก์ชั่นหรือแลมบ์ดาไม่ใช่ตัวอย่าง ;-) เพื่อให้คุณสามารถเขียนvoid f(int i){...}(ไม่จำเป็นต้องคงที่) หรือi->{...}แทนโปรแกรมทั้งหมดของคุณ ดูเคล็ดลับ Java ทั้งหมด ดูคำตอบของฉันสำหรับความท้าทายเดียวกันนี้เป็นตัวอย่าง ขอให้สนุกบนเว็บไซต์! :-)
Olivier Grégoire
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.