สร้างทางเดินฉุกเฉิน


46

ในบางประเทศมีคำแนะนำหรือกฎหมายเกี่ยวกับวิธีการสร้างทางเดินฉุกเฉินบนถนนที่มีหลายเลนต่อทิศทาง (ในเรื่องต่อไปนี้เราจะพิจารณาเฉพาะเลนที่ไปในทิศทางที่เรากำลังเดินทาง) กฎเหล่านี้เป็นกฎของเยอรมนี:

  • หากมีเพียงเลนเดียวให้ทุกคนขับไปทางขวาเพื่อให้รถกู้ภัยสามารถผ่านไปทางซ้ายได้
  • หากมีสองเลนขึ้นไปรถยนต์ในเลนซ้ายสุดควรขับไปทางซ้ายและทุกคนควรเลื่อนไปทางขวา

ท้าทาย

กำหนดจำนวนN>0เลนปกติเอาท์พุทเลย์เอาต์ของเลนเมื่อทางเดินฉุกเฉินเกิดขึ้นโดยใช้สตริงของN+1อักขระ ASCII คุณสามารถใช้อักขระสองตัวจากรหัส ASCII 33สูงถึง126หนึ่งตัวเพื่อแสดงทางเดินฉุกเฉินและอีกตัวอักษรหนึ่งสำหรับแสดงรถยนต์ อนุญาตให้ใช้ช่องว่างต่อท้ายหรือนำหน้าการแบ่งบรรทัด ฯลฯ

ตัวอย่าง

ที่นี่เราใช้EสำหรับทางเดินฉุกเฉินและCสำหรับรถยนต์

N  Output
1  EC
2  CEC
3  CECC
4  CECCC
5  CECCCC
6  CECCCCC
   etc

18
ฉันจะไม่ตกหลุมนี้! คุณแค่มองหาช่องทางของตัวคุณเองที่จะหลบผ่านงูลับ ๆ ล่อ ๆ ของคุณ
orlp

16
@PmanAce ฉันไม่คิดว่าข้อบกพร่องจริง ๆ ต้องการความช่วยเหลือจากเรา: P
orlp

8
+1 เพราะใช้งานได้จริงในเยอรมนี อยู่ในสถานการณ์สุดสัปดาห์ที่ผ่านมา
ElPedro

10
@ msh210 ฉันคิดว่ารูปภาพในหน้า WP ของเยอรมันอธิบายได้ดีที่สุด
ข้อบกพร่อง

9
คุณจะรู้ว่าในตอนแรกนี้ดูเหมือนจะเป็นความท้าทายในการที่จุดที่มีCและEแต่มีจำนวนมากดังนั้นวิธีการที่ดีเป็นไปได้สำหรับความท้าทายนี้! ใช้การดำเนินการทางคณิตศาสตร์สำหรับC=1/ E=2หรือC=2/ E=3เหมือนคำตอบด้านบนไม่; ใช้C=0/ E=1กับ10^(n-1); ใช้C=0/ E=.โดยการจัดรูปแบบทศนิยม0.0; ใช้C=1/ E=-โดยใช้-1; เป็นต้นความเป็นไปได้ที่ไม่เหมือนใครมากมายสำหรับความท้าทายที่มองไปที่จุดแรก น่าเสียดายที่ฉันสามารถ +1 ได้เพียงครั้งเดียว ;)
Kevin Cruijssen

คำตอบ:


29

Python 2, 29 26 ไบต์

lambda n:10**n*97/30-1/n*9

ตัวอย่าง:

>>> f(1)
23
>>> f(2)
323
>>> f(3)
3233

คุณจำเป็นต้องแสดงผลลัพธ์ 21 ในกรณี n = 1
DanielIndie

1
@DanielIndie :( แก้ไขแล้ว แต่ตอนนี้มันน่าเกลียด
orlp

ยังคงเป็นวิธีการแก้ปัญหาความคิดสร้างสรรค์มาก :)
flawr

1
@ orlp ขออภัย :) แต่ยังคงเป็นวิธีแก้ปัญหาที่ดี :)
DanielIndie

3
10**n*97/30-1/n*9ช่วยประหยัดไบต์อื่นให้f(5) == 323333ฯลฯ
ลินน์

28

Python 3, 35 33 ไบต์

lambda N:'C'*(N>1)+'EC'+'C'*(N-2)

