इनपुट को दिशा में बदलें


15

चुनौती

फार्म में दिए गए इनपुट <n1>, <n2>जहां संख्या -1, 0, या 1 हो सकती है, उसी कार्डिनल दिशा को लौटाएं । धनात्मक संख्याएँ x- अक्ष में पूर्व की ओर चलती हैं और y- अक्ष में दक्षिण, ऋणात्मक संख्याएँ x- अक्ष में पश्चिम और y- अक्ष में उत्तर की ओर बढ़ती हैं।

आउटपुट रूप में होना चाहिए South East, North East, North। यह केस-संवेदी है।

यदि इनपुट 0, 0 है, तो आपका प्रोग्राम वापस आना चाहिए That goes nowhere, silly!

नमूना इनपुट / आउटलुक:

1, 1 -> South East

0, 1 -> South

1, -1 -> North East

0, 0 -> That goes nowhere, silly!

यह , बाइट्स जीत में सबसे छोटा जवाब।



1
डब्ल्यू, एनडब्ल्यू और एसडब्ल्यू के साथ कुछ उदाहरणों की आवश्यकता है।
शेषमारा

@seshoumara मैं मोबाइल पर हूँ, इसलिए कोई बैकटिक, लेकिन NW होगा -1, -1
मटीस कश्मीर

1
ट्रेलिंग स्पेस की अनुमति है?
अर्जुन

उह ... ज़रूर, मुझे लगता है। जब तक यह वही दिखता है।
मतिस के

जवाबों:


12

जाप , 55 51 बाइट्स

`
SÆ 
NÆ° `·gV +`
E†t
Wƒt`·gU ª`T•t goƒ Í2€e, Ðéy!

व्याख्या

                      // Implicit: U, V = inputs
`\nSÆ \nNÆ° `       // Take the string "\nSouth \nNorth ".
·                     // Split it at newlines, giving ["", "South ", "North "].
gV                    // Get the item at index V. -1 corresponds to the last item.
+                     // Concatenate this with
`\nE†t\nWƒt`·gU       // the item at index U in ["", "East", "West"].
ª`T•t goƒ Í2€e, Ðéy!  // If the result is empty, instead take "That goes nowhere, silly!".
                      // Implicit: output result of last expression

इसे ऑनलाइन आज़माएं!


उम… मैं… ??? पृथ्वी पर यह कैसे काम करता है? क्या जाप में कुछ फैंसी चीजें पसंद हैं जो आम चरित्र जोड़ों को बदल देती हैं?
हाइपरन्यूट्रिनो

@HyperNeutrino हां, जाप शॉक कम्प्रेशन लाइब्रेरी का उपयोग करता है जो एक ही बाइट के साथ लोअरकेस वर्णों के आम जोड़े की जगह लेती है।
ETHproductions

ठीक है, यह वास्तव में अच्छा है! मैं उस पर गौर करूंगा, देखूंगा कि क्या मैं इसका कोई उपयोग कर सकता हूं।
हाइपरन्यूट्रीनो

9

पायथन, 101 87 बाइट्स

वास्तव में भोली समाधान।

lambda x,y:['','South ','North '][y]+['','West','East'][x]or'That goes nowhere, silly!'

14 बाइट बचाने के लिए @Lynn को धन्यवाद! परिवर्तन: string.split विधि का उपयोग वास्तव में इसे लंबा बनाता है; _; और भी, नकारात्मक सूचकांक अजगर में मौजूद हैं।


5
आप इसे इस तरह से 87 तक काट सकते हैं:lambda x,y:('','South ','North ')[y]+('','East','West')[x]or'That goes nowhere, silly!'
लिन

2
मुझे कुछ दिशाएँ प्राप्त करने का एक अच्छा तरीका मिला, लेकिन दुर्भाग्य से ऐसा नहीं लगता कि यह इस चुनौती के लिए काम करेगा। यह पता लगाया कि मैं इसे वैसे भी साझा करूंगा (शायद किसी शिल्पकार की तुलना में मैं समझ सकता हूं कि इसकी समस्याओं से कैसे निपटें, जैसे कि x या y = 0): lambda x,y:'North htuoS'[::x][:6]+'EastseW'[::y][:4]संपादित करें: इसकी संभावना अब बहुत लंबी हो जाएगी, लेकिन आप दूसरा टुकड़ा करने की क्रिया कर सकते हैं [:6*x**2], इसी तरह पूर्व / पश्चिम स्ट्रिंग के लिए, यदि आप पहली स्लाइसिंग पर त्रुटि को दरकिनार कर सकते हैं।
कोल

@ लियन lambda x,y:('North ','South ')[y+1]+('West','East')[x+1]or'That goes nowhere, silly!'2 बाइट्स से छोटा है
डेड पॉसम

@ लियन ओह, धन्यवाद! (मैं नकारात्मक अनुक्रमित के बारे में भूल गया!)
हाइपरनेट्रिनो

यही कारण है कि नहीं होगा काम @DeadPossum क्योंकि यह वापस आ जाएगी South Eastके लिए (0, 0)। फिर भी आपका धन्यवाद!
हाइपरनेत्रिनो

6

PHP, 101 बाइट्स

[,$b,$a]=$argv;echo$a|$b?[North,"",South][1+$a]." ".[West,"",East][1+$b]:"That goes nowhere, silly!";

मुझे PHP में प्रोग्राम किए हुए एक लंबा समय हो गया है, लेकिन यह कैसे पता है कि नॉर्थ, साउथ, वेस्ट और ईस्ट अपने आसपास डबल-कोट्स के बिना स्ट्रिंग्स हैं? क्या यह खाली स्ट्रिंग के कारण समान सरणी साझा करता है? यदि हाँ, तो इसका मतलब यह भी है कि आपके पास एक बार में विभिन्न प्रकारों के साथ एक सरणी नहीं हो सकती है (जैसे कि एक स्ट्रिंग और पूर्णांक दोनों के साथ एक सरणी)?
केविन क्रूज़सेन

1
@ केविनक्रूजसेन नॉर्थ एक निरंतर php.net/manual/en/language.constants.php है यदि निरंतर नहीं है तो इसे स्ट्रिंग के रूप में व्याख्या किया जाएगा। PHP में एक सरणी में विभिन्न प्रकार हो सकते हैं। तार चार तरीकों से निर्दिष्ट किए जा सकते हैं php.net/manual/en/language.types.string.php
Jörg Hülsermann

6

पर्ल 6 , 79 बाइट्स

{<<'' East South North West>>[$^y*2%5,$^x%5].trim||'That goes nowhere, silly!'}

कोशिश करो

विस्तारित:

{ # bare block lambda with placeholder parameters 「$x」 and 「$y」

  << '' East South North West >>\ # list of 5 strings
  [                               # index into that with:

    # use a calculation so that the results only match on 0
    $^y * 2 % 5, # (-1,0,1) => (3,0,2) # second parameter
    $^x % 5      # (-1,0,1) => (4,0,1) # first parameter

  ]
  .trim  # turn that list into a space separated string implicitly
         # and remove leading and trailing whitespace

  ||     # if that string is empty, use this instead
  'That goes nowhere, silly!'
}

6

जावास्क्रिप्ट (ईएस 6), 106 100 97 93 बाइट्स

यह एक बहुत ही सरल तरीका है। इसमें कुछ टर्नरी ऑपरेटरों का एक साथ घोंसला होता है -

f=a=>b=>a|b?(a?a>0?"South ":"North ":"")+(b?b>0?"East":"West":""):"That goes nowhere, silly!"

परीक्षण के मामलों

f=a=>b=>a|b?(a?a>0?"South ":"North ":"")+(b?b>0?"East":"West":""):"That goes nowhere, silly!"

console.log(f(1729)(1458));
console.log(f(1729)(-1458));
console.log(f(-1729)(1458));
console.log(f(-1729)(-1458));
console.log(f(0)(1729));
console.log(f(0)(-1729));
console.log(f(1729)(0));
console.log(f(-1729)(0));


a!=0बस के द्वारा प्रतिस्थापित किया जा सकता है a, क्योंकि 0 मिथ्या है और अन्य सभी मूल्य सत्य हैं। इसके अलावा, क्यूरिंग सिंटैक्स में इनपुट कम होता है, और एरे एपोच भी छोटा होता है।
ल्यूक

@Luke सुझाव के लिए धन्यवाद! मैंने उत्तर संपादित किया है। अब, मैं PHP और पायथन समाधानों को हरा रहा हूँ! सब तुम्हारी वजह से!!! धन्यवाद!
अर्जुन

f=a=>b=>फ़ंक्शन को कॉल और कॉल करके किसी अन्य बाइट को सहेजें f(1729)(1458); जिसका currying syntaxउल्लेख @Luke ने किया है।
टॉम

आप a|bइसके बजाय सुरक्षित रूप से उपयोग कर सकते हैं a||b। यह मानते हुए कि इनपुट में केवल -1, 0 या 1 है (जो मेरे लिए अस्पष्ट है), आप बदल सकते हैं a>0और b>0साथ में ~aऔर ~b
अरनुलद

इसके अलावा, आपको इन कोष्ठकों की आवश्यकता नहीं है: a?(...):""/b?(...):""
अरनुलद

4

बैच, 156 बाइट्स

@set s=
@for %%w in (North.%2 South.-%2 West.%1 East.-%1)do @if %%~xw==.-1 call set s=%%s%% %%~nw
@if "%s%"=="" set s= That goes nowhere, silly!
@echo%s%

forजब (संभवतः नकार) पैरामीटर -1 के बराबर होती है, और मिलान शब्द श्रृंखलाबद्ध पाश फिल्टर करने के लिए एक लुकअप तालिका के रूप में कार्य करता है। अगर कुछ भी नहीं चुना जाता है, तो इसके बजाय मूर्खतापूर्ण संदेश मुद्रित किया जाता है।


4

जावास्क्रिप्ट (ईएस 6), 86 बाइट्स

a=>b=>["North ","","South "][b+1]+["West","","East"][a+1]||"That goes nowhere, silly!"

व्याख्या

इसे करी वाक्यविन्यास ( f(a)(b)) के साथ कहें । यह सरणी सूचकांकों का उपयोग करता है। यदि दोनों aऔरb 0 हैं, तो परिणाम एक झूठा खाली स्ट्रिंग है। उस स्थिति में, ||वापस जाने के बाद स्ट्रिंग ।

कोशिश करो

यहां सभी परीक्षण मामलों का प्रयास करें:

let f=
a=>b=>["North ","","South "][b+1]+["West","","East"][a+1]||"That goes nowhere, silly!"

for (let i = -1; i < 2; i++) {
    for (let j = -1; j < 2; j++) {
        console.log(`${i}, ${j}: ${f(i)(j)}`);
    }
}


3

GNU sed , 100 + 1 (r फ्लैग) = 101 बाइट्स

s:^-1:We:
s:^1:Ea:
s:-1:Nor:
s:1:Sou:
s:(.*),(.*):\2th \1st:
s:0...?::
/0/cThat goes nowhere, silly!

डिज़ाइन के अनुसार, sed स्क्रिप्ट को कई बार निष्पादित करता है क्योंकि इनपुट लाइनें होती हैं, इसलिए ज़रूरत पड़ने पर सभी परीक्षण मामलों को एक बार में कर सकते हैं। नीचे TIO लिंक बस यही करता है।

इसे ऑनलाइन आज़माएं!

स्पष्टीकरण:

s:^-1:We:                         # replace '-1' (n1) to 'We'
s:^1:Ea:                          # replace '1' (n1) to 'Ea'
s:-1:Nor:                         # replace '-1' (n2) to 'Nor'
s:1:Sou:                          # replace '1' (n2) to 'Sou'
s:(.*),(.*):\2th \1st:            # swap the two fields, add corresponding suffixes
s:0...?::                         # delete first field found that starts with '0'
/0/cThat goes nowhere, silly!     # if another field is found starting with '0',
                                  #print that text, delete pattern, end cycle now

एक चक्र के अंत में शेष पैटर्न स्थान स्पष्ट रूप से मुद्रित होता है।


2

05AB1E , 48 45 43 बाइट्स

õ'†Ô'…´)èUõ„ƒÞ „„¡ )èXJ™Dg_i“§µ—±æÙ,Ú¿!“'Tì

इसे ऑनलाइन आज़माएं!

व्याख्या

õ'†Ô'…´)                                       # push the list ['','east','west']
        èU                                     # index into this with first input
                                               # and store the result in X
          õ„ƒÞ „„¡ )                           # push the list ['','south ','north ']
                    èXJ                        # index into this with 2nd input
                                               # and join with the content of X
                       ™                       # convert to title-case
                        Dg_i                   # if the length is 0
                            “§µ—±æÙ,Ú¿!“       # push the string "hat goes nowhere, silly!"
                                        'Tì    # prepend "T"


2

जाप , 56 बाइट्स

N¬¥0?`T•t goƒ Í2€e, Ðéy!`:` SÆ NÆ°`¸gV +S+` E†t Wƒt`¸gU

इसे ऑनलाइन आज़माएं! |परीक्षण सूट

स्पष्टीकरण:

N¬¥0?`Tt go Í2e, Ðéy!`:` SÆ NÆ°`¸gV +S+` Et Wt`¸gU
Implicit U = First input
         V = Second input

N´0?`...`:` ...`qS gV +S+` ...`qS gU
N¬                                                     Join the input (0,0 → "00")
  ¥0                                                   check if input is roughly equal to 0. In JS, "00" == 0
    ?                                                  If yes:
      ...                                               Output "That goes nowhere, silly!". This is a compressed string
     `   `                                              Backticks are used to decompress strings
          :                                            Else:
           ` ...`                                       " South North" compressed
                 qS                                     Split on " " (" South North" → ["","South","North"])
                   gV                                   Return the string at index V
                     +S+                                +" "+ 
                        ` ...`                          " East West" compressed
                              qS gU                     Split on spaces and yield string at index U

सुझाव: 00है बिल्कुल के रूप में ही 0;), के रूप में अतिरिक्त अंकों हटा दिया जाता है
ETHproductions

1
दूसरा सबसे अच्छा समाधान अभी तक कोई उतार-चढ़ाव नहीं है। मैं तुम्हारे लिए उत्थान करता हूं।
अर्जुन

1

रेटिना , 84 82 81 बाइट्स

1 बाइट ने @seshoumara को धन्यवाद दिया, 0...?इसके बजाय सुझाव देने के लिए बचाया0\w* ?

(.+) (.+)
$2th $1st
^-1
Nor
^1
Sou
-1
We
1
Ea
0...?

^$
That goes nowhere, silly!

इसे ऑनलाइन आज़माएं!


आउटपुट गलत है। ओपी वाई-अक्ष में एस को स्थानांतरित करने के लिए सकारात्मक संख्या चाहता है और एन को स्थानांतरित करने के लिए नकारात्मक संख्या।
शशमोर

@ शेशमौरा राइट, इसे एक ही बाईटेकाउंट के लिए तय किया (बस स्वैप करना था Norऔर Sou)
क्रिक्टी लिथोस

ठीक है। इसके अलावा, आप उपयोग करके 1 बाइट शेव कर सकते हैं 0...?
शीशमारा

@seshoumara टिप के लिए धन्यवाद :)
कृतिका लिथोस

1

151 बाइट स्विफ्ट करें

func d(x:Int,y:Int){x==0&&y==0 ? print("That goes nowhere, silly!") : print((y<0 ? "North " : y>0 ? "South " : "")+(x<0 ? "West" : x>0 ? "East" : ""))}

1

PHP, 95 बाइट्स।

यह केवल सरणी के तत्व को प्रदर्शित करता है, और यदि कुछ नहीं है, तो बस "डिफ़ॉल्ट" संदेश प्रदर्शित करता है।

echo['North ','','South '][$argv[1]+1].[East,'',West][$argv[2]+1]?:'That goes nowhere, silly!';

यह -rध्वज के साथ चलने के लिए है , समन्वयकों को 1 और 2 के तर्क के रूप में प्राप्त करना है।


1

सी # , 95 102 बाइट्स


golfed

(a,b)=>(a|b)==0?"That goes nowhere, silly!":(b<0?"North ":b>0?"South ":"")+(a<0?"West":a>0?"East":"");

Ungolfed

( a, b ) => ( a | b ) == 0
    ? "That goes nowhere, silly!"
    : ( b < 0 ? "North " : b > 0 ? "South " : "" ) +
      ( a < 0 ? "West" : a > 0 ? "East" : "" );

अनपढ़ पठनीय

// A bitwise OR is perfomed
( a, b ) => ( a | b ) == 0

    // If the result is 0, then the 0,0 text is returned
    ? "That goes nowhere, silly!"

    // Otherwise, checks against 'a' and 'b' to decide the cardinal direction.
    : ( b < 0 ? "North " : b > 0 ? "South " : "" ) +
      ( a < 0 ? "West" : a > 0 ? "East" : "" );

पूर्ण कोड

using System;

namespace Namespace {
    class Program {
        static void Main( string[] args ) {
            Func<Int32, Int32, String> f = ( a, b ) =>
                ( a | b ) == 0
                    ? "That goes nowhere, silly!"
                    : ( b < 0 ? "North " : b > 0 ? "South " : "" ) +
                      ( a < 0 ? "West" : a > 0 ? "East" : "" );

            for( Int32 a = -1; a <= 1; a++ ) {
                for( Int32 b = -1; b <= 1; b++ ) {
                    Console.WriteLine( $"{a}, {b} = {f( a, b )}" );
                }
            }

            Console.ReadLine();
        }
    }
}

विज्ञप्ति

  • v1.1 - + 7 bytes- एक समारोह में स्निपेट लपेटा।
  • v1.0 - 95 bytes - प्रारंभिक समाधान।

टिप्पणियाँ

मैं एक भूत हूँ, बू!


1
यह एक कोड स्निपेट है जिसे आपको इसे एक फ़ंक्शन में लपेटने की आवश्यकता है यानी (a,b)=>{...}बिट जोड़ें
TheLethalCoder

आप एक बाइट को बचाने के लिए क्युरिंग का उपयोग कर सकते हैं a=>b=>, के ()आसपास की आवश्यकता नहीं हो सकती है a|b, आप अंतर्निर्मित स्ट्रिंग्स का उपयोग करने में सक्षम हो सकते हैं ताकि स्ट्रिंग को अच्छे से निर्मित किया जा
सके

पूरी तरह से एक समारोह में लपेटने के लिए भूल गया: एस। के लिए ()चारों ओर a|b, मैं इसे की जरूरत है, अन्यथा Operator '|' cannot be applied to operands of type 'int' and 'bool'। मैंने प्रक्षेपित तारों को भी आज़माया है, लेकिन ""मुझे त्रुटियों के कारण बहुत कुछ नहीं दिया ।
अनहुमन

1

स्काला, 107 बाइट्स

a=>b=>if((a|b)==0)"That goes nowhere, silly!"else Seq("North ","","South ")(b+1)+Seq("West","","East")(a+1)

इसे ऑनलाइन आज़माएं

इसका उपयोग करने के लिए, इसे एक फ़ंक्शन के रूप में घोषित करें और इसे कॉल करें:

val f:(Int=>Int=>String)=...
println(f(0)(0))

यह काम किस प्रकार करता है

a =>                                // create an lambda with a parameter a that returns
  b =>                              // a lambda with a parameter b
    if ( (a | b) == 0)                // if a and b are both 0
      "That goes nowhere, silly!"       // return this string
    else                              // else return
      Seq("North ","","South ")(b+1)    // index into this sequence
      +                                 // concat
      Seq("West","","East")(a+1)        // index into this sequence

1

सी, 103 बाइट्स

f(a,b){printf("%s%s",b?b+1?"South ":"North ":"",a?a+1?"East":"West":b?"":"That goes nowhere, silly!");}

0

जावा 7, 130 बाइट्स

String c(int x,int y){return x==0&y==0?"That goes nowhere, silly!":"North xxSouth ".split("x")[y+1]+"WestxxEast".split("x")[x+1];}

स्पष्टीकरण:

String c(int x, int y){               // Method with x and y integer parameters and String return-type
  return x==0&y==0 ?                  //  If both x and y are 0:
     "That goes nowhere, silly!"      //   Return "That goes nowhere, silly!"
    :                                 //  Else:
     "North xxSouth ".split("x"[y+1]  //   Get index y+1 from array ["North ","","South "] (0-indexed)
     + "WestxxEast".split("x")[x+1];  //   Plus index x+1 from array ["West","","East"] (0-indexed)
}                                     // End of method

टेस्ट कोड:

इसे यहाँ आज़माएँ।

class M{
  static String c(int x,int y){return x==0&y==0?"That goes nowhere, silly!":"North xxSouth ".split("x")[y+1]+"WestxxEast".split("x")[x+1];}

  public static void main(String[] a){
    System.out.println(c(1, 1));
    System.out.println(c(0, 1));
    System.out.println(c(1, -1));
    System.out.println(c(0, 0));
  }
}

आउटपुट:

South East
South 
North East
That goes nowhere, silly!

0

सीजेएम , 68 बाइट्स

"
South 
North 

East
West"N/3/l~W%.=s_Q"That goes nowhere, silly!"?

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

[0 -1]या [0 1]( Northया South) पर एक अनुगामी स्थान प्रिंट करता है ।

व्याख्या

"\nSouth \nNorth \n\nEast\nWest"  e# Push this string
N/                                e# Split it by newlines
3/                                e# Split the result into 3-length subarrays,
                                  e#  gives [["" "South " "North "]["" "East" "West"]]
l~                                e# Read and eval a line of input
W%                                e# Reverse the co-ordinates
.=                                e# Vectorized get-element-at-index: accesses the element
                                  e#  from the first array at the index given by the 
                                  e#  y co-ordinate. Arrays are modular, so -1 is the last
                                  e#  element. Does the same with x on the other array.
s                                 e# Cast to string (joins the array with no separator)
_                                 e# Duplicate the string
Q"That goes nowhere, silly!"?     e# If it's non-empty, push an empty string. If its empty, 
                                  e#  push "That goes nowhere, silly!"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.