ในตัวต้องห้ามในตัว


52

ในช่องโหว่มาตรฐานห้ามดังต่อไปนี้:

อ้างว่าคำตอบของคุณถูกเขียนใน "MyOwnLanguage" โดยที่คำสั่งxหมายถึง "อ่านลำดับของตัวเลขแบ่งพวกมันออกเป็นกลุ่มละสามคนและพิมพ์ตัวเลขสุดท้ายของกลุ่มเหล่านั้นที่จำนวนที่สองน้อยกว่าครั้งแรก"

ที่นี่เราจะทำสิ่งเดียวกันแน่นอน

งาน

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

Testcases

Input               Output
[]                  []
[1,2,3,4,5,6,7,8,9] []
[2,1,3,5,4,6,8,7,9] [3,6,9]
[3,1,4,1,5,9,2,6,5] [4]
[100,99,123]        [123]
[123,123,456]       []
[456,123,789]       [789]

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

นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุดในการชนะไบต์

ช่องโหว่มาตรฐานมีผลบังคับใช้ดังนั้นโปรดอย่ามีคำสั่งในตัวxที่ทำหน้าที่นี้


31
อืม ... ตอนนี้ฉันถูกล่อลวงให้สร้างMyOwnLanguageและเพิ่มxคำสั่ง ... : P
DJMcMayhem

6
* อย่าลืมว่ามีบิวท์อิน * ‽ถ้าเรามีมันแล้วเราสามารถใช้มันได้หรือไม่?
2560

2
@ Adámตามช่องโหว่มาตรฐานคุณไม่สามารถมีภาษาที่มีxฟังก์ชั่นเฉพาะที่มีในตัว
Leun Nun

34
@LeakyNun ใช่คุณทำได้คุณไม่สามารถสร้างภาษาแบบนี้ได้เนื่องจากความท้าทาย หากภาษาของคุณมีความท้าทายมาก่อน
2560

9
ถ้าฉันเรียก builtin pฉันสามารถใช้มันได้หรือไม่
Mindwin

คำตอบ:



13

เยลลี่ , 9 8 ไบต์

>Ḋm3T×3ị

ลองออนไลน์!

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

>Ḋm3T×3ị  Main link. Argument: A (array)

 Ḋ        Dequeue; yield A without its first element.
>         Compare the elements of A with the elements of the result.
  m3      Select each third element, starting with the first.
    T     Truth; get all indices of truthy elements.
     ×3   Multiply those indices by 3.
       ị  Unindex; retrieve the elements at the redulting indices.

12

Haskell, 30 29 ไบต์

x(a:b:c:l)=[c|b<a]++x l
x d=d

ความพยายามครั้งแรกของฉันในการเล่นกอล์ฟ Haskell ดังนั้นฉันอาจพลาดการเพิ่มประสิทธิภาพหรือสองครั้ง

-1 ไบต์ขอบคุณ @JulianWolf


4
คำตอบที่ดี! ดูcodegolf.stackexchange.com/a/60884/66904สำหรับคำแนะนำที่เกี่ยวข้อง โดยเฉพาะการแลกเปลี่ยนคำจำกัดความทั้งสองและการเขียนที่สอง (ตอนนี้ก่อน) ที่x d=dสามารถช่วยคุณ byte
Julian Wolf

ฉลาด! ฉันเรียกดูคำตอบนั้นล่วงหน้า แต่ต้องพลาดส่วนที่คำจำกัดความนำมาใช้ซ้ำ

11

Mathematica ขนาด 37 ไบต์

สมมติว่าสิ่งนี้ตรงตามข้อกำหนดเฉพาะ ngenisis จะได้รับเครดิตสำหรับวิธีการนี้ซึ่งนำไปสู่การประหยัด 1 ไบต์!

BlockMap[If[#>#2,Print@#3]&@@#&,#,3]&

ฟังก์ชั่นบริสุทธิ์ BlockMap[...,#,3]&แยกรายการป้อนข้อมูลลงในรายการย่อยของความยาว 3 If[#>#2,Print@#3]&@@#&และจากนั้นดำเนินการในแต่ละรายการย่อยที่มีฟังก์ชั่น ผลลัพธ์คือแต่ละหมายเลขสุดท้ายที่ผ่านการคัดเลือกจะถูกพิมพ์ ฟังก์ชั่นยังส่งกลับค่า (เช่นรายการNullsa ที่สามตราบเท่าที่รายการอินพุต) ซึ่งดูเหมือนว่าจะได้รับอนุญาตพฤติกรรม

Mathematica, 42 38 ไบต์

ขอบคุณ Martin Ender สำหรับการบันทึก 4 ไบต์!

Cases[#~Partition~3,{a__,b_}/;a>0:>b]&

ฟังก์ชั่นบริสุทธิ์ #~Partition~3ทำในสิ่งที่คุณคิด Cases[X,P:>Q]เลือกองค์ประกอบทั้งหมดของการXจับคู่รูปแบบPและส่งคืนผลลัพธ์ของกฎการแปลงที่:>Qใช้กับแต่ละอินสแตนซ์ ที่นี่รูปแบบที่ถูกจับคู่คือ{a__,b_}/;a>0: b_จะจับคู่องค์ประกอบสุดท้ายของรายการและa__องค์ประกอบอื่น ๆ ทั้งหมด (ในกรณีนี้คือสองรายการแรก); เรียกพวกเขาyและzสำหรับตอนนี้ a>0จากนั้นส่อเสียดขยายไปy>z>0ซึ่งเป็นแบบทดสอบที่เราต้องการใช้ (ถูกต้องเพราะสเป็คบอกว่าทุกอย่างจะเป็นจำนวนเต็มบวก) และกฎการแปลงคือ:>bซึ่งจะแทนที่การจับคู่แต่ละรายการที่เรียงลำดับสามส่วนด้วยองค์ประกอบสุดท้าย

ส่งต้นฉบับ:

Last/@Select[#~Partition~3,#.{1,-1,0}>0&]&

ฟังก์ชั่นบริสุทธิ์; การใช้งานตรงไปตรงมาค่อนข้างอื่นนอกเหนือจาก#.{1,-1,0}ที่คำนวณความแตกต่างระหว่างองค์ประกอบแรกและสองของแต่ละรายการย่อย 3 องค์ประกอบ


3
ผลิตภัณฑ์ dot นั้นเรียบร้อย แต่#>#2&@@#&สั้นกว่า แต่โดยรวมแล้วยังใช้งานได้สั้นกว่าCasesแทนSelect:Cases[#~Partition~3,{a__,b_}/;a>0:>b]&
Martin Ender

a>0:>มีเวทมนตร์สองชนิดในนั้น!
Greg Martin

BlockMapยั่วเย้าที่นี่
ngenisis

BlockMap[If[#>#2,#3,Nothing]&@@#&,#,3]&ใช้งานได้และมีเพียง 39 ไบต์ ... เราสามารถบันทึกสองสามไบต์ได้หรือไม่
Greg Martin

1
BlockMap[If[#>#2,Print@#3]&@@#&,#,3]&เนื้อหาที่ตรงกับข้อกำหนด
ngenisis



5

Brachylog (2), 14 ไบต์

~c{Ṫ}ᵐ{k>₁&t}ˢ

ลองออนไลน์!

Brachylog ค่อนข้างดิ้นรนกับปัญหาแบบนี้ โปรดทราบว่าโปรแกรมนี้มีความซับซ้อนในการคำนวณที่น่ากลัวเนื่องจากกองกำลังเดรัจฉานกำลังแยกอินพุตออกเป็นกลุ่ม 3 (ไม่มี "แบ่งออกเป็นกลุ่ม" บิวด์อิน); มันทำงานได้อย่างรวดเร็วด้วยสี่กลุ่ม แต่ช้ามากกับห้ากลุ่ม

คำอธิบาย

~c{Ṫ}ᵐ{k>₁&t}ˢ
~c              Split into groups
  { }ᵐ          such that each group
   Ṫ            has three elements
      {     }ˢ  then on each element, skipping that element on error:
       k          with the list minus its last element
        >₁        assert that it's strictly decreasing
          &       and with the original list
           t      keep only its last element

อาจจะคุ้มค่าที่จะกล่าวถึงว่าl÷₃;?ḍ₍เป็นทางเลือกที่เร็วกว่า
Leun Nun

ฉันเคยลองใช้มาก่อนหน้า ( /ไม่ใช้÷มันเท่ากันแล้วที่นี่) แต่มันยาวกว่าไบต์ดังนั้นฉันจึงละทิ้งมันขณะเล่นกอล์ฟลง

4

J , 14 ไบต์

_3&(>`[/\#]/\)

สิ่งนี้ประเมินเป็นคำกริยา monadic ลองออนไลน์!

คำอธิบาย

_3&(>`[/\#]/\)  Input is y.
_3&(    \    )  For each non-overlapping 3-element chunk of y,
    >`[/        check if first element is greater than second.
                Call the resulting array x.
_3&(        \)  For each non-overlapping 3-element chunk of y,
          ]/    take the last element.
         #      Keep those where the corresponding element of x is 1.

4

อลิซ , 12 11 ไบต์

ขอบคุณ Leo ที่ช่วยประหยัด 1 ไบต์

I.h%I-rI~$O

ลองออนไลน์!

ใช้จุดโค้ดของสตริงเป็นรายการอินพุตและเอาต์พุตอักขระที่สอดคล้องกับเอาต์พุตที่ควรเก็บไว้

คำอธิบาย

I      Read x. Pushes -1 on EOF.
.h%    Compute x%(x+1). This terminates the program due to division by zero at EOF,
       but does nothing for non-negative x.
I      Read y.
-      Compute x-y. We only want to output z is this is positive.
r      Range. Pushes 0 1 ... n for positive n, and -n ... 1 0 for negative n
       (and simply 0 for n = 0). So this results in a positive number on top
       of the stack iff x-y is positive.
I      Read z.
~      Swap it with x-y > 0.
$O     Output z iff x-y > 0.
       Then the IP wraps to the beginning of the program to process the next triplet.

คุณสามารถกอล์ฟหนึ่งไบต์ใช้แทนr TIOex
Leo

@Leo ที่ยอดเยี่ยมขอขอบคุณ!
Martin Ender



3

Perl 5 , 31 ไบต์

30 ไบต์ของรหัสเมือง + -pธง

s/\d+ (\d+) (\d+)/$2if$1<$&/ge

ลองออนไลน์!

แทนที่แต่ละกลุ่มของ 3 ตัวเลข ( \d+ (\d+) (\d+)) โดยที่สาม ( $2) ถ้าสอง ( $1) น้อยกว่า ( $&) แรกและไม่มีอะไรเป็นอย่างอื่น


3

CJam , 15 ไบต์

{3/{)\:>{;}|}%}

บล็อกแบบไม่ระบุชื่อซึ่งคาดว่าจะมีการโต้แย้งในสแต็กและปล่อยให้ผลลัพธ์อยู่ในสแต็ก

ลองออนไลน์! (รันกรณีทดสอบทั้งหมด)

คำอธิบาย

3/             e# Split the list into length-3 chunks.
  {            e# For each chunk:
   )           e#  Remove the last element.
    \:>        e#  Reduce the first 2 elements by greater than.
       {;}|    e#  If the first is not larger than the second, delete the third.
           }%  e# (end for)

3

Brain-Flak , 82 ไบต์

{([({}[{}()]<(())>)](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}{{}((<({}<>)<>>))}{}{}}<>

ลองออนไลน์!

# Until the stack is empty (input is guaranteed to not contain 0)
{

  # Push 1 for greater than or equal to 0
  ([({}[{}()]<(())>)](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}
  #  ^------^  This part is Top - (Second + 1)

  # If the second number was less than the first...
  {{}

     # Get ready to push 2 zeros
     ((<

       # Move the next number to the other stack
       ({}<>)<>

     # Push those 2 zeros
     >))}

     # Pop 2 values.
     # This is either 2 zeros, or a 0 and a "last number" that shouldn't be printed
     {}{}

# End loop
}

# Switch to the stack where we stored the numbers to be printed
<>

3

เยลลี่ 10 ไบต์

s3µṪWx>/µ€

ลองออนไลน์!

หรือ

ตรวจสอบกรณีทดสอบ

-3 ไบต์ขอบคุณ @LeakyNun

คำอธิบาย

s3µṪWx>/µ€
s3         - split into groups of three
  µ     µ€ - on each group, do:
   ṪW      - return the third element as the only element of a list
     x     - repeat each element in that list the number of times
      >/   - corresponding to 1 if the second element of the group is greater than the first; 0 otherwise.



3

R, 37 ไบต์

เวอร์ชันscan()ที่ฉันไม่ชอบ แต่ทำให้สั้นลง

x=scan();x[(i<--1:1)>0][x[!i]<x[i<0]]

เวอร์ชันfunction()ที่ง่ายต่อการทดสอบ (41 ไบต์)

f=function(x)x[(i<--1:1)>0][x[!i]<x[i<0]]

ขอบคุณ @Giuseppe! แนวคิดที่ดีในการใช้การรีไซเคิลดัชนี

ทดสอบ:

f(c())
f(c(1,2,3,4,5,6,7,8,9))
f(c(2,1,3,5,4,6,8,7,9))
f(c(3,1,4,1,5,9,2,6,5))
f(c(100,99,123))
f(c(123,123,456))
f(c(456,123,789))

เอาท์พุท:

> f(c())
NULL
> f(c(1,2,3,4,5,6,7,8,9))
numeric(0)
> f(c(2,1,3,5,4,6,8,7,9))
[1] 3 6 9
> f(c(3,1,4,1,5,9,2,6,5))
[1] 4
> f(c(100,99,123))
[1] 123
> f(c(123,123,456))
numeric(0)
> f(c(456,123,789))
[1] 789

คุณอ่านxจาก stdin โดยใช้x=scan()ที่จุดเริ่มต้นแทนที่จะกำหนดฟังก์ชั่นคุณยังสามารถตั้งค่าได้i=c(1,2,0)ตั้งแต่ดัชนีเชิงตรรกะจะถูกนำไปรีไซเคิลเช่นx=scan();i=c(1,2,0);x[!i][x[i>1]<x[i==1]]
Giuseppe


ขอบคุณ @Giuseppe! ฉันไม่ชอบx=scan()วิธีการนี้เนื่องจากทำให้อินพุตยุ่งยากมาก และฉันไม่สามารถทำซ้ำได้แล้ว
djhurio

2
ถูกต้อง แต่เป้าหมายคือการสร้างรหัสสั้นที่สุด น่าเสียดายสำหรับเราทั้งคู่มีคนอื่นพบทางออกที่ดีกว่า!
จูเซปเป้

เฮ้ฉันมีความคิดที่จะใช้matrix()แต่อย่างใดฉันไม่เชื่อว่ามันจะเป็นไปได้ที่จะทำให้สั้น
djhurio

3

JavaScript (ES6), 46 44 42 41 39 ไบต์

a=>a.filter((_,y)=>y%3>1&a[y-1]<a[y-2])
  • ที่บันทึกไว้ 2 ไบต์ขอบคุณที่นีล

ลองมัน

ป้อนรายการตัวเลขคั่นด้วยเครื่องหมายจุลภาคโดยไม่มีช่องว่าง

f=
a=>a.filter((_,y)=>y%3>1&a[y-1]<a[y-2])
i.oninput=_=>o.innerText=JSON.stringify(f(i.value.split`,`.map(eval)))
console.log(JSON.stringify(f([])))                  // []
console.log(JSON.stringify(f([1,2,3,4,5,6,7,8,9]))) // []
console.log(JSON.stringify(f([2,1,3,5,4,6,8,7,9]))) // [3,6,9]
console.log(JSON.stringify(f([3,1,4,1,5,9,2,6,5]))) // [4]
console.log(JSON.stringify(f([100,99,123])))        // [123]
console.log(JSON.stringify(f([123,123,456])))       // []
console.log(JSON.stringify(f([456,123,789])))       // [789]
<input id=i><pre id=o>


คำอธิบาย

a=>              :Anonymous function taking the input array as an argument via parameter a
a.filter((_,y)=> :Filter the array by executing a callback function on each element,
                  with the index of the current element passed through parameter y.
                  If the function returns 0 for any element, remove it from the array.
y%3>1            :Check if the modulo of the current index is greater than 1.
                  (JS uses 0 indexing, therefore the index of the 3rd element is 2; 2%3=2)
&                :Bitwise AND.
a[y-1]<a[y-2]    :Check if the element at index y-1 in array a
                  is less than the element at index y-2
)                :End filtering method

1
ไม่y%3>1&a[y-1]<a[y-2]ทำงาน?
Neil

ข้ามไป 44 ยังคงเป็น 44
Roman Gräf

@ RomanGräfหมายถึงอะไร
Shaggy


ข้อผิดพลาดใน "Arial," Helvetica Neue ", Helvetica, sans-serif" - ด่างดี @ Roman
flurbius

3

Husk , 8 ไบต์

ṁΓȯΓ↑<C3

ลองออนไลน์!

คำอธิบาย

โปรแกรมนี้มีส่วนเกี่ยวข้องดังนั้นโปรดอดทนกับฉัน

ṁΓȯΓ↑<C3  Implicit input (list of integers).
      C3  Split into slices of length 3.
ṁ         Map over slices and concatenate results
 ΓȯΓ↑<    of this function, explained below.

ฟังก์ชั่นΓȯΓ↑<ใช้เวลารายการของความยาว x = [a,b,c]3, ครั้งแรกที่Γแยกxออกเป็นaและและฟีดพวกเขาเป็นข้อโต้แย้งที่จะฟังก์ชั่น[b,c] ȯΓ↑<นี้ควรจะเทียบเท่ากับ((Γ↑)<)แต่เนื่องจากข้อผิดพลาด / คุณสมบัติของล่ามก็จริงเทียบเท่ากับการ(Γ(↑<))ตีความเป็นองค์ประกอบของและΓ ↑<ตอนนี้aจะถูกป้อนให้กับฟังก์ชั่นหลังการใช้โปรแกรมบางส่วนฟังก์ชั่นที่เกิด↑<aจะได้รับการΓซึ่งชำแหละ[b,c]เข้าและb [c]จากนั้นbจะถูกส่งไปยัง↑<aทำให้เกิดฟังก์ชันที่ใช้b<aองค์ประกอบแรกจากรายการ ในที่สุดฟังก์ชั่นนี้จะใช้กับ[c]; ผลลัพธ์คือ[c]ถ้าa>bและ[]มิฉะนั้น. รายการเหล่านี้เรียงต่อกันเป็นรูปแบบผลลัพธ์สุดท้ายซึ่งพิมพ์ออกมาโดยปริยาย

หากไม่มี "คุณสมบัติ" ฉันจะมี 9 ไบต์:

ṁΓoΓo↑<C3


2

MATL 10 ไบต์

IeI&Y)d0<)

ผลลัพธ์จะปรากฏเป็นตัวเลขคั่นด้วยช่องว่าง

ลองออนไลน์!

หรือตรวจสอบกรณีทดสอบทั้งหมด []นี้จะแสดงการแสดงสตริงของการส่งออกเพื่อให้อาร์เรย์ที่ว่างเปล่าจะเห็นเป็นจริง โปรดสังเกตว่าใน MATL จำนวนเป็นเช่นเดียวกับอาร์เรย์เดี่ยวดังนั้นจะแสดงเป็น[4]4

คำอธิบาย

Ie    % Implicit input. Reshape as a 3-row matrix (column-major order)
I&Y)  % Split into the third row and a submatrix with the other two rows
d     % Consecutive difference along each column of the submatrix
0<    % True for negative values
)     % Use as logical index into the original third row. Implicitly display

2

Rödaขนาด 15 ไบต์

{[_3]if[_2<_1]}

Rödaใกล้เคียงกับภาษากอล์ฟ ...

การดำเนินการนี้ใช้ค่าสามค่าจากสตรีมและผลักกลับค่าที่สาม ( _3) กลับหากค่าที่สอง ( _2) น้อยกว่าค่าแรก ( _1)

ขีดน้ำตาลไวยากรณ์สำหรับforลูปเพื่อให้โปรแกรมสามารถเขียนเป็นหรือแม้กระทั่ง{{[a]if[b<c]}for a,b,c}{[a]for a,b,c if[b<c]}

ไม่มีลิงก์ TIO เนื่องจากไม่สามารถใช้งานได้กับ TIO ด้วยเหตุผลบางประการ (แม้ว่าจะใช้งานได้กับRödaรุ่นล่าสุดที่ท้าทายความสามารถ)


2

Java 7, 86 85 ไบต์

void c(int[]a){for(int i=-1;++i<a.length;)if(a[i++]>a[i++])System.out.println(a[i]);}

-1 ไบต์ขอบคุณ@ PunPun1000

คำอธิบาย:

ลองที่นี่

void c(int[]a){                  // Method with integer-array parameter and no return
  for(int i=-1;++i<a.length;)    //  Loop over the array in steps of three at a time
    if(a[i++]>a[i++])            //   If the value of the current index is larger than the next:
      System.out.println(a[i]);  //    Print the value on the third index
                                 //  End of loop (implicit / single-line body)
}                                // End of method

@ PunPun1000 ตอนนี้คุณเพิ่มการวนซ้ำเพียง 2 แทนที่จะเป็น 3 และให้ผลลัพธ์ที่ไม่ถูกต้อง (เช่น3,9สำหรับกรณีทดสอบ1,2,3,4,5,6,7,8,9แทน3,6,9)
Kevin Cruijssen

1
@Kevin_Cruijssen โอ๊ะคุณพูดถูก คุณยังสามารถบันทึกไบต์ได้โดยใช้ตัวดำเนินการส่วนเพิ่ม คุณต้องเริ่มต้นที่ -1 ลองออนไลน์!
PunPun1000

@ PunPun1000 อาคุณพูดถูกจับได้ดี ขอบคุณ!
Kevin Cruijssen

2

C #, 126 ไบต์

using System.Linq;i=>Enumerable.Range(0,i.Length/3).Select(u=>3*u).Where(u=>i[u]>i[u+1]).Select(u=>i[u+2]);

หากคุณต้องการโปรแกรมทั้งหมดด้วยวิธีการมันจะเป็น175 ไบต์ :

using System.Linq;namespace S{class P{static System.Collections.IEnumerable X(int[]i)=>Enumerable.Range(0,i.Length/3).Select(u=>3*u).Where(u=>i[u]>i[u+1]).Select(u=>i[u+2]);}}

บันทึก 7 ไบต์ด้วยความช่วยเหลือของ TheLethalCoder


คุณสามารถพิมพ์สิ่งเหล่านั้นได้ ...
Leun Nun

@LeakyNun แน่นอนฉันทำได้ - แต่ทำไมต้องฉัน ฉันถามว่ามันเป็นสิ่งจำเป็น แต่ไม่ใช่และฉันต้องการจำนวนไบต์ที่มากกว่า
MetaColon

(int[]i)ก็สามารถจะมีiความจำเป็นสำหรับประเภทไม่มี
TheLethalCoder

@TheLethalCoder อัพเดตแล้ว
MetaColon

@MetaColon คุณไม่จำเป็นต้องวงเล็บรอบ(i)อย่างใดอย่างหนึ่ง
TheLethalCoder


1

CJam , 16 ไบต์

q~3/{~@@>S{;}?}%

เอาต์พุตจะแสดงเป็นตัวเลขคั่นด้วยช่องว่าง

ลองออนไลน์!

คำอธิบาย

q~               e# Read input list
  3/             e# List of sublists of length 3
   {         }%  e# Apply this to each sublist
    ~            e# Push sublist contents: 3 numbers
     @@          e# Rotate twice. This moves first two numbers to top
       >         e# Greater than?
        S{;}?    e# If so: push space (used as separator). Else: pop the third number
                 e# Implicitly display


1

JavaScript, 108 107 108 ไบต์

นี่เป็นฟังก์ชัน JS anonymous (แลมบ์ดา) ที่ถูกต้อง เพิ่มที่จุดเริ่มต้นและเรียกเช่นx= ขาออกเป็นฟังก์ชั่นx([5,4,9,10,5,13])return

a=>(y=[],a.map((c,i)=>(i+1)%3?0:y.push(a.slice(i-2,i+1))),y.map(v=>v[1]<v[0]?v[2]:null).filter(c=>c|c==0))

ตัวอย่างจะใช้เวลาในการป้อนข้อมูลเป็นรายการของจำนวนเต็มคั่นด้วยเครื่องหมายจุลภาค

x=a=>(y=[],a.map((c,i)=>(i+1)%3?0:y.push(a.slice(i-2,i+1))),y.map(v=>v[1]<v[0]?v[2]:null).filter(c=>c|c==0))
martin.oninput = e => { dennis.innerHTML = x(martin.value.split`,`.map(c=>parseInt(c,10))) }
<input type=text id=martin><pre id=dennis>


อะไรคือจุดที่โพสต์โซลูชั่นที่ยาวขึ้นและใช้martinและdennisเป็น id?
Leun Nun

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

[5,4,9,10,5,13]นี้ไม่ได้ทำงานให้กับ
Shaggy

@Shaggy นั่นเป็นปัญหาของการใช้ตัวอย่างข้อมูลการทดสอบ ไม่มีอะไรผิดปกติกับการแก้ปัญหา ที่จริงแล้วค่าขององค์ประกอบอินพุตมักจะเป็นสตริง ดังนั้นการแยกสตริงที่,มีผลทำให้มันเป็นอาร์เรย์ของสตริงมากกว่าตัวเลข! การแก้ปัญหาเป็นเรื่องปกติอย่างสมบูรณ์แบบ มีเพียงตัวอย่างข้อมูลการทดสอบเท่านั้นที่ผิด ตอนนี้ฉันคงได้แก้ไขแล้ว ขอบคุณสำหรับการชี้ให้เห็น! :)
Arjun

โอ้ใช่แล้วนั่นอธิบายปัญหา! ขอขอบคุณที่คุณ , @Arjun
Shaggy

1

Perl5.8.9, 73 60 ไบต์

while(@F){@b=splice@F,0,3;$b[1]<$b[0]&&print$b[2]}print"-"

(58 + 2 สำหรับแฟล็ก 'n' เพื่ออ่านไฟล์ทั้งหมดและ a ถึง autosplit) ถือว่าอินพุตเป็นบรรทัดของตัวเลขคั่นด้วยช่องว่าง

ลดขอบคุณ Dada รวมถึงการพิมพ์ที่ส่วนท้ายของการมองเห็นที่จะบันทึก 8 ไบต์ถ้าไม่


ทำได้ดีนี่! +1 ของคุณอย่างดี!
Arjun

รูปแบบเอาต์พุตค่อนข้างยืดหยุ่นคุณไม่จำเป็นต้องวางไว้print"\n"ที่จุดสิ้นสุด นอกจากนี้คุณสามารถทำได้$b[1]<$b[0]&&print"$b[2] "while@b=splice@a,0,3เพื่อบันทึก 7 ไบต์ สุดท้ายคุณสามารถใช้การ-aตั้งค่าสถานะแทนการทำ@a=split(มันจะทำแบบเดียวกันโดยอัตโนมัติและเก็บผลลัพธ์@Fแทน@a); ด้วย Perl 5.8.9 คุณจะต้องใช้-naขณะที่ Perls ที่ผ่านมา-aก็เพียงพอแล้ว ที่ควรจะได้รับคุณถึง 47-48 ไบต์
Dada

โอ้ฉันไม่รู้เกี่ยวกับ -a ฉันยังคงคิดว่าฉันควรจะทำหนึ่งบรรทัดต่อบรรทัดอินพุตเอาต์พุตนั้นไม่สามารถเข้าใจได้อย่างดี
Tom Tanner


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