เปลี่ยนจำนวนเต็ม n เป็นรายการที่บรรจุมัน n ครั้ง


15

กำหนดจำนวนเต็มnเป็นอินพุตให้ส่งคืนรายการที่มีเวลาnซ้ำ nตัวอย่างเช่นโปรแกรมจะใช้เวลาและทำให้มันกลายเป็น5 [5,5,5,5,5]องค์ประกอบจะต้องเป็นจำนวนเต็มไม่ใช่สตริง ไม่อนุญาตให้ใช้ฟังก์ชันในตัวที่ทำงานสำเร็จ

นี่คือดังนั้นจึงใช้กฎมาตรฐาน


43
@BrunoE ที่ยังคงไม่ตอบว่าทำไม คุณมีเหตุผลที่แท้จริงในการแบนบิลท์อินหรือไม่? หากต้องการอ้างอิง xnor: โดยทั่วไปหากความท้าทายของคุณง่ายเกินไปที่จะน่าสนใจมันจะไม่ถูกบันทึกโดยการแบนสิ่งต่าง ๆ
ลินน์

13
@BrunoE ในขณะที่ฉันเห็นด้วยกับความเชื่อมั่นเราต้องการความเป็นกลางที่นี่ที่ ppcg ความคิดเห็นไม่ควรเข้ามาในสมการ
Skidsdev

5
@BrunoE รายละเอียดจะต้องทำเช่นนั้นอย่างใดอย่างหนึ่งสามารถตัดสินใจอย่างปฏิเสธไม่ได้ว่ารายการถูกต้องหรือไม่ built-inกรุณาแบ่งปันความคิดของคุณกับคำตอบที่มีอยู่และให้รายละเอียดเพิ่มเติมวัตถุประสงค์เมื่อมันมาถึง
Mr. Xcoder

6
ฉันยังคงสับสนว่านับเป็น "ในตัว" สำหรับงานนี้ *ตัวดำเนินการของ Python นั้นโอเคไหม ตัวอย่างของบิวด์อินที่ไม่เป็นไร
Steve Bennett

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

คำตอบ:


32

เยลลี่ 1 ไบต์

x

ลองออนไลน์!

โปรดทราบว่านี่ไม่ใช่ " n nเวลาการทำซ้ำ" ในตัว - ฟังก์ชั่นนั้นกว้างกว่านั้น ตัวอย่างเท่าเทียมกัน4,5,6x1,2,3 [4, 5, 5, 6, 6, 6]เมื่อมีอาร์กิวเมนต์เพียงตัวเดียวเจลลี่ก็จะใช้เป็นทั้งอาร์กิวเมนต์ซ้ายและขวาสำหรับลิงก์ที่ให้มา แต่ฟังก์ชันนี้ไม่ได้มีอยู่ในxตัว

หากสิ่งนี้ไม่นับมีตัวเลือก 2 ไบต์ที่สนุกสนานมากมาย:

x` ṁ` Ra Rị R» a€ oR oḶ oṬ oẊ Ḷị Ḷ» Ṭị Ṭ» Ẋị Ẋ» ị€ ṛ€ ȧ€ »€

เป็นต้น


10
ก็ใช่ คำตอบกอล์ฟรหัสทั้งหมดคือชุดของตัวในที่ทำภารกิจ คุณอาจแบนคำตอบนี้ถ้าx"ทำงานทั้งหมด" แต่ก็ไม่แน่นอน - มี "0 bytes" โดยปริยายของ link-parsing และ array-coercion logic ที่จะเปลี่ยนสิ่งนี้เป็นrepeat([n], n)คำตอบอื่น ๆ ทำ.
ลินน์

8
@ Adámนี่คือฟังก์ชั่น "ทำซ้ำแต่ละองค์ประกอบของ xy times" โดยรับ 2 อาร์กิวเมนต์ สิ่งที่ทำให้งานสำเร็จลุล่วงได้คือวิธีที่ Jelly วิเคราะห์ข้อโต้แย้งโดยปริยายซึ่งไม่มีส่วนเกี่ยวข้องกับฟังก์ชัน
Erik the Outgolfer

6
หากคำตอบนี้ไม่ถูกต้องข้อ จำกัด ของคำถามไม่ใช่ "ไม่มีบิลด์อิน" คือ "ไม่มีคำตอบ 1 ไบต์" ซึ่งเป็นข้อ จำกัด อย่างมากที่ดูเหมือนต่อต้านในโค้ดกอล์ฟ
Kamil Drakari

