หมายเลข Rien


38

ค่าคงที่ Champernowne คือตัวเลขที่สร้างขึ้นโดยการต่อnหมายเลขแรกเข้าด้วยกันโดยมีnแนวโน้มจะไม่มีที่สิ้นสุด ดูเหมือนว่า:

0.123456789101112131415161718192021222324252627282930...

ตอนนี้ฉันจะอธิบายหมายเลขRienให้คุณฟัง มันอาจคิดว่าเป็นการลดค่าคงที่ของ Champernowne ให้เป็นจำนวนเต็ม ฉันจะอ้างถึงหมายเลขRien ที่มีnตัวเลขแรกเป็น Ri ( n ) นี่คือวิธีการกำหนด:

  1. nหมายเลขธรรมชาติแรก(ลำดับ {1,2,3, ... }) ถูกต่อกัน
  2. ผลลัพธ์นี้จะถูกจัดเรียงตามค่าตัวเลข ดังนั้น1..12จะมีลักษณะ011111223456789ดังนี้
  3. ตั้งแต่Rienจำนวนไม่สามารถมีเลขศูนย์ชั้นนำที่เราย้ายทั้งหมด0s 101111223456789เพื่อให้พวกเขามีความสำคัญขณะที่การรักษาจำนวนลดลงส่งผลให้ในการพูด นี่คือ Ri ( n ) ในกรณีนี้ Ri (12)

นี่คือผลลัพธ์บางส่วนสำหรับ Ri ( n ):

n     Ri ( n )
1 1
2 12
3 123
7 1234567
9 123456789
10 10123456789
15 101111111223344556789
34 1,000111111111111122222222222222222333333333333333334445545666666666777888999
42 1000011111111111111111222222222222222333333333333333333333333444444454555566777788889999 42
45 100001111111111111112122222222222222233333333333333333333333333334444444444444445455555666655776688889999
55 10000011111111111111112222222222222222223333333333333333333333333344444444444444444444444444444444444545555555555555555555 55
100 10000000000011111111111111111112122222222222222222222233333333333333333333333333333333333333333333333399999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 1009900000000011111111111111111112122222222222222222222233333333333333333333333333333333333333333333339999999999999999999999999999 ใหม่อีกครั้ง 100 1000000000001111111111111111111212222222222222222222223333333333333333333333333333333333333333333333999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 ใหม่! ใหม่!
999100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

วัตถุประสงค์ให้ตัวเลข 1 ≤ n<10000 เป็นอินพุต (ผ่านอาร์กิวเมนต์, STDIN หรือ hardcoding หากภาษาของคุณไม่รองรับอินพุตทั่วไป), เอาต์พุต / ส่งกลับ Ri ( n)

นี่คือดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ คุณสามารถใช้ภาษาที่สร้างขึ้นหลังจากการแข่งขันนี้ได้ตราบใดที่มันไม่ได้ถูกสร้างขึ้นเพื่อตอบคำถามนี้ (แน่นอนคุณสามารถใช้มันได้หากมันมีทางออกที่น่าสนใจ แต่ทำเครื่องหมายคำตอบของคุณว่าไม่ใช่การแข่งขัน)

การดำเนินการอ้างอิง

ฉันทดสอบสิ่งนี้ใน IE ดังนั้นจึงไม่น่าจะมีปัญหา หากมีเป็นปัญหาที่มีโซลูชั่นที่ง่าย: ได้รับสติเบราว์เซอร์

function min(n) {
  var seq = [];
  for(var i = 1; i <= n; i++) seq.push(i);
  seq = seq.join("").split("").map(Number);
  var to;
  if(seq.indexOf(1) >= 0) to = seq.splice(seq.indexOf(1), 1);
  seq.sort(function(a, b) {
    return a - b;
  });
  if(to) seq = to.concat(seq);
  return seq.join("");
}
t.onchange = t.onkeyup = function() {
  h.innerHTML = min(this.value)
}
* {
  font-family: Consolas, monospace;
}
input {
  border: 2px dotted #aaaaaa;
  border-radius: 5px;
  margin: 10px;
}
<input id="t" type="number">
<div id="h">


ลีดเดอร์บอร์ด

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

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

## Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

## Ruby, <s>104</s> <s>101</s> 96 bytes

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

## Perl, 43 + 2 (-p flag) = 45 bytes

คุณสามารถทำให้ชื่อภาษาเป็นลิงค์ซึ่งจะปรากฏในตัวอย่างข้อมูล:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


22
ฉันคิดเสมอว่า0เป็นหมายเลขเรเดียน
ข้อบกพร่อง

ไม่แน่ใจว่าฉันทำอะไรหายไปหรือเปล่าแต่เราแค่ขยับหนึ่งตัว1ต่อหน้า0ใช่มั้ย
FryAmTheEggman

@FryAmTheEggman คุณถูกต้อง
Conor O'Brien

@ MartinBüttner \ o / คุณพบมัน
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴไม่ว่าอันนั้นต่างกัน อันนั้นอนุญาตให้มีการเปลี่ยนรูปของตัวเลขทั้งหมดไม่ใช่ตัวเลขหลัก
Martin Ender

คำตอบ:



13

Perl, 44 42 41 33 31 ไบต์

Yaaay โพสต์แรกเลย!

ขอบคุณ primo สำหรับการบันทึก 2 ไบต์

print 1,sort"@{[2..<>]}"=~/\d/g

อย่างที่คนอื่นทำเอา 1 และเตรียมมันด้วยตนเองทำงาน

ลองออนไลน์


2
ยินดีต้อนรับสู่ PPCG และขอแสดงความยินดีกับโพสต์แรกของคุณ (แม้ว่ามันจะแปลกที่ฉันยินดีต้อนรับคุณนับตั้งแต่คุณเข้าร่วมก่อนที่ฉันจะ ... ) สองสิ่ง - ฉันนับ43 ไบต์ ... วินาทีลิงก์ "ลองออนไลน์" ของคุณดูเหมือนจะชี้ไปที่การแก้ไขโค้ดของคุณแบบเก่า / แตกต่างกัน คัดลอกวางโค้ดของคุณลงใน Ideone ด้วยตนเอง แต่ไม่ใช่ลิงก์ของคุณ
AdmBorkBork

ขอบคุณสำหรับความคิดเห็น! ฉันใช้ TextWrangler เป็นจำนวนไบต์คาดเดาว่าฉันไป 1 ไกลเกินไป ... (รวมถึงพื้นที่ที่ไม่จำเป็นดังนั้นจึงลดจำนวนไบต์ทั้งหมดลงเหลือ 42) ควรแก้ไข Ideone ในขณะนี้
Paul Picard

โอ้ไม่รู้เรื่องนั้นเลย ยังทำงานบน Perl ของฉันบน Mac ของฉัน (5.18) ขอบคุณ!
Paul Picard


2
ที่บันทึกไว้ไบต์ที่สองโดยการกำจัดแยก / เข้าร่วม:print 1,sort"@{[2..<>]}"=~/\d/g
พรีโม่

11

Japt, 14 12 ไบต์

1+2o°U ¬¬n ¬

ลองออนไลน์!

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

1+2o°U ¬¬n ¬  // Implicit: U = input integer
  2o°U        // Generate the range of integers from 2 to U, inclusive.
       ¬¬     // Join, then split into chars.
         n    // Sort.
1+         ¬  // Join again, and add a 1 to the beginning.
              // Implicit: output last expression

4
o_o คุณเล่นกอล์ฟในช่วงเวลาผ่อนผัน 5 นาทีหรือไม่? ปืนที่เร็วที่สุดในฝั่งตะวันตก
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴฉันเดาว่าคุณไม่ต้องการโพสต์รหัสกอล์ฟใหม่หลังจากนั้น: D
Pierre Arlaud

9

เรติน่า , 78 ไบต์

ถึงเวลาที่จะแสดงคุณสมบัติใหม่ ๆ ของ Retina (ยังไม่สามารถแข่งขันได้มาก แต่ก่อนหน้านี้อาจจะมีขนาดใกล้เคียงกับ 300 ไบต์)

.+
$0$*1
\B
 $`
(1)+
$#1
^1| 

.
 1$0$*1
+r`(1+\2) (1+)\b
$2 $1
 1(1)*
$#1
^
1

ลองออนไลน์

คำอธิบาย

ในขณะที่เป็นไปได้ที่จะแปลงระหว่างทศนิยมและเอกภาพค่อนข้างสะดวกในตอนนี้ แต่ก็ยังค่อนข้างนานเพราะฉันต้องแปลงไปมาหลายครั้งเพราะการดำเนินการบางอย่างทำได้ในรูปทศนิยมมากกว่าในภาครัฐและในทางกลับกัน

.+
$0$*1

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

\B
 $`

ต่อไปเราจะสร้างช่วงจาก1ถึงNเป็นรี ผมเคยอธิบายว่าทำไมงานนี้ในคำตอบของฉัน FizzBuzz

(1)+
$#1

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

^1| 

การทำเช่นนี้จะเป็นการลบ1ช่องว่างนำหน้าและช่องว่างทั้งหมดออกจากสตริงดังนั้นเราจึงเหลือเพียงตัวเลขเท่านั้น (ยกเว้นเพียงตัวเดียว1)

.
 1$0$*1

เราแปลงกลับเป็น unary และเพิ่ม1แต่ละหลัก (เพื่อให้แน่ใจว่าแม้0จะไม่ว่างเปล่า) นอกจากนี้เรายังแทรกช่องว่างด้านหน้าของแต่ละหลักเพื่อให้แน่ใจว่าแยกออกจากกัน

+r`(1+\2) (1+)\b
$2 $1

เราจับคู่หมายเลขเล็ก ๆ ซ้ำ ๆ นำหน้าด้วยจำนวนที่มากขึ้นและสลับ นั่นคือการจัดเรียงฟองในจอประสาทตา :)

 1(1)*
$#1

Aaaand กลับเป็นทศนิยม

^
1

ในที่สุดเราแทรกหนึ่ง1ที่ด้านหน้าเพื่อบัญชีสำหรับสิ่งที่เราได้ลบก่อนหน้า


1
คุณพูดถึงคุณสมบัติอะไรใหม่
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴฉันจะเพิ่มคำอธิบายในภายหลัง อันนี้ใช้ไวยากรณ์การแทนที่ใหม่สำหรับการนับการจับและตัวอักษรซ้ำซึ่งสามารถใช้สำหรับการแปลงทศนิยม / unary สั้น ๆ อย่างสมเหตุสมผล นี่คือรายการเปลี่ยนแปลงเต็มรูปแบบ: github.com/mbuettner/retina/blob/master/CHANGELOG.md
Martin Ender

@ MartinBüttnerดี หมายความว่า Retina ไม่สามารถเรียกร้องการยกเว้นนี้ได้อีกต่อไป?
Digital Trauma

@ DigitalTrauma ฉันคิดว่ามันยังคงเป็นรูปแบบการป้อนข้อมูลที่เป็นธรรมชาติที่สุด นอกจากนี้ฉันยังไม่เคยเข้าใจว่าภาษา ism ชนิดนี้ได้รับการสนับสนุนมากมายในเว็บไซต์นี้
Martin Ender

6

Haskell, 44 ไบต์

import Data.List
f n='1':sort(show=<<[2..n])

แต่น่าเสียดายที่sortอยู่ในData.Listที่ที่ 17 ไบต์!


6

JavaScript (ES6), 65 62 54 52 ไบต์

บันทึก 3 ไบต์ด้วย edc65

x=>eval("for(b='';x>1;)1+[...b+=x--].sort().join``")

สร้างสตริงของตัวเลขทั้งหมดจาก 2 ถึงxจากนั้นแยกเรียงลำดับรวมและเพิ่ม 1 ถึงจุดเริ่มต้น สิ่งนี้อาจยังสามารถเล่นได้ ข้อเสนอแนะยินดีต้อนรับ!


