ตัวเลขลดลงขณะที่ตัวอักษรเพิ่มขึ้น


18

แรงบันดาลใจจากการสุ่มเพิ่มจำนวนในขณะที่ตัวอักษรลดลง

ได้รับรายชื่อของตัวอักษรผสมและจำนวนเต็ม (เช่น['a', 2, 3, 'b']) เพิ่มตัวอักษรโดยหนึ่งตำแหน่งในอักษร (ห่อที่zไปa) และลดตัวเลขโดย 1. ['b', 1, 2, 'c']สำหรับตัวอย่างข้างต้นผลผลิตที่ควรจะเป็น

  • อินพุตสามารถเป็นรายการแบบผสม, สตริงแบบมีตัวคั่น, รายการสตริง ฯลฯ
  • zล้อมรอบไปaด้วย แต่1ไปที่0และ0ไป-1ฯลฯ
  • ข้อมูลที่ป้อนจะเป็น[a-z]จำนวนเต็มเท่านั้น คุณสามารถเลือกตัวอักษรพิมพ์ใหญ่[A-Z]ถ้าเป็นเรื่องง่ายสำหรับคุณ
  • อินพุตรับประกันว่าไม่ว่างเปล่า
  • ข้อมูลที่ป้อนอาจมีตัวเลขหรือตัวอักษรเท่านั้น

ตัวอย่าง:

Input
Output

['a', 2, 3, 'b']
['b', 1, 2, 'c']

['a', 'b', 'z']
['b', 'c', 'a']

[-1, 0, 257, 'x']
[-2, -1, 256, 'y']

[0, 3, 1, 20382876]
[-1, 2, 0, 20382875]

กฎและคำชี้แจง

  • เข้าและส่งออกจะได้รับโดยวิธีการที่สะดวกใด
  • คุณสามารถพิมพ์ผลลัพธ์ไปที่ STDOUT หรือส่งคืนเป็นผลลัพธ์ของฟังก์ชัน
  • เอาต์พุตไม่จำเป็นต้องอยู่ในรูปแบบเดียวกับอินพุต (เช่นคุณสามารถรับอินพุตเป็นสตริงและเอาท์พุทเป็นรายการ)
  • ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น
  • หากเป็นไปได้คุณสามารถสมมติว่าจำนวนเต็มเข้า / ส่งออกเหมาะสมกับintช่วงดั้งเดิมของภาษา
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือเพื่อให้ใช้กฎการเล่นกอล์ฟตามปกติทั้งหมดและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ

1
ถ้าจำนวนเท่ากับ Integer.MinValue หรือค่าต่ำสุดของจำนวนเต็มที่ลงนามเป็นภาษาของฉันฉันควร underflow ไปที่ Integer.maxValue หรือฉันควรนับต่อไปหรือไม่
Nzall

1
@Nzall พฤติกรรมที่ไม่ได้กำหนด สัญลักษณ์แสดงหัวข้อที่ 5 ภายใต้กฎและคำอธิบายระบุว่าทั้งจำนวนเต็มและจำนวนเต็มในภาษาของคุณintดังนั้นคุณจะไม่ได้รับInteger.MinValueข้อมูลเข้ามา
AdmBorkBork

คำตอบ:



5

Python 3 , 59 ไบต์

lambda a:[i-1if''!=i*0else chr(97+(ord(i)+8)%26)for i in a]

ลองออนไลน์!

-1 ไบต์ขอบคุณ Erik the Outgolfer


1
57 ไบต์
Erik the Outgolfer

@EriktheOutgolfer เปรียบเทียบจำนวนเต็มกับการเปรียบเทียบสตริงดูเหมือนจะไม่สามารถใช้งานได้ในโซลูชันของคุณ
Jitse

โอ้ถูกต้องคุณต้อง Python 2 สำหรับสิ่งนั้น
Erik the Outgolfer

อาใช่แล้วดูเหมือนว่าจะทำงาน ยังคงแทนที่-96ด้วย+8บันทึกไบต์
Jitse

