เขียนล่ามสำหรับ *


20

งานง่าย เขียนล่ามภาษาที่*

นี่คือลิงก์ที่ใหญ่กว่าไปยังวิกิ

มีโปรแกรม * ที่ใช้ได้เพียงสามโปรแกรมเท่านั้น:

  • * พิมพ์ "Hello World"
  •  *  พิมพ์ตัวเลขสุ่มระหว่าง 0 ถึง 2,147,483,647
  • *+* ทำงานตลอดไป

กรณีที่สามจะต้องเป็นวงไม่สิ้นสุดตามข้อกำหนดใน คำถามนี้

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

  • อินพุตสามารถใช้วิธีการอินพุตที่ยอมรับได้โดยกฎ I / O มาตรฐานของเรา
  • มันจะเป็นหนึ่งในโปรแกรมข้างต้น

เอาท์พุท:

  • กรณีแรกควรพิมพ์อย่างแน่นอนHello Worldโดยมีหรือไม่มีตัวแบ่งบรรทัดต่อท้าย
  • สำหรับกรณีที่สองหากจำนวนเต็มสูงสุดของภาษาของคุณน้อยกว่า 2,147,483,647 ให้ใช้จำนวนเต็มสูงสุดของภาษาของคุณ
  • เคสแรกและเคสที่สองสามารถพิมพ์ไปยังเอาต์พุตที่ยอมรับได้โดยกฎ I / O มาตรฐานของเรา
  • กรณีที่สามไม่ควรให้ผลลัพธ์ใด ๆ

เกณฑ์การให้คะแนน:

เช่นนี้คือคำตอบที่สั้นที่สุดเป็นไบต์ชนะ


7
เมื่อคุณพูดระหว่าง0และ2,147,483,647'ที่รวมหรือพิเศษ? (เช่นเป็น0ผลลัพธ์ที่ถูกต้อง?)
Chas Brown

7
การเปลี่ยนสเปคหลังจากโพสต์ความท้าทายและการยกเลิกการแก้ไขปัญหาที่มีอยู่เป็นเรื่องอัตโนมัติ-1จากฉัน
ขนดก

2
สำหรับภาษาที่ไม่มีวิธีการสร้างหมายเลขสุ่มในตัวมีวิธีที่ยอมรับได้หรือไม่ที่จะตอบสนองความต้องการ "พิมพ์หมายเลขสุ่ม" หรือไม่?
แทนเนอร์ Swett

2
หากจำนวนเต็มของภาษาของเราไม่มีหรือสูงกว่าเราอาจใช้ขอบเขตสูงสุดที่สูงกว่าได้หรือไม่
Jonathan Allan

7
@Shaggy ฉันไม่เห็นการเปลี่ยนแปลงกฎใด ๆ ในวิกิสำหรับคำถามมีเพียงช่องว่างไปยังพื้นที่ที่ไม่ทำลาย (ตรวจสอบแท็บ markdown) เนื่องจากตัวแสดงการ markdown SE ไม่ได้แสดงผล แต่มองไปที่การแก้ไขดั้งเดิม เห็นได้ชัดว่ามันควรจะเป็นช่องว่างปกติและ "แฮ็ค" จะทำเฉพาะสำหรับปัญหาการเรนเดอร์ SE เท่านั้น
Ferrybig

คำตอบ:


20

* , 0 ไบต์


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

(... ฉันคิดว่ามีเงื่อนไข"อย่างน้อยสองเท่าของ upvotes มากถึง downvote"ซึ่งฉันไม่มีตัวแทนในการตรวจสอบ)


4
เมตาที่เชื่อมโยงของคุณเป็นมาตรฐานไซต์ที่ยอมรับในปัจจุบัน (+31 -7)
Jonathan Allan

2
@A__: ดูเหมือนว่าฉันจะต้องได้รับการออกแบบมาโดยเฉพาะเพื่อตอบสนองความหมายของใครบางคนที่เสนอ 'ภาษาการเขียนโปรแกรม' ("คุณสามารถเขียนสวัสดีโลก!" "คุณสามารถเขียนวงวนไม่สิ้นสุด!" "คุณสามารถเขียนโปรแกรมที่ไม่ ทำสิ่งเดียวกันเสมอ! ")
Henning Makholm

ฉันเชื่อว่าในทางเทคนิค Malbolge ไม่ใช่ภาษาโปรแกรมอย่างใดอย่างหนึ่ง
Bob Jansen

