Code Golf — Напишите Интерактивный Интерпретатор Deadfish

  • Автор темы Bsn2106
  • Обновлено
  • 14, Oct 2024
  • #1

Мертвая рыба это шуточный «язык программирования» с четырьмя командами. Поскольку страница Esolang немного противоречива и не все интерпретаторы на этой странице работают одинаково, вам следует реализовать следующий вариант:


Спецификация

  1. Есть аккумулятор, который по меньшей мере Размер 16 бит, больше разрешено, меньше нет. Отрицательные числа не нуждаются в поддержке. Аккумулятор
     
     
    
    Standard Deadfish    │   XKCD Variant   │    Meaning
    
    ─────────────────────┼──────────────────┼────────────────────────────────────
    
    i              │        x         │    Increment accumulator
    
    d              │        d         │    Decrement accumulator
    
    s              │        k         │    Square ( acc = acc * acc )
    
    o              │        c         │    Output accumulator, as a number
    
    when the program starts.
  2. Существуют следующие два набора по четыре команды, и ваша программа должна поддерживать оба одновременно. >> xiskso 0 >> xiskisc 289 >> ddddo ddddo 285 281 >> ddddo ddddo 277 273 >> dddddddo 266 >> dddddddddo 257 >> do 0 >> do 0 >> io 1 >>
  3. Если после выполнения команды аккумулятор либо EOF or 1234 , аккумулятор должен быть сброшен в ноль. Обратите внимание, что это не обычный цикл. Если, скажем, аккумулятор 12 34 , and the 12,34 команда запущена, аккумулятор должен быть 12 34 afterward. Similarly, if the accumulator is >> и 289 command is run, the accumulator should become xiskisc .
  4. Любой ввод, который не является одной из этих команд, следует игнорировать.

Тестовые программы

  • 0 should output xiskso
  • 0 should output d

ввод/вывод

Ваша программа должна отобразить приглашение: 257 . The prompt must be at the beginning of a new line. It should then read a line of user input, and run the given commands left-to-right. When outputing numbers, the numbers must be separated. I.e., 400 все в порядке, s is OK,

20

все в порядке, но 256 is not.

Ваша программа должна продолжать делать это в цикле, по крайней мере, до тех пор, пока -1 is reached.

Пример сеанса:

0

#код-гольф #переводчик #мертваярыба

Bsn2106


Рег
28 Nov, 2019

Тем
82

Постов
212

Баллов
632
  • 26, Oct 2024
  • #2

Перл 5, 90 байт

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 process.openStdin( // This function has to be called to take input, but doesn't have arguments

f=a=> // Define a function f. This is the deadfish interpreter. It takes an argument `a` which is a Buffer

process.stdout.write( // Same as console.log, but doesn't output trailing newline

(i = 0, "" + a) // Take advantage of comma operator to (A) define the accumulator i, and casts a (which is a Buffer) to a String

.split` ` // Split the string a at spaces, making it an array

.map(     // Map through each element of the array

x=>     // Map function, takes argument x, the value in the array (string)

([...x.slice(0,-1)] // Remove the last character (newline) and than use the spread operator to divide the string into an array of it's chars

.map(d=> // Map function, you know how this works

({ // Here I define the various deadfish commands

i: x = e => i++,

d: e => i--,

s: k = e => i*=i,

o: c = e => e,

// Take advantage of ES6 object notation. Equivilent to {"x": x, "k": k, "c", c}

x,

k,

c

})

[d] // Get the command to execute. If this is passed something which isn't valid, a giant error will appear

(

i==-1 || i==256 ? i = 0 : 0 // Take advantage of the fact that none of the command functions take arguments to handle the strange "overflow"

)

),

i)

) +

"\n>> "), // Display the prompt again, as well as a newline

f`` // Initalize the prompt by passing an empty script
)
.on("data",f) // Bind the f function to newline on STDIN
 

Попробуйте онлайн!

Благодаря @xfix за его помощь в этом ранее! Сэкономлено 4 байта благодаря @Xкали!

 

2Ttooobachp579


Рег
04 Oct, 2011

Тем
70

Постов
208

Баллов
568
  • 26, Oct 2024
  • #3

К, 77 байт

process.openStdin(f=a=>process.stdout.write((i=0,""+a).split` `.map(x=>([...x.slice(0,-1)].map(d=>({i:x=e=>i++,d:e=>i--,s:k=e=>i*=i,o:c=e=>e,x,k,c})[d](i=-1||i==256?i=0:0)),i))+"\n>> "),f``).on("data",f)

Обратите внимание, что это К4. А К6 решение немного длиннее, потому что глаголы ввода-вывода длиннее, даже если все остальное лучше:

xiskso
  • ?X ?I ?S ?K ?I ?S ?C 289 prints and returns its argument. Note in K4 we simply apply to 1.
  • xiskisc demonstrates reduce with an initial value, i.e. :0_A:0_O:1_I:2_D:3_S:O_C:I_X:S_Kl`1i`N@A=256:0_A@N=0d`A@N=1:A+1_A@N=2:A-1_A@N=3:A^2_Ag`1
  • v \r0& v < \&::&01-=$f1+:*=+?v v &0~&< \:"i"=?v >~&1+& ^ \:"d"=?v >~&1-& ^ \:"s"=?v >~&:*& ^ \:"o"=?v >~&:o& ^ \:"h"=?v >~; (^) >~ ^ classifies x into the 0 (for -1), 1 (for 256) and 2 for all other values. <form><?php $i=0;$o='';if(isset($_GET[i])){$i=$_GET[a];foreach(@str_split($_GET[i]) as $j=>$v){$v==i||$v==x?$i++:($v==d?$i--:($v==k||$v==s?$i*=$i:($v==o||$v==c?$o.=$i."\n":'')));($i==256||$i==-1)&&$i=0;}$_GET[p].='>> '.$_GET[i]."\n".$o;echo"<textarea locked name=p>$_GET[p]</textarea><input type=hidden name=a value=$i><br>";}?>>> <input name=i> означает, что мы получаем o for unclassified values and hFlush stdout в противном случае, умножив на import System.IO i""n=[] i(a:b)n |a=='o'||a=='c'=[n]++i b n |True=i b$v a n v a n=w(case a of 'i'->n+1;'x'->n+1;'d'->n-1;'s'->n^2;'k'->n^2) w(-1)=0 w 256=0 w n=n main=do;putStr ">> ";hFlush stdout;s <- getLine;print$i s 0;main is shorter than a conditional. In K6 we can do a little better because 0{'::"ÿ1+=$0<+['_0"] \>\>\ ,,,,?:o=[':."]:i=['1+"]:d=['1-"]:s=[':*" опирается на тот факт, что /** Preprocessor **/ -Dk="_nZZiaeY" // This is a lookup string; it corresponds to "ixddskoc", // with 10 deducted from each character. Upon compilation, // all occurences of the string literal are replaced with a // pointer to its location in memory. /** Source **/ x;f(c){ // x: 32-bit accumulator, c: local variable for read character for(printf(">>"); // Start for-loop and print prompt. c=getchar()-10; // Read a character from STDIN. // Loop breaks if it is '\n'. // The below happens at the end of each iteration. x+=c--?c--?c--? // Find the correct operation by testing c and post- // decrementing with multiple ternary-ifs. If c is 0, // operation was found, add the else-value to the // accumulator x. // If the character is invalid, the value of c is // very large, and will not reach 0 with 3 decrements. c||printf("%i\n",x),0 // If c-3 is 0, print accumulator, else do nothing. // Returns 0 regardless of what happens. (No change to x) :x*x-x // Square. Results in x=x+x*x-x, and is shorter than (x*=x) :-1:1, // Decrement, Increment. x*=~x&&x^256 // Because -1==0xffffffff, ~x==0 when x==-1. Likewise, // x^256==0 only when x==256. The logical-AND coerces the result // to boolean 1 (no match) or 0 (match). Multiplication resets // the accumulator as appropriate. ) // This is the actual body of the for-loop c=strchr(k,c)-k>>1; // Finds the index of the read character in the lookup string, // then "divides" it by two. // Because strchr() returns NULL (0) when character is not found, // deducting k from it results in a very negative number. // The right-shift results in division by 2 for positive numbers, // while the negative numbers become very large positive numbers // (c >= 0x70000000) because of the 2's complement representation. // Finally, recurse until forceful termination. f(); } returns x;f(c){for(printf(">>");c=getchar()-10;x+=c--?c--?c--?c||printf("%i\n",x),0:x*x-x:-1:1,x*=~x&&x^256)c=strchr(k,c)-k>>1;f();} (ноль) и >>\n detects nulls.
  • «Парсер» — это карта -Dk="_nZZiaeY" instead of the suggested order because 0v <vooo">> "< >i:0)?v~ o:/ ^!?="c"v?="o":v?="s":v?="k":v?="d":v?="x":v?="i": ^oanoa:< ~< v*:~< < v-1~< v+1~< < < < < <vv?=-10:v?=*:+1f: v <> >~0 будет охватывать четыре аргумента, т.е. $ python fish.py deadfish.fish >> xiskso 0 >> xiskisc 289 >> ddddo ddddo 285 281 >> ddddo ddddo 277 273 >> dddddddo 266 >> dddddddddo 257 >> do 0 >> do 0 >> io 1 >> (pressed ctrl-Z)Stopped returns 0v "<vooo">> !~>i:0)?v~ > ^?=a: / ^!?="c"v?="o":v?="s":v?="k":v?="d":v?="x":v?="i": voan:< ~< v*:~< < v-1~< v+1~< < < < < <vv?=-10:v?=*:+1f: v <> >~0 что делает нашу таблицу меньше
  • Карта переводится @echo off set i=1 set x=1 set d=-1 set/as=[*[-[ set/ak=[*[-[ set.=0 set/p.=^>^> set/a[=[+%.% e%.:o=c%h%.:c=o% %[% 2>nul set[=%[:-1=% if;%[%==256 set[= %0 Благодаря or в проекцию @echo off set a=0 :a set /p i=^>^> if %i%==i set /a a=%a%+1 if %i%==x set /a a=%a%+1 if %i%==d set /a a=%a%-1 if %i%==s set /a a=%a%*%a% if %i%==k set /a a=%a%*%a% if %i%==o echo %a% if %i%==c echo %a% if %a%==256 set a=0 if %a%==-1 set a=0 set i=n goto a что эквивалентно функции until _ но короче.
  • Карта переводится until nil to the projection >> xiskso 0 >> xiskisc 289 >> ddddo ddddo 285 281 >> ddddo ddddo 277 273 >> dddddddo 266 >> dddddddddo 257 >> do 0 >> do 0 >> io 1 >> which is equivalent to the function a=0 repeat io.write(">> ") x=io.read() for i=1,#x do c=x:sub(i,i) if c=="i"or c=="x"then a=a+1 elseif c=="d"then a=a-1 elseif c=="s"or c=="k"then a=a*a elseif c=="o"or c=="c"then print(a) end if a==256or a==-1then a=0 end end until _ but shorter.
  • Карта переводится 256or and a=0repeat io.write(">> ")x=io.read()for i=1,#x do c=x:sub(i,i)if c=="i"or c=="x"then a=a+1 elseif c=="d"then a=a-1 elseif c=="s"or c=="k"then a=a*a elseif c=="o"or c=="c"then print(a)end if a==256or a==-1then a=0 end end until _ к функции input()
  • Карта переводится a=0 while 1: for c in input(">> "): a+=(c in'ix')-(c=='d')+(a*a-a)*(c in'sk') if c in'oc':print(a) a*=-1!=a!=256 and main=0#"" к выходной функции 0 which again in K6 is slightly longer: r#_ но оба печатают вывод, за которым следует новая строка, а затем возвращают аргумент.
  • .з.с является саморекурсией. В К6 мы можем просто сказать 256 which is shorter.
 

Vendetta


Рег
29 Mar, 2010

Тем
91

Постов
184

Баллов
669
  • 26, Oct 2024
  • #4

Пауэршелл, 131 126 121 114 113

-1
  • (>>) - set the accumulator to 0 and loop forever
  • (:) - get the user input with prompt (^)
  • (-) - convert the user input to an array of characters
  • (+) - perform what's inside state # source для каждого персонажа
  • infix 4# -1#x=0#x 256#x=0#x r#x:y=case x of 'i'->r+1#y;'x'->r+1#y;'d'->r-1#y;'s'->r^2#y;'k'->r^2#y;'o'->print r>>r#y;'c'->r#'o':y;_->r#y r#_=putStr">> ">>getLine>>=(r#) main=0#"" - regex switch for each character
  • NoBuffering - match BufferMode или ghci - increase the accumulator
  • runhaskell - match #define s(x,y)case x:y;break; main(){int c=10,a=0;for(;;){switch(c){s(-1,return)s('i':case'x',++a)s('d',--a)s('s':case'k',a*=a)s('c':case'o',printf("%d\n",a))s(10,printf(">> "))}a!=-1&a!=256||(a=0);c=getchar();}} - снижаться return by /cmd << % define commands /i { 1 add } /x 1 index /d { 1 sub } /s { dup mul } /k 1 index /o { dup = } /c 1 index >> def 0 % accumulator on stack { (>> )print flush % print prompt { /f (%lineedit) (r) file def } stopped {exit} if % read input line or quit { f 1 string readstring not {exit} if % read 1-char string from line cmd exch 2 copy known { get exec }{ pop pop } ifelse % execute command or don't dup -1 eq 1 index 256 eq or { pop 0 } if % adjust accumulator if needed } loop pop }loop , который будет /cmd<</i{1 add}/x 1 index/d{1 sub}/s{dup mul}/k 1 index/o{dup =}/c 1 index>>def 0{(>> )print flush{/f(%lineedit)(r)file def}stopped{exit}if{f 1 string readstring not{exit}if cmd exch 2 copy known{get exec}{pop pop}ifelse dup -1 eq 1 index 256 eq or{pop 0}if}loop pop}loop if Input ">>",Str1 For(I,1,length(Str1 int(.5inString("?ixskd?oc",sub(Str1,I,1 If Ans=4 Disp Y imag(i^Ans)+Y^int(e^(Ans=2 //decrements when Ans=3; increments when Ans=1 min(0,Ans(Ans≠256→Y End prgmD является While 1 , and prgmD в противном случае. Это гарантирует, что аккумулятор никогда не достигнет def i(a): while 1: c=yield if c in'ix':a+=1 if c=='d':a-=1 if c in'sk':a*=a if c in'oc':print a if a in(-1,256):a=0 j=i(0);next(j) while 1: for c in raw_input(">> "):j.send(c) .
  • a=0 while 1: for c in raw_input(">> "): if c in'ix':a+=1 if c=='d':a-=1 if c in'sk':a*=a if c in'oc':print a if a in(-1,256):a=0 - match >> xiskso 0 >> xiskisc 289 >> ddddo ddddo 285 281 >> ddddo ddddo 277 273 >> dddddddo 266 >> dddddddddo 257 >> do 0 >> do 0 >> io 1 >> или a = 0 repeat{ x = readline(">> ") for(i in utf8ToInt(x) - 99) { a = a ^ ((i == 8 | i == 16) + 1) + (i == 6 | i == 21) - (i == 1 & a) a = a * (a != 256) if(i == 0 | i == 12) cat (a, "\n") } } - square
  • a=0;repeat{x=readline(">> ");for(i in utf8ToInt(x)-99){a=a^((i==8|i==16)+1)+(i==6|i==21)-(i==1&a);a=a*(a!=256);if(i==0|i==12)cat(a,"\n")}} - match golfer9338 или minitech - output the accumulator
  • GlitchMr - multiply the accumulator by >> если это так a=0 s=lambda x:"a=%d"%(x!=-1and x!=256and x) while 1: for i in input(">>"):u,b,o=s(a+1),s(a*a),"print(a)";exec(dict(i=u,x=u,d=s(a-1),s=b,k=b,o=o,c=o).get(i,"")) or by #define i(u,v);if(c==u+89|c==v+89) a;main(c){printf(">>");while(c=getchar()-10){i(6,21)a++i(1,1)a--i(8,16)a*=a;i(0,12)printf("%d\n",a);a=a==-1|a==256?0:a;}main();} в противном случае

Пример вывода

#define X !--c?A A,M[256]; main(c) { for(; !M['x']; c++) M["@osid\nckx"[c]]-=c%5+1; for (printf(">> "); c = ~M[getchar()]; A *= ~A && A - 256) A= X,printf("%d\n", A),A:X*A:X+1:X-1:A; main(); }

Я предполагаю, что реализация A; main(c) { printf(">> "); while (c = getchar(), ~c) A = c - 'i' & c - 'x'? c - 'd'? c - 's' & c - 'k'? c - 'o' & c - 'c'? c - '\n'? A : printf(">> "), A : printf("%d\n", A), A : A * A : A - 1 : A + 1, A *= ~A && A - 256; } is host specific, so this Powershell host (ConsoleHost) appends >> xiskso 0 >> xiskisc 289 >> ddddo ddddo 285 281 >> ddddo ddddo 277 273 >> dddddddo 266 >> dddddddddo 257 >> do 0 >> do 0 >> io 1 >> на указанную подсказку.

 

Klox


Рег
08 Oct, 2014

Тем
71

Постов
215

Баллов
610
  • 26, Oct 2024
  • #5

Ребол 3, 178 169 161 159

with Ada.Text_IO; use Ada.Text_IO; with Ada.Containers.Indefinite_Holders; with Ada.Integer_Text_IO; procedure Deadfish is package String_Holder is new Ada.Containers.Indefinite_Holders(String); use String_Holder; value_output : Natural := 0; str_input : String_Holder.Holder := To_Holder(""); begin Prompt : loop Put(">> "); String_Holder.Replace_Element(str_input, Get_Line); for rg in str_input.Element'Range loop case str_input.Element(rg) is when 'i' | 'x' => case value_output is when 255 => value_output := 0; when others => value_output := Natural'Succ(value_output); end case; when 'd' => case value_output is when 257 => value_output := 0; when 0 => null; when others => value_output := Natural'Pred(value_output); end case; when 's' | 'k' => case value_output is when 16 => value_output := 0; when others =>value_output := value_output * value_output; end case; when 'o' | 'c' => Ada.Integer_Text_IO.Put(value_output, Width => 0); Put_Line(""); when others => null; end case; end loop; end loop Prompt; end Deadfish;

Более красивая версия:

C:\q>q deadfish.k -q >> xiskso 0 >> xiskisc 289 >> ddddo ddddo 285 281 >> ddddo ddddo 277 273 >> dddddddo 266 >> dddddddddo 257 >> do 0 >> do 0 >> io 1 >> ||answer||

Хаскелл, 202

i:0;while[1;1">> ";{i{(r;0)(-1~r)|256~r:y x}/d{x@&x in y}[x;!d:"ixdskoc"!,/(2#(1+);-1+;2#{x*x};2#{-1@$i::x;})]}'" "\:0:0] ||answer||

Питон 3, 141

Я знаю, что опоздал, но я хотел воспользоваться возможностью и опубликовать более короткую версию Python (и мою первую попытку CodeGolf). :)

c:\a\ruby>deadfish >> xiskso 0 >> xiskisc 289 >> ddddo ddddo 285 281 >> ddddo ddddo 277 273 >> dddddddo 266 >> dddddddddo 257 >> do 0 >> do 0 >> io 1 >>

Распечатать заявление было довольно сложно для этого.

Если приглашение должно заканчиваться пробелом, добавьте к счетчику один символ. :)

a=0 loop{$><<'>> ' eval gets.gsub(/./){|c|({i:i='a+=1',x:i,d:'a-=1',s:s='a**=2',k:s,o:o='p a',c:o}[:"#{c}"]||'')+';a=a==-1||a==256?0:a;'}} is the accumulator.

v checks whether the given value is v+1 Объяснение m . If so, 'v=m(v+1)' или

будет возвращено, в противном случае значение. exec and '+1' В следующих строках операции присваиваются соответствующим переменным (поскольку некоторые из них имеют одинаковое значение (например, i below.

locals is the main-loop

) это короче, чем создание экземпляра нового словаря). Затем они используются в Теперь начинается самое интересное. Нравиться@jazzpi '+1' is the dictionary of all current (visible) variables. With n Решение, оно перебирает каждый символ ввода. n = 'i' and passed towards v соответствующий ключ будет помещен в exec-строку (пустую строку, если ключ (= другой ввод) не найден). Затем при выполнении это будет объединено с m again.

. Возвращаемое значение будет сохранено в

Короткий пример: v ( .get(n,'') Быть locals() out of the while 1: = input-char), мы получаем exec is the variable with value x .
-блокировать как i than looks like this: 0 .
Строка для 256 with the value of -1 Возможно, теперь легче увидеть, что при выполнении он вызовет m again.

и сохранить его вывод в

Повторяйте это, пока вам не надоест. :)

 

Astr15


Рег
02 Jan, 2011

Тем
62

Постов
192

Баллов
552
  • 26, Oct 2024
  • #6
v

Руби, 140 138

v=0 m=lambda y:(0,y)[-1!=y!=256] i=x='+1' d='-1' s=k='*v' c=o=');print(v' while 1: for n in input('>>'):exec('v=m(v'+locals().get(n,'')+')') ||answer||

Пример сеанса (такой же, как у вас):

r=pure;-1%c=0%c;256%c=0%c;s%'o'=s<$print s;s%'c'=s%'o';s%'i'=r$s+1;s%'x'=s%'i' s%'d'=r$s-1;s%'s'=r$s^2;s%'k'=s%'s';s%_=r s;n s(c:[])=s%c;n s(c:f)=s%c>>=(`n`f) main=p 0;p s=putStr">> ">>getLine>>=n s>>=p

.

f: does [if a = -1 or (a = 256) [a: 0]] d: [ any [ ["i"|"x"] (++ a f) | ["d"] (-- a f) | ["s"|"k"] (a: a * a f) | ["o"|"c"] (print a) | skip ] ] a: 0 forever [parse (ask ">>") d] ||answer||

К, 121

Ада

f: does [if a = -1 or (a = 256)[a: 0]]d: [any[["i"|"x"](++ a f)|["d"](-- a f)|["s"|"k"](a: a * a f)|["o"|"c"](print a)| skip]]a: 0 forever [parse (ask ">>") d]

Вот реализация Ada для тех немногих, кто интересуется этим языком. Мне потребовалось довольно много времени, чтобы использовать некоторые из лучших практик Ады (например, использование Indefinite_Holders вместо доступа), а также полностью понять, как должен работать Deadfish.

:

И вывод:

Если бы кто-нибудь из людей, экспериментировавших с Ada, мог бы дать мне несколько советов по оптимизации, я был бы благодарен.

 

Nilka


Рег
27 Oct, 2009

Тем
57

Постов
197

Баллов
492
  • 26, Oct 2024
  • #7
read-host

С, 159 символов169Я попробовал другой подход, основанный на настройке справочной таблицы для декодирования инструкций, но, к сожалению, это заняло больше времени (

>>: xiskso 0 >>: xiskisc 289 >>: ddddo ddddo 285 281 >>: ddddo ddddo 277 273 >>: dddddddo 266 >>: dddddddddo 257 >>: do 0 >>: do 0 >>: io 1 >>: ||answer||

). Я включил его, потому что кто-то может придумать хитрую настройку, чтобы уменьшить размер. (Необходимо запускать без каких-либо аргументов)

1 ||answer||

С, 163

256

Питон 3, 181 175 171 162 0 , but the OP didn't say that wasn't allowed. Это выводит новую строку после

Уже нет! $x*=$x-ne256 , c and o !

и

 

Carpinteyroqca47


Рег
17 Dec, 2005

Тем
80

Постов
201

Баллов
641
  • 26, Oct 2024
  • #8
"o|c"{$x}

Р, 161, 148, 138

k

Негольфированная версия:

s ||answer||

Пример сеанса (в интерактивном режиме):

"s|k"{$x*=$x}

Питон 2, 139

-1

Это аккуратно, но в то же время довольно просто.

Вот более длинная и крутая версия:

Имея 190 символов, это, возможно, не самый длинный ответ. С другой стороны, сопрограммы довольно круты, и я всегда ищу повод использовать их (и делиться ими).

 

Wutrik


Рег
18 Jul, 2011

Тем
70

Постов
210

Баллов
570
  • 26, Oct 2024
  • #9

ТИ-БЕЙСИК, 104 107 102 100 98 1 ; it eventually overflows the stack by calling itself. Replace the recursion with a 0 Для калькуляторов серии TI-83+/84+.

$x

Назовите это

, ценой двух байтов, чтобы это исправить.

По умолчанию Y равен 0, поэтому либо запустите его с помощью только что очищенного памяти калькулятора, либо сохраните значение от 0 до Y вручную перед запуском.

Жаль, что строчные буквы (в строковых литералах) занимают по два байта каждая; в противном случае это было бы короче, чем ответ Дома Гастингса.

РЕДАКТИРОВАТЬ: Исправлена ​​ошибка деления на ноль (0^0) за счет трех байтов.

107 -> 102: использован воображаемый трюк возведения в степень для экономии четырех байтов (включая 1 из круглых скобок и -1 из-за удлинения строки поиска) и использован Y вместо X, что требует на один байт меньше для инициализации.

0

 

Mogur_X


Рег
03 Jun, 2008

Тем
71

Постов
189

Баллов
564
  • 26, Oct 2024
  • #10

!!$x ||answer||

Постскриптум 272224 Негольфед:

С ( $x (this is not necessary for gcc).

d ||answer||

212 символов)Вероятно, это неудачный выбор языка, ну да ладно. Дело не в том, что такой язык, как C, может работать лучше, чем какой-либо динамический язык программирования. В Clang вам нужно будет указать значение для

Хаскелл "d"{$x-=!!$x} (or inside x , 186 178 байт i to "i|x"{$x++} Это нужно запустить с

switch -r($_)

), так как они оба устанавливают

по умолчанию, что сохраняет довольно много байтов:

Попробуйте онлайн! {} (the fixity declaration allows us to drop parentheses when using it in conjunction with other operators |%{...} , [char[]](...) , >> , read-host '>>' and for($x=0){...} ):

  • Объяснение for($x=0){[char[]](read-host ">>")|%{switch -r($_){"i|x"{$x++}"d"{$x-=!!$x}"s|k"{$x*=$x}"o|c"{$x}} $x*=$x-ne256}} and o`
  • Это определяет новый оператор
  • первые две строки «исправляют» состояния {""0:,$x;x} ), it reads new ones and starts over again keeping the old state

затем он соответствует первому символу и действует на него {-1@$x;x} and read a new source line, ie. begin with an empty source:

"o" ||answer||

как только в нем закончатся символы (Чтобы начать процесс, мы инициализируем состояние с помощью

"c"

Питон 3

, 130 119 байт Попробуйте онлайн! Это всего лишь преобразование {x*x} , and remove another 6 from the new wrap-around code.

ответ stackspace

 

Koroliov


Рег
05 Sep, 2007

Тем
64

Постов
190

Баллов
540
  • 26, Oct 2024
  • #11

Луа, 230 228

"s"

Не худший, не лучший.

ПРИМЕЧАНИЕ: как сообщает @mniip "k" may not work in your interpreter. More info in comments.

(более-менее) Читабельная версия:

{-1+x}

Выход:

-1+

Редактировать: благодаря @mniip для оптимизации 2 символов: "d" -> {1+x}

 

Adil_r75


Рег
05 Apr, 2020

Тем
90

Постов
211

Баллов
671
  • 26, Oct 2024
  • #12

Пакетный пакет Windows, 204 256

1+

Успешно игнорирует другие команды. Действительно раздулся, не имея "i" to work with...

Редактировать:

Зафиксированный:

  • Больше не нужно повторять все команды
  • Сделано это на самом деле ВЫПОЛНЯТЬ математику с /a
  • Сброс на -1
  • Сброс входа после каждого цикла

Это стоило 52 символа.

Не исправил:

  • Возведение в квадрат 0 записывает «0*0» в a.
  • Ввод пробела (или ничего не вводя, когда вы его только что открыли) приводит к сбою скрипта.
  • Вам НУЖНО вводить по одному символу за раз.
 

Zaitsev.k.v


Рег
19 Nov, 2007

Тем
91

Постов
190

Баллов
685
  • 26, Oct 2024
  • #13

Командный сценарий Windows — 154

Максимально злоупотребляйте неизвестными возможностями.

"x" ||answer||

><>, 258 байт

Я дал еще один ответ ><>, так как не смог проверить фаза и в любом случае он использовал предварительно собранные команды, а не эмулировал оболочку.

"abcdabc"

Конечно, его можно победить, но я не уверен, что мне хватит безумной храбрости!

Я протестировал его с помощью официального интерпретатора, работающего под управлением Python 3.5 под cygwin под Windows 7, и смог воспроизвести тестовый запуск:

7#"abcd"

Если вы не можете запустить его на своем компьютере (ввод кажется сложным) или вы просто хотите попробовать его без какого-либо другого программного обеспечения, вы можете использовать следующую версию на онлайн-переводчик.

7#

Он, очевидно, игнорирует \n и EOF, поскольку вы не можете ввести их в онлайн-интерпретатор, но будет вести себя так, как если бы ввод был нажат после каждой команды вывода.

 

Kozgeha


Рег
19 Jan, 2014

Тем
67

Постов
198

Баллов
553
  • 26, Oct 2024
  • #14

С (ГКК), 139 байт

Скомпилировать с "xkcdiso" (included in byte count). -2 bytes if prompt ^ разрешено.

0N

Попробуйте онлайн!

Дегольф

-1 256?x ||answer||

бочонок, 68Б

{x*^-1 256?x:y@x} ||answer||

Хаскелл, 230

x

Если бы я только мог избавиться от этого надоедливого 0 call! Without it, the prompt is not displayed until an 1 операция выполняется. Есть совет?

 

Asddos


Рег
28 Mar, 2020

Тем
85

Постов
206

Баллов
631
  • 26, Oct 2024
  • #15

PHP+HTML 345

2=

вывод немного отрывочный (история/сеанс отображается в текстовой области, а при включенном отчете об ошибках выводится много предупреждений), но все работает

 

Irender


Рег
18 Mar, 2015

Тем
77

Постов
190

Баллов
635
  • 26, Oct 2024
  • #17
f[f[0;first arg];second arg]…

Golf-Basic 84, 88 символов 0 f/ args :

""0:

Запрашивает по одной команде за раз, как минимум в трех других решениях. Вот тестовый запуск для {""0:">>";0{x*^-1 256?x:y@x}/("xkcdiso"!7#(1+;{x*x};{""0:,$x;x};-1+))@0:"";o`}` outputs 0, as it should.

Также,

 

Sparkyd


Рег
13 Jul, 2010

Тем
81

Постов
171

Баллов
596
  • 26, Oct 2024
  • #18
{1">>";0{x*2=-1 256?x:y@x}/("xkcdiso"!7#(1+;{x*x};{-1@$x;x};-1+))@0:0;.z.s`}` >>xiskso 0 >>xiskisc 289

JavaScript (Node.js), 204 байта

do{print+(map{$?+=/i|x/-/d/;$?**=1+/s|k/;$?=~s/-1|^256$/0/;"$? "x/o|c/}/./g),'>> '}while<>
 

Misha.patzagan


Рег
06 Nov, 2019

Тем
89

Постов
178

Баллов
643
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно