เอาต์พุตจำนวนเต็มที่หายไป


34

คุณจะได้รับสตริง มันจะมีจำนวนเต็ม 9 ตัวจาก 0-9 คุณต้องส่งคืนจำนวนเต็มที่หายไป สตริงจะมีลักษณะดังนี้:

123456789
 > 0

134567890
 > 2

867953120
 > 4

5
@riker ดูเหมือนว่าจะเกี่ยวกับการหาตัวเลขที่หายไปในลำดับ ดูเหมือนว่าจะเกี่ยวกับการหาตัวเลขที่ขาดหายไปจากชุด
DJMcMayhem

10
@Riker ฉันจะไม่คิดว่ามันซ้ำซ้อนเนื่องจากความท้าทายที่เชื่อมโยงมีลำดับที่เพิ่มขึ้นอย่างเข้มงวด (อาจเป็นตัวเลขหลายหลัก) ในขณะที่นี่เป็นการเรียงตามอำเภอใจ
AdmBorkBork

3
สวัสดีจอช! เนื่องจากยังไม่มีใครพูดถึงมันฉันจะแนะนำคุณไปที่Sandboxซึ่งคุณสามารถโพสต์ความคิดที่ท้าทายในอนาคตและรับข้อเสนอแนะที่มีความหมายก่อนโพสต์ที่หน้าหลัก ที่จะช่วยรีดรายละเอียดใด ๆ (เช่น STDIN / STDOUT) และแก้ไขปัญหาที่ซ้ำซ้อนก่อนที่คุณจะได้รับ downvotes ที่นี่
AdmBorkBork

1
มันช่างน่าละอายที่ 9-x% 9 ใช้ได้กับตัวเลขใด ๆ ยกเว้น 0 บางทีคนที่ฉลาดกว่าฉันจะหาวิธีทำให้มันใช้งานได้
Bijan

2
คำตอบหลายข้อใช้จำนวนเต็มเป็นฟังก์ชันอินพุต อนุญาตหรือไม่
Dennis

คำตอบ:


36

Python 2 , 18 16 ไบต์

+ ความงามต้องขอบคุณ @Sarge Borsch

`99066**2`.strip

ลองออนไลน์!

99066**2 เป็นวิธีที่สั้นกว่าในการสร้างสตริงที่มี 0 ~ 9


7
32043 สามารถเปลี่ยนเป็นตัวเลขที่สวยงามยิ่งขึ้น 99066 คือจุดศูนย์กลางสมมาตร (ไม่เปลี่ยนแปลงหากหมุน 180 องศารอบจุดศูนย์กลาง) หรืออาจเป็น 97779 (palindrome, ตัวเลขสองหลักที่แตกต่างกัน)
Sarge Borsch

1
หาก OP อนุญาตให้พิมพ์ตัวเลขสองครั้ง764**4สามารถบันทึกสองไบต์
ติตัส

@Titus 764**4จะหายไป5, 8และ9
ร็อด

1
พิมพ์ผิด ... ฉันหมายถึง763**4=338920744561
Titus

25

Pythonขนาด 22 ไบต์

lambda s:-int(s,16)%15

ลองออนไลน์!

วิธีการแก้ปัญหาทางคณิตศาสตร์ ตีความสตริงอินพุตเป็นฐานสิบหกปฏิเสธสตริงนั้นและรับผลลัพธ์โมดูโล 15


2
คุณช่วยอธิบายได้ไหมว่าทำไมสิ่งนี้ถึงได้ผล
KarlKastor

1
@KarlKastor, modulo 15 ในฐาน 16 ทำงานแบบอะนาล็อกกับ modulo 9 ในฐาน 10 Modulo base-1 เป็นค่าคงที่เมื่อรับผลรวมของตัวเลขเพียงเพราะ 10 ≡ 1 (mod base-1) ผลรวมของตัวเลขที่เป็นไปได้ทั้งหมดคือค่าคงที่ดังนั้นตัวเลขที่หายไปคือความแตกต่างของค่าคงที่นี้และหมายเลขอินพุต (โมดูโลฐาน 1)
มิค

16

APL (Dyalog) 4 ไบต์

ฟังก์ชั่นที่ได้รับ

D∘~

⎕Digits D

 (ผูกอาร์กิวเมนต์ด้านซ้ายกับฟังก์ชัน dyadic ต่อไปนี้เพื่อสร้างฟังก์ชัน monadic)