8
ผมคิดว่าข้อโต้แย้งไปทางนี้ไม่ได้ในตัวก็คือว่ามีอีกสองคน 1 คำตอบไบต์ในเยลลี่ที่ทำสิ่งเดียวกันและเพื่อให้คำตอบนี้อาจจะเป็นหนึ่งในสามใด ๆ ไม่มีบิวด์อิน 3 ตัว (หวังว่าจะมี) สำหรับ " n nเวลาซ้ำ" ดังนั้นพวกเขาจึงไม่สามารถเป็น "บิวด์อิน" ได้
nmjcman101

6
กระทู้ความคิดเห็นทั้งหมดนี้ดูเหมือนจะเป็นข้อโต้แย้งที่ดีสำหรับการไม่ห้ามบางสิ่งบางอย่างในเชิงวิสัยทัศน์
trichoplax


19

ภาษาสคริปต์การทำงานของ Flashpoint  50  46 ไบต์

f={a=[];t=_this;while{count a<t}do{a=a+[t]};a}

โทรด้วย:

hint format["%1", 5 call f]

เอาท์พุท:


คุณมีการโพสต์ลดลงi--และ+=ในนี้?
TheLethalCoder

3
ทำไมภาพหน้าจอสำหรับเรื่องนี้มักจะอยู่ในทะเลทรายที่แห้งแล้ง? คุณควรใช้แผนที่ยอดเยี่ยมสำหรับภาพหน้าจอของคุณ: P
Magic Octopus Urn

2
@MagicOctopusUrn มันดีกว่าเหรอ?
Steadybox

1
@ Steadybox ahaha! มหากาพย์: P นั่นคือเมืองจากซ้ายไปตาย? ดูเหมือนว่าคริสตจักรที่คุณเริ่มต้น
Magic Octopus Urn

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

12

APL (Dyalog) 2 ไบต์

ห้าโซลูชั่นสั้น ๆ ที่เท่าเทียมกัน ล่าสุดทั้งสองเป็นมารยาทของZachary


⍴⍨

ลองออนไลน์!

 cyclically r eshape

 ตนเอง


/⍨

ลองออนไลน์!

/ ซ้ำ

 ตนเอง


\⍨

ลองออนไลน์!

\ ขยายตัว

 ตนเอง


⌿⍨

ลองออนไลน์!

 ทำซ้ำตามแกนแรก (และเท่านั้น)

 ตนเอง


⍀⍨

 ขยายไปตามแกนแรก (และเท่านั้น)

 ตนเอง

ลองออนไลน์!


@Uriel มีอีกหนึ่ง ...
อดัม

1
ทั้งงาน⌿⍨และ ⍀⍨
Zacharý

2
มันเป็นความตั้งใจที่ 'ตัวเอง' ดูเหมือนใบหน้าหรือไม่?
geokavel

1
@geokavel ฉันไม่คิดอย่างนั้น แต่ฉันก็สังเกตเห็นว่ามันเป็นโพสต์นี้พิมพ์ ทำให้มันช่วยในการจำ ในความเป็นจริงเซลฟีเป็นหนึ่งในชื่อกึ่งทางการของมันดังนั้นในอินเตอร์เฟซนั่งไป Dyalog APL คุณสามารถแทรกโดยพิมพ์`` เซลฟี
อดัม

1
@sethrin TIO นับอักขระ (และ UTF-8 ไบต์ตามความเหมาะสม) แต่ขึ้นอยู่กับผู้ใช้เพื่อให้แน่ใจว่าพวกเขาจะไม่ใช้อักขระใด ๆ ที่หายไปจากชุดอักขระไบต์เดียว (SBCS) สำหรับ APL ดูที่นี่
อดัม



9

ระดับเสียงคู่ 12 ไบต์

@(n)~(1:n)+n

ลองออนไลน์!


~ ในอ็อกเทฟคืออะไรเพราะนั่นเป็นเพียงส่วนหนึ่งของรหัสของคุณที่ฉันไม่เข้าใจ ..
Michthan

1
@Michthan ขอโทษที่ตอบช้า ~เป็น notโอเปอเรเตอร์ที่แปลง 1: n เป็นอาเรย์ 0ขนาด s คุณสามารถใช้!แทนได้
rahnema1

9

JavaScript (ES6), 19 ไบต์

n=>Array(n).fill(n)

ลองมัน

o.innerText=(f=
n=>Array(n).fill(n)
)(i.value=8);oninput=_=>o.innerText=f(+i.value)
<input id=i type=number><pre id=o>


3
อาร์เรย์ที่ไม่มี...- อะไรต่อไป!
Neil

1
@ Neil: มันรู้สึกผิดแม้ว่าฉันจะพิมพ์มัน! : D
Shaggy

7

Pyth , 2 ไบต์

*]

ชุดทดสอบ


*] QQ - โปรแกรมเต็มรูปแบบพร้อมอินพุตโดยนัย

 ] - เปลี่ยนอินพุตเป็นรายการ
* - ทำซ้ำหลาย ๆ ครั้งเท่ากับอินพุต 

7

Haskellขนาด 13 ไบต์

f n=n<$[1..n]

ลองออนไลน์! การใช้งาน: อัตราผลตอบแทนf 5 [5,5,5,5,5]สำหรับn=5, อัตราผลตอบแทนรายการ[1..n] แทนที่องค์ประกอบของรายการนี้ด้วยกัน[1,2,3,4,5]n<$n


3
ของฉันอีกหน่อย แต่ฉันชอบมันต่อไป:join replicate
amalloy

@amalloy นี่จะเป็นวิธีที่สะอาด Haskell อย่างแน่นอน อย่างไรก็ตามjoinไม่ได้เป็นส่วนหนึ่งของโหมโรงและทำให้ผู้เล่นต้องใช้เวลานานimport Control.Monadซึ่งไม่ค่อยมีประโยชน์สำหรับการเล่นกอล์ฟ
Laikoni



5

Dodos , 76 ไบต์

	f f r 2
2
	
	
r
	r d
	f s t f
d
	dip f s t
	f
t
	dot f
	dot
s
	s dip
f
	dab

ลองออนไลน์!

คำอธิบาย:

fเป็นนามแฝงสำหรับdab(หาง)

sเป็นลบตามที่อธิบายไว้ในวิกิพีเดีย: (x, y) → (0, y-x)เมื่อx ≤ Y

tแผนที่(A, B, C ... )เพื่อ(B + C + ... , A + B + C + ... )

f s tแผนที่(A, B, C ... )เพื่อ นี่คือฟังก์ชั่น "หัว" ของเรา

d dips เฉพาะส่วนหัวของอาร์กิวเมนต์: (a, b, c…) → (|a−1|, b, c…)

rเป็นตรรกะการทำซ้ำหลัก เราทำแผนที่(a, b) to (*r(|a−1|, b), b).

ตัวอย่างเช่นr (4, 7) will evaluate as

  r(4, 7)
= r(3, 7), 7
= r(2, 7), 7, 7
= r(1, 7), 7, 7, 7
= r(0, 7), 7, 7, 7, 7
  → This would call r(1, 7), but (1, 7) ≥ (0, 7), so surrender!
= 0, 7, 7, 7, 7, 7.

ในที่สุดเรากำหนด2ซึ่งแผนที่n → (n, n)และกำหนดmainเป็นf f r 2คำนวณr (n, n)และตัดองค์ประกอบสององค์ประกอบแรกออก



4

TeX, 81 bytes

\newcommand{\f}[1]{#1\count0=2\loop,#1\advance\count0 by1\ifnum\count0<#1\repeat}

Usage

\documentclass[12pt,a4paper]{article}
\begin{document}
\newcommand{\f}[1]{#1\count0=2\loop,#1\advance\count0 by1\ifnum\count0<#1\repeat}

\f{5}

\f{10}
\end{document}

enter image description here


That's actually LaTeX. In Tex it'd be much shorter.
A Gold Man


4

Haskell (14 bytes)

replicate>>=id

Thanks to @nimi, I don't need any import anymore. Yay!

It's a function that takes an integer argument; for example, the following returns [5,5,5,5,5]:

(replicate>>=id) 5

1
Why not id=<<replicate? It's also 14 bytes but doesn't need the import.
nimi

@nimi Very good point! Overlooked that possibility. (I really need to dive into the arrow monad more...)
tomsmeding

4

Java (OpenJDK 8), 50 48 bytes

n->java.util.Arrays.stream(new int[n]).map(i->n)

Try it online!

-2 bytes thanks to @Jakob

Inspired by the comments in @OlivierGrégoire's post, and optimized a little further. Takes an integer input, creates an IntStream of n elements, then maps each element to n and returns it.


You can save 2 bytes by starting with java.util.Arrays.stream(new int[n]).
Jakob

4

Perl 5, 18 14 bytes

-4 bytes thanks to @DomHastings

sub{(@_)x"@_"}

Try it online!

Is x a builtin that does the entire task? Sort of? Not really? Rules unclear?

Edit: Yeah, probably it's fine.


Had pretty much the same, but you can change the first $_[0] to @_! Also the second can be"@_" I think...
Dom Hastings

I would say it doesn't count as a built-in because you have to work around the fact that it takes two inputs instead of one.
Brad Gilbert b2gills

Why not $_=$_ x$_ with perl -pe?
Thor

@Thor x does string repetition, not list repetition, unless the left operand is in parentheses (or is a qw operator) and the x is evaluated in list context. And of course $_ is a scalar, not a list.
aschepler

1
@Thor I wouldn't count that as satisfying "return a list".
aschepler



3

C (gcc), 55 bytes

int*f(k){int*r=malloc(k*4),a=k;for(;a-->0;)r[a]=k;k=r;}

Try it online!

Returns a list of k integers.


1
Yay "long arrow operator". Also, I didn't think gcc would ever use register eax for locals. Go figure.
aschepler

2
You can save 2 bytes by removing a comparison to 0 in for cycle, unless I've overlooked something.
Jasmes

Suggest *f(k){int r[k], instead of int*f(k){int*r=malloc(k*4),
ceilingcat

3

Röda, 10 bytes

{[[_]*_1]}

Try it online!

Explanation:

{[[_]*_1]}
{        } /* Anonymous function   */
   _       /* The input (_1)       */
  [ ]      /* As a list            */
     *_1   /* Repeated _1 times    */
 [      ]  /* Pushed to the stream */

1
Why can you leave off the 1 in the first input but not the second?
Conor O'Brien

1
@ConorO'Brien Each underscore without a number has a number that is one larger than the previous: [_]*_ = [_1]*_2. Because the first underscore is the first, it has automatically the number 1.
fergusq


3

brainfuck, 16 bytes

[->+>+<<]>[->.<]

Try it online!

The breakdown:

[->+>+<<]          Duplicate 'n' into the next 2 cells to the right
         >         Move to the first duplicate
          [->.<]   Print 'n', 'n' times

As I'm sure you're aware, brainfuck takes input and output values as ASCII characters. So a ! is represented as the value 33.


Your program doesn't take input, I don't think. Unless you're talking about a value left on the tape
Conor O'Brien

@ConorO'Brien The ladder. Think of it as a function more than a program.
Graviton

3

Coreutils, sed, 14 bytes

yes $1|sed $1q

As a zsh function, 20 19 bytes:

f(){yes $1|sed $1q}

Try it online!


I don't think this answer is valid, since it doesn't take input.
DJMcMayhem

@DJMcMayhem: used it in a function
Thor

Why not just make it a program yes $1|sed $1q?
Digital Trauma

Good point @DigitalTrauma, updated
Thor

The rules say it has to be integer elements, not string elements. To satisfy that, a bash/zsh answer would need to use declare -i integer variables. But it also has to be an array. I'm not sure bash even supports an integer array (like eval declare -ia "$1" to use the first function arg as the name of an array return value.) I upvoted this because it follows the spirit of the question; I doubt the question meant to exclude languages that don't really have integer lists / arrays.
Peter Cordes


2

Java (OpenJDK 8), 58 56 bytes

n->{int a[]=new int[n],i=n;for(;i-->0;)a[i]=n;return a;}

Try it online!

-2 bytes thanks to @KevinCruijssen


1
Two bytes shorter: n->{int a[]=new int[n],i=n;for(;i-->0;)a[i]=n;return a;}
Kevin Cruijssen

@KevinCruijssen Ouch, it hurts I didn't think about that... Thanks!
Olivier Grégoire

Happens to the best of us. ;) If you look in my answer history you'll probably also find some answers where I add something along the lines of "bytes saved thanks to ... due to a stupid mistake by myself / something obvious I forgot.." :)
Kevin Cruijssen

I thought about an answer like IntStream.generate(() -> n).limit(n) but decided it wasn't worth typing up and upvoted this instead :)
JollyJoker

1
@JollyJoker You could do it! It's indeed two bytes shorter and would easily beat my answer ;-)
Olivier Grégoire


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