''!=i*0สั้นกว่าของฉันสามไบต์str(i)>'9'งานที่ดี
Black Owl Kai


5

Ruby , 34 ไบต์

สำหรับแต่ละองค์ประกอบพยายามส่งคืนองค์ประกอบ -1 เงื่อนไขไม่สามารถทำได้ดังนั้นพวกเขาจึงผิดพลาดและถูกหยิบขึ้นมาโดยrescueประโยคซึ่งแทนที่จะเรียกsuccมันเพื่อส่งกลับตัวอักษรตัวต่อไป succ"roll over" on zและ return aaแม้ว่าดังนั้นเราจึงใช้อักขระตัวแรกในสตริงที่ส่งคืน

->a{a.map{|e|e-1rescue e.succ[0]}}

ลองออนไลน์!



3

Python 3 , 182 130 118 ไบต์

-51 ไบต์ขอบคุณ @AdmBorkBork และ @Black Owl Kai, -1 ไบต์ขอบคุณ @Black Owl Kai, -12 ไบต์โดยแทนที่.append()ด้วย+=[]และแทนที่n+1ด้วย-~n

def a(x):
 b='abcdefghijklmnopqrstuvwxyz';c=[]
 for d in x:
  try:c+=[d-1]
  except:c+=[b[(-~b.find(d)%26)]]
 return c

ลองออนไลน์!

ฉันทำสิ่งนี้ในขณะที่คำถามอยู่ใน Sandbox แต่ไม่เห็นมันโพสต์จนกระทั่งตอนนี้ : P

Ungolfed

def a(x):
    b = 'abcdefghijklmnopqrstuvwxyz'
    c = []
    for d in x:
        try:
            c.append(d - 1)
        except:
            c.append(b[((b.find(d) + 1) % 26)])
    return c

คำอธิบาย

สำหรับแต่ละองค์ประกอบในรายการที่ป้อนเข้าxจะพยายามลบ 1 และเพิ่มเข้าไปในรายการที่ส่งคืนในที่สุด หากมีข้อผิดพลาดเกิดขึ้น (เพราะองค์ประกอบเป็นสตริง) ดัชนีของตัวอักษรในตัวอักษรจะถูกเพิ่ม 1 และ mod 26 จะถูกนำ mod 26 wraps ดัชนีของ 26 กลับไปที่ 0


ยินดีต้อนรับสู่ CodeGolf SE! ฉันไม่ใช่ผู้เชี่ยวชาญที่ Python แต่ฉันคิดว่าคุณสามารถสลับ 4 ช่องว่างสำหรับแท็บเพื่อบันทึกจำนวนไบต์
AdmBorkBork

ฉันได้รับถึง131 ไบต์เพียงกำจัดช่องว่าง ไบต์ต่อไปอีกหนึ่งสนามสามารถทำได้โดยตระหนักว่า(x+27)%26มีผลเช่นเดียวกันกับ(x+1)%26
Black Owl Kai

@AdmBorkBork BlackOwlKai ขอบคุณสำหรับความช่วยเหลือ! ฉันแก้ไขโพสต์แล้ว
asdf60367134

คุณสามารถใช้ ternary ด้วยstr(d)==dเพื่อตรวจสอบว่าเป็นสตริงหรือไม่แทนที่จะลองใช้ / ยกเว้น จากนั้นเนื่องจากคุณไม่จำเป็นต้องลอง / ยกเว้นคุณสามารถทำสิ่งทั้งหมดในรายการความเข้าใจ! ฉันจะให้คุณคิดเพิ่มอีกนิด แต่คุณสามารถทำได้น้อยกว่า 100 ไบต์ด้วยวิธีนี้;)
Value Ink



2

Gema , 55 ตัวอักษร

<N>=@sub{$1;1}
z=a
<L>=@int-char{@add{@char-int{$1};1}}

