Bitflip এবং অবহেলা


42

একটি পূর্ণসংখ্যা দেওয়া হয়েছে, অপারেটরগুলির ডান থেকে বামে প্রয়োগ 0করে অযৌক্তিক অবহেলা -এবং বিটওয়াইস পরিপূরক ~( ~n= -n-1) ব্যবহার করে এটি তৈরি করে এমন একটি ভাব তৈরি করুন ।

...
-3  = ~-~-~0
-2  = ~-~0
-1  = ~0
 0  = 0
 1  = -~0
 2  = -~-~0
 3  = -~-~-~0
...

তোমার অভিব্যক্তি সম্ভব সংক্ষিপ্ত, যার কোন অপ্রয়োজনীয় অংশের অর্থ যেমন হওয়া আবশ্যক ~~, --, -0, অথবা 00। স্ট্রিং বা অক্ষরের ক্রম হিসাবে এক্সপ্রেশনটি আউটপুট বা মুদ্রণ করুন।



1
~ এবং 0 এর মধ্যে সাদা জায়গার অনুমতি আছে?
Adám

না, স্ট্রিংগুলি হুবহু আউটপুট করুন।
xnor

2
বাধ্যতামূলক xkcd.com/153
জেরেড স্মিথ

উত্তর:


17

পাইথন, 32 বাইট

lambda x:("-~"*abs(x))[x<0:]+"0"

নামবিহীন ল্যাম্বদা ফাংশন। একটি পূর্ণসংখ্যা দেওয়া x "- abs" অ্যাবস (এক্স) বার লিখেছে এবং x নেতিবাচক থাকলে প্রথম চরটিকে সরিয়ে দেয়, তারপরে শেষের সাথে একটি শূন্য যুক্ত করা হবে।


ওহ, আমাকে এটি মারধর।
mbomb007

আমি ঠিক এটিও লিখেছিলাম - nএর জায়গায় xএবং 'এর জায়গায় ":)
জোনাথন অ্যালান

2
@ জোনাথান অ্যালান তারপরে আপনি নিরাপদে এটিকে একটি ডুপ হিসাবে বিবেচনা করতে পারেন।
এরিক আউটগল্ফার

16

জাভাস্ক্রিপ্ট (ES6), 33 31 বাইট

f=x=>x<0?"~"+f(~x):x&&"-"+f(-x)

পুনর্বিবেচনা <বিল্ট-ইন <লুপগুলি (অন্তত এই ক্ষেত্রে)। মূলত ইনপুটটি মূল্যায়ন করে না:

  • যদি এটি 0 এর চেয়ে কম হয় তবে এটিকে ফ্লিপ করুন এবং ~স্ট্রিংয়ে একটি যুক্ত করুন ;
  • যদি এটি 0 এর বেশি হয় তবে এটিকে অবহেলা করুন এবং -স্ট্রিংয়ে একটি যুক্ত করুন ;
  • যদি এটি ঠিক 0 হয় তবে 0 এ ফিরে আসুন।

এই প্যাটার্নটির সুবিধা নেয়:

 0         = 0
-1 = ~( 0) = ~0
+1 = -(-1) = -~0
-2 = ~(+1) = ~-~0
+2 = -(-2) = -~-~0
-3 = ~(+2) = ~-~-~0
+3 = -(-3) = -~-~-~0
etc.

11

পাইথ, 14 13 12 বাইট

_<>0Q+0sm"~-

-২ বাইটস @ স্টিভেনএইচ ধন্যবাদ।

পরীক্ষা স্যুট

পাইথটি চেষ্টা করার সিদ্ধান্ত নিয়েছে তাই আমি আমার অজগরটির উত্তরটির অনুবাদ করেছি । কোন সাহায্য স্বাগত!

ব্যাখ্যা:

_<>0Q+0sm"~-     
        m"~-     # Map "~-" onto the input (= a list of n times "~-").
       s         # Join the list to a string.
     +0          # Add "0" in front. 
 <>0Q            # Slice off the last char if the input is negative.
_                # Reverse the whole thing.

একটি বাইট সংরক্ষণ করতে শেষে অন্তর্নিহিত ইনপুট ব্যবহার করুন: >0পরিবর্তে<Q0
স্টিভেন এইচ।

@StevenH। ধন্যবাদ! এখন আমরা সংক্ষিপ্ত উত্তরটির সাথে একযোগে আছি!
কার্লকাস্টোর

2
খুব ভিন্ন সমাধান (এটি, দুর্ভাগ্যক্রমে, কোনও বাইট সংরক্ষণ করে না):tW>0Q_+0sm"~-
স্টিভেন এইচ।

2
@StevenH। আপনার সমাধানটি 12 এ নামিয়ে আনুন: _<>0Q+0sm"~-আমি আশা করি আপনার সমাধানটি আমার সমাধানটিতে যুক্ত করার মাধ্যমে আমি ঠিক আছি।
কার্লকাস্টোর

8

সি, 46 বাইট

m(x){putchar(x?x<0?126:45:48);x&&m(-x-(x<0));}

বেশিরভাগ (সমস্ত?) উত্তরগুলির বিপরীতে, এটি অপারেটরগুলি ~এবং -একের পর এক আউটপুট দেয় ।



7

রেটিনা, 19 17 বাইট

শেষে শূন্যের সাথে আনারি দিয়ে সংখ্যাটি প্রতিস্থাপন করুন। 1সঙ্গে প্রতিটি প্রতিস্থাপন -~। যদি একটি থাকে তবে ডাবল নেতিবাচক সরান।

\d+
$*10
1
-~
--

এটি অনলাইনে চেষ্টা করুন

সমস্ত পরীক্ষার কেস একবারে (একাধিক পরীক্ষার কেস সমর্থন করার জন্য সামান্য সংশোধিত প্রোগ্রাম)



7

পার্ল 38 35 33 (23 + 1 for -p) 24

s/\d+/"-~"x$&.0/e;s;--;

-13 দাদাকে ধন্যবাদ


আপনি সম্ভবত -pপরিবর্তে বোঝানো হয়েছে -r। এছাড়াও আপনি এই শেষ বন্ধনী এবং সেমিকোলন থেকে মুক্তি পেতে পারেন: if$h<0যথেষ্ট।
দাদা 21

আমি করেছি, ধন্যবাদ। আমি অনুমান করি যে আমি অনেক উত্তর লিখছি।
রিলে 21

সম্ভবত, হ্যাঁ (শেষ 2 প্রথম বন্ধনীর হাত থেকেও মুক্তি পান)
দাদা

$h<0&&s;.;পরিবর্তে না করে আপনি 2 বাইট সংরক্ষণ করতে পারেন s/.// if $h<0। ( -pএকটি যোগ ;কোডের শেষে, তাই গত জন্য কোন প্রয়োজন ;এর s;.;;আর। a if bমোটামুটিভাবে সমতূল্য b && a, কিন্তু এই ক্ষেত্রে এটি এক বাইট কারণ আপনার স্থান অপসারণ করতে পারেন সংরক্ষণ)
দাদা

ধন্যবাদ, আমি জানি না-পিও ;খুব একটা যুক্ত করেছিলাম ।
রিলে 21

6

ডায়ালগ এপিএল , 18 বাইট

'0',⍨0∘>↓'-~'⍴⍨2×|

'0',⍨ অক্ষর শূন্য সংযুক্ত

0∘> নেতিবাচকতা (শূন্য ও তার উপরে 0 এর নীচে সংখ্যার জন্য 1)

থেকে বাদ

'-~'⍴⍨ "~ -" স্ট্রিংটি দৈর্ঘ্যে চক্রাকারে পুনরায় আকার দেওয়া হয়েছে

দুই বার

| পরম মান

+ যোগ

0∘< ধনাত্মকতা (উদাহরণস্বরূপ 0 টিরও বেশি সংখ্যার জন্য)

অনলাইনে চেষ্টা করুন!


6

হাস্কেল, 41 বাইট

f n=['-'|n>0]++(tail$[1..abs n]>>"-~")++"0"

f n|n<0=tail$f(-n)|x<-[1..n]>>"-~"=x++"0"

নিমিকে 3 বাইটের জন্য ধন্যবাদ


tailব্যর্থ n=0drop 1পরিবর্তে আপনি ব্যবহার করতে পারেন ।
নিমি

@ নিমি ধন্যবাদ; আমি কীভাবে এটি মিস করেছি সে সম্পর্কে আমার কোনও ধারণা নেই ..
ব্ল্যাকক্যাপ


1
2 সংরক্ষণ করতে বাইট: ...|n<0=tail$f(-n)|...
নিমি

5

ভি , 21 বাইট

/ä
é
D@"ña-~ñá0kgJó--

এটি অনলাইন চেষ্টা করুন!

ভি এর খুব সীমিত সংখ্যার সমর্থন রয়েছে এবং এটিতে আসলে নেতিবাচক সংখ্যার কোনও ধারণা নেই। এর অর্থ নেতিবাচক (বা এমনকি 0) সমর্থন করার জন্য, আমাদের কিছু হ্যাকি ওয়ার্কআউন্ড ব্যবহার করতে হবে।

ব্যাখ্যা:

/ä                  "Move forward to the first digit
é                   "And enter a newline
D                   "Delete this number, into register '"'
 @"                 "That number times:
   ñ   ñ            "Repeat the following:
    a               "  Append the string:
     -~             "  '-~'
        á0          "Append a 0
          k         "Move up a line
           gJ       "And join these two lines together
             ó--    "Remove the text '--', if it exists

5

জাভাস্ক্রিপ্ট (ES6), 39 37 বাইট

x=>"-~".repeat(x<0?-x:x).slice(x<0)+0

সংরক্ষিত 2 বাইট @ নীলকে ধন্যবাদ


5

জেলি , 10 বাইট

A⁾-~ẋḊẋ¡N0

এটি একটি সম্পূর্ণ প্রোগ্রাম। এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

A⁾-~ẋḊẋ¡N0  Main link. Argument: n

A           Take the absolute value of n.
 ⁾-~ẋ       Repeat the string "-~" that many times. Result: s
       ¡    Conditional application:
     Ḋ        Dequeue; remove the first element of s...
      ẋ N     if s, repeated -n times, is non-empty.
         0  Print the previous return value. Set the return value to 0.
            (implicit) Print the final return value.

5

জাভা 7, 95 79 বাইট

By৯ বাইট:

String s(int x){String t=x<0?"~":"";while((x<0?++x:x--)!=0)t+="-~";return t+0;}

Ungolfed:

String s(int x) {
    String t = x<0 ? "~" : "";
    while((x<0 ? ++x : x--) != 0)
        t += "-~";
    return t+0;
}

পুরানো সংস্করণ (95 বাইট):

String s(int x){return new String(new char[x<0?-x:x]).replace("\0","-~").substring(x<0?1:0)+0;}

ব্যবহার:

class A {
    public static void main(String[]a) {
        System.out.println(s(-3));
        System.out.println(s(-2));
        System.out.println(s(-1));
        System.out.println(s(0));
        System.out.println(s(1));
        System.out.println(s(2));
        System.out.println(s(3));
    }
    static String s(int x){String t=x<0?"~":"";while((x<0?++x:x--)!=0)t+="-~";return t+0;}
}

এখানে চেষ্টা করুন!

আউটপুট:

~-~-~0
~-~0
~0
0
-~0
-~-~0
-~-~-~0

হাই, এবং পিপিসিজিতে আপনাকে স্বাগতম! প্রথম প্রথম পোস্ট!
আর

পিপিসিজিতে আপনাকে স্বাগতম! হুম, এটি আমার চেয়ে একটি সংক্ষিপ্ত সমাধান, সুতরাং আমি আমার উত্তরটি মুছব এবং পরিবর্তে আপনার আপভোট করব। :)
কেভিন ক্রুইজসেন


3

এক্সেল: 55 33 বাইট

=REPT("-~",IF(A1>0,A1,ABS(A1)-1))&"0"

ইনপুটটি A1 ঘরে একটি সংখ্যা রাখার আকারে। সূত্রটি এ 1 বাদে যে কোনও জায়গায় যেতে পারে।


আমি মনে করি না এটি নেতিবাচক সংখ্যার জন্য কাজ করে ...
pajonk

3

টি-এসকিউএল, 87 বাইট

select substring(replicate('-~',abs(x)),case when x<0then 2 else 1 end,x*x+1)+'0'from #

x*x+1সাবস্ট্রিং মধ্যে শর্ত সাল থেকে যথেষ্ট x^2+1>=2*abs(x)সব জন্য x

সাধারণত এসকিউএল-তে, ইনপুটটি একটি সারণীতে সংরক্ষণ করা হয়:

create table # (x int)

insert into # values (0)
insert into # values (1)
insert into # values (-1)
insert into # values (2)
insert into # values (-2)

3

সিজেম , 18 14 বাইট

4 বাইট সংরক্ষণ করতে এমিগিনার উত্তর থেকে কিছুটা অনুপ্রেরণা নিয়েছেন ।

li_z"-~"*\0<>0

এটি অনলাইন চেষ্টা করুন! (লাইনফিড-বিচ্ছিন্ন পরীক্ষার স্যুট হিসাবে))

ব্যাখ্যা

li      e# Read input and convert to integer N.
_z      e# Duplicate and get |N|.
"-~"*   e# Repeat this string |N| times.
\0<     e# Use the other copy of N to check if it's negative.
>       e# If so, discard the first '-'.
0       e# Put a 0 at the end.

3

ভিম - 31 কীস্ট্রোক

প্রথম ভিম গল্ফ, প্রলি এক টন জিনিস মিস করেছে missed

`i-~<esc>:s/-\~-/\~-/dwp<left>ii<esc><left>d$@"<esc>a0`

চমৎকার, ক্লাবে স্বাগতম! :) আপনি এর :s/^-পরিবর্তে :s/-\~/\~-এবং Dপরিবর্তে করতে পারেনd$
ডিজেএমসিএমহেম

এখন আমি এটা আমার মনে হয় যে, আমি এই হ্যান্ডলগুলি 0. আপনি এই কাছাকাছি পেতে পারে সঙ্গে মুছে ফেলার পূর্বে বৃদ্ধিশীল দ্বারা মনে করি না <C-a>আর তারপরই বন্ধ দুটি অক্ষর মোছা হচ্ছে।
DJMcMayhem

@ ডিজেএমসিমেহেম ওহ, 0iকাজ করে না?
মালটিসেন

না, দুর্ভাগ্যবশত না. 0কার্সারটি বর্তমান সারির প্রথম অক্ষরে স্থানান্তরিত করে। আপনি যদিও ভি তে গণনা হিসাবে 0 ব্যবহার করতে পারেন।
ডিজেএমসিএমহেম

2

মতলব, 61 বাইট

x=input('');A=repmat('-~',1,abs(x));disp([A((x<0)+1:end) 48])



2

জেলি, 14 12 বাইট

-2 বাইটস @ ডেনিসকে ধন্যবাদ (এটি কেবল একটি সম্পূর্ণ প্রোগ্রাম হিসাবে তৈরি "0" কে কনটেনেট করার চেয়ে 0 ফিরে আসুন))

0>‘
A⁾-~ẋṫÇ0

এটি ট্রাইটঅনলাইনে পরীক্ষা করুন

কিভাবে?

0>‘      - link 1 takes an argument, the input
0>       - greater than 0? 1 if true 0 if false
  ‘      - increment

A⁾-~ẋṫÇ0 - main link takes an argument, the input
      Ç  - y = result of previous link as a monad
A        - x = absolute value of input
 ⁾-~     - the string "-~"
    ẋ    - repeat the sting x times
     ṫ   - tail repeatedString[y:] (y will be 1 or 2, Jelly lists are 1-based)
       0 - implicit print then return 0

2

> <>, 18 + 3 = 22 বাইট

:?!n0$-:0):1go-
-~

এটি অনলাইন চেষ্টা করুন! ​ -vইনপুট দিয়ে স্ট্যাকটি শুরু করতে পতাকাটির জন্য +3 বাইট যদি ধরে নেওয়া হয় যে এসটিডিএন খালি রয়েছে তবে নিম্নলিখিতটি একটি বাইট সংক্ষিপ্ত:

:?!ni*:0):1go-
-~