~ ยกเว้น [อาร์กิวเมนต์]

ลองออนไลน์!


ฟังก์ชั่นรถไฟ

D~⊢

⎕Digits D

~ ยกเว้น

 อาร์กิวเมนต์ที่ถูกต้อง

ลองออนไลน์!


โปรแกรมที่ชัดเจน

D~⍞

⎕Digits D

~ ยกเว้น

 การป้อนอักขระ

ลองออนไลน์!


12

Brain-Flak , 48 38 36 + 3 = 39 ไบต์

บันทึก 10 ไบต์ด้วย DJMcMayhem!

((([]())[]{}){()()({}[()])}{}[{{}}])

ลองออนไลน์!

คำอธิบาย

ผลรวมของตัวเลขทั้งหมดใน Ascii คือ 525 โปรแกรมนี้จะรวมจำนวนอินพุตและลบออกจาก 525 เพื่อให้ได้ตัวเลขที่หายไป

((([]())[]{}){()()({}[()])}{}      )

จะผลักดัน 525 ซึ่งจะใช้ประโยชน์จากความจริงที่ว่าเรารู้ว่าจะมีองค์ประกอบของการป้อนข้อมูล 9 เริ่มต้นด้วย ซึ่งหมายความว่า[]ประเมินถึง 9 ซึ่งช่วยให้เราได้รับจำนวนมากเช่น 525 อย่างรวดเร็ว

ต่อไปเรามีบิต:

                             [{{}}]

ซึ่งจะสรุปผลอินพุตและลบออกจากผลรวม


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

@ ГригорийПерельманเพิ่มคำอธิบายแล้ว!
ข้าวสาลี Wizard

2
หากคุณย้ายnegative(sum(input()))ไปยังจุดสิ้นสุดคุณสามารถละเมิด nilad ความสูงของกองซ้อนเพื่อดัน 525 ได้ง่ายขึ้น (([][][]()()()){()()({}[()])}{}[{{}}])ควรประหยัด 10 ไบต์
DJMcMayhem

30 bytesโดยลบ 477 แทน
Jo King

12

Haskell , 24 23 ไบต์

(477-).sum.map fromEnum

ลองออนไลน์! การใช้งาน: (477-).sum.map fromEnum $ "123456890". 477 คือผลรวมของรหัสอักขระของตัวเลข 1 ถึง 9 ยกเว้น 0 ฟังก์ชันที่ไม่ระบุชื่อนี้คำนวณ 477 ลบผลรวมของรหัสอักขระตัวเลขทั้งหมดเพื่อหารหัสที่หายไป

การเปลี่ยนตัวเลขถ่านให้เป็น ints นั้นยาวกว่าหนึ่งไบต์

(45-).sum.map(read.pure)
foldl(\a b->a-read[b])45

ลองออนไลน์!


10

เยลลี่ 3 ไบต์

ØDḟ

เพียงกรอง ( ) สตริงอินพุตจาก“ 0123456789” ( ØD)

ลองออนไลน์!


3
ผมชอบวิธีที่ว่าทุกภาษากอล์ฟ (และแม้บางภาษาที่ไม่ใช่การเล่นกอล์ฟ) จะใช้วิธีเดียวกัน แต่วุ้นพอที่จะมีชื่อที่สั้นที่สุดสำหรับ builtins ที่ใช้และต้นแบบอย่างน้อยสำหรับการย้อนกลับของการขัดแย้งในการ

1
@ ais523 APL เป็นตัวอักษรตัวอักษรเดียวกัน (ยกเว้นว่ามันจะเป็นตัวอย่างของ APL มากกว่าฟังก์ชั่น / โปรแกรม): Ø= , D= D, = ~, ตาม⎕D~'867953120'มา
2560

3
ฉันขณะที่เลื่อนดูคำตอบ: "ฉันกำลังทำนาย 3 ตัวอักษรใน Jelly" การเล่นชนิดหนึ่ง : ^ D
DLosc


9

JavaScript (ES6), 26

แก้ไข 1 ไบต์บันทึกขอบคุณ @Neil พร้อมด้วยเคล็ดลับที่ชาญฉลาดกว่า