ทางออกที่สกปรก การห่อจดหมายด้วยการเพิ่มตัวอักษรนั้นมีความยาวอย่างเจ็บปวดดังนั้นจึงมีกฎแยกต่างหาก

อินพุตสามารถเป็นอะไรก็ได้เพียงใช้ตัวคั่นบางตัว (คุณสามารถเว้นตัวคั่นระหว่างตัวเลขและตัวอักษรได้ด้วยราคา 1 ตัวอักษรสำหรับการเปลี่ยน<L1>คุณสามารถละเว้นตัวคั่นระหว่างตัวอักษรได้เช่นกัน)

วิ่งตัวอย่าง:

bash-5.0$ gema '<N>=@sub{$1;1};z=a;<L>=@int-char{@add{@char-int{$1};1}}' <<< "['a', 2, 3, 'b']"
['b', 1, 2, 'c']

ลองออนไลน์!

Gema, 66 ตัวอักษร

<N>=@sub{$1;1}
<L>=@cmpi{$1;z;@int-char{@add{@char-int{$1};1}};a;}

น้ำยาทำความสะอาด ครึ่งหนึ่งค่อนข้างมีประสิทธิภาพจากนั้นก็เจ็บปวดเพียงครึ่งเดียว

วิ่งตัวอย่าง:

bash-5.0$ gema '<N>=@sub{$1;1};<L>=@cmpi{$1;z;@int-char{@add{@char-int{$1};1}};a;}' <<< "['a', 2, 3, 'b']"
['b', 1, 2, 'c']

ลองออนไลน์!


2

R , 77 85ไบต์

ขอบคุณ @Giuseppe สำหรับไอกรน 8 ไบต์

function(l)Map(function(x)"if"(i<-match(x,L<-c(letters,"a"),0),L[i+1],x-1),l)

ลองออนไลน์!

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


ฉันคิดว่าcharacterไม่ จำกัด เพราะพวกเขาถูกโยนnumericโดยis.finiteและเป็นเช่นนั้นNA?
Giuseppe

@Giuseppe คิดว่ามันจะเป็นสิ่งที่ตามสายเหล่านั้น แม้ว่ามันจะเป็นไบต์เดียวกับ is.double ฉันต้องการที่จะใช้มัน :)
MickyT


ขอโทษที่ต้องกำจัดคุณis.finiteฉันคิดว่าฉันจะเอามันไปเอง
Giuseppe

1
@Giuseppe ดีมากจะไม่ได้คิดและMap matchเป็นการดีที่จะเรียนรู้บางอย่างในแต่ละวัน :)
มิกกี้


2

Retina , 52 50 48 58 41 37 37 ไบต์

T`zl`l
\b0
-
\d+
*
-_*
-$.0
_(_*)
$.1

-4 ไบต์ขอขอบคุณ@FryAmTheEggman (และสำหรับการกล่าวถึงฉันมีข้อบกพร่อง: 1 → -1แทนที่จะเป็น1 → 0)
+10 ไบต์เพื่อแก้ไขข้อบกพร่องด้วย1และ0.. เคสขอบที่น่ารำคาญซึ่งทำให้ฉันเมาไปซักพักนึง .. แต่ตอนนี้มันถึง 41 ไบต์แล้ว (ตอนนี้ฉันอยากรู้เกี่ยวกับ <40 bytes version @Neilและ@CowsQuack ที่กล่าวถึงในความคิดเห็น .. ขอบคุณ@Neilสำหรับเคล็ดลับของการแปลงที่0ไป-และการจัดการกับค่าลบครั้งแรก. แปลงขวากลับจากเอกจำนวนเต็ม ช่วยได้มาก)
เห็นได้ชัดว่าฉันไม่ต้องการขอบเขตที่จุดนี้ดังนั้น -4 ไบต์ .. >.>

I / O คั่นด้วยเครื่องหมายจุลภาค

ลองออนไลน์

คำอธิบาย:

แปลทั้งหมด"zabcdefghijklmnopqrstuvwxy(z)"เป็น"abcdefghijklmnopqrstuvwxyz":

T`zl`l

แทนที่0s แบบสแตนด์อโลนทั้งหมดด้วย-:

\b0
-

แปลงตัวเลขทั้งหมดเป็น unary โดยแทนที่ด้วยขีดล่าง:

\d+
*

สำหรับค่าลบทั้งหมดโดยมีเส้นศูนย์เป็นศูนย์หรือมากกว่าอยู่ข้างหลัง: รักษาเครื่องหมายลบและรับความยาวรวมของการแข่งขันนี้ (รวมถึง-), แปลงกลับเป็นจำนวนเต็ม:

-_*
-$.0

สำหรับเลขจำนวนเต็มบวก: จับคู่จำนวนเต็มบวกโดยจับคู่ค่าเส้นเดียวและตามด้วยเส้นศูนย์หรือมากกว่า จากนั้นแทนที่พวกเขาด้วยความยาวของกลุ่มการจับภาพนั้นเพื่อลบเอกนารีสายเดียวและแปลงกลับเป็นจำนวนเต็มพร้อมกัน:

_(_*)
$.1


1

PHP , 50 ไบต์

for(;''<$a=$argv[++$i];)echo$a<a?--$a:(++$a)[0],_;

ลองออนไลน์!

การทดสอบ

เอาท์พุทตัวอักษร / จำนวนเต็มคั่นด้วย _ด้วยตัวคั่นต่อท้าย

ใน PHP คุณสามารถเพิ่มตัวอักษรได้โดยตรงดังนั้นฉันจึงใช้ประโยชน์จากมัน แต่ค่าzจะถูกเพิ่มเป็นaa, เมื่อต้องการแปลงเป็นa, (++$a)[0]จะใช้ซึ่งจะแสดงเฉพาะอักขระตัวแรกของค่าที่เพิ่มขึ้นเท่านั้น


1

JaptP -m , 13 12ไบต์

-1 ไบต์ขอบคุณ Shaggy

;¤?UÉ:Cg8+Uc

ลองมัน

คำอธิบาย:

;o ?UÉ:Cg8+Uc
-m              // Map U through the input:
 o              // Try to create a range [1...U]
   ?            //   If that creates a range (number):
    UÉ          //     Return U-1
      :         //   Else, return:
;      C        //     alphabet (a...z)
        g       //     Index:
         8+Uc   //       8 + char-code of U

หมายเหตุ : ;เปลี่ยนCเป็นอักษรตัวพิมพ์เล็ก


มันดูไม่เหมือน wraps นี้จากไปz a
ขนดก

@ Shaggy อ๊ะฉันคิดถึงเรื่องนั้น ฉันได้เพิ่มการแก้ไขชั่วคราวสำหรับ +2 ไบต์
โอลิเวอร์

ไม่สามารถหาวิธีในการแก้ไขของฉัน (ยัง) โดยไม่ต้องประกอบไปด้วยสามซึ่งทำให้มันคล้ายกับคุณมากเกินไปสำหรับความชอบของฉันดังนั้นฉันกำลังลบสำหรับตอนนี้ o-> ¤จะช่วยให้คุณประหยัดไบต์ที่นี่
ปุย

1
+2แล้ว-1ต้องขอขอบคุณ Shaggy ที่จะแม่นยำมากขึ้น! : D
Shaggy

1
@Shaggy +2ขอบคุณThe Oliver: P
Oliver

1

Haskell, 52 51 ไบต์

map q
q"z"="a"
q x|x>"`"=succ<$>x|1<2=show$read x-1

เนื่องจาก Haskell ไม่อนุญาตให้มีรายการประเภทผสมตัวอักษรและตัวเลขจึงถูกนำมาใช้และส่งกลับเป็นสตริง

ลองออนไลน์!

