Girişi Yönüne Dönüştür


15

Meydan okuma

<n1>, <n2>Sayının -1, 0 veya 1 olabileceği formdaki girdi verildiğinde , karşılık gelen kardinal yönü döndürün . Pozitif sayılar x ekseninde Doğu, y ekseninde Güney, negatif sayılar x ekseninde Batı ve y ekseninde Kuzey hareket eder.

Çıktı biçiminde olmalıdır South East, North East, North. Büyük / küçük harfe duyarlıdır.

Giriş 0, 0 ise, programınız geri dönmelidir That goes nowhere, silly!.

Örnek Giriş / Çıkış:

1, 1 -> South East

0, 1 -> South

1, -1 -> North East

0, 0 -> That goes nowhere, silly!

Bu , bayttaki en kısa cevap kazanıyor.



1
W, NW ve SW ile ilgili bazı örnekler gereklidir.
seshoumara

@seshoumara Cep telefonuyum, bu yüzden backticks yok, ama KB -1, -1 olur
Matias K

1
Sondaki Boşluklara izin veriliyor mu?
Arjun

Ahh ... Tabii, sanırım. Aynı göründüğü sürece.
Matias K

Yanıtlar:


12

Japt , 55 51 bayt

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

açıklama

                      // 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

Çevrimiçi deneyin!


Um ... ben ... ??? Bu nasıl oluyor? Japt, ortak karakter çiftlerinin yerini alan bazı süslü şeylere sahip mi?
HyperNeutrino

@HyperNeutrino Evet, Japt, ortak küçük harf karakter çiftlerini tek bir baytla değiştiren shoco sıkıştırma kütüphanesini kullanır .
ETHproductions 23:17

Tamam, bu gerçekten harika! Buna bakacağım, bakalım bundan faydalanıp yararlanamayacağım.
HyperNeutrino

9

Python, 101 87 bayt

Gerçekten saf bir çözüm.

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

14 bayt kaydettiği için @Lynn'e teşekkürler! Değişiklikler: string.split yöntemini kullanmak aslında daha uzun yapar; _; Ayrıca, python'da negatif dizinler bulunur.


5
Bunu şöyle 87 kesebilirsin:lambda x,y:('','South ','North ')[y]+('','East','West')[x]or'That goes nowhere, silly!'
Lynn

2
Bazı yönleri almak için temiz bir yol buldum, ama ne yazık ki bu meydan okuma için işe yarayacak gibi görünmüyor. Yine de paylaşacağımı düşündüm (belki de x veya y = 0 gibi problemlerle nasıl başa çıkabileceğimi daha zeki bir kişi): lambda x,y:'North htuoS'[::x][:6]+'EastseW'[::y][:4]Düzenleme: şimdi çok uzun olacak, ancak ikinci dilimlemeyi yapabilirsiniz [:6*x**2], Doğu / Batı dizesi için de aynı şekilde, ilk dilimlemede hatayı atlatabilirseniz.
cole

@Lynn lambda x,y:('North ','South ')[y+1]+('West','East')[x+1]or'That goes nowhere, silly!'2 byte daha kısadır
Dead Possum

@Lynn Oh, teşekkürler! (Negatif indeksleri unuttum!)
HyperNeutrino

O dönecektir çünkü olmaz işi @DeadPossum South Eastiçin (0, 0). Yine de teşekkürler!
HyperNeutrino

6

PHP, 101 Bayt

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

PHP'de programladığımdan bu yana uzun zaman geçti, ancak Kuzey, Güney, Batı ve Doğu'nun çevrelerinde çift tırnak bulunmayan dizeler olduğunu nereden biliyor? Bu aynı diziyi paylaşan boş Dize nedeniyle mi? Evet ise, bu aynı zamanda farklı türlerde bir diziye sahip olamayacağınız anlamına mı gelir (hem dize hem de tamsayı içeren bir dizi gibi)?
Kevin Cruijssen

1
@KevinCruijssen North sabit bir php.net/manual/en/language.constants.php Sabit değilse, dize olarak yorumlanacaktır. PHP'deki bir dizi farklı türler içerebilir. dizeleri dört yolla belirtilebilir php.net/manual/en/language.types.string.php
Jörg Hülsermann

6

Perl 6 , 79 bayt

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

Dene

Expanded:

{ # 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

JavaScript (ES6), 106 , 100 97 93 bayt

Bu çok basit bir yaklaşım. Birlikte yuvalanmış birkaç üçlü operatörden oluşur -

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

Test Durumları

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!=0a0 ile değiştirilebilir , çünkü 0 yanlıştır ve diğer tüm değerler doğrudur. Ayrıca, köri sözdiziminde girdi almak daha kısadır ve dizi yaklaşımı da daha kısadır.
Luke

@ Luke Öneri için teşekkürler! Cevabı düzenledim. Şimdi, PHP ve Python çözümlerini yeniyorum! Hepsi senin yüzünden!!! Teşekkürler!
Arjun

f=a=>b=>İşlevi aşağıdaki gibi yapıp çağırarak başka bir bayt kaydedin f(1729)(1458); ki bu currying syntax@Luke her zaman mevcuttur.
Tom

Bunun a|byerine güvenle kullanabilirsiniz a||b. Giriş sadece -1, 0 veya 1 (bana belirsiz olan) oluştuğunu varsayarsak, yerini alabilir a>0ve b>0birlikte ~ave ~b.
Arnauld

Ayrıca, bu parantezlere ihtiyacınız yoktur: a?(...):""/b?(...):""
Arnauld

4

Toplu, 156 bayt

@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(Muhtemelen etkisiz) parametresi -1 eşittir, ve eşleşen kelimeleri bitiştirme zaman devre filtresi için bir arama tablosu olarak hareket eder. Hiçbir şey seçilmezse, bunun yerine aptalca mesaj yazdırılır.


4

JavaScript (ES6), 86 bayt

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

açıklama

Körili sözdizimi ( f(a)(b)) ile çağırın . Dizi dizinlerini kullanır. İkisi de olursaa ve b0 ise, sonuç boş bir dize olur. Bu durumda, arkasından gelen dize ||döndürülür.

Dene

Tüm test senaryolarını burada deneyin:

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 bayrağı) = 101 bayt

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

Tasarım gereği sed, komut dosyasını giriş satırları kadar çok kez yürütür, böylece gerekirse tüm test senaryolarını tek seferde yapabilirsiniz. Aşağıdaki TIO bağlantısı tam da bunu yapıyor.

Çevrimiçi deneyin!

Açıklama:

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

Bir döngünün sonunda kalan desen alanı dolaylı olarak yazdırılır.


2

05AB1E , 48 45 43 bayt

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

Çevrimiçi deneyin!

açıklama

õ'†Ô'…´)                                       # 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

Japt , 56 bayt

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

Çevrimiçi deneyin! |Test odası

Açıklama:

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

İpucu: 00olduğu tam olarak aynı 0ekstra haneli kaldırılırsa olarak;)
ETHproductions

1
İkinci en iyi çözüm henüz yok. Senin için oy kullanıyorum.
Arjun

1

Retina , 84 82 81 bayt

@Seshoumara sayesinde önermek 0...?yerine 1 bayt tasarruf etti0\w* ?

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

^$
That goes nowhere, silly!

Çevrimiçi deneyin!


Çıktı yanlış. OP pozitif sayıları y ekseninde S, negatif sayıları N taşımak için
istiyor

@seshoumara Doğru, aynı bayt için düzeltildi (sadece takas etmek zorunda kaldı Norve Sou)
Kritixi Lithos

Tamam. Ayrıca, kullanarak 1 bayt tıraş edebilirsiniz 0...?.
seshoumara

@seshoumara Tavsiye için teşekkürler :)
Kritixi Lithos

1

Swift 151 bayt

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 bayt.

Bu sadece dizinin elemanını görüntüler ve hiçbir şey yoksa, sadece "varsayılan" mesajı görüntüler.

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

Bu, -r1. ve 2. argümanlar olarak koordinatların alınmasıyla bayrakla çalışmayı amaçlamaktadır.


1

C # , 95 102 bayt


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" : "" );

Okunmamış okunabilir

// 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" : "" );

Tam kod

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();
        }
    }
}

Salıverme

  • v1.1 - + 7 bytes- Snippet'i bir işleve sarılmış.
  • v1.0 -  95 bytes- İlk çözüm.

notlar

Ben bir hayaletim, boo!


1
Bu, bir işleve sarmanız gereken bir kod snippetidir, yani (a,b)=>{...}bit ekleyin
TheLethalCoder

Bir bayt kaydetmek için currying kullanabilirsiniz a=>b=>, ()etrafında a|bgerek olmayabilir, dize de güzel inşa etmek için enterpolasyonlu dizeleri kullanabilirsiniz
TheLethalCoder

Tamamen bir işleve sarmayı unuttum: S. İçin ()etrafında a|b, yapmam aksi takdirde gerek Operator '|' cannot be applied to operands of type 'int' and 'bool'. Ayrıca enterpolasyonlu dizeleri denedim, ama ""bana hatalar vermesine rağmen çok vermedim .
17'de auhmaan

1

Scala, 107 bayt

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

Çevrimiçi deneyin

Bunu kullanmak için bunu bir işlev olarak bildirin ve arayın:

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

Nasıl çalışır

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

C, 103 bayt

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

0

Java 7, 130 bayt

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];}

Açıklama:

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

Test kodu:

Burada deneyin.

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));
  }
}

Çıktı:

South East
South 
North East
That goes nowhere, silly!

0

CJam , 68 bayt

"
South 
North 

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

Çevrimiçi deneyin! veya tüm test senaryolarını doğrulayın

Sondaki bir boşluğu [0 -1]veya [0 1]( Northveya South) üzerine yazdırır .

açıklama

"\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!"

0

Röda , 100 bayt

f a,b{["That goes nowhere, silly!"]if[a=b,a=0]else[["","South ","North "][b],["","East","West"][a]]}

Çevrimiçi deneyin!

Bu, diğer bazı cevaplara benzer, önemsiz bir çözümdür.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.