รายการยกเลิกการซ้อน


12

ให้ลิสต์ที่มีลิสต์ซ้อนอยู่ภายในให้คืนค่าลิสต์ของไอเท็มที่ซ้อนอยู่ในไอเท็ม

อินพุต

รายการจะมีรายการซ้อนกันได้สูงสุด 4 รายการ นับ 0 ทั้งหมดภายในอินพุตเป็นช่องว่าง

เอาท์พุต

พิมพ์ทีละรายการ อย่าพิมพ์เอาต์พุตเป็นรายการ คุณสามารถแยกแต่ละรายการด้วยช่องว่างใด ๆ

ตัวอย่างคดี

[[1, 0], [2, 0], [2, 3]] -> 1 2 2 3
[[[4, 5, 8]], [[5, 6, 20]], [[1, 20, 500]]] -> 4 5 8 5 6 20 1 20 500
[[[1, 0], [0, 0], [0, 0]], [[1, 0], [1, 2], [2, 0]], [[2, 0], [0, 0], [0, 0]]] -> 1 1 1 2 2 2

รหัสที่สั้นที่สุดชนะ


คุณควรรวมอย่างน้อยหนึ่งตัวอย่างของรายการความลึก 4 รายการ ถ้าฉันเข้าใจถูกต้องความลึก 4 อย่าง[[[[5]]]]นั้นใช่ไหม
sergiol

[[[[5]]]]ใช้งานได้กับtio.run/แต่ไม่ทำงานในtio.run/…
sergiol

ยากที่จะรับรู้Count all 0's within the input as a null space.ถึงความหมายนั้นignore zeros
l4m2

คำตอบ:


7

APL (10)

0~⍨⍎⍞~'[]'

คำอธิบาย:

  • ⍞~'[]': การป้อนข้อมูลผู้ใช้ ( ) โดยไม่ ( ~) ตัวละคร'[]'
    สิ่งนี้ให้สิ่งที่ต้องการ'1,2,0,2,3'
  • : ประเมินสตริงนี้ มันเกิดขึ้นนั่น,คือตัวดำเนินการเรียงต่อกันดังนั้นตอนนี้เรามีรายการ: 1 2 0 2 3(รายการ APL คั่นด้วยช่องว่างตามค่าเริ่มต้น)
  • 0~⍨: ลบตัวเลขทั้งหมด 0 จากรายการนี้ (ตอนนี้เป็นรายการตัวเลขไม่ใช่สายอักขระดังนั้นในตอนนี้ดังนั้นเลขศูนย์ภายในตัวเลขจึงไม่ถูกลบออก
  • ค่านี้เป็นเอาต์พุต (โดยค่าเริ่มต้นเนื่องจากเป็นค่าของโปรแกรมทั้งหมดชนิดเช่น Golfscript) รายการ APL คั่นด้วยช่องว่างตามค่าเริ่มต้นดังนั้นจึงดูเหมือนในคำถาม

คำตอบที่สั้นที่สุดดังนั้นอันนี้จึงใช้เค้ก สำหรับคำตอบทั้งหมดที่ไม่ใช่ฉันได้รับ + ​​ถ้ารหัสของคุณสั้นหรือสร้างสรรค์จริงๆ
beary605

7

ใจเย็น 20 ตัวอักษร

โซลูชันขึ้นอยู่กับ POSIX Extended Regular Expression

s;[^0-9]+0|[],[]+;;g

ผลผลิต :

bash-3.2$ sed -rf sedFile <<< "[[[4, 5, 8]], [[5, 6, 20]], [[1, 20, 500]]]" 
4 5 8 5 6 20 1 20 500

แก้ไข : POSIX การแสดงออกปกติพื้นฐาน ( โซลูชันของ@clueless ), 19 ตัวอักษร :

s/[^0-9][^1-9]*/ /g

1
s/[^0-9][^1-9]*/ /gใช้งานได้และไม่ต้องการนิพจน์ทั่วไปเพิ่มเติม
Clueless

7

Python 45

w00 ยกเว้นการจัดการในสนามกอล์ฟ!

def d(x):
 try:map(d,x)
 except:print`x`*(x!=0)

วิธีการตรวจสอบประเภทที่ฉลาดมาก
beary605

ฉันชอบวิธีแก้ปัญหา แต่ฉันคิดว่ามันเป็นการโกงที่จะไม่รวมd(input())บรรทัดในจำนวนตัวละคร
Clueless

ความท้าทายที่คลุมเครือ ... ไม่มันขัดแย้งกับ I / O
บูธโดย

5

Perl, 20 16 13 ตัวอักษร

perl -ple 's/\D+0?/ /g'

-lสวิทช์ที่มีความจำเป็นเพื่อรักษาขึ้นบรรทัดสุดท้ายในการส่งออก

ต่อไปนี้เป็นรุ่นอื่นที่ใช้งานได้จริงกับรายการที่มีความหมาย (51 ตัวอักษร)

perl -E '$,=$";sub p{map{ref$_?p(@$_):$_||""}@_}say p eval<>'

โปรแกรมทั้งสองนี้ใช้ประโยชน์จากข้อกำหนดของปัญหาที่ว่า "สามารถแยกแต่ละรายการด้วยช่องว่างใด ๆ " และแทนที่ค่าศูนย์ด้วยช่องว่างแทนที่จะเอาออกทันที


4

K, 12

{x@?&x:,//x}

.

k){x@?&x:,//x}((1;0);(2;0);(2;3))
1 2 2 3
k){x@?&x:,//x}(((4;5;8));((5;6;20));((1;20;500)))
4 5 8 5 6 20 1 20 500
k){x@?&x:,//x}(((1;0);(0;0);(0;0));((1;0);(1;2);(2;0));((2;0);(0;0);(0;0)))
1 1 1 2 2 2

ทั้งนี้ขึ้นอยู่กับรุ่นของ k คุณอาจจะสามารถที่จะทำให้การใช้งานของ "ยกเว้น" ( x^y) เช่นดังนั้น: หรือแม้กระทั่ง{(,//x)^0} {,/x^0}/ทำงานในjohnearnest.github.io/ok/index.html
ngn

3

Perl 13 , 14 ถ่าน dit: pนับหนึ่งถ่าน

s/\D+|\b0/ /g

การใช้งาน:

cat '[[1, 0], [2, 0], [2, 3]]' | perl -pe 's/\D+|\b0/ /g'

ทำได้ดี. แม้ว่าการนับของคุณจะเป็น 14 ตัวอักษร (คุณต้องรวมpสวิตช์ในการนับ)
breadbox

@breadbox: ใช่คุณพูดถูก ฉันคิดถึงสิ่งนั้น
โตโต้

ด้วยเสียงก้องแทนการตัดมันจะทำงานได้อย่างเป็นกลางแม้ในถ่านจำนวน
ไม่ทราบผู้ใช้

2

Ruby, 38 ตัวอักษร

puts eval(gets).flatten.reject &:zero?

ตัวเลขจะถูกพิมพ์โดยคั่นด้วยตัวแบ่งบรรทัด


2

Golfscript 15

~{[]*}4*{},' '*

อินพุต

เรียกใช้จากบรรทัดคำสั่งเช่น:

echo [[[1 0] [0 0] [0 0]] [[1 0] [1 2] [2 0]] [[2 0] [0 0] [0 0]]] | ruby golfscript.rb x.gs

(สมมติว่าx.gsไฟล์มีรหัสที่แสดงด้านบน)

โปรดทราบว่าไม่มีเครื่องหมายจุลภาค ( ,) เมื่อกำหนดอาร์เรย์; นั่นคือไวยากรณ์ Golfscript

เอาท์พุต

เมื่อคำสั่งที่อธิบายในส่วนอินพุตถูกใช้เอาต์พุตจะเป็น:

1 1 1 2 2 2

2

Python 3, 49 ตัวอักษร

import re
print(*re.findall('[1-9]\d*',input()))

Python 2, 58 ตัวอักษร

import re
print re.sub('\D[^1-9]*',' ',raw_input())[1:-1]

2

Japt 5 ไบต์

c f ¸

ทดสอบมัน


คำอธิบาย

Uการป้อนข้อมูลโดยปริยายของอาร์เรย์ cเรียบอาร์เรย์ด้วย กรองด้วยfเพื่อลบ0s ¸เข้าร่วมเพื่อสตริงโดยใช้ช่องว่างด้วย เอาต์พุตโดยนัยของสตริงผลลัพธ์


2

Java 10, 106 ไบต์

void c(Object i){for(var o:(Object[])i)try{System.out.print((int)o>0?o+" ":"");}catch(Exception e){c(o);}}

อินพุตเป็นซ้อนกันObject[]เอาต์พุตพิมพ์ไปยัง STDOUT

ลองออนไลน์


46 ไบต์

s->s.replaceAll("[^0-9 ]","").replace(" 0","")

Stringเข้าและส่งออกทั้งในฐานะ

ลองออนไลน์


@Giuseppe โอ๊ะโอ .. นั่นเป็นข้อผิดพลาดที่ค่อนข้างโง่ ควรได้รับการแก้ไขแล้ว
Kevin Cruijssen

1

C, 45 ตัวอักษร

for(;s=strtok(s,"[], ");s=0)atoi(s)&&puts(s);

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


คำตอบไม่ควรเป็นโปรแกรมหรืออย่างน้อยฟังก์ชั่น? หากล้มเหลวสำหรับหมายเลข01(ดูเหมือนถูกกฎหมายสำหรับฉัน) และ*s-49&&puts(s)จะสั้นกว่า
ugoren

@ugoren ฉันไม่พบข้อกำหนดใด ๆ ที่ จำกัด คำตอบสำหรับโปรแกรม / ฟังก์ชั่นที่สมบูรณ์เท่านั้น ยังมี .... บ้าง?
Alexander Bakulin

@ugoren เขียนใหม่เพื่อรับมือกับตัวเลขด้วยเลขศูนย์นำหน้า และขอขอบคุณสำหรับคำแนะนำที่สั้นลง!
Alexander Bakulin

1

Python 99 111 ตัวอักษร

def d(l):
    if list==type(l):return[y for x in l for y in d(x)]
    return[str(l)]*(l!=0)
print" ".join(d(input()))

รุ่นถ่าน 99 ก่อนหน้านี้ - ล้มเหลวเมื่อรวมรายการที่มีค่าศูนย์เท่านั้น:

d=lambda l:list==type(l)and[y for x in l for y in d(x)]or[str(l)]*(l!=0)
print" ".join(d(input()))

d(l)ทำให้รายการแบนซ้ำในlขณะที่กรองเลขศูนย์และแปลงตัวเลขเป็นสตริง


มันจะคืนค่า 1 [0, 0] [0, 0] 1 1 2 2 2 [0, 0] [0, 0] สำหรับกรณีทดสอบที่สาม
beary605

@ beary605 ฉันเพิ่งข้ามหนึ่งการทดสอบนี้ ... ฉันใช้a and b or cแทนของ C a?b:cแต่มันล้มเหลวเมื่อbประเมินเป็นเท็จ (รายการที่ว่างเปล่าในกรณีนี้)
ugoren


1

อารัมภบท (79)

มันป้อนรายการเป็นคำศัพท์ดังนั้นคุณต้องใส่ '.' หลังจากรายการในอินพุต

รายการจะแบนจริง ๆ

x([H|T]):-x(H),x(T).
x(0). x([]).
x(M):-write(M),put(32).
:-read(X),x(X),halt.



0

สกาลา 147:

ทำงานกับรายการจริงไม่ใช่ในสตริง:

def f[A](l:List[_]):List[_]=l match{
case Nil=>l
case(l:List[_])::s=>(f(l):::f(s))
case e::s=>e::f(s)}
def p(l:List[_])=f(l)filter(!=0)mkString " "

ตอนนี้ทดสอบข้อมูล:

val l1 = List (List (1, 0), List (2, 0), List (2, 3))
val l2 = List (List (List (4, 5, 8)), List (List (5, 6, 20)), List (List (1, 20, 500)))
val l3 = List (List (List (1, 0), List (0, 0), List (0, 0)), List (List (1, 0), List (1, 2), List (2, 0)), List (List (2, 0), List (0, 0), List (0, 0)))
val l4 = List (l1, l2, l3)

scala> l4.map(p)
res94: List[String] = List(1 2 2 3, 4 5 8 5 6 20 1 20 500, 1 1 1 2 2 2)

scala> p(l4)
res95: String = 1 2 2 3 4 5 8 5 6 20 1 20 500 1 1 1 2 2 2

0

bash: 29 ตัวอักษร

l=$(echo "[[[1, 0], [0, 0], [0, 0]], [[1, 0], [1, 2], [2, 0]], [[2, 0], [0, 0], [0, 0]]]")
echo $l|tr -d '][,'|sed 's/\b0\b/ /g'
1           1   1 2 2   2          

การนับบรรทัด 2 เท่านั้นโดยไม่ต้องมี 'echo $ l |' ทดสอบ 3 ตัวอย่าง:

  1    2    2 3
   4 5 8   5 6 20   1 20 500
   1               1    1 2  2     2            

0

Tcl , 47 ไบต์

proc D L {concat {*}[concat {*}[concat {*}$L]]}

ลองออนไลน์!

สมมติว่า 4 {{{{5}}}}ลึกเป็นสิ่งที่ต้องการ เนื่องจากมีเป็นตัวอย่างของสิ่งดังกล่าวในกรณีที่การทดสอบก็อาจจะมีบางสิ่งบางอย่างที่ไม่เหมือนใคร{{{5}}}; ถ้าฉันสามารถทำให้รหัสของฉันสั้นลงได้!

Tcl , 66 ไบต์

proc D L {lsearch -al -inl -not "[string map {\{ "" \} ""} $L]" 0}

ลองออนไลน์!





0

Brachylogขนาด 8 ไบต์

ċ∋↰|ℕ₁ẉ⊥

ลองออนไลน์!

รับอินพุตผ่านตัวแปรอินพุตและพิมพ์เอาต์พุตคั่นด้วยบรรทัดใหม่ ปกติผมจะบ่นเกี่ยวกับรูปแบบการออก แต่จริง ๆ แล้วมันบันทึกฉันไบต์ในทางที่ฉันอาจจะไม่ได้คิดว่าจะเป็นอย่างอื่น - วางบนปลายสั้นกว่าห่อไว้ในẉ⊥{}ᶠ

ċ           If the input is a list,
 ∋          pick some element of it
  ↰         and recur with it as the input.
   |        Otherwise, if the input
    ℕ₁      is a natural number,
      ẉ     print it with a trailing newline
       ⊥    then trigger backtracking.

หากรายการไม่ได้ถูก จำกัด ว่าเป็นจำนวนเต็มไม่เป็นลบ

Brachylogขนาด 11 ไบต์

ċ!∋↰|0!⊥|ẉ⊥

ลองออนไลน์!


0

PHP , 70 ไบต์

function($a){array_walk_recursive($a,function($a){echo$a?"$a ":'';});}

ลองออนไลน์!

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


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