1
Malbolge เป็นภาษาการเขียนโปรแกรมสำหรับ จำกัด ออโตมาตะเช่นเดียวกับ * และตัวอย่างเช่น Befunge-93 ดังนั้น Malbolge เป็นภาษาโปรแกรมทางการเช่นเดียวกับ * ในทางเทคนิคเช่นเดียวกับภาษาที่นับซ้ำเมื่อพูดถึงนิยามภาษาโปรแกรม (แม้ว่าภาษาที่เป็นทางการจะมีประสิทธิภาพน้อยกว่า)
Krzysztof Szewczyk

ลงคะแนนจากฉันเพราะโดยสุจริตคำตอบนี้น่าเบื่อจริง ๆ แล้วมันเป็นช่องโหว่มาตรฐานแม้ว่าเราจะไม่สนใจคำถามว่า * เป็นภาษาโปรแกรมหรือไม่
AlienAtSystem

8

R , 69 ไบต์

switch(scan(,""),"*"="Hello, World!"," * "=sample(2^31,1)-1,repeat{})

ลองออนไลน์!

switchrepeat{}พยายามที่จะตรงกับอาร์กิวเมนต์ที่มีชื่อและถ้าไม่มีการแข่งขันเลือกอย่างใดอย่างหนึ่งที่ไม่มีชื่อเป็นครั้งแรกหลังจากที่ครั้งแรกซึ่งในกรณีนี้เป็นห่วงอนันต์


6

เยลลี่ ,  21  20 ไบต์

ḊOSØ%HX’¤“½,⁾ẇṭ»¹Ḃ¿?

Monadic Link ยอมรับรายการของตัวละคร

ลองออนไลน์!

vL’... ยังใช้งานได้ (ดูด้านล่าง)

อย่างไร?

ḊOSØ%HX’¤“½,⁾ẇṭ»¹Ḃ¿? - Link: list of characters   e.g.: "*"        or  " * "    or  "*+*"
Ḋ                    - dequeue                          ""             "* "         "+*"
 O                   - to ordinals                      []             [42,32]      [43,42]
  S                  - sum                              0              74           85
                   ? - if...
                  ¿  - ...if-condition: while...
                 Ḃ   -    ...while-condition: modulo 2  0              0            1
                ¹    -    ...while-true-do: identity                                85
                     -                                  0              74           (looping)
        ¤            - ...then: nilad followed by link(s) as a nilad:
   Ø%                -    literal 2^32                                 2^32
     H               -    half                                         2^31
      X              -    random integer in [1,n]                      RND[1,2^31]
       ’             -    decrement                                    RND[0,2^31)
         “½,⁾ẇṭ»     - ...else: dictionary words        "Hello World"

ทางเลือก

vL’... - Link: list of characters                 e.g.: "*"        or  " * "    or  "*+*"
 L     - length                                         1              3            3
v      - evaluate (left) as Jelly code with input (right)
       -                                                1^1            3^3          (3^3+3)^3
       -                                                1              27           27000
  ’    - decrement                                      0              26           26999
   ... - continue as above                              "Hello World"  RND[0,2^31)  (looping)

5

C (gcc) , 66 63 ไบต์

ขอบคุณ attinat สำหรับ -3 ไบต์

ฉันต้องตรวจสอบตัวละครตัวที่สอง: ถ้าตั้งค่า LSB มันเป็น+(ดังนั้นโปรแกรมคือ " *+*") และลูปโปรแกรม หลังจากนั้นถ้าเป็นNUL, โปรแกรมคือ " *" และเราจะแสดงHello World; มิฉะนั้นจะแสดงค่าแบบสุ่ม ("  * " เหลือเพียงตัวเลือกอื่นเท่านั้น)

f(char*s){for(s++;*s&1;);printf(*s?"%d":"Hello World",rand());}

ลองออนไลน์!



โกนไบต์:f(char*s){*++s&1?f(s-1):printf(*s?"%d":"Hello World",rand());}
โรมันโอดีสกี้

หมายเหตุคนเดินเท้า: randไม่รับประกันว่าจะคืนค่าที่มากพอ RAND_MAXและINT_MAXไม่รับประกันว่าจะเหมือนกัน (และไม่ได้อยู่ในคอมไพเลอร์โลกแห่งความจริงเช่น Visual Studio RAND_MAXคือ32767ในขณะที่INT_MAX[ในระบบที่ทันสมัย ​​x86 มา] 2147483647ค่าที่ระบุในคำถามของ OP)
ShadowRanger

