ตัวนับไบต์ซ้ำ


19

งานของคุณคือการเขียนโปรแกรมที่ไม่ว่างเปล่า / ฟังก์ชั่นของการนับไบต์Lซึ่งเมื่อทำซ้ำMครั้งการตรวจสอบไม่ว่าจะเป็นในเชิงบวกให้จำนวนเต็มNเท่ากับL × M

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

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

คำตอบของคุณจะได้รับคะแนนตามความยาวของโปรแกรมเริ่มต้นของคุณL (เป็นไบต์) โดยที่ไบต์น้อยกว่าจะดีขึ้น

ตัวอย่าง

สมมติว่า (เริ่มต้น) ABCDEโปรแกรมของคุณ แล้ว:

  • ABCDE(1 ซ้ำ) ควรตรวจสอบถ้าใส่เท่ากับ5
  • ABCDEABCDE(2 ซ้ำ) ควรตรวจสอบถ้าใส่เท่ากับ10
  • ABCDEABCDEABCDE(3 ซ้ำ) ควรตรวจสอบถ้าใส่เท่ากับ15 ฯลฯ ...

คะแนนของโค้ดตัวอย่างนี้จะเป็น5เนื่องจากแหล่งเริ่มต้นมีความยาว 5 ไบต์


เพียงเพื่อชี้แจง: ซอร์สโค้ดของความยาวที่Lต่อกันหลังจากMเวลานั้นควรกลับมาว่ามันNมีค่าเท่ากับL*M ?

คำตอบ:


12

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

เอาต์พุตคือ0สำหรับการจับคู่ไม่ใช่ศูนย์สำหรับการจับคู่ที่ไม่ตรงกัน

ลองออนไลน์!

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

สิ่งนี้ทำให้ได้ประโยชน์จากรูปแบบเอาต์พุตที่เปิดเสรีมากเกินไป การทำซ้ำ Mครั้งเพียง decrements อินพุตMครั้งเพื่อผลที่จะเป็นศูนย์และถ้าหากใส่เป็นLMที่L = 1


โอ้พระเจ้าฉันไม่เห็นสิ่งนี้กำลังจะมาถึง ... ( inb4 ทุกคนย้ายไปที่ esolangs อื่น ๆ ... )
Mr. Xcoder

ฉันไม่ได้คำตอบที่ 0 ไบต์ในใจ แต่ใช่มั้ย, ควิน : P
Erik the Outgolfer