প্রোগ্রামটি n0 পর্যন্ত না পৌঁছানো পর্যন্ত প্রয়োজনীয় হিসাবে ইনপুটটি ফ্লিপ করে রাখে , এর পরে এটি ত্রুটি থেকে যায়।

[Loop]
:?!n      If n is 0, output it as a num. If this happens then the stack is now
          empty, and the next subtraction fails
0$-       Subtract n from 0
:0)       Push (n > 0)
:1go      Output the char at (n>0, 1) which is a char from the second line
-         Subtract, overall updating n -> -n-(n>0)

2

অক্টাভ, 51 বাইট

x=input('');[("-~"'*[1:abs(x)>0])((x<0)+1:end),'0']

প্রথমে নির্মোহভাবে @ পাজোনক দ্বারা মতলব পদ্ধতির অনুলিপি করে এবং তারপরে কিছু বিশদ সংশোধন করে, "ভ্যাটর" এবং ভ্যারেক্টরগুলির মধ্যে একটি "বাহ্যিক পণ্য" হিসাবে আবার লিখুন "- ~" এবং অন-দ্য ফ্লাই-ইনডেক্সিং (বা এটি কী হতে পারে) কল) আমাদের কিছু বাইট সংরক্ষণ করতে দেয়। এটি এখনও আমাকে সামান্য ব্যথা করে যে আমি কম বাইট নেওয়ার সূচী প্রকাশটি পেতে পারি না।

অক্টাভ সূচীকরণের জন্য একটি (i1) (i2) বা এমনকি (...) (i1) (i2) অনুমতি দেয় যেখানে মাতলাব আমাদের সূচীগুলির মধ্যে ভেরিয়েবল সংরক্ষণ করতে চান।

((x<0)+1:end)

"যদি আগে যান তবে" বর্ননা করতে অনেক দীর্ঘ। আরও ভাল উপায় থাকতে হবে।


2

সিউডোডি , 688 579 521 বাইট

utilizar mate.pseudo
utilizar entsal.pseudo
adquirir n
adquirir a
adquirir r
adquirir i
fijar n a llamar LeerPalabra finargs
si son iguales n y CERO
escribir {0}
salir
fin
fijar a a llamar ValorAbsoluto n finargs
fijar i a CERO
si comparar Importar.Ent.Comparar n < CERO
fijar r a {~}
sino
fijar r a {-}
fin
mientras comparar Importar.Ent.Comparar i < a
escribir r finargs
si son iguales r y {~}
fijar r a {-}
Importar.Ent.Sumar i UNO i
sino
fijar r a {~}
fin
finbucle
si son iguales r y {~}
escribir {~}
fin
escribir {0}

ব্যাখ্যা করা:

Read a number from STDIN;
If the number is zero (0); Then:
    Writes 0 to STDOUT and exits;
End If;
If the number is less than zero (0); Then:
    Set the fill character to "~";
Else:
    Set the fill character to "-";
End If;
For i = 0; While i is less than abs(number); do:
    Write the fill character to STDOUT;
    If the fill character is "~":
        Set the fill character to "-"
        Increment i by one
    Else:
        Set the fill character to "~"
    End if;
End for;
If the fill character is "~"; Then:
    Write "~" to STDOUT;
End If;
Write "0" to STDOUT

1
পিপিসিজিতে আপনাকে স্বাগতম! এটি যে হিসাবে এটি ছোট হিসাবে? আমি কিছু দীর্ঘ শনাক্তকারী দেখতে পাচ্ছি যা আপনি সম্ভবত সংক্ষিপ্ত করতে পারতেন ("রিলেলানো" থেকে "আর", মেনোস রেলেনো: পি)। আমি মনে করি আপনি যদি স্ট্যান্ডার্ড লিবের জন্য আমদানিগুলি বাদ দিতে পারেন তবে এটি কেবল কোনও ফাংশন বা কোড স্নিপেটও। এটি আউটপুটে নতুন লাইনের জন্য জিজ্ঞাসা করে না, তাই আপনি শেষ এসক্রিবিরলাইনাকে এসক্রিবিরে পরিবর্তন করতে পারেন। আপনি কি সংক্ষিপ্ত নামগুলিতে ফাংশন বরাদ্দ করতে পারেন adquirir e``fijar p a Escribir?
ফেডারেশন এস।



1

ল্যাবরেথ , 25 বাইট

`?+#~.
.  ; 6
54_"#2
  @!

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

আমি সত্যিই এই এক মধ্যে নিয়ন্ত্রণ প্রবাহ পছন্দ করি। 0সম্পর্কিত অক্ষরগুলি প্রিন্ট করার সময় আইপিটি ধীরে ধীরে ইনপুট হ্রাস করতে কোডের মাধ্যমে 8 (বা আসলে একটি ∞, আমি অনুমান) চালায় ।

ডানদিকে যাচ্ছে উপরের বাম কোণে কোডটি শুরু হয়। `এখনই কিছু না। ?ইনপুট পড়ে এবং +নীচে অন্তর্নিহিত শূন্য এ যুক্ত করে। অবশ্যই এটি কোনও কাজ করে না, তবে আমরা যখন আবার এই কোডটি দিয়ে ?চলেছি তখন একটি শূন্যকে ধাক্কা দেবে (কারণ আমরা ইওএফ এ আছি), এবং +পরে সেই শূন্য থেকে মুক্তি পাবে।

এরপরে #স্ট্যাকের গভীরতার দিকে ধাক্কা দেয়, কেবল এটি নিশ্চিত করে যে আইপি দক্ষিণে পরিণত করার জন্য স্ট্যাকের কোনও ইতিবাচক মান রয়েছে এবং ;এটি আবার বিসর্জন দেয়।

"কোন সমিতি এবং কোডের প্রধান শাখা হিসাবে কাজ করে। পার্থক্য করার জন্য তিনটি কেস রয়েছে:

  • যদি বর্তমান মানটি ধনাত্মক হয়, আইপি ডানদিকে (পশ্চিম) ঘুরে এবং বাম লুপের এক রাউন্ড সম্পূর্ণ করে:

    _45.`?+
    _45      Push 45.
       .     Print as character '-'.
        `    Negate the current value (thereby applying the unary minus).
         ?+  Does nothing.
    
  • যদি বর্তমান মানটি নেতিবাচক হয়, আইপি বাম দিকে (পূর্ব) পরিণত হয় এবং নিম্নলিখিত কোডটি চালিত হয়:

    #26.~
    #        Push stack depth, 1.
     26      Turn it into a 126.
       .     Print as character '~'.
        ~    Bitwise NOT of the current value (applying the ~).
    

    নোট করুন যে ইনপুট মানটি শূন্যে না নামানো পর্যন্ত এই দুটি বিকল্প হবে (যেহেতু উভয়ই ইনপুটটির সাইন পরিবর্তন করে)। প্রান্তে...

  • যখন বর্তমান মান শূন্য হয়, আইপি সহজেই দক্ষিণে অগ্রসর হয়, এবং কার্যকর করে !এবং তারপরে পশ্চিমে পশ্চিমে পরিণত হয় @!মুদ্রণ করে 0এবং @প্রোগ্রামটি সমাপ্ত করে।

1

গল্ফস্ক্রিপ্ট ,30 24 20 বাইট

  • এক্সনোরকে ধন্যবাদ 6 বাইট সংরক্ষণ করা হয়েছে।
  • ডেনিসকে ধন্যবাদ 4 টি বাইট

~."-~"\abs*\0<{(;}*0

ইনপুট: -5

আউটপুট: -5 = ~-~-~-~-~0

ব্যাখ্যা

~.     # Input to integer and duplicate
"-~"   # We shall output a repetition of this string
\abs   # Move the input onto the stack and computes abs
*      # Multiply "-~" for abs(input) times
\      # Copy onto the stack the input
0<     # Is it less than 0?
{(;}*  # Yes: remove first '-' from the output
0      # Push 0

এটি অনলাইন চেষ্টা করুন!


1
আপনাকে 2 = কেবল মুদ্রণ করতে হবে না -~-~0
xnor

1
আপনি {(;}*0পরিবর্তে ব্যবহার করতে পারেন {(;}{}if 0
ডেনিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.