Xoring ค่าทั้งหมดจาก 1 ถึง 9 ให้ 1 Xor 1 อีกครั้งและผลลัพธ์คือ 0 ดังนั้นหากไม่มีค่าเดียวใด ๆ ผลลัพธ์จะเป็นค่าที่หายไป

s=>eval([1,...s].join`^`)

ทดสอบ

f=s=>eval([1,...s].join`^`)

function go() {

  var i=I.value;
  O.textContent = f(i)
}  

go()
<input oninput='go()' value='012987653' id=I>
<pre id=O></pre>


s=>eval([1,...s].join`^`)บันทึกเป็นไบต์
Neil

@Neil ... และมันก็น่าสนใจมากขึ้นเช่นกัน
edc65

ฉันรู้สึกว่าเคล็ดลับนี้มาอย่างไม่น่าเชื่อหลังจากคำตอบของฉัน : D กอล์ฟที่ดีอยู่แล้ว +1
Christoph

1
@Christoph มันฟังดูราวกับว่าคุณต้องการที่จะกระจายคำว่า ...
34980 Neil

@Neil absolutly :) ดีใจที่เห็นว่ามันช่วย!
Christoph

8

เรติน่า27 27 19 ไบต์

-6 ขอบคุณที่ Basic Sunset
-2 ขอบคุณ Martin Ender

.
$*_5$*
+`_1|1_

1

ลองออนไลน์!

แทนที่ทุกหลักด้วยจำนวนมาก_และ 5 1วินาที:

.
$*_5$*

ลบทั้งหมด_และ a 1สำหรับแต่ละ:

+`_1|1_ 


นับจำนวน1ซ้าย:

1

.บรรทัดแรกของคำตอบที่สองอาจจะเป็นแค่
Neil

คุณสามารถบันทึกไม่กี่ไบต์โดยใช้การขจัดความซ้ำซ้อนแทนการลอง
Business Cat