ตรวจสอบทุกองค์ประกอบของรายการ: ถ้าเป็นสตริง"z"ให้ส่งคืน"a" ; ถ้าตัวอักษรตัวแรกของสตริงคือ>'`' (เช่นตัวอักษรไม่ใช่ตัวเลข) ให้ส่งคืนตัวต่อของอักขระในสตริง; มิฉะนั้นจะต้องเป็นตัวเลขดังนั้นแปลงเป็นจำนวนเต็มลบ 1 และเปลี่ยนเป็นสตริงอีกครั้ง

แก้ไข: -1 ไบต์ขอบคุณ @cole


ใช้งานได้ 51 ไบต์หรือไม่
โคล

@ โคล: ใช่ ขอบคุณ!
nimi

1

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

®i‘ị®µ’e?€Øa©

ลองออนไลน์!

แก้ไขอย่างชาญฉลาดโดย Jonathan Allanโจนาธานอัลลัน

หมายเหตุ: นี่ไม่ใช่โปรแกรมเต็มส่วนท้ายของ TIO ทำให้สามารถป้อนข้อมูลโดยใช้อาร์กิวเมนต์บรรทัดคำสั่งเพื่อทดสอบฟังก์ชัน


จะไม่ทำงานกับเนกาทีฟในอินพุต (หรือมากกว่าช่วง chr) ®i‘ị®µ’e?€Øa©คือการแก้ไขสำหรับศูนย์ฉันเชื่อว่า
Jonathan Allan

@JanathanAllan Hah ฉันลืมไปเลยว่าไม่ได้ผลแน่นอน แดกดันเนื่องจากฉันหลีกเลี่ยงการใช้~เป็นเงื่อนไขในการบัญชีสำหรับ-1s ในการป้อนข้อมูล ... นอกจากนี้ฉันจะสั้นลงอย่างไร®i‘ị®...
Erik the Outgolfer

1

C ++ 17 (gcc) , 120 ไบต์

#define O int operator()
struct V{O(char&c){c++-90?:c=65;}O(int&i){--i;}};int f(auto&l){for(auto&x:l)std::visit(V{},x);}

นี่fคือฟังก์ชั่นที่จำเป็น; lเป็นทั้งพารามิเตอร์อินพุตและเอาต์พุตและคาดว่าจะเป็นคอนเทนเนอร์ของวัตถุที่เข้ากันได้กับstd::variant<char, int>หรือในทางกลับกัน

ลองออนไลน์!



1

K (oK) , 27 ไบต์

{$[9+@x;`c$97+26!8+x;x-1]}'

ลองออนไลน์!

-8 ขอบคุณ ngn และ dzaima :)


1
31 bytes {$[-9=@x;x-1;90=x;"A";`c$1+x]}'การใส่ตัวพิมพ์เล็กและใช้ตัวพิมพ์ใหญ่ (และ'จะต้องนับเป็นข้อมูลที่ควรเป็นรายการ)
dzaima

@ เขียนลวก ๆ ฉันคิดว่า dzaima ถูกต้อง - 'ควรนับ นี่คือการแสดงออกอีกเล็กน้อยที่ไม่ต้องการ'และดูแล "z" -> "a":{`c`i[t]$(-26*x~'"z")+x+1-2*t:x~'0+x}
ngn

หรือดียิ่งขึ้น - ทำรายการของประมาณการและใช้พวกเขาด้วย:@' {(`c$97+26!-96+;-1+)[x~'0+x]@'x}ที่นี่-96(ซึ่งเป็น 1 ลบรหัส ASCII ของ "") ที่สามารถถูกแทนที่ด้วย8ขณะที่มันเอา mod 26
NGN