แก้ไข: วางf=เพื่อบันทึก 2 ไบต์ด้วยคำเตือนของ@dylnan

ลองออนไลน์!

เพื่อให้เห็นภาพ:

lambda N:'🚘'*(N>1)+'🚔🚘'+'🚘'*(N-2)

เอาท์พุท:

1 🚔🚘
2 🚘🚔🚘
3 🚘🚔🚘🚘
4 🚘🚔🚘🚘🚘
5 🚘🚔🚘🚘🚘🚘
6 🚘🚔🚘🚘🚘🚘🚘

ลอง🚔ออนไลน์!

Python 3, 40 ไบต์

ทางออกที่ตรงไปตรงมา:

lambda N:str(10**N).replace('100','010')

ลองออนไลน์!


2
ฉันคิดว่าทางออก 'ตรงไปตรงมา' มีช่องว่างที่ไม่จำเป็นหลังจากนั้นlambda N:
มีคน

@ คนหนึ่งฉันไม่ได้ตระหนักถึงสิ่งนั้นขอบคุณ
Guoyang Qin


14

Japt, 5 4 ไบต์

ใช้qสำหรับรถยนต์และ+ทางเดิน

ç¬iÄ

ลองมัน

ให้เครดิตกับ Oliver ผู้เล่นกอล์ฟ 4 ไบตในเวลาเดียวกันกับที่ฉันทำ


คำอธิบาย

ทางออกสั้น ๆ แต่เป็นคำอธิบายที่ยุ่งยาก!

สิ่งที่ตรงไปตรงมาก่อน: çวิธีการเมื่อนำไปใช้กับจำนวนเต็มซ้ำอาร์กิวเมนต์สตริงที่จำนวนครั้ง iวิธีการใช้เวลา 2 ข้อโต้แย้ง ( sและn) และแทรกsที่ดัชนีnของสตริงก็นำไปใช้กับ

การขยายตัวทางลัด Unicode 2 ใช้จะช่วยให้เราçq i+1ซึ่งเมื่อ transpiled ไป JS กลายเป็นU.ç("q").i("+",1)ที่Uเป็นอินพุท เราจึงทำซ้ำq Uครั้งแล้วใส่+at at index 1

เคล็ดลับสุดท้ายคือว่าขอบคุณห่อดัชนี Japt เมื่อU=1, iจะแทรก+ที่ดัชนีสิ่งที่คุ้มค่าที่คุณกินมัน0n


ฉันจะโพสต์ç0 iQ16 ไบต์ แต่มันจะดีกว่าถ้าคุณใช้มัน
โอลิเวอร์

ขอบคุณ @Oliver รับได้ถึง 5 ไบต์ในขณะเดียวกัน
ขนปุย

1
ç¬iÅสำหรับ 4 ไบต์;) ฉันไม่เคยทำร้าย Japt มากขนาดนี้
โอลิเวอร์

ฉันเป็นเพียงเกี่ยวกับการทำเช่นเดียวกันกับÄแทนÅ:)
ปุย

7

R, 50 ไบต์

-11 ขอบคุณ Giuseppe!

pryr::f(cat("if"(x<2,12,c(21,rep(2,x-1))),sep=""))

เอาท์พุต 1 สำหรับทางเดินฉุกเฉินและ 2 สำหรับเลนปกติ

ความพยายามของฉัน 61 ไบต์

ไม่มีอะไรแฟนซีให้ดูที่นี่ แต่มา R บนกระดานคะแนน =)

q=pryr::f(`if`(x<2,cat("EC"),cat("CE",rep("C",x-1),sep="")))

การใช้งาน:

q(5)
CECCCC

บันทึก 8 ไบต์โดยใช้ 21 = 12 + 9 และบังคับให้ TRUE / FALSE เป็น 1/0 โดยไม่ต้องใช้ถ้าtio.run/##K/r/v6CossjKKk0jObFEw1JLI8/ …
JayCe


6

Python 2, 30 29 28 ไบต์

lambda n:`10/3.`[1/n:n-~1/n]

พิมพ์3แทนที่จะCและแทน.E

คำอธิบาย:

ลองออนไลน์

lambda n:    # Method with integer parameter and string return-type
  `10/3.`    #  Calculate 10/3 as decimal (3.333333333) and convert it to a string
  [1/n       #   Take the substring from index 1 if `n=1`, 0 otherwise
   ,n-~      #   to index `n+1` +
       1/n]  #    1 if `n=1`, 0 otherwise