ความคิดแรกของฉัน พ่ายแพ้ 23 นาที :(
Khuldraeseth na'Barya

11

Haskell ขนาด 8 ไบต์

(-8+).id

ลองออนไลน์!

เช่นเดียวกับคำตอบอื่น ๆ มากมายมันจะคืนค่า 0 สำหรับความจริงและไม่ใช่ 0 สำหรับความเท็จโดยการลบความยาวของรหัสซ้ำ ๆ จากหมายเลขอินพุต


ผมก็เพื่อให้ใกล้กับ tinkering ที่จะได้รับไปนี้ ...
totallyhuman

8

เรติน่า21 21ไบต์

\d+
*
^$
_
^_{20}

_

ลองออนไลน์! เพียงทำซ้ำส่วนในหน้าต่างรหัสเพื่อดูว่ามันจัดการกับทวีคูณ

ให้0สำหรับจำนวนเต็มบวกและจำนวนเต็มบวกที่ถูกต้องสำหรับทุกอย่างอื่น

คำอธิบาย

ลองดูที่โปรแกรมเดี่ยวก่อน:

\d+
*

สิ่งนี้จะแปลงตัวเลขทศนิยมให้เป็นเอกนารี (ใช้_เป็นตัวเลขเอก)

^$
_

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

^_{20}

ตอนนี้เรากำจัดขีดล่าง 20 อันแรกแล้ว Iff อินพุตคือ20ผลลัพธ์นี้เป็นสตริงว่าง

_

และในที่สุดเรานับจำนวนของขีดในผลซึ่งเป็นศูนย์ IFF 20การป้อนข้อมูลที่เป็น


ตอนนี้จะเกิดอะไรขึ้นเมื่อเราทำซ้ำซอร์สโค้ด เนื่องจากเราไม่ได้แทรก linefeed เมื่อเข้าร่วมโปรแกรมบรรทัดแรกจะไปที่ท้ายบรรทัดสุดท้ายเราจะได้รับสิ่งนี้เมื่อเพิ่มโปรแกรมเป็นสองเท่า:

\d+
*
^$
_
^_{20}

_\d+
*
^$
_
^_{20}

_

ตอนนี้แทนที่จะนับขีดล่างเราจบด้วยขั้นตอนต่อไปนี้:

_\d+
*

ขั้นตอนนี้ไม่ทำอะไรเลยเนื่องจากไม่มีตัวเลขในสตริงการทำงานที่จุดนี้ดังนั้น regex จึงไม่สามารถจับคู่ได้

^$
_

ตอนนี้ขั้นตอนนี้เกี่ยวข้องกัน หากอินพุตมีค่าน้อยกว่า 20 แสดงว่าสตริงนั้นถูกคัดลอกโดยซอร์สโค้ดก่อนหน้า ในกรณีนี้เราเปลี่ยนเป็นเครื่องหมายขีดล่างเดียวซึ่งเรารู้ว่าไม่สามารถเปลี่ยนเป็นสตริงว่างเปล่าอีกครั้งโดยโปรแกรมของเรา วิธีนี้เรารับประกันว่าจะยอมรับเฉพาะผลคูณM ที่มีอยู่เท่านั้น (และไม่รวมทวีคูณทั้งหมดจนถึงM th)

^_{20}

เราลบขีดล่าง 20 อันแรกออกอีกครั้ง ดังนั้นการทำซ้ำMของซอร์สโค้ดจะลบขีดล่าง20Mออกจากสตริงหากเป็นไปได้

_

และเมื่อเราไปถึงจุดสิ้นสุดของโปรแกรมเรายังคงนับขีดล่างเพื่อให้อินพุตที่ถูกต้องให้เป็นศูนย์


6

x86 ส่วนของรหัสเครื่อง 32 บิต, 1 ไบต์

48                      dec    eax

อินพุตใน EAX, เอาต์พุตใน EAX: 0 สำหรับ true, ไม่ใช่ศูนย์สำหรับ false (ปล่อยให้แฟล็ก ZF ตั้งค่าเป็น true, ไม่ตั้งค่าเป็น false ดังนั้นคุณสามารถทำได้je was_equal) ในฐานะ "โบนัส" คุณไม่ต้องกังวลเกี่ยวกับการห่อ x86 แบบ 32 บิตสามารถระบุหน่วยความจำ 4GiB ได้เท่านั้นดังนั้นคุณจึงไม่สามารถทำให้ M มีขนาดใหญ่พอที่จะล้อมรอบและค้นหา1 == 2**32 + 1หรือบางสิ่งบางอย่าง

ในการทำให้ฟังก์ชั่น callable ต่อท้าย0xC3 retคำสั่งหลังจากทำซ้ำ0x48M (ไม่นับรวมในการนับเพราะหลายภาษาจำเป็นต้องทำซ้ำเพียงฟังก์ชั่นร่างกายหรือการแสดงออกเพื่อให้สามารถแข่งขัน)

Calleable จาก GNU C พร้อมกับแอททริบิวต์ฟังก์ชั่น x86 __attribute__((regparm(1))) int checkeqM(int eax); ของ GNU Cregparmเช่น-mregparmใช้ EAX เพื่อผ่าน ARG จำนวนเต็มแรก

ตัวอย่างเช่นโปรแกรมที่สมบูรณ์นี้ใช้เวลา 2 args และ JITs M สำเนาของคำสั่ง + a retลงในบัฟเฟอร์แล้วเรียกมันว่าเป็นฟังก์ชั่น (ต้องการฮีปที่ปฏิบัติการได้คอมไพล์ด้วยgcc -O3 -m32 -z execstack)

/******* Test harness: JIT into a buffer and call it ******/
// compile with gcc -O3 -no-pie -fno-pie -m32 -z execstack
// or use mprotect or VirtualProtect instead of -z execstack
// or mmap(PROT_EXEC|PROT_READ|PROT_WRITE) instead of malloc

// declare a function pointer to a regparm=1 function
// The special calling convention applies to this function-pointer only
// So main() can still get its args properly, and call libc functions.
// unlike if you compile with -mregparm=1
typedef int __attribute__((regparm(1))) (*eax_arg_funcptr_t)(unsigned arg);

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    if (argc<3) return -1;
    unsigned N=strtoul(argv[1], NULL, 0), M = strtoul(argv[2], NULL, 0);

    char *execbuf = malloc(M+1);   // no error checking
    memset(execbuf, 0x48, M);     // times M  dec eax
    execbuf[M] = 0xC3;            // ret
    // Tell GCC we're about to run this data as code.  x86 has coherent I-cache,
    // but this also stops optimization from removing these as dead stores.
    __builtin___clear_cache (execbuf, execbuf+M+1);
     //   asm("" ::: "memory");  // compiler memory barrier works too.

    eax_arg_funcptr_t execfunc = (eax_arg_funcptr_t) execbuf;
    int res = execfunc(N);
    printf("%u == %u  =>  %d\n", N,M, res );
    return !!res;   // exit status only takes the low 8 bits of return value
}

executables ที่ไม่ใช่ PIEถูกโหลดต่ำกว่าในหน่วยความจำเสมือน สามารถทำ malloc ต่อเนื่องที่ใหญ่กว่าได้

$ gcc -g -O3 -m32 -no-pie -fno-pie -fno-plt -z execstack coderepeat-i386.c
$ time ./a.out 2747483748 2747483748   # 2^31 + 600000100 is close to as big as we can allocate successfully
2747483748 == 2747483748  =>  0

real    0m1.590s     # on a 3.9GHz Skylake with DDR4-2666
user    0m0.831s
sys     0m0.755s

$ echo $?
0

 # perf stat output:
       670,816      page-faults               #    0.418 M/sec                  
 6,235,285,157      cycles                    #    3.885 GHz                    
 5,370,142,756      instructions              #    0.86  insn per cycle         

โปรดทราบว่าGNU C ไม่สนับสนุนวัตถุขนาดใหญ่กว่าptrdiff_t(ลงนาม 32 บิต) แต่mallocและmemsetทำยังคงทำงานเพื่อโครงการนี้ประสบความสำเร็จ

ส่วนของรหัสเครื่อง ARM Thumb, 2 ไบต์

 3802            subs    r0, #2

ARG แรกในr0และกลับมาในr0เป็นมาตรฐานการประชุม ARM เรียก นอกจากนี้ยังตั้งค่าสถานะ ( sคำต่อท้าย) สนุกกับความเป็นจริง; ไม่ใช่รุ่น -flag การตั้งค่าของsubเป็นคำแนะนำกว้าง 32 บิต

คำสั่งการคืนสินค้าที่คุณต้องการผนวกคือ bx lrการเรียนการสอนทางกลับกันคุณต้องผนวกเป็น

ส่วนของรหัสเครื่อง AArch64 ขนาด 4 ไบต์

d1001000        sub     x0, x0, #0x4

ใช้งานได้สำหรับจำนวนเต็ม 64 บิต อินพุต / เอาต์พุตในx0ตามระเบียบการโทรมาตรฐาน int64_t foo(uint64_t);

AArch64 ยังไม่มีโหมด Thumb (ยัง) ดังนั้น 1 คำสั่งที่ดีที่สุดที่เราสามารถทำได้


หมายเหตุสำหรับคนอื่น ๆ ที่ผ่านมานี้ได้เรียกร้องให้มีความจำเป็นเพียงเพราะคุณกำลังดำเนินการหน่วยความจำที่คุณได้จาก__builtin___clear_cache mallocหากคุณได้รับหน่วยความจำmmapแทนการเพิ่มประสิทธิภาพจะไม่เกิดขึ้น
Joseph Sible-Reinstate Monica

4

V , 16 (หรือ 1) ไบต์

คำตอบที่น่าเบื่อ:

<C-x>

หนึ่งไบต์

คำตอบที่น่าเบื่อน้อยกว่า:

uÓ^$/0
16Ø^a$

ลองออนไลน์!

hexdump:

00000000: 75d3 5e24 2f30 0a31 3601 d85e 1261 240a  u.^$/0.16..^.a$.

จริง ๆ แล้วฉันเขียนสิ่งนี้ประมาณ 5 นาทีหลังจากความท้าทายออกมา ผมใช้เวลา 30 นาทีในการแก้ไขนี้กองที่น่ากลัวของรหัสปาเก็ตตี้ที่ผมเรียกภาษา





2

Brain-Flakขนาด 24 ไบต์

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