อีก -1 ไบต์โดยการเลือกสำหรับตัวอักษร:{(`c$65+26!14+;-1+)[x=_x]@'x}
NGN

@dzaima คุณสามารถย่อให้สั้นลงได้ผ่าน-9=@x->x=_x
ngn

0

Runic Enchantmentsขนาด 36 ไบต์

\$ka'~?*3({':+1\
R';$ >i::0Sqn=?/1-$

ลองออนไลน์!

กระบวนการทั่วไปคือการอ่านอินพุตเสริมด้วย 0 (การข่มขู่เพื่อสตริง) แปลงกลับไปเป็นตัวเลข (ถ่านเดียวจะกลับ -1) เปรียบเทียบกับอินพุต หากเป็นเช่นนั้นจะต้องเป็นค่าตัวเลขลบ 1 และพิมพ์ ถ้าไม่เหมือนกันมันจะต้องเป็นถ่านลบ 1 เปรียบเทียบกับ{เปรียบเทียบกับ หากน้อยกว่าให้พิมพ์หรือเปลี่ยนเป็นอื่นaและพิมพ์

ทำซ้ำจนกระทั่งโปรแกรมดำเนินการสแต็กอันเดอร์โฟล์ว

เอาต์พุตถูกคั่นด้วย;เพื่อบันทึก 1 ไบต์ (และมีส่วนท้ายหนึ่ง) อินพุตถูกคั่นด้วยช่องว่าง


0

Stax , 17 ไบต์

àºÇ╝'♫d▬♣ΩÜEƒ6╩╬ó

เรียกใช้และแก้ไขข้อบกพร่อง

รู้สึกว่ามันควรจะสั้นกว่านี้ แต่ฉันไม่สามารถต้านทานโอกาสที่จะใช้คุณสมบัติ stax ใหม่จากรีลีสล่าสุด

การจัดการอินพุตทั้งหมดเป็นสตริง:

  1. Regex แทนที่จำนวนตัวเลขด้วย eval(match) - 1แทนที่วิ่งของตัวเลขกับ นี่คือคุณสมบัติใหม่เนื่องจากการแทนที่บล็อก regex ไม่ใช่สตริง แต่เป็นจำนวนเต็ม
  2. Regex แทนที่การทำงานของตัวอักษรด้วยการแปลเสียงรอบตัวอักษรตัวเล็ก

0

Python 3, 66 ไบต์

lambda X:[x-1if type(x)==int else chr(97+(ord(x)+8)%26)for x in X]

แก้ไข:

ฉันไม่เห็นวิธีแก้ปัญหาของ Jitse จนกระทั่งตอนนี้ เคล็ดลับของ if ''! = i * 0 ยอดเยี่ยมมาก!


0

C #, 148 ไบต์

(object[] o)=>{var l=new List<object>();foreach(var h in o){try{l.Add((int)h-1);}catch{var c=((char)h+1);if(c>122){c=97;}l.Add((char)c);}}return l;}

ลิงค์ Repl.it

Ungolfed:

var inputList = new object[] {'a', 2, 'z', 6};
var outputList = new List<object>();
foreach (var currentItem in inputList)
{
    try
    {
        outputList.Add((int)currentItem-1);
    }
    catch
    {
        var currentItemPlusOne = ((char)currentItem + 1);
        if (currentItemPlusOne > 122)
        {
            currentItemPlusOne = 97;
        }
        outputList.Add((char)currentItemPlusOne);
    }
}

0

ถ่าน 16 ไบต์

WS⟦⎇№βι§β⊕⌕βιI⊖ι

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด รับอินพุตบน STDIN แต่ละบรรทัดเป็นตัวอักษรตัวพิมพ์เล็กหรือจำนวนเต็มและเอาต์พุตแยกบรรทัดบน STDOUT คำอธิบาย:

WS

อินพุตซ้ำจาก STDIN จนกระทั่งถึงบรรทัดว่าง

ทำให้เอาต์พุตนิพจน์นี้อยู่บนบรรทัดของตัวเอง

⎇№βι

นี่คือสตริงย่อยของตัวอักษรตัวเล็กที่กำหนดไว้ล่วงหน้าหรือไม่

§β⊕⌕βι

ถ้าเป็นเช่นนั้นให้พิมพ์ตัวอักษรถัดไปที่มีการจัดทำดัชนี

I⊖ι

มิฉะนั้นลดค่าและส่งกลับเป็นสตริงสำหรับการพิมพ์โดยนัย


0

Zsh , 47 ไบต์

a=({a..z} a)
for i
<<<${a[$a[(i)$i]+1]:-$[--i]}

ลองออนไลน์!

a=({a..z} a)                  # append extra 'a' to the end to handle 'z' case
for i                         # for i in "$@" arguments
<<<${a[$a[(i)$i]+1]:-$[--i]}
       $a[(i)$i]              # first (i)ndex of $i in list (if not found, set to after last index)
      [         +1]           # increment
   ${a[           ]        }  # value in array at index. if lookup fails, empty string
   ${              :-$[--i]}  # if empty, decrement $i and substitute instead
<<<                           # print to stdout


0

Perl 6 , 31 ไบต์

*>>.&{(try $_-1)||chr ord ++$_}

ลองออนไลน์!

ไม่ประสงค์ออกนามแลมบ์ดาสิ่งที่แมองค์ประกอบไปที่รายการและความพยายามที่จะลบหนึ่งจากมันแต่ละอย่างอื่นที่เพิ่มขึ้นและการใช้ตัวอักษรตัวแรกในกรณีที่ตัดไปzaa



0

SimpleTemplate, 80 ไบต์

นี่เป็นภาษาที่ฉันเขียนขึ้น

เนื่องจากข้อ จำกัด ในคอมไพเลอร์ฉันไม่สามารถลดได้อีก

{@eachargv}{@if_ is matches"@\d+@"}{@incby-1_}{@echol_}{@else}{@inc_}{@echol_.0}

และตอนนี้ ungolfed:

{@each argv as value}
    {@if value is matches "@\d+@"}
        {@inc by -1 value}
    {@else}
        {@inc by 1 value}
    {@/}
    {@echo value, "\n"}
{@/}

และคำอธิบาย:

  • {@each argv as value}- วนargvซ้ำผ่านค่าทั้งหมดใน ( argvมีอาร์กิวเมนต์ทั้งหมดที่ส่งผ่าน)
    หากas <var>ไม่มีอยู่ระบบ_จะใช้ตัวแปรเริ่มต้น
  • {@if value is matches "@\d+@"}- การตรวจสอบว่าตรงกับที่มีการแสดงออกปกติvalue"@\d+@"
  • {@inc by -1 value} - เพิ่มค่าด้วย -1 (โดยพื้นฐานแล้วคือการลดลง)
  • {@echo value, "\n"}และ{@echol_}-echolส่งออกค่าที่ส่งผ่านและต่อท้ายบรรทัดที่ส่วนท้าย
  • {@else} - อธิบายตนเอง
  • {@inc by 1 value}- เพิ่มค่า 1 หากby <value>ไม่มีหายไปจะถือว่าเป็น 1
  • {@echo value.0, "\n"}และ{@echol_.0}- echolส่งออกค่าที่ส่งผ่านและต่อท้ายบรรทัดที่ส่วนท้าย นี้เป็นสิ่งจำเป็นเพราะกฎท้าทาย:
    เมื่อถูกนำมาใช้ในสตริงก็เพิ่มตัวอักษรและเมื่อมันฮิตก็ตัดไป การส่งออกอักขระตัวแรกที่ตรงกับความท้าทายด้วยราคา 7 ไบต์z wraps to a
    @inczaa
  • {@/}- ปิด{@else}ด้านบน (ตัวเลือก)
  • {@/}- ปิด{@each}ด้านบน (ตัวเลือก)

คุณสามารถลองสิ่งนี้ได้ที่: http://sandbox.onlinephpfunctions.com/code/7533641a0aa1fc8bf4699a9c758690de186b052f

แต่ละอาร์กิวเมนต์ที่ส่งผ่านไปrender()จะเป็นค่าใหม่ที่พิจารณา


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