Python 2, 33 32 31 29 28 ไบต์

lambda n:1%n-1or'1-'+'1'*~-n

พิมพ์1แทนCและแทน-E

-2 ไบต์ขอบคุณที่@ovs
-1 ไบต์ขอบคุณที่@xnor

คำอธิบาย:

ลองออนไลน์

lambda n:    # Method with integer parameter and string return-type
  1%n-1      #  If `n` is 1: Return '-1'
  or         #  Else:
    '1-'+    #   Return '1-', appended with:
    '1'*~-n  #   `n-1` amount of '1's

1
10/3หนึ่งของคุณล้มเหลวที่ 17
Jo King

1
@ โจกิ้งฉันเพิ่งชี้แจงกับ OP และเขากล่าวว่า " การใช้ชนิดจำนวนเต็มในตัวก็เพียงพอ " ซึ่งหมายความว่าn=16หากจำนวนเต็มในตัวของคุณเป็น 64- บิตก็เพียงพอหรือในกรณีนี้n=16เมื่อค่าทศนิยมสามารถ ' ไม่ถือตัวเลขทศนิยมมากกว่า 15 หลักโดยค่าเริ่มต้นก็เพียงพอแล้ว (เช่นเดียวกันกับคำตอบอื่น ๆ จำนวนมากที่ใช้ภาษาที่มีขนาดตัวเลขโดยพลการเช่น Java, C # .NET และอื่น ๆ )
Kevin Cruijssen


5

brainfuck , 42 ไบต์

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

ลองออนไลน์!

รับอินพุตเป็นโค้ดอักขระและเอาต์พุตเป็นVช่องทางปกติและWเป็นช่องทางที่เคลียร์ (เพื่อทดสอบอย่างง่ายดายฉันแนะนำให้เปลี่ยน,ด้วยจำนวนครั้ง+)

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

,[[>]+[<]>-] Turn input into a unary sequence of 1s on the tape
>>[<]<[<]    Move two cells left of the tape if input is larger than 1
             Otherwise move only one space
>+>+<        Add one to the two cells right of the pointer
             This transforms:
               N=1:  0 0' 1 0  -> 0 2' 1 0
               N>1:  0' 0 1 1* -> 0 1' 2 1*
[<-[--->+<]>.,>]  Add 86 to each cell to transform to Ws and Vs and print

5

ระดับแปดเสียง (MATLAB *), 31 30 28 27 22 ไบต์

@(n)'CE'(1+(n>1==0:n))

ลองออนไลน์!

โปรแกรมทำงานดังนี้:

@(n)                   %Anonymous function to take input
            n>1==0:n   %Creates [1 0] if n is 1, or [0 1 (0 ...)] otherwise
         1+(        )  %Converts array of 0's and 1's to 1-indexed
    'CE'(            ) %Converts to ASCII by addressing in string

เคล็ดลับที่ใช้ที่นี่เป็น XNORing อาร์เรย์เมล็ดพันธุ์0:nที่มีการตรวจสอบถ้าใส่มากกว่า 1 ผลที่ได้คือว่าสำหรับn>1เมล็ดพันธุ์ที่ได้รับการดัดแปลงเป็นอาร์เรย์ตรรกะของ[0 1 (0 ...)]ในขณะที่สำหรับn==1เมล็ดพันธุ์กลายเป็นฤๅษีที่จะ[1 0]บรรลุการผกผันจำเป็น

ส่วนที่เหลือเป็นเพียงการแปลงเมล็ดเป็นสตริงที่มีรถยนต์ต่อท้ายเพียงพอ


(*) ลิงก์ TIO รวมอยู่ในส่วนท้ายแสดงความคิดเห็นโซลูชันสำรองสำหรับจำนวนไบต์เดียวกันที่ทำงานใน MATLAB เช่นเดียวกับ Octave แต่ผลลัพธ์ในลำดับ '0' และ '1' มากกว่า 'E' และ ' C' เพื่อความสมบูรณ์ทางเลือกคือ:

@(n)['' 48+(n>1==0:n)]

  • ที่บันทึกไว้ 1 ไบต์โดยใช้มากกว่าn==1~=0:1 มีความสำคัญมากกว่าด้วยเหตุนี้วงเล็บดั้งเดิม แต่ดูเหมือนว่าและได้รับการจัดการตามลำดับที่ปรากฏดังนั้นเมื่อเปรียบเทียบกับ 1 เราสามารถบันทึกไบต์ได้0:1~=(n<2)~=<~===

  • ที่บันทึกไว้ 2 ไบต์โดยการเปลี่ยนที่ปฏิเสธการ2:nที่จะดำเนินการ สิ่งนี้ช่วยประหยัดวงเล็บสองอัน นอกจากนี้เรายังต้องเปลี่ยน~=ไป==เป็นบัญชีสำหรับข้อเท็จจริงที่ว่ามันจะถูกปฏิเสธในภายหลัง

  • บันทึก 1 ไบต์โดยใช้<อีกครั้ง ปรากฎว่า<มีความสำคัญเช่นเดียวกับ==หลังจากทั้งหมด การวางการ<คำนวณก่อนที่จะ==ทำให้แน่ใจว่าลำดับของการดำเนินการถูกต้อง

  • บันทึก 5 ไบต์โดยไม่สร้างสองอาร์เรย์แยกกัน แทนที่จะอาศัยข้อเท็จจริงที่ว่าการเปรียบเทียบ XNOR จะแปลงช่วงเดียวเป็นตรรกะ


ฉลาดมาก :-)
Stewie Griffin

@StewieGriffin ขอบคุณ :) ถูกจัดการเพื่อให้ปิดได้อีก 5 ไบต์
Tom Carpenter



4

Python 3, 32 ไบต์

lambda n:f"{'CE'[n<2:]:C<{n+1}}"

ลองออนไลน์!

ใช้การแสดงออกฉสตริงเป็นรูปแบบการอย่างใดอย่างหนึ่ง'E'หรือ'CE'เบาะด้านขวาด้วยดังนั้นจึงมีความกว้างของ'C'n+1

f"{          :       }    a Python 3 f-string expression.
   'CE'[n<2:]             string slice based on value of n.
             :            what to format is before the ':' the format is after.
              C           padding character
               <          left align
                {n+1}     minimum field width based on n

4

Brain-Flak , 100 66 ไบต์

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

ลองออนไลน์!

ใช้"เป็นเลนฉุกเฉินและเลน!ปกติ


+1 สำหรับการใช้ภาษานี้ทุกสิ่ง XD
อเล็กซ์

2
@Alex, Brain-Flak เป็นภาษาของเดือนเมษายน
Jo King

เรื่องตลกของ April Fool อย่างจริงจังหรือช้า ภาษาของเดือนไหนที่ได้รับการเลือกตั้ง
อเล็กซ์

@Alex เสนอชื่อและลงคะแนนที่นี่จากนั้นโพสต์เฉพาะเดือนจะถูกโพสต์เช่นนี้
Kamil Drakari

โอ้มันอยู่บนแพลตฟอร์มนี้ ฉันเห็นขอบคุณ! :-)
อเล็กซ์


4

05AB1E , 7 ไบต์

Î>∍1I≠ǝ

ลองออนไลน์!

0 คือ C และ 1 คือ E

คำอธิบาย

Î>          # Push 0 and input incremented            -- [0, 4]
  ∍         # Extend a to length b                    -- [0000]
   1I≠      # Push 1 and input falsified (input != 1) -- [0000, 1, 1] 
      ǝ     # Insert b in a at location C             -- [0100]
            # Implicit display

โอ้เจ้าเล่ห์เจ้าเล่ห์ $<×TìsiRเป็นวิธีที่ฉันคิด
Magic Octopus Urn

@MagicOctopusUrn นั่นเป็นวิธีที่น่าสนใจ! ฉันอ้อยอิ่งอยู่เหนือการก่อสร้าง "ถ้า" เช่นกัน แต่มันต้องมีอย่างน้อย 3 ไบต์ดังนั้นความต้องการวิธีการที่แตกต่างกัน :-)
Kaldo

ในรุ่นใหม่ของ 05AB1E, สามารถที่จะแข็งแรงเล่นกอล์ฟ1I $
Kevin Cruijssen

5 ไบต์ (สามารถใช้งานได้ในเวอร์ชันดั้งเดิม)
Kevin Cruijssen

4

APL (Dyalog Unicode) , 21 17 16 ไบต์

(-≠∘1)⌽'E',⍴∘'C'

ลองออนไลน์!

ขอบคุณ Erik สำหรับการบันทึก 4 ไบต์และAdámสำหรับอีกหนึ่งไบต์