โอ้ดีและที่นี่คือผมแค่คำตอบที่สองลงไปนับไบต์เก่าคำตอบแรก ...^ 5 ^. $*9¶ . $*_ +`_¶_ _
นีล

@ Neil ฉันได้มันน้อยกว่าต้นฉบับ
Riley

(อืมมมที่มีลักษณะมีพิรุธคล้ายกับคำตอบของฉันที่แตกต่างคือการที่คุณเปลี่ยนจาก_การ1ที่จะบันทึกไบต์.)
นีล


6

JavaScript (ES6), 31 29 28 22 ไบต์

s=>(15-`0x${s}`%15)%15

คำตอบ Python ของ @ @ พอร์ตของ xnor ยกเว้น JavaScript นั้นมีโอเปอเรเตอร์ที่เหลือมากกว่าโอเปอเรเตอร์โมดูโล่ดังนั้นฉันจึงไม่สามารถทำได้ในขั้นตอนเดียว แก้ไข: บันทึกแล้ว 6 ไบต์ขอบคุณ @Arnauld


s=>[...s].map(c=>r-=c,r=45)|r;-)
ETHproductions

3
reduceคุณมีมากเกินไปในความรักกับ +1 ต่อไป
edc65

@Arnauld ฉันไม่เห็นว่าการทำงานเมื่อs[0]!='0'แต่มีคำตอบที่ใช้evalแล้ว
Neil

คุณสามารถทำs=>(15-`0x${s}`%15)%15อะไร
Arnauld

@Arnauld Bah และฉันทำอยู่แล้วว่าสำหรับพอร์ตแบทช์เกินไป ...
นีล

6

Brainfuck, 17 15 ไบต์

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

ลองมันออกจากที่นี่ วิธีนี้ใช้งานได้กับ Brainfuck มาตรฐาน (เซลล์ 8 บิต) เท่านั้นเนื่องจากอาศัยการห่อหุ้ม

มันเป็นวันที่หายากเมื่อ Brainfuck สามารถแข่งขันได้จริง แต่ความท้าทายนี้เพิ่งเกิดขึ้นกับข้อมูลจำเพาะของ BF ค่อนข้างดี!

แทนที่จะตอบคำถามนี้อย่างตรงไปตรงมาฉันอยากจะทำซ้ำ ๆ ที่ทำไปเพราะฉันคิดว่ามันจะเข้าใจได้ง่ายขึ้น (และน่าสนใจกว่า)
หมายเหตุ: การแก้ปัญหานี้เป็นแรงบันดาลใจส่วนใหญ่มาจากข้าวสาลีของพ่อมดคำตอบ Brain-Flak

คำอธิบาย

ขั้นตอนที่ 1, 26 ไบต์

ในคำตอบของเขา, ข้าวสาลีช่วยสร้างการชี้ให้เห็นว่าผลรวมของค่าแอสกี 0-9 รวมไป 525 และเนื่องจากมาตรฐาน brainfuck มีเพียงความคิดของ [0255] นี้จะทำให้ค่า 525% 256 = 13 กล่าวคือการลบค่า ASCII ของข้อมูลเข้าจาก 13 เครือข่ายทำให้คุณมีตัวเลขที่หายไป

เวอร์ชันแรกของโปรแกรมนี้คือ:
1. ใส่ 13 ในเซลล์แรก
2. นำข้อมูลเข้าสู่เซลล์ที่สอง
3. ลบเซลล์ที่สองออกจากเซลล์แรก
4. ข้ามไปที่ 2 ถ้ามีอินพุตที่เหลือ
5. พิมพ์เซลล์แรก

และนี่คือรหัสสำหรับวิธีง่ายๆ:

+++++++++++++ #Set the first cell to 13  
>,            #Take inputs into the second cell  
[[<->-],]     #Subtract the second cell from the first cell and repeat until inputs are over  
<.            #Print the first cell  

ขั้นตอนที่ 2, 19 ไบต์

ตามที่ระบุไว้ในคำตอบของเขาเนื่องจากเรารู้ว่าอินพุตจะมีความยาวเท่ากับ 9 เราจึงสามารถใช้ค่านั้นเป็นค่าคงที่และกำจัดสตริงยาวของ + ของที่จุดเริ่มต้น
มันไม่สำคัญว่าเราจะเพิ่ม 13 จุด (ขอบคุณคุณสมบัติการสับเปลี่ยน!) ดังนั้นเราจะผสมกับขั้นตอนการลบและการพิมพ์

,        #Take input to enter the loop
[[->-<], #Subtract the first cell from the second cell 
>+<]     #Add 1 for each input; totaling 9
>++++    #Add the missing 4 to make 13
.        #And print

นี่เป็นคำตอบดั้งเดิมของฉันสำหรับปัญหานี้ แต่เราทำได้ดีกว่า

ขั้นตอนที่ 3, 17 ไบต์

น่าสนใจพอคำตอบก่อนหน้านี้ใช้ได้แม้ว่าเราจะเริ่มต้นด้วย + แทนที่จะเป็น

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

Brainfuck ต้องการบางสิ่งในเซลล์เพื่อเริ่มการวนซ้ำ เราเพิ่มอย่างไร้เดียงสาว่าพิเศษ 4 ในท้ายที่สุดเมื่อมันสามารถไปในสถานที่อื่น

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

กับบางส่วนโดยเจตนาโดยสิ้นเชิง (อ่าน: การทดลองและข้อผิดพลาด) วงกลอุบายเริ่มปิดโปรแกรมที่มี - นำไปสู่ผลลัพธ์ที่น่าสนใจที่สอง:

  1. หนึ่งถูกเพิ่มไปยังเซลล์ที่สอง (บันทึก 1 ไบต์ในตอนท้าย)
  2. ลูปรันหนึ่งเวลาพิเศษรวมเป็น 10 แทน 9 (บันทึกอีก 1 ไบต์)

1 + 10 + 2 = 13, และเราจบด้วยคำตอบเดิม

เมื่อมองย้อนกลับไปมันอาจเป็นบทความที่มากเกินไปสำหรับโปรแกรม Brainfuck อย่างง่าย

ขั้นตอนที่ 4, 15 ไบต์

หลังจากคิดเกี่ยวกับการแก้ปัญหานี้อีกเล็กน้อยฉันก็สามารถตัด 2 ไบต์ได้

ฉันต้องการอธิบายบางอย่างเกี่ยวกับขั้นตอนก่อนหน้า:
เครื่องหมายลบเพื่อเข้าสู่ลูปได้อย่างมีประสิทธิภาพเพิ่ม 1 แต่สิ่งที่มันทำจริงคือลบ 255 จากเซลล์ที่สอง (ส่งผลให้ 1)

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

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

ฉันสามารถลบ "> + <" โดยเพิ่ม "-" ที่จุดเริ่มต้นของลูปแรก มันต้องไปที่นั่นไม่ใช่ที่ "> + <" เพราะโปรแกรมจะวนซ้ำไม่สิ้นสุด



5

Mathematica ขนาด 25 ไบต์

477-Tr@ToCharacterCode@#&

ฟังก์ชันบริสุทธิ์รับสตริงเป็นอินพุตและส่งคืนจำนวนเต็ม Mathematica มีชื่อคำสั่งยาวและไม่เต็มใจที่จะแปลงระหว่างสตริงและจำนวนเต็มซึ่งทำให้ไม่ดีอย่างยิ่งในการท้าทายนี้ สิ่งที่ดีที่สุดที่ฉันสามารถหาได้คืออัลกอริธึมจากคำตอบ Ruby ของ Level River Stซึ่งทำการคำนวณตามผลรวมของรหัส ASCII ของสตริงอินพุต ใน Mathematica สิ่งนี้ใช้ชื่อคำสั่งแบบยาวเพียงชื่อเดียว


5

PHP, 27

<?=trim(32043**2,$argv[1]);

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


PHP, 41

for($b=1;$i<9;$b^=$argv[1][$i++]);echo$b;

อันนี้ใช้xorเพราะฉันยังไม่เห็นเลย


ดีฉันไม่ได้คิดเกี่ยวกับการตัดแต่ง ค่าทางเลือก32043,32286,33144,35172,35337,35757,35853,37176,37905,38772,39147,39336,40545,42744,43902,44016,45567,45624,46587,48852,49314,49353,50706,53976,54918,55446,55524,55581,55626,56532,57321,58413,58455,58554,59403,60984,61575,61866,62679,62961,63051,63129,65634,65637,66105,66276,67677,68763,68781,69513,71433,72621,75759,76047,76182,77346,78072,78453,80361,80445,81222,81945,83919,84648,85353,85743,85803,86073,87639,88623,89079,89145,89355,89523,90144,90153,90198,91248,91605,92214,94695,95154,96702,97779,98055,98802,99066
JörgHülsermann

5

Bash + coreutils, 19 ไบต์

ฉันพบวิธีทุบตีที่สั้นลงซึ่งใช้วิธีการตรวจสอบที่น่าสนใจ:

sum -s|dc -e524?--P

ลองออนไลน์!

คำอธิบาย:

sumคำสั่งพิมพ์การตรวจสอบและนับบล็อก ฉันไม่ทราบรายละเอียดมากมาย แต่การใช้ตัวเลือก-s(อัลกอริทึม System V) จะทำให้การตรวจสอบเท่ากับผลรวม ASCII ของรหัสอักขระแต่ละตัว ดังนั้นการตรวจสอบจะคงที่เมื่อลำดับของอักขระอินพุตเดียวกันเปลี่ยนไป

รับ867953120เป็นกรณีทดสอบ (ตัวอย่างล่าสุด) นี่คือวิธีการทำงานของสคริปต์:

  • sum -s473 1เอาท์พุท หากไม่มีจำนวนเต็มหายไปเช็คซัมจะเท่ากับ 525
  • dc -e524?ผลักดัน 524 แล้วท่อป้อนข้อมูล สแต็กคือ: 1 473 524. แนวคิดคือการลบเช็คซัมจาก 525 แต่เนื่องจากผลรวมเอาต์พุต 1 เช่นกันฉันต้องทำงานด้วย
  • --P. หลังจากใช้ทั้งสอง subtractions (524- (473-1)), 52สแต็คเป็น: ด้วย 'P' ฉันพิมพ์อักขระด้วยรหัส ASCII นั้น: 4ตัวเลขที่หายไป

4

Fortran 95, 146 128 ไบต์

function m(s)
character(len=10)::s,t
t='0123456789'
do j=1,10
k=0
do i=1,9
if(s(i:i)==t(j:j))k=1
end do
if(k==0)m=j-1
end do
end

ไม่สั้นมากฉันกลัว

Ungolfed:

integer function m(s)
    implicit none

    character(len=9)::s
    character(len=10)::t
    integer:: i, j, k

    t='0123456789'
    do j=1,10
        k=0
        do i=1,9
            if (s(i:i) == t(j:j)) k=1
        end do
        if (k==0) m=j-1
    end do

end function m



3

Brachylog (2), 5 ไบต์

ẹ:Ị↔x

ลองออนไลน์!

เนื้อหาควรสั้นกว่านี้ (ฉันยังสับสนว่าทำไมถึงจำเป็น) แต่นี่คือสิ่งที่ดีที่สุดที่ฉันสามารถทำได้

คำอธิบาย

ẹ:Ị↔x
ẹ      Split the input into a list of characters
 :Ị    Pair that list with the string "0123456789"
   ↔x  Remove all elements of the list from the string

xการดำเนินงานเก่าและรถสวยซึ่งเป็นเหตุผลที่คุณต้องการ
ทำให้เสียชีวิต

คุณสามารถโต้แย้งว่าสิ่งที่ชอบ¬∋ℕควรทำงานได้เพียง 3 ตัวอักษร - นั่นคือสิ่งที่ฉันพยายามก่อน - แต่มีหลายสาเหตุว่าทำไมมันถึงไม่และฉันไม่คิดว่าจะมีวิธีที่เป็นไปได้ที่จะเปลี่ยน Brachylog

มีการทำงานเช่นเดียวกับที่เป็นไปไม่ได้แม้ในอารัมภบทเว้นแต่โดยเฉพาะการเขียนโปรแกรมสิ่งที่คุณหมายถึงโดยไม่ได้¬∋ℕ ใน Brachylog เทียบเท่ากับใน Prolog และความหมายของมันคือ "ไม่สามารถพิสูจน์ได้ภายใต้สมมติฐานโลกปิด" มากกว่า "ให้ฉันเลือกคะแนนสำหรับทุกสิ่งที่ไม่ได้ตรวจสอบเรื่องนี้" (ซึ่งมักจะเป็นจำนวนอนันต์ของสิ่งต่าง ๆ )not in¬\+
ทำให้เสียชีวิต

วิธีเดียวที่จะทำได้ใน Prolog คือ "ติดป้าย" ล่วงหน้า แต่นั่นจะหมายถึงการแก้ไขตามลำดับการประเมินของ Brachylog ตามเนื้อหาของภาคแสดง นั่นเป็นเพียงหนึ่งในปัญหาที่มีอยู่ มีคนอื่นอีกเป็นตัน

3

Lisp ทั่วไป, 47 ไบต์

(lambda(s)(- 45(reduce'+ s :key'digit-char-p)))

Ungolfed:

(lambda (s) (- 45 (reduce '+ s :key 'digit-char-p)))

ชี้แจง:

(reduce '+ s :key 'digit-char-p)

สิ่งนี้จะวนรอบตัวอักษรเป็นตัวsแปลงเป็นตัวเลขและเพิ่มเข้าไป Digit-char-p สะดวกส่งคืนจำนวนถ่านเป็นค่า "จริง" เพื่อให้สามารถใช้เป็นการทดสอบหรือการแปลง

(- 45 ...)

ลบออกจาก 45 ให้ตัวเลขที่หายไปจากอินพุต


3

Cubix , 18 ไบต์

5v&;52/ni?@.>!&oW+

ขยาย

    5 v
    & ;
5 2 / n i ? @ .
> ! & o W + . .
    . .
    . .

ลองที่นี่

ใช้วิธีการแบบเดียวกันกับคำตอบที่ไร้สมอง

สร้างค่า -525 บนสแต็กโดยการกด 5, 2, concatenate, push 5, concatenate และ negate
จากนั้นรับอินพุตซ้ำแล้วซ้ำอีกและเพิ่มจนกว่าจะถึงจุดสิ้นสุดของอินพุต
ลบอินพุตสุดท้ายคัดค้าน (ทำให้เป็นบวก) เพิ่มผลลัพธ์ล่าสุดเอาท์พุทอักขระและหยุด

สาเหตุของการทำงานตั้งแต่ -525 ขึ้นไปคือจำนวนอักขระที่ป้อนถูกป้อนสำหรับการวนซ้ำแต่ละอินพุต เนื่องจากค่าเป็นลบจะไม่มีสิ่งใดส่งออกจนกว่าลูปจะออกและค่าลบจะเป็นค่าบวก



3

Bash (+ ยูทิลิตี้) 22, 19 ไบต์

  • ใช้seqแทนการขยายรั้ง -3 ไบต์ (ขอบคุณ @Riley!)
seq 0 9|tr -d \\n$1 

ทดสอบ

$seq 0 9|tr -d \\n123456789
0

ลองออนไลน์!


ถ้าคุณย้ายที่ว่างก่อนที่$1มันจะชัดเจนมากขึ้น ...
357 Neil

@ Neil, ใช่นั่นเป็นความคิดที่ดี! ขอบคุณ !
เรือเหาะ

คุณสามารถใช้seqแทนecho: seq 0 9|tr -d \\n$1
Riley

3

Google ชีตขนาด39 33 ไบต์

A1การป้อนข้อมูลจะถูกป้อนเข้าไปในเซลล์

รหัส:

=REGEXEXTRACT(4&2^29,"[^"&A1&"]")

บันทึก 6 ไบต์ขอบคุณ Steve Kass

รหัสก่อนหน้า:

=REGEXEXTRACT("0123456789","[^"&A1&"]")

ผล:

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


หมายเลข 2 ^ 29 มีตัวเลขทั้งหมด แต่ 4 ดังนั้น 33 bytes: = REGEXEXTRACT (4 & 2 ^ 29, "[^" & A4 & "]")
Steve Kass

@SteveKass นิสัยดี =REGEXEXTRACT(0&49^9,"[^"&A1&"]")ยังเป็นวิธีการแก้ปัญหาที่ถูกต้องให้ตรรกะที่คล้ายกัน อัปเดตคำตอบ
Grant Miller

3

Befunge 98, 14 12 ไบต์

ฉันบันทึก 1 ไบต์ด้วยการย้ายโปรแกรมไปที่ 1 บรรทัดและ 1 ไบต์โดยทำคณิตศาสตร์ที่ดีขึ้น

~+;@.%a--7;#

ลองออนไลน์!

คำอธิบาย

ผลรวมของค่า ASCII มีตั้งแต่ 477 ถึง 468 ขึ้นอยู่กับว่าหมายเลขใดหายไป โดยการลบสิ่งนี้จาก 7 เราจะได้รับช่วง -470 ถึง -461 ด้วยการแก้ไขตัวเลขนี้ด้วย 10 เราจะได้ช่วงที่ 0 - 9 ซึ่งเราสามารถพิมพ์ได้

~+;       ;#    Sums the ASCII values of all characters to stdIn
~          #    The # doesn't skip over the ~ because it's on the end of a line
~               Once EOF is hit, the ~ reverses the IP's direction
          ;#    Jump the ; that was used before
       --7      Subtract the sum from 7 (really just 0 - (sum - 7))
     %a         Mod it by 10
   @.           Print and exit

เหตุผลที่ฉันใช้ค่า ASCII แทนการป้อนค่าจำนวนเต็มเป็นเพราะ&คำสั่งใน Try it Online หยุดการทำงานชั่วคราวบน EOF (แม้ว่ามันควรจะกลับ IP) ~ทำงานอย่างถูกต้องว่า

โปรแกรมเก่า 14 ไบต์

#v~+
@>'i5*--,

ผลรวมของค่า ASCII ของ 10 หลักทั้งหมดคือ 525 โดยการลบผลรวมของตัวเลขที่กำหนดจาก 525 เราจะได้รับค่า ASCII ของอักขระที่หายไป

#v~+         Sums the ASCII values of all characters on stdIn
             Moves to the next line when this is done
 >'i5*       Pushes 525 (105 * 5)
      --     Subtracts the sum from 525
@       ,    Prints and exits

2

PowerShellขนาด 30 ไบต์

param($n)0..9|?{$n-notmatch$_}

ลองออนไลน์!

จะเข้า$n, สร้างช่วง0..9(เช่น0, 1, 2 ... 9) จากนั้นใช้Where-Objectประโยค (คน|?{...}) ที่จะดึงออกหมายเลขที่ไม่ -notmatchregex ที่เหลืออยู่บนไปป์ไลน์เอาท์พุทเป็นนัย



2

Pyth, 5 ไบต์

-jkUT

ลองมัน!

คำอธิบาย

-jkUT
    T   # 10
   U    # The unary range of ten: [0,1,..,9]
 jk     # join that on the empty string
-       # set minus

"-jUT" ยังทำงานได้ดี แต่สร้างบรรทัดใหม่สำหรับทุก int


2

05AB1E , 5 ไบต์

žhISK

ลองออนไลน์!

คำอธิบาย

žh     # from the string "0123456789"
    K  # remove
  IS   # each digit of the input

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