ลองออนไลน์!

ผลตอบแทน0เท่ากันและอย่างอื่นไม่เท่ากัน

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

({} #pop the top of the stack
  [(((()()()){}){}){}] #subtract 24
) #push the result.

รหัสทำงานนี้nครั้งจะหักn * 24จากการป้อนข้อมูลให้ 0 n*24=



2

TI-Basic (83 series), 4 ไบต์

:Ans-4

จะเข้าในAns: ยกตัวอย่างเช่นคุณอาจพิมพ์ทำงานนี้ด้วยการป้อนข้อมูลของ17:prgmCODEGOLF 17พิมพ์ (และส่งคืนAns) ค่า0ถ้าอินพุตเท่ากับL × Mและค่าที่ไม่ใช่ศูนย์

โปรดทราบว่า:นี่เป็นส่วนหนึ่งของรหัสดังนั้นหากคุณป้อนสิ่งนี้ลงในโปรแกรมแก้ไขโปรแกรมคุณควรเห็น

PROGRAM:CODEGOLF
::Ans-4

หากคุณป้อนครั้งเดียวและ

PROGRAM:CODEGOLF
::Ans-4:Ans-4:An
s-4

หากคุณป้อนสามครั้ง



1

Befunge-98 , 15 ไบต์

]#<@.-&+
>fv
v+

ลองออนไลน์!

ลองสองเท่า!

ใช้ 0 เพื่อความเท่าเทียมและอย่างอื่นที่ไม่เท่ากัน

คำอธิบาย:

รหัสนี้ซ้ำหลายครั้งจะมีลักษณะดังนี้:

]#<@.-&+
>fv
v+]#<@.-&+
>fv
v+]#<@.-&+
>fv
 .
 .
 .
v+]#<@.-&+
>fv
v+
  1. ]เลี้ยวขวา. ส่ง IP ลง

  2. >ย้ายไปทางทิศตะวันออก ส่ง IP ที่ถูกต้อง

  3. f ผลัก 16

  4. vย้ายไปทางใต้ ส่ง IP ลง หากนี่เป็นครั้งสุดท้ายไปที่ขั้นตอนที่ 8

  5. ]เลี้ยวขวา. ส่ง IP ที่เหลือ

  6. +เพิ่ม. เพิ่ม 16 เข้ากับด้านบนของสแต็ก

  7. vย้ายไปทางใต้ ส่ง IP ลง ไปที่ขั้นตอนที่ 2

  8. <ย้ายไปทางตะวันตก ส่ง IP ทางซ้าย

  9. #กระโดด กระโดดข้าม]และล้อมรอบจนจบ

  10. +เพิ่ม. เพิ่ม 16 เข้ากับด้านบนของสแต็ก

  11. &อินพุต กดตัวเลขจากผู้ใช้

  12. -ลบออก รับความแตกต่างของผลรวมที่เรากำลังทำและอินพุท

  13. .พิมพ์. พิมพ์ผลลัพธ์

  14. @ ปลาย


1

Pure Bash , 15

อินพุตที่กำหนดเป็นพารามิเตอร์บรรทัดคำสั่ง เอาต์พุตเป็นรหัสออกจากเชลล์ - 1สำหรับ TRUE และ0สำหรับ FALSE

(((A + = 15) - $ 1))


1

ถ่าน 13 ไบต์

PI⁼Iθ×¹³L⊞Oυω

ลองออนไลน์! ขึ้นอยู่กับคำตอบของฉันฉันแหล่งที่มาสองครั้งคุณสองเท่าของการส่งออก! คำอธิบาย:

         ⊞Oυω   Push empty string to predefined empty list
        L       Take the length
     ×¹³        Multiply by 13
  ⁼Iθ           Compare to the input
 I              Cast to string
P               Print without moving the cursor

จัดการกับเอาต์พุต1สำหรับความจริงและ0เป็นเท็จ ซ้ำต่อมาเปรียบเทียบกับการป้อนข้อมูล13, 26, 39, 52ฯลฯ แต่ทุกครั้งคำตอบคือพิมพ์ทับเท่านั้นดังนั้นคำตอบสุดท้ายจะเห็น


1

JavaScript ES6, 32 ไบต์

((f=k=>n=>n>0?n==k:f(k+32))(32))

ถ้าจริงเป็น 0 และเท็จเป็นคนอื่น 31 ไบต์

(f=k=>n=>n>0?n-k:_=>f(k+_))(31)

console.log([
    ((f=k=>n=>n>0?n==k:f(k+32))(32)) (31),
    ((f=k=>n=>n>0?n==k:f(k+32))(32)) (32),
    ((f=k=>n=>n>0?n==k:f(k+32))(32)) (33),
    ((f=k=>n=>n>0?n==k:f(k+32))(32)) (64),
    ((f=k=>n=>n>0?n==k:f(k+32))(32))((f=k=>n=>n>0?n==k:f(k+32))(32)) (32),
    ((f=k=>n=>n>0?n==k:f(k+32))(32))((f=k=>n=>n>0?n==k:f(k+32))(32)) (63),
    ((f=k=>n=>n>0?n==k:f(k+32))(32))((f=k=>n=>n>0?n==k:f(k+32))(32)) (64),
    ((f=k=>n=>n>0?n==k:f(k+32))(32))((f=k=>n=>n>0?n==k:f(k+32))(32))((f=k=>n=>n>0?n==k:f(k+32))(32)) (96)
]);


1

MIPS, 4 ไบต์

ใช้$a0เป็นอาร์กิวเมนต์และส่งคืนค่า

0x2084fffc    addi $a0, $a0, -4

MIPS 8 ไบต์ (โดยใช้หลักการเรียกประชุม MIPS)

0x2084fff8    addi $a0, $a0, -8
0x00041021    move $v0, $a0

x86, 5 ไบต์

นี่เป็นคำตอบ x86 แรกของฉันดังนั้นยินดีรับข้อเสนอแนะ ใช้การประชุม _fastcall ด้วย ecx เป็นอาร์กิวเมนต์แรก

83 e9 05                sub    $0x5,%ecx
89 c8                   mov    %ecx,%eax

Peter Cordesมีทางออก 1 ไบต์ในความคิดเห็น


ความเห็นของ Brainfuck : ส่วนที่ยากคือการให้ brainfuck คืนค่าหนึ่งเดียว ไม่อย่างนั้นจะเป็นเรื่องง่าย

- >,[-<->] < .

1
ส่วนรหัส x86 ของคุณจะมีขนาดเท่ากันสำหรับจำนวนเต็ม 32 บิตไม่จำเป็นต้อง จำกัด ที่ 8 แต่ถ้าคุณใช้แบบแผนการโทรที่กำหนดเอง (arg ใน AL, retval ที่อื่น) คุณสามารถใช้แบบ 2 ไบต์พิเศษ AL การเข้ารหัส/sub $4, %al mov %al, %dlหรือยังคงกลับมาใน AL / EAX จากนั้นคุณจะได้รับโซลูชันของ Dennis ด้วยdec %eax(1 ไบต์ในโหมด 32 บิต) และใช่การประชุมการโทรที่กำหนดเองนั้นดีสำหรับ asm มันเป็น asm ไม่ใช่แค่ "asm ที่โทรจาก C ได้ง่าย"; โค้ดจริงที่เขียนด้วย asm ใช้ระเบียบการโทรที่กำหนดเองซึ่งจะช่วยได้
Peter Cordes

1
รูปแบบการเรียกปกติของ ARM นั้นเป็นที่ถกเถียงกันเป็นครั้งแรกr0ซึ่งก็คือ retval ดังนั้น Thumb sub r0, #2คือ 2 ไบต์
Peter Cordes

1
โปรดทราบว่าฟังก์ชันเหล่านี้ไม่ใช่ทั้งฟังก์ชัน : พวกเขาต้องการ a retที่ท้ายบล็อกซ้ำก่อนที่คุณจะสามารถเรียกมันได้ โดยปกติฉันรวมretจำนวนไบต์เป็นคำตอบ asm x86 ของฉัน แต่ผมคิดว่าการดัดกฎที่นี่เพียงแค่การทำงานของร่างกายทำให้รู้สึกมิฉะนั้นหลายภาษาไม่สามารถแข่งขันได้ทั้งหมด
Peter Cordes

1
(nvm นี่จะไม่ปล่อยให้ retval เป็น% al) xchg %eax, %ecx/ sub $4, %al/ xchg %eax, %ecxคือ 4 ไบต์และปฏิบัติตามการประชุม _fastcall การใช้การเข้ารหัสแบบสั้น AL, imm8 และ xchg-with-eax มักเป็นประโยชน์สำหรับการเขียนโค้ดกอล์ฟ
Peter Cordes