ฉันไม่มี ES6 อยู่ในมือ แต่คุณไม่สามารถใช้ (ใหม่) ได้Array(x-1).map((_,y)=>y+2)ใช่ไหม
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ map ข้ามองค์ประกอบของอาร์เรย์ที่ว่างเปล่าดังนั้นคุณควรใช้Array(n).fill().map(...(ดูเคล็ดลับ ES6)
edc65

สายเกินไปที่จะโพสต์ของฉัน แต่คำแนะนำสำหรับคุณ: n=>1+[...[...Array(n-1)].map(_=>++n,n=1).join``].sort().join`` (สั้นกว่า 1 ไบต์มันคือการแตก)
edc65

@ edc65 และCᴏɴᴏʀO'Bʀɪᴇɴขอบคุณสำหรับเคล็ดลับ! ฉันสงสัยว่าทำไมการใช้.split()ความรู้สึกแปลก ๆ ...
ETHproductions

@ edc65 Huh เป็นวิธีการแก้ปัญหาของฉันยาวเท่ากันกับคุณ:n=>1+[...[...Array(n+1).keys()].slice(2).join``].sort().join``
Neil


5

Mathematica, 52 ไบต์

"1"<>ToString/@Sort[Join@@IntegerDigits[2~Range~#]]&

การประมวลผลสตริงเกิดขึ้นอีกครั้ง ...


ฉันคิดว่ามีIntegerDigitsเธรดมากกว่ารายการดังนั้นคุณไม่จำเป็นต้องทำแผนที่
Martin Ender

โอ้ใช่, ความสำคัญกว่า
Martin Ender

4

APL (17)

'1',∆[⍋∆←1↓∊⍕¨⍳⎕]

คำอธิบาย:

'1',∆[⍋∆←1↓∊⍕¨⍳⎕]
-----------------
               ⎕   read a number from the keyboard
               ⍳    get the natural numbers up to and including that number
             ⍕¨    get the string representation for each number
           ∊       flatten the array (giving a string of digits)
         1↓        remove the first digit (which is always 1)
       ∆←          store the result in ∆
      ⍋            get a permutation to sort ∆ upwards
    ∆[           ] rearrange ∆ so that it is sorted
'1',               add a 1 to the front

ทดสอบ:

      '1',∆[⍋∆←1↓∊⍕¨⍳⎕]
⎕:
      1
1
      '1',∆[⍋∆←1↓∊⍕¨⍳⎕]
⎕:
      10
10123456789
      '1',∆[⍋∆←1↓∊⍕¨⍳⎕]
⎕:
      55
10000011111111111111122222222222222223333333333333333444444444444444455555555555566666777778888899999

ดี! ดีกว่าของฉันมาก : DI ไม่ทราบว่าจะทำให้อาร์เรย์เรียบและมอบสตริงให้คุณ เป็นเรื่องดีที่รู้
Alex A.


3

ClojureScript ขนาด 48 ไบต์

#(apply str"1"(sort(apply str(range 2(inc %)))))

เช่นเดียวกับคนอื่น ๆ ทั้งหมดสวยมาก REPL ใช้ได้ที่นี่


3

ทับทิมขนาด 48 ไบต์

ฟังก์ชั่นที่ไม่ระบุชื่อ โดยทั่วไปเพียง Rubyfied คำตอบอื่น ๆ ที่นี่ ..

->n{n>1?(?1+[*2..n].join.chars.sort*'').to_i: n}

3

Brachylog , 76 41 ไบต์

1 .;{,1:.e?}?:1fcbZlL,ZoOlM,10^(L-M)=:Oc.

ใช้ตัวเลขเป็นอินพุต

วิธีนี้ใช้ได้กับการเปลี่ยนแปลงเล็กน้อยที่ฉันทำกับคำสั่ง Findall ในfตัว OP เห็นได้ชัดว่าตกลงกับการใช้ภาษาที่เก่ากว่าคำตอบดังนั้นฉันคิดว่านี่เป็นสิ่งที่ดี (การเปลี่ยนแปลงที่ฉันทำมีความตั้งใจมานานแล้วฉันเพิ่งกระตุ้นตัวเองให้ทำเพราะความท้าทายนี้)

คำอธิบาย

1 .                                            § If the input is 1, unify output with 1

   ;                                           § Else

    {      }?:1f                               § Output a list of all inputs which satisfy
                                               § the predicate in brackets with the input
                                               § of the main predicate (ie the input number)
                                               § as output

     ,1:.e?                                    § True if the input is an integer between 1
                                               § and . (the output)

                cbZ                            § Concatenate everything into a single number,
                                               § remove the first digit (1) and call it Z

                   lL,ZoOlM,                   § L is the length of Z, M is the length of O
                                               § O being Z sorted (which removes the leading
                                               § 0s)

                            10^(L-M)=:Oc.      § Concatenate 10^(L-M) at the beginning of O
                                               § and unify it with the output

3

Smalltalk, 76 ไบต์

ตามปกติใน Smalltalk แนวความคิดรวบยอดมาก แต่ verbose มาก textually ...

f:l^'1',((2to:l)fold:[:p :q|p asString,q asString])asByteArray sort asString

เพิ่มสิ่งนี้เป็นวิธีการเรียนStringและโทรเช่นนี้สำหรับ 20String f: 20


3

ยูทิลิตี Bash + GNU, 58

seq $1|sed 's/./&\n/g'|sort|tr -d \\n|sed 's/\(0*\)1/1\1/'

ลองออนไลน์


1
ฉันมีวิธีการที่คล้ายกัน แต่การจัดการส่วน "1 ที่จุดเริ่มต้น" ที่แตกต่างกัน (52 ไบต์) ด้วยของคุณคุณสามารถโกน: เรียง (ยาว 1 หลักไม่จำเป็นต้องใช้ -n)
Olivier Dulac

3

Bash, 35 34 ไบต์

printf %d 1`seq 2 $1|fold -1|sort`

นี้สร้างขึ้นอยู่กับคำตอบของ@DigitalTraumaและ@OlivierDulac ลองมันออนไลน์กับIdeone

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

  • seq 2 $1พิมพ์จำนวนเต็มทั้งหมดจาก2เป็นค่าที่ระบุในบรรทัดคำสั่ง

  • fold -1 ล้อมทุกบรรทัดด้วยความกว้าง 1 เช่นวางอักขระแต่ละตัวในบรรทัดของตัวเอง

    -1 ดูเหมือนว่าจะเป็นคุณสมบัติที่ไม่มีเอกสาร

  • sort เรียงลำดับอักขระตามค่าตัวเลข

  • printf %d 1`...`​เพิ่ม1ถึงบรรทัดแรกและพิมพ์แต่ละบรรทัดเป็นจำนวนเต็ม ( %d) โดยไม่มีการแยก

    สิ่งนี้ใช้ประโยชน์จากการใช้งาน printf ที่อยากรู้อยากเห็นของ Bash ซึ่งทำซ้ำสตริงรูปแบบซ้ำแล้วซ้ำอีกจนกว่าอาร์กิวเมนต์ทั้งหมดจะถูกใช้ไป


+1 ผมชอบที่หนึ่งดีกว่าของเรา :)
โอลิเวีย Dulac

3

JavaScript ES6, 49 46 Bytes

ขอบคุณ edc65 สำหรับ 2 ไบต์

F=
x=>1+[...(g=_=>x>1?x--+g``:_)``].sort().join``

;console.log(F(15))


1
ฉันมีบางอย่างที่คล้ายกัน แต่สั้นกว่า 1 ไบต์ ลองใช้ฟังก์ชั่นวนซ้ำโดยไม่มีข้อโต้แย้งเพียงลดพารามิเตอร์เดิม x
edc65

2

Julia, 33 ไบต์

n->"1"*join(sort([join(2:n)...]))

นี่คือฟังก์ชั่นแลมบ์ดาที่รับจำนวนเต็มและส่งกลับสตริง หากต้องการเรียกใช้กำหนดค่าให้กับตัวแปร

เราสร้างช่วง2:nซึ่งจะว่างเปล่าสำหรับn<2, เข้าร่วมเป็นสตริง, splat สตริงลงในอาร์เรย์ของตัวอักษร, เรียงลำดับ, เข้าร่วมมันเป็นสตริง, และเพิ่ม 1


2

APL, 21 ไบต์

{' '~⍨⍕1,x[⍋x←⍕1↓⍳⍵]}

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

คำอธิบาย:

            x←⍕1↓⍳⍵]}   ⍝ Get the numbers 1:input, drop 1, convert to string
         x[⍋            ⍝ Sort
      ⍕1,               ⍝ Tack 1 onto the front, flatten to string
{' '~⍨                  ⍝ Remove the spaces (side effect of ⍕ on an array)

ลองออนไลน์


2

Python 2, 60 ไบต์

P=input();print"1"+"".join(sorted(`range(2,P+1)`)[P*2-4:-2])

การจัดทำดัชนีสำหรับผู้ชนะ :-)


Python 2, 60 ไบต์

P=input();print"1"+"".join(sorted(`range(-P,-1)`))[P*3-5:-2]

เพียงทางเลือก


2

ทางช้างเผือก 1.6.4 , 22 ไบต์ (ไม่ใช่การแข่งขัน)

^^'LH=^^JB", "-Q"1";+!

ฉันต้องเพิ่ม opcode การเรียงลำดับสำหรับความท้าทายนี้


คำอธิบาย

^^                      ` pop the TOS
  '                     ` read input from the command line
   LH                   ` push a reversed Pythonic range(TOS+1)
     =^^J               ` remove the top 2 items from the TOS
         B              ` push the string literal of the TOS
          ", "-         ` remove ", " from the TOS
               Q        ` sort the TOS
                "1";+   ` add "1" to the beginning of the TOS
                     !  ` output the TOS


2

เครื่องมือทุบตีและ GNU ขนาด58 52 ไบต์

echo 1$(seq 2 $1|sed -e 's/./&\n/g'|sort|tr -d \\n)

วิธีที่คล้ายกันกว่า @ Digital-trauma แต่วิธีที่แตกต่างในการเพิ่ม 1 และไม่จำเป็นต้องใช้ -n เนื่องจากตัวเลขมีความยาว 1 หลัก (ฉันเห็นคำตอบของเขาหลังจากที่ฉันได้ลองครั้งแรก)
Olivier Dulac

2

PowerShell, 61 59 ไบต์

param($a)(("1"+-join([char[]]-join(2..$a)|sort)),1)[$a-eq1]

จะเข้าแล้วใช้มันเพื่อดัชนีลงในอาร์เรย์ที่มีparam($a) ถ้าเป็นจริงเราจัดทำดัชนีองค์ประกอบที่สองและเอาท์พุท[$a-eq1] 1มิฉะนั้นเราเชื่อมโยง"1"กับjoinอาร์เรย์ ed ที่สร้างขึ้นโดย 1) กำหนดช่วงใหม่2..$aที่ถูกjoinรวมเข้าด้วยกัน 2) การคัดเลือกว่าเป็น char-array และ 3) ส่งผ่านSort-Objectcmdlet ซึ่งทั้งหมดจะถูกส่งออก

แก้ไข 1 - บันทึก 2 ไบต์โดยเลื่อน-joinโอเปอเรเตอร์ด้านใน


2

Gogh , 9 7 ไบต์

GJT1-1P

คุณสามารถเรียกใช้สิ่งนี้โดยใช้:

$ ./gogh noi 'GJT1-1P' <input>

G     “ Push a range (1, TOS]       ”
J     “ Join the TOS                ”
T     “ Sort the TOS                ”
1-    “ Remove the first 1          ”
P     “ Prepend the TOS to the STOS ”

"คุณอาจใช้ภาษาที่ทำขึ้นหลังจากการแข่งขันนี้ตราบใดที่มันไม่ได้ทำเพื่อตอบคำถามนี้" ฉันอนุญาตให้ภาษาดังกล่าวแข่งขันในความท้าทายของฉันโดยปกติ;)
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ: โอ้ยอดเยี่ยม! ขอขอบคุณสำหรับการชี้ว่า :)
ซัคเกตส์

2

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

RDFṢ1œ|Ḍ

ลองออนไลน์!

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

RDFṢ1œ|Ḍ  Main link. Argument: n (integer)

R         Range; yield r := [1, ..., n].
 D        Convert each k in r into the array of its digits in base 10.
  F       Flatten the resulting array of lists.
   Ṣ      Sort the resulting flat list of digits.
    1œ|   Perform multiset union with 1 as left argument.
          This moves a single 1 to the beginning of the list.
       Ḍ  Convert the resulting list of base 10 to integer.

2

Oracle SQL 11.2, 222 211 ไบต์

SELECT 1||TRIM(xmlagg(xmlelement(e,c)).EXTRACT('//text()'))FROM(SELECT SUBSTR(s,LEVEL+2,1)c FROM(SELECT MAX(sys_connect_by_path(LEVEL,' '))s FROM DUAL CONNECT BY LEVEL<=:1)CONNECT BY LEVEL<=LENGTH(s)ORDER BY 1);

ยกเลิกแข็งแรงเล่นกอล์ฟ

SELECT 1||TRIM(xmlagg(xmlelement(e,c)).EXTRACT('//text()'))  -- add leading 1, concatenate each char and remove spaces
FROM   (
         SELECT SUBSTR(s,LEVEL+2,1)c                          -- split the string in characters, omiting the first number (1)   
         FROM   (
                  SELECT MAX(sys_connect_by_path(LEVEL,' '))s -- create a string by concatenating numbers
                  FROM   DUAL 
                  CONNECT BY LEVEL<=:1
                )
         CONNECT BY LEVEL<=LENGTH(s)ORDER BY 1
       )

2

MATL , 17 ไบต์

ใช้ภาษา / คอมไพเลอร์เวอร์ชันปัจจุบัน (7.0.0)

49[]i:"@YUh]6L)Sh

แรงบันดาลใจจากคำตอบของ FryTheEgggman

แก้ไข (29 กรกฎาคม 2016): คุณสามารถลองออนไลน์ได้ด้วยการแก้ไขบางอย่างเพื่อให้สอดคล้องกับการเปลี่ยนแปลงในภาษา

ตัวอย่าง

>> matl
 > 49[]i:"@YUh]6L)Sh
 >
> 12
101111223456789

คำอธิบาย

49        % push '1'
[]        % push empty array
i:        % input "N" and build vector [1, 2, ... N]
"         % for each number in this vector
   @      % push that number
   YU     % convert to string
   h      % concatenate horizontally
]         % end
6L)       % remove first element
S         % sort
h         % concatenate horizontally

1

05AB1E , 6 ไบต์

หมายเหตุ:การส่งนี้ใช้คุณสมบัติที่โพสต์ความท้าทายนี้และดังนั้นจึงไม่สามารถแข่งขันได้

รหัส:

Lß?J{?

คำอธิบาย:

L      # Creates the list [1 .. input]
 ß     # Extract the smallest value of the list
  ?    # Print this value (always 1)
   J   # ''.join(list)
    {  # Sort the string
     ? # Print this value

ใช้การเข้ารหัส ISO 8859-1


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

@ThomasKwa เพิ่มคำอธิบาย
Adnan

โว้ว. มันยอดเยี่ยมมาก!
Conor O'Brien

1

Mathcad, 86 "ไบต์"

ฟังก์ชั่น s (n) ใช้สำหรับ for loop เพื่อสร้าง Champernowne "จำนวนเต็ม" โดยการแปลงตัวเลขแต่ละตัวให้เป็นรูปแบบสตริงและเชื่อมต่อเข้าด้วยกัน สตริงจะถูกแปลงเป็นเวกเตอร์เทียบเท่าของรหัส ASCII และเรียงลำดับ จากนั้นฟังก์ชันจะสลับค่าศูนย์นำหน้าด้วยค่าแรกและสุดท้ายแปลงเวกเตอร์กลับไปเป็นสตริง

ในการตรวจสอบฟังก์ชั่นฉันใส่เคสทดสอบลงใน vector vn จากนั้นใช้ s กับ vn โดยใช้ตัวดำเนินการ vectorize ฉันจะตรวจสอบผลลัพธ์กับค่ากรณีทดสอบที่กำหนด

ป้อนคำอธิบายรูปภาพที่นี่


Mathcad เป็นแอปพลิเคชั่นทางคณิตศาสตร์ที่ใช้แผ่นงาน 2D ซึ่งประกอบด้วย "ภูมิภาค" ซึ่งแต่ละอันสามารถเป็นข้อความนิพจน์ทางคณิตศาสตร์โปรแกรมพล็อตหรือส่วนประกอบสคริปต์

คำสั่งทางคณิตศาสตร์หรือการเขียนโปรแกรมถูกเลือกจากแถบเครื่องมือถาดสีหรือป้อนโดยใช้แป้นพิมพ์ลัด เพื่อวัตถุประสงค์ในการตีกอล์ฟการดำเนินการ ("byte") จะถูกนำไปใช้เป็นจำนวนการดำเนินงานของแป้นพิมพ์ที่จำเป็นในการสร้างชื่อหรือการแสดงออก (ตัวอย่างเช่นการตั้งค่าตัวแปร a ถึง 3 เราจะเขียน a: = 3 : = เป็นปุ่มกดเดียว ":" เช่นเดียวกับ a และ 3 ให้ผลรวม 3 "ไบต์" การเขียนโปรแกรมสำหรับโอเปอเรเตอร์ต้องการการพิมพ์ ctl-shft- # (หรือคลิกครั้งเดียวบนแถบเครื่องมือการเขียนโปรแกรม) ดังนั้นอีกครั้งเทียบเท่า 1 ไบต์

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