@ShadowRanger ที่เป็นจริงอย่างสมบูรณ์ แต่เมื่อพิจารณาว่า> 90% ของรายการ CGCC แบบอิง C ทั้งหมดนั้นขึ้นอยู่กับพฤติกรรมที่ไม่ได้ระบุและไม่ระบุฉันไม่กังวลเกี่ยวกับเรื่องนี้! ฉันยังไม่รู้สึกเหมือนกำลังติดตั้ง LCG แบบเขียนโค้ดในวันนี้ :-)
ErikF

5

Python 2 , 103 93 89 87 ไบต์

ฉันรวมคำตอบก่อนหน้านี้ของฉันกับ Chas บราวน์ของคำตอบและได้รับบางสิ่งบางอย่างไม่กี่ไบต์สั้น

หมายเลขสุ่มจะอยู่ระหว่าง 0 ถึง 2 ** รวม 31-1

from random import*
i=input()
while'*'<i:1
print["Hello World",randrange(2**31)][i<'!']

ลองออนไลน์!

รุ่นก่อนหน้า:

103 ไบต์

from random import*
exec['print"Hello World"','while 1:1','print randint(0,2**31-1)'][cmp(input(),'*')]

93 ไบต์

from random import*
i=cmp(input(),'*')
while i>0:1
print["Hello World",randint(0,2**31-1)][i]

บันทึก 2 ไบต์โดยการแทนที่ด้วยrandint(0,2**31-1) randrange(2**31)
Chas Brown

while'*'<iประหยัด 2
โจนาธานอัลลัน

บันทึกไบต์อื่นโดยเปลี่ยนrandrange(2**31)เป็นgetrandbits(31)(หลังส่งคืนlongไม่ใช่intแต่printจะพิมพ์strแบบฟอร์มไม่ใช่reprแบบฟอร์มดังนั้นการติดตามLจะไม่อยู่ที่นั่น)
ShadowRanger

ค่อนข้างไม่มีประสบการณ์กับไซต์ดังนั้นการชี้แจงอย่างรวดเร็ว: คุณได้รับอนุญาตให้ขอข้อมูลที่คุณป้อนหรือไม่ i=input()ใช้งานได้ก็ต่อเมื่ออินพุตถูกใส่ไว้ถ้าคุณแค่ป้อนข้อมูลธรรมดา*/ * /*+*มันจะตายด้วยSyntaxError(เพราะinputรวมถึงนัยeval) คุณจะต้องป้อนข้อมูล'*'/' * '/'*+*'(หรือเทียบเท่าด้วยเครื่องหมายคำพูดคู่แทน) ฉันไม่เห็นสิ่งใดที่ชัดเจนในกฎ I / O มาตรฐานที่จะอนุญาตซึ่งอาจหมายถึงคุณต้องใช้raw_input()โดยมีราคาสี่ไบต์
ShadowRanger

@ShadowRanger input()รับสตริงเป็นอินพุตและประเมินค่า ฉันไม่ได้เพิ่มลงในอินพุตจริงๆฉันแค่รับสตริงเป็นอินพุตและสตริงมีเครื่องหมายคำพูด นี่เป็นมาตรฐานที่ค่อนข้างธรรมดาในแบบเดียวกับที่ฉันสามารถใช้อาร์เรย์เหมือน[1,2,3]แทนที่จะเป็นสตริงที่คั่นด้วยที่ฉันต้องแยกและแยก เป้าหมายของเว็บไซต์ไม่ได้ทำให้การป้อนข้อมูลที่เข้มงวดนั้นจะทำให้ I / O ง่ายดังนั้นเราสามารถมุ่งเน้นรหัสในความท้าทายที่มือ
mbomb007

5

ถัง , -lp, -ir วันที่ 30 26 25 ตลอด 24 20 19 ไบต์

!1=[_“H%c¡“| =[~.|{

-1 ไบต์โดยใช้แฟล็ก

ลองออนไลน์!

คำตอบประวัติ

?!1=[_“H%c¡“| =[~.|{

ลองออนไลน์!

ย่อลงHello Worldเป็นสตริงพจนานุกรม

!1=[_Hello World| =[~.|{

ลองออนไลน์!

ฉันไม่เคยหยุดที่จะประหลาดใจกับพลังของถัง เครดิตให้กับผู้ใช้ EdgyNerd สำหรับการบันทึกไบต์อื่น

รุ่นก่อนหน้า

_!0=[Hello World|\*=[~.|{

ลองออนไลน์!

เครดิตให้กับผู้ใช้ A__ สำหรับการบันทึกไบต์พิเศษ

เวอร์ชั่นเก่า

?!1=[_Hello World| =[__~|{

เป็นหลักใช้โปรแกรมอินพุตและ:

  • ตรวจสอบเพื่อดูว่าความยาวของอินพุตเป็น 1 โดยพิมพ์ "Hello World" หากเป็นจริง
  • ตรวจสอบว่าอักขระตัวสุดท้ายเป็นช่องว่างหรือไม่และพิมพ์ตัวเลขสุ่ม
  • มิฉะนั้นเรียกใช้การวนซ้ำไม่สิ้นสุด

จากนั้นพิมพ์สแต็กโดยปริยาย

?                               #Get input from the user
 !1=                            #Compare the stack's length to 1
    [_Hello World           #Push "Hello, World!" to the stack
                     | =        #See if top item is a space
                        [__~|{  #If so, generate a random number, otherwise, infinite loop.

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

ลองออนไลน์! เวอร์ชั่นเก่า

ลองออนไลน์! เวอร์ชั่นใหม่


คุณสามารถตัด 4 ไบต์คุณไม่จำเป็นต้องใช้เครื่องหมายจุลภาคหรือเครื่องหมายอัศเจรีย์ใน "Hello World"
TheOnlyMrCat

1
ตอนนี้ฉันต้องเรียนรู้ภาษาอื่นที่ไม่เป็นที่นิยมเพื่อตอบความท้าทายที่นี่ตามปกติ
A

1
-1 ไบต์: TIO ฉันดีใจที่ฉันไม่ได้สูญเสียความสามารถในการเล่นกอล์ฟในถัง
A̲̲

@A__ เพลิดเพลินกับถังอยู่ใน TIO?
Jono 2906


3

Befunge-93 , 54 bytes

~"*"-_~1+#^_"dlroW olleH">:#,_@.%*2**:*::*88:*`0:?1#+<

ลองออนไลน์!

ข้อเขียน:

~"*"-                      _                ~1+                   #^_        "dlroW olleH">:#,_    @      .%*2**:*::*88:   *`0:             ?1#+<
Compare first      If equal, go right       Compare second       If equal,        Output          Exit    Modulo by 2^31   If less than      Add 1
character to       Otherwise, go left       character to       loop forever   "Hello World"                 and output     0, multiply     a random amount
'*'                and wrap around          -1 (EOF)                                                                         by 0            of times

การสุ่มนั้นไม่เหมือนกัน ทุกครั้งที่มีการเพิ่มโอกาส 50% ที่จะหยุดการเพิ่มคือ


3

Japt , 22/25 ไบต์

ทางออกแรกสำหรับสเป็คดั้งเดิมซึ่งเคย*<space>เป็นโปรแกรมที่สองและอีกอันสำหรับสเป็คที่อัปเดตซึ่งเปลี่ยนไปโดยพลการ<space>*</space>ด้วย EoI สำหรับคำแนะนำ "แก้ไข" ที่แนะนำ

ทั้งสองโยนข้อผิดพลาดโอเวอร์โฟลว์เมื่อเข้าสู่วงวนไม่สิ้นสุดของโปรแกรมที่สาม แต่ในทางทฤษฎีมีหน่วยความจำเพียงพอ (ซึ่งเราอาจสมมติเพื่อจุดประสงค์ของการเขียน ) จะทำงานตลอดไป

Å?¢?ß:2pHÉ ö:`HÁM Wld

ลองใช้โปรแกรม 1
ลองใช้โปรแกรม 2
ลองใช้โปรแกรม 3

Å?UÎ>S?ß:2pHÉ ö:`HÁM Wld

ลองใช้โปรแกรม 1
ลองใช้โปรแกรม 2
ลองใช้โปรแกรม 3


ฉันคิดว่าโปรแกรมที่สองคือ "[SPACE] * [SPACE]" ไม่ใช่ "[SPACE] *" ดังนั้นโปรแกรมของคุณใช้งานไม่ได้
ศูนย์รวมแห่งความไม่รู้

@EmbodimentofIgnorance ในเวลานั้นผมโพสต์โปรแกรมที่สองในสเปคเป็น *<space>ไม่มีเวลาอัปเดตเลย
ขนดก

คุณสามารถแก้ไขได้ในสามไบต์ด้วยUÌ>Sแทนที่จะ¢เป็นไตรภาคีที่สอง
ศูนย์รวมแห่งความไม่รู้

@ ลงคะแนนเสียงโปรดมีมารยาทที่จะแสดงความคิดเห็น
ขนดก

2

JavaScript (ES7), 66 ไบต์

s=>s[1]?s<'!'?Math.random()*2**31|0:eval(`for(;;);`):'Hello World'

ลองออนไลน์! (สวัสดีชาวโลก)

ลองออนไลน์! (หมายเลขสุ่ม)

ลองออนไลน์! (วนไม่มีสิ้นสุด)


หากว่า x=(z=>x())&&x()ไม่ทำงานกับ -1byte จากรหัสวนรอบไม่สิ้นสุดสมมติว่าเบราว์เซอร์ไม่มีขนาดการโทรสูงสุดหรือไม่
Geza Kerecsenyi

@GezaKerecsenyi เราสามารถเรียกเราเอง (เช่นนี้ ) แต่ฉันไม่แน่ใจว่าจะเป็นที่ยอมรับ
Arnauld

นั่นยุติธรรม ฉันสงสัยว่ามีบางเบราว์เซอร์ที่คลุมเครือออกไปหรือไม่ (อย่างน้อยก็จนกว่า RAM จะหมด)
Geza Kerecsenyi

1
@Annauld ในทางทฤษฎีที่จะทำงานตลอดไปให้หน่วยความจำที่ไม่มีที่สิ้นสุดซึ่งเราอาจคิดว่าสำหรับการเล่นกอล์ฟรหัส
ขนดก

2

เยลลี่ , 23 21 ไบต์

OS¹Ḃ¿ịØ%HX’;““½,⁾ẇṭ»¤

ลองออนไลน์!

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

ตัวเลือกทั้งหมด: * * *+*

คำอธิบาย

O                     | Convert to codepoints
 S                    | Sum
  ¹Ḃ¿                 | Loop the identity function while odd 
     ị              ¤ | Index into the following as a nilad:
      Ø%              | - 2 ** 32
        H             | - Halved
         X            | - Random integer in the range 1..2**31
          ’           | - Decrease by 1 
           ;          | - Concatenated to:
            ““½,⁾ẇṭ»  |   - "", "Hello World"


2

Python 2 , 91 89 88 ไบต์

from random import*
def f(p):
 while'*'<p:p
 print['Hello World',getrandbits(31)][p<'!']

ลองออนไลน์!

2 ไบต์ขอบคุณJonathan Allan ; 1 ไบต์ขอบคุณไปShadowRanger


while'*'<pประหยัด 2
โจนาธานอัลลัน

getrandbits(31) บันทึกไบต์มากกว่า randrange(2**31)ประหยัดกว่าไบต์
ShadowRanger

ดี! ไม่ทราบเกี่ยวกับ getrandbits ...
Chas Brown

2

PowerShell, 60 , 56 ไบต์

switch($args){*{'Hello World'}' * '{random}*+*{for(){}}}

พริตตี้รุ่นใบ้เทคนิคเฉพาะการเล่นกอล์ฟที่นี่จะถนัดGet-ในGet-Randomใน

UPD ตัดลงเหลือ 56 ไบต์โดยลบเครื่องหมายคำขอบคุณด้วยveskah !







1

ถ่าน 30 ไบต์

W№θ*F⁼θ*≔Hello Worldθ∨θI‽X²¦³¹

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

W№θ*

*ทำซ้ำในขณะที่การป้อนข้อมูลเป็นครั้งแรกที่มี

F⁼θ*

หากอินพุตแรกเป็น*เพียง ...

≔Hello Worldθ

... จากนั้นแทนที่ด้วยHello Worldดังนั้นจึงทำให้ลูปสิ้นสุด *+*ไม่ได้ถูกแทนที่ทำให้เกิดการวนซ้ำไม่สิ้นสุด

∨θ

หากอินพุตแรกไม่ว่างให้ส่งเอาต์พุต

I‽X²¦³¹

แต่ถ้ามันว่างเปล่าเอาท์พุทจำนวนเต็มแบบสุ่มในช่วงที่ต้องการ


1

เพิ่ม ++ , 78 ไบต์

z:"Hello World"
`y
xR2147483647
x:?
a:"*"
b:" * "
c:"*+*"
Ix=a,Oz
Ix=b,O
Wx=c,

ลองออนไลน์!

คำอธิบาย

z:"Hello World"	; Set z = "Hello World"
`y		; Set y as the active variable
xR2147483647	; Set y to a random number between 0 and 2147483647
x:?		; Set x to the input
a:"*"		; Set a = "*"
b:" * "		; Set b = " * "
c:"*+*"		; Set c = "*+*"
Ix=a,		; If x == a then...
	Oz	;	...output z
Ix=b,		; If x == b then...
	O	;	...output y
Wx=c,		; While x == c then...
		;	...do nothing

1

Brachylog , 26 23 ไบต์

l₃∈&hṢ∧2^₃₁-₁ṙw∨Ḥ⊇ᶠ³⁶tw

ลองออนไลน์!

ทำให้โปรแกรมเป็นสตริงผ่านตัวแปรอินพุตและละเว้นตัวแปรเอาต์พุต หนักใช้ประโยชน์จากการรับประกันว่าใส่เป็นเพียงเคยเป็นหนึ่งในสามโปรแกรมที่ถูกต้อง: ความยาวใด ๆ สามการป้อนข้อมูลจะทำตัวเหมือนอย่างใดอย่างหนึ่ง" * "หรือ"*+*"ขึ้นอยู่กับว่าหรือไม่ตัวอักษรตัวแรกเป็นช่องว่างและป้อนข้อมูลอื่น ๆ ใด ๆ "*"ที่จะทำตัวเหมือน

l₃                         The input has length 3
  ∈                        and is an element of something,
   &h                      and the input's first element
     Ṣ                     is a space
  ∈                        (if not, try some other thing it's an element of),
      ∧2^₃₁-₁              so take 2,147,483,647 and
             ṙw            print a random number between 0 and it inclusive.
               ∨           If the input's length isn't 3,
                Ḥ⊇ᶠ³⁶tw    print the 36th subsequence of "Hello, World!".

อุ๊ปส์ "Hello World" ผิด - แก้ไขในขณะนี้
สตริงที่ไม่เกี่ยวข้อง

1

PHP , 51 ไบต์

for(;'*'<$l=$argn[1];);echo$l?rand():'Hello World';

ลองออนไลน์! (สวัสดีชาวโลก)

ลองออนไลน์! (หมายเลขสุ่ม)

ลองออนไลน์! (วนไม่มีสิ้นสุด)

นำตัวอักษรที่สองของการป้อนข้อมูลซึ่งสามารถ'', หรือ'*' '+'ในกรณี'+'ที่'*'<'+'จะเป็นจริงและลูปจะไม่มีที่สิ้นสุดอีกหลังจากลูป "Hello World" หรือแสดงตัวเลขสุ่ม rand()outputs ตัวเลขระหว่าง 0 และโดยอัตโนมัติgetrandmax()ซึ่งใช้ที่กำหนดไว้RAND_MAXในห้องสมุดมาตรฐาน C และโดยการเริ่มต้นคือ2147483647บนแพลตฟอร์มมากที่สุด / สภาพแวดล้อมรวมทั้ง TIO


1

05AB1E , 21 ไบต์

'*KgDi[ë<ižIL<Ω딟™‚ï

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

คำอธิบาย:

'*K           '# Remove all "*" from the (implicit) input
   g           # Get the length of what's remain (either 0, 1, or 2)
    D          # Duplicate this length
     i         # If the length is exactly 1:
      [        #  Start an infinite loop
     ë<i       # Else-if the length is 2:
        žI     #  Push builtin 2147483648
          L    #  Create a list in the range [1,2147483648]
           <   #  Decrease each by 1 to make the range [0,2147483647]
            Ω  #  Pop and push a random value from the list
               #  (after which the top of the stack is output implicitly as result)
     ë         # Else:
      ”Ÿ™‚ï    #  Push dictionary string "Hello World"
               #  (after which the top of the stack is output implicitly as result)

ดู 05AB1E นี้เคล็ดลับของฉัน (ส่วนวิธีการใช้พจนานุกรม? )จะเข้าใจว่าทำไมเป็น”Ÿ™‚ï"Hello World"


1

Pyth , 32 ไบต์

It/Jw\*#;?tlJOhC*4\ÿ"Hello World

ลองออนไลน์!

คำอธิบาย (Python-ish)

I                                   # if 
  /Jw\*                             #    (J:=input()).count("*"))
 t                                  #                             - 1:
       #;                           #     try: while True: pass;except: break;
         ?                          # if (ternary)
           lJ                       #    len(J):
             O                      #     randInt(0,                    )
               C                    #                int(     , 256)
                *4\ÿ                #                    4*"ÿ"
              h                     #                                + 1
                    "Hello World    # else: (implicitly) print "Hello World"

สิ่งนี้จะพิมพ์ตัวเลขระหว่าง 0 ถึง 2 ^ 32 ไม่ใช่ 0 และ 2 ^ 31 วิธีที่สั้นกว่าในการเขียนhC*4\ÿคือ^2 32แต่เพื่อให้การแก้ปัญหานั้นถูกต้องคุณควรใช้^2 31แทน ใช้zแทนการJwบันทึกอีก 1 ไบต์ และคำอธิบายของคุณข้ามบรรทัดด้วยขวาก่อนt lJ
randomdude999

นอกจากนี้คุณสามารถตรวจจับคำสั่ง "วนรอบตลอดไป" โดยตรวจสอบว่าอินพุตมี+อักขระใด ๆหรือไม่บันทึก 1 ไบต์เพราะคุณไม่จำเป็นต้องลดทอนลง
randomdude999

0

APL (Dyalog Unicode) , 39 ไบต์SBCS

คำนำหน้าไม่ระบุชื่อแลมบ์ดา

{'+'∊⍵:∇⍵⋄' '∊⍵:⌊2E31×?0'Hello World'}

ลองออนไลน์!

{ "DFN"; เป็นอาร์กิวเมนต์:

'+'∊⍵: ถ้า plus เป็นสมาชิกของอาร์กิวเมนต์:

  ∇⍵ หางเรียกคืนจากการโต้แย้ง

' '∊⍵ ถ้า space เป็นสมาชิกของอาร์กิวเมนต์:

  ?0 สุ่มลอย (0–1)

  2E31× ขนาดถึง (0–2³¹)

   ชั้น

'Hello World' มิฉะนั้นคืนสตริง


0

Commodore BASIC (VIC-20, C64, TheC64Mini เป็นต้น) - 170 โทเค็นไบต์พื้นฐาน

 0a%=32767:goS9:b$=leF(b$,len(b$)-1):ifb$="*"tH?"hello world
 1ifb$=" * "tH?int(rN(ti)*a%)
 2ifb$="*+*"tHfOi=.to1:i=.:nE
 3end
 9b$="":fOi=.to1:geta$:i=-(a$=cH(13)):b$=b$+a$:?a$;:nE:reT

ฉันคิดว่าจะทำสิ่งนี้ให้ถูกต้องมากขึ้นฉันจะต้องเจาะลึกเข้าไปในโลกแห่งภาษาแอสเซมบลี 6502 ที่แปลก แต่นี่เป็นร่างแรก

จุดแรกINPUTคำหลักใน Commodore BASIC จะละเว้นช่องว่างสีขาวดังนั้นรูทีนย่อยที่บรรทัด9เป็นวิธีที่รวดเร็วและสกปรกในการยอมรับรายการแป้นพิมพ์รวมถึงช่องว่าง

จุดที่สองเลขจำนวนเต็มพื้นฐานของ Commodore มีช่วงของการลงนามแบบ 16 บิตดังนั้นแหล่งที่มา -32768 ถึง +32767 ดังนั้นฉันได้เก็บเลขสุ่มที่สร้างขึ้นเป็น 0 - 32767


0

นกกระจิบ ,143 135 ไบต์

ฉันไม่ใช่นักกอล์ฟที่ดี ... RNG สร้างมูลค่าเท่าเดิมทุกครั้งเพราะเป็นเครื่องกำเนิดตัวเลขแบบหลอก

Fn.new{|a|
import"random"for Random
if(a=="*+*"){
while(1){}
}else System.write(a[0]==" "?Random.new(9).int((1<<31)-1):"Hello World")
}

ลองออนไลน์!


0

JavaScript, 63 ไบต์, ไม่มีการวนซ้ำแบบไม่มีที่สิ้นสุด

s=>s[1]?Math.random()*2**31|eval("while(s>'!');"):'Hello World'

เครือข่ายไม่ดีดังนั้นไม่มีลิงก์ TIO

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