อย่างไร?

(-≠∘1)⌽'E',⍴∘'C'  Tacit function
           ⍴∘'C'  Repeat 'C', according to the input
       'E',       Then append to 'E'
                 And rotate
    1)            1
  ≠∘              Different from the input? Returns 1 or 0
(-                And negate. This rotates 0 times if the input is 1, and once if not.

1
(⍵>1)ไม่จำเป็นต้องอยู่ในวงเล็บ และคุณสามารถบันทึก 4 (⊢×1<⊢)⌽'E',⍴∘'C'ไบต์ที่มีฟังก์ชั่นโดยปริยาย:
Erik the Outgolfer

@EriktheOutgolfer ขอบคุณ! ฉันไม่มีเวลาที่จะพูดโดยปริยายหลังจากโพสต์เพราะฉันมีชั้นเรียนวันนี้ ฉันจะแก้ไขเมื่อกลับถึงบ้าน
J. Sallé


15 ไบต์ด้วย⎕io = 0:'CE'[1(≠=∘⍳+)⎕]
ngn

@ngn ฉันไม่สามารถแม้แต่จะ ... คุณได้รับลิงค์ TIO กับคดีทดสอบหรือไม่ ดูเหมือนจะไม่สามารถใช้งานได้ ...
Sallé

4

Haskell , 35 33 32 ไบต์

ขอบคุณ 2 ไบต์ที่บันทึกโดย Angs, 1 ไบต์บันทึกขอบคุณ Lynn

(!!)$"":"EC":iterate(++"C")"CEC"

ลองออนไลน์!

Haskell , 32 30 29 ไบต์

นี่เป็นดัชนีที่ไม่มีศูนย์ดังนั้นจึงไม่สอดคล้องกับความท้าทาย

g=(!!)$"EC":iterate(++"C")"CEC"

ลองออนไลน์!

Haskellขนาด 30 ไบต์

สิ่งนี้ไม่ทำงานเนื่องจากผลลัพธ์จะต้องเป็นสตริง

f 1=21
f 2=121
f n=10*f(n-1)+1

ลองออนไลน์!

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

มันจะถูกกว่าที่จะใช้0แทน1แต่เราต้องการเลขศูนย์นำหน้าซึ่งจบลงด้วยการถูกตัดออก


((blah)!!)สามารถ(!!)$blahบันทึกไบต์ในคำตอบสองข้อแรกของคุณ
ลินน์

@ ลินน์ขอบคุณ! ฉันพยายามทำก่อนหน้านี้ แต่ต้องนับไบต์ผิด
ข้าวสาลีตัวช่วยสร้าง




3

Stax , 7 ไบต์

ü♣àj#F 

เรียกใช้และแก้ไขข้อบกพร่อง

ใช้อักขระ "0" และ "1" สิ่งนี้ใช้ได้เพราะเมื่อคุณหมุนอาร์เรย์ที่มีขนาด 1 จะไม่เปลี่ยน

คลายกล่อง ungolfed และแสดงความคิดเห็นมันมีลักษณะเช่นนี้

1]( left justify [1] with zeroes. e.g. [1, 0, 0, 0]
|)  rotate array right one place
0+  append a zero
$   convert to string

เรียกใช้อันนี้





3

ช่องว่าง , 141 104 103 ไบต์

[S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   T   _Read_STDIN_as_number][T    T   T   _Retrieve][S S S T  S N
_Push_2][T  S S T   _Subtract][S N
S _Duplicate_input-2][N
T   T   N
_If_negative_Jump_to_Label_-1][S S S T  N
_Push_1][S N
S _Duplicate_1][T   N
S T _Print_as_integer][S S T    T   N
_Push_-1][T N
S T _Print_as_integer][T    S S T   _Subtract][N
S S T   N
_Create_Label_LOOP][S N
S _Duplicate][N
T   T   S N
_If_negative_Jump_to_EXIT][S S S T  N
_Push_1][S N
S _Duplicate_1][T   N
S T _Print_as_integer][T    S S T   _Subtract][N
S N
T   N
_Jump_to_LOOP][N
S S N
_Create_Label_-1][T N
S T _Print_as_integer][N
S S S N
_Create_Label_EXIT]

เพิ่มตัวอักษรS(ช่องว่าง), T(แท็บ) และN(บรรทัดใหม่) เป็นการเน้นเท่านั้น
[..._some_action]เพิ่มเป็นคำอธิบายเท่านั้น

พิมพ์1แทนCและแทน-E

-1 ไบต์ขอบคุณที่@JoKingด้วยการแนะนำการใช้งาน1และการ-1แทนและ01

คำอธิบายในรหัสเทียม:

Integer i = STDIN-input as integer - 2
If i is negative (-1):
  Print i (so print "-1")
Else:
  Print "1-1"
  Start LOOP:
    If i is negative:
      EXIT program
    Print "1"
    i = i-1
    Go to the next iteration of the LOOP

ตัวอย่างการทำงาน:

การป้อนข้อมูล: 1

Command   Explanation                 Stack      Heap    STDIN   STDOUT   STDERR

SSSN      Push 0                      [0]
SNS       Duplicate top (0)           [0,0]
TNTT      Read STDIN as integer       [0]        {0:1}   1
TTT       Retrieve heap at 0          [1]        {0:1}
SSSTSN    Push 2                      [1,2]      {0:1}
TSST      Subtract top two            [-1]       {0:1}
SNS       Duplicate input-2           [-1,-1]    {0:1}
NTSN      If neg.: Jump to Label_-1   [-1]       {0:1}
NSSN      Create Label_-1             [-1]       {0:1}
TNST      Print top as integer        []         {0:1}           -1
NSSSN     Create Label_EXIT           []         {0:1}
                                                                         error

ลองใช้ออนไลน์ (ด้วยพื้นที่ว่างเปล่าแท็บและบรรทัดใหม่เท่านั้น)
หยุดโดยมีข้อผิดพลาด: ไม่ได้กำหนดทางออก

การป้อนข้อมูล: 4

Command   Explanation                   Stack      Heap    STDIN   STDOUT   STDERR

SSSN      Push 0                        [0]
SNS       Duplicate top (0)             [0,0]
TNTT      Read STDIN as integer         [0]        {0:4}   4
TTT       Retrieve heap at 0            [4]        {0:4}
SSSTSN    Push 2                        [4,2]      {0:4}
TSST      Subtract top two              [2]        {0:4}
SNS       Duplicate input-2             [2,2]      {0:4}
NTSN      If neg.: Jump to Label_-1     [2]        {0:4}
SSSTN     Push 1                        [2,1]      {0:4}
SNS       Duplicate top (1)             [2,1,1]    {0:4}
TNST      Print as integer              [2,1]      {0:4}           1
SSTTN     Push -1                       [2,1,-1]   {0:4}
TNST      Print as integer              [2,1]      {0:4}           -1
TSST      Subtract top two              [1]        {0:4}
NSSTN     Create Label_LOOP             [1]        {0:4}
 SNS      Duplicate top (1)             [1,1]      {0:4}
 NTTSN    If neg.: Jump to Label_EXIT   [1]        {0:4}
 SSSTN    Push 1                        [1,1]      {0:4}
 SNS      Duplicate top (1)             [1,1,1]    {0:4}
 TNST     Print as integer              [1,1]      {0:4}           1
 TSST     Subtract top two              [0]        {0:4}
 NSNTN    Jump to Label_LOOP            [0]        {0:4}

 SNS      Duplicate top (0)             [0,0]      {0:4}
 NTTSN    If neg.: Jump to Label_EXIT   [0]        {0:4}
 SSSTN    Push 1                        [0,1]      {0:4}
 SNS      Duplicate top (1)             [0,1,1]    {0:4}
 TNST     Print as integer              [0,1]      {0:4}           1
 TSST     Subtract top two              [-1]       {0:4}
 NSNTN    Jump to Label_LOOP            [-1]       {0:4}

 SNS      Duplicate top (-1)            [-1,-1]    {0:4}
 NTTSN    If neg.: Jump to Label_EXIT   [-1]       {0:4}
NSSSN     Create Label_EXIT             [-1]       {0:4}
                                                                            error

ลองใช้ออนไลน์ (ด้วยพื้นที่ว่างเปล่าแท็บและบรรทัดใหม่เท่านั้น)
หยุดโดยมีข้อผิดพลาด: ไม่ได้กำหนดทางออก


มันจะง่ายกว่าไหมถ้าจะพิมพ์เลนที่ชัดเจนเช่นเดียวกับ-การพิมพ์ที่-1ไม่เหมาะสม?
Jo King

@ โจกิ้งน่าเสียดายที่มันนานกว่านี้ ลองออนไลน์112ไบต์ แน่นอนมันเปลี่ยนpush_0; print_as_integer; push_1; print_as_integerถึงpush_-1; print_as_integerแต่ในการแลกเปลี่ยนทั้งสองpush_0; print_as_integerจะถูกแทนที่ด้วยpush_45; print_as_characterที่push_0= SSSNและ=push_45 SSSTSTTSTNและpush_45ต้องเพิ่มเพิ่มเติมเช่นกันเพราะสำหรับn=1ตอนนี้ฉันพิมพ์สิ่งที่ซ้ำกันที่0ฉันมีอยู่แล้วในสแต็กดังนั้นฉันจึงไม่ต้องผลัก0อีกครั้งเพราะ0มันอยู่ในสแต็กแล้ว
Kevin Cruijssen

ฉันหมายถึง-การเปลี่ยน1และการเปลี่ยน1 0จากนั้นคุณจะหลีกเลี่ยงการกด 45 และเท่าที่ฉันสามารถบอกได้ว่าจะประหยัดได้ในการพิมพ์ตัวเลขในครึ่งแรกของเงื่อนไข แต่เพิ่มค่าใช้จ่ายเล็กน้อยในการกด 1 แทน 0 ตรวจสอบGol> <>คำตอบสำหรับ ตัวอย่างของผลลัพธ์ที่ฉันหมายถึง
Jo King

1
@ โจกิ้งฉันได้ลองใช้มัน แต่ฉันสิ้นสุดที่107 ไบต์ (นี่คือรหัสเดียวกันกับการเน้นและคำอธิบายเพิ่มเติม ) มันช่วยประหยัดprint_-1แทนการพิมพ์0และ1แต่print_-1จำเป็นต้องมีเพิ่มเติมนอกลูป แก้ไข: รับสามารถที่จะลดไป103 ไบต์โดยการเปลี่ยนsubtract_1; if_0_jump_to_ONE; push_-1; print_integerถึงsubtract_2; if_negative_jump_to_ONE; print_integerเนื่องจาก -1 อยู่ในสแต็กแล้ว ขอบคุณสำหรับ -1 ไบต์ :)
Kevin Cruijssen

3

AutoHotkey 32 ไบต์

แทนที่ตัวอักษร "C" ด้วย "EC" ยกเว้นจำนวน C> 1 แล้วส่ง "CEC" และออกจากแอป

::C::EC
:*:CC::CEC^c
^c::ExitApp

C => EC
CC => CEC จากนั้นออกจากโปรแกรม Cs ใด ๆ เพิ่มเติมจะถูกป้อนหลังจากโปรแกรมออก


3

APL + WIN, 20 16 ไบต์

บันทึกได้ 4 ไบต์ด้วยAdám

แจ้งสำหรับจำนวนเต็ม n:

(-2≠⍴n)⌽n←1⎕/⍕10

1 สำหรับทางเดินฉุกเฉิน o สำหรับรถยนต์


16:(-2≠⍴n)⌽n←1⎕/⍕10
Adám

@ Adámขอบคุณ ฉันเห็นเคล็ดลับของ ngn คือ1⎕ / ⍕กำลังมีประโยชน์ หนึ่งสำหรับรายการสำนวน?
Graham

คุณกำลังพูดถึงรายการสำนวนอะไร?
อดัม

@ Adámสำนวนสองรายการที่ฉันใช้บ่อยที่สุดคือ Finnapl และ APL2idioms
Graham

ฉันไม่แน่ใจว่ามีอะไรสำนวนที่นี่ มันเป็นเพียงกอล์ฟ อย่างไรก็ตามรายการสำนวนของฉันอาจสนใจคุณ
Adám


3

MathGolf , 7 6 ไบต์

ú░\┴╜╪

ลองออนไลน์

เอาท์พุท1สำหรับEและสำหรับ0C

คำอธิบาย:

ú         # 10 to the power of the (implicit) input
          #  i.e. 1 → 10
          #  i.e. 4 → 10000
         # Convert it to a string
          #  i.e. 10 → "10"
          #  i.e. 10000 → "10000"
  \       # Swap so the (implicit) input is at the top of the stack again
   ┴╜     # If the input is NOT 1:
         #  Rotate the string once towards the right
          #   i.e. "10000" and 4 → "01000"
          # Output everything on the stack (which only contains the string) implicitly
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.