1
ฉันมักจะใช้objdump -drwC -Mintelเพื่อรับเลขฐานสิบหกของไบต์รหัสเครื่อง add r32, imm8มีขนาด 3 ไบต์: opcode + ModR / M + imm8 คำแนะนำทั้งหมดที่สามารถใช้ imm32 มี opcode ทางเลือกที่ใช้ imm8 แบบขยายสัญญาณ ดูตัวอย่างfelixcloutier.com/x86/ADD.html คำแนะนำ ALU "คลาสสิค" ทั้งหมด (แต่ไม่ใช่ MOV) ที่ย้อนกลับไปในปี 8086 มีการเข้ารหัสเหล่านั้นรวมถึง AL / AX / EAX พิเศษที่ไม่มี modr / m เพียง op + imm8 / 16/32 คำตอบนี้มีตัวอย่าง
Peter Cordes

1

ระดับ: 23 ไบต์

+23;[ans,i]((N==ans)+1)

ถ้า N = L * M นิพจน์จะคืนค่า0+i(เช่นจำนวนจินตภาพล้วนๆ) มิฉะนั้นนิพจน์จะส่งผลให้เกิดจำนวนเชิงซ้อนที่มีองค์ประกอบจริง

สำหรับผลลัพธ์ที่ดีกว่าเล็กน้อยที่ค่าใช้จ่ายของไบต์พิเศษ:

+24;[ans,-1]((N==ans)+1)

ถ้า N = L * M นิพจน์จะส่งคืน -1มิฉะนั้นเป็นจำนวนบวก

การสาธิต:

N=48;
+24;[ans,-1]((N==ans)+1)                                                 #>> 24 
+24;[ans,-1]((N==ans)+1)+24;[ans,-1]((N==ans)+1)                         #>> -1
+24;[ans,-1]((N==ans)+1)+24;[ans,-1]((N==ans)+1)+24;[ans,-1]((N==ans)+1) #>> 23

ป.ล. คุณสามารถได้รับผลลัพธ์เดียวกันด้วย+24;if N==ans;-1;end;ansแต่ bytecount เหมือนกัน


1

Lua, 56 46 ไบต์

a=(a or io.read())-46io.write(a<=0 and a or"")

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

อยู่คนเดียว: ลองออนไลน์!

ทำซ้ำหลายครั้ง: ลองออนไลน์!

คำอธิบาย

a=(a or io.read())-46

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

io.write(a<=0 and a or"")

นี่จะพิมพ์aถ้ามันน้อยกว่า (เพื่อดูแลกรณีที่อินพุตมีขนาดใหญ่กว่าความยาวทั้งหมด) หรือเท่ากับศูนย์และสตริงที่ว่างเปล่าเป็นอย่างอื่น

-10 ไบต์สำหรับการจดจำว่า Lua ทำการแปลงระหว่างตัวเลขและสตริงโดยอัตโนมัติ อ๊ะ


0

JavaScript (ES6), 47 ไบต์

นี่คือการใช้เทคนิคเดียวกับเบอนัวต์ Esnardในคำตอบนี้ (จากฉันสองเท่าของแหล่งที่มาคุณเพิ่มผลลัพธ์เป็นสองเท่า! )

พิมพ์0ถ้าn = 47 * Mหรือค่าที่ไม่ใช่ศูนย์

n=prompt(setTimeout`alert(n)`)-47/*
n-=47//*///

การสาธิตสำหรับ M = 1

n=prompt(setTimeout`alert(n)`)-47/*
n-=47//*///

การสาธิตสำหรับ M = 2

n=prompt(setTimeout`alert(n)`)-47/*
n-=47//*///n=prompt(setTimeout`alert(n)`)-47/*
n-=47//*///


0

Brain-Flakขนาด 24 ไบต์

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

ลองออนไลน์!

เพียงแค่ลบ 24 จากอินพุต เอาต์พุต0สำหรับ true และทุกสิ่งเป็นเท็จ

Brain-Flak , 68 ไบต์

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

ลองออนไลน์!

อันนี้มีความซับซ้อนมากกว่ามันเอาท์พุท1เป็นจริงและ0เป็นเท็จ

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