Codegolf – Где Оказалась Джилл?

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

Джилл живет на (магнитном) северном полюсе. Однажды Джилл решила пойти на прогулку, путешествуя некоторое время в четырех направлениях (север, восток, запад, юг) с помощью компаса. Ваша задача — выяснить, оказалась ли Джилл там, где живет Джилл, то есть на северном магнитном полюсе.

На северном полюсе определяется только юг. Прогулка на север или юг меняет широту, а прогулка на восток или запад меняет долготу. Долгота не определяется на северном полюсе. В результате Джилл оказалась бы на северном полюсе тогда и только тогда, когда сумма расстояний, которые Джилл прошла на юг, равна сумме расстояний, которые Джилл прошла на север, а расстояния, которые Джилл прошла на восток и запад, равны сумме расстояний, которые Джилл прошла на север. не имеет значения.

Вход

Список пар (направление, сумма). Введенные данные должны быть действительными. Суммы будут целыми числами. Приемлемые форматы включают в себя:

  •  
     S100
    S10, E314, N5
    S300, W135, S10, E35, N290
     
  • S100, E50, N50, W50, N50 S10, E1000, S30, W400, S10, W10, N50 S30, N30 S10, E50, E50, N10
  • (200,0) (complex number)
  • (0, 200) (0123 for NESW)
  • 200i (the above reversed)

Выход

Два согласованных значения: одно для случая, когда Джилл все-таки оказалась на северном магнитном полюсе, и другое для случая, когда Джилл этого не сделала.

Тестовые случаи

Правдивые данные:

"200N"

Ложные входы:

"N200"

Подсчет очков

Это . Выигрывает самый короткий ответ в байтах. Применяются стандартные лазейки.

#код-гольф #код-гольф #математика

Olivwh61


Рег
02 Aug, 2012

Тем
75

Постов
181

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

Желе, 3 байта

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 lambda s:sum(s).imag==0
 

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

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

Как это работает

select sign(sum(iif(m like'[NS]%',stuff(m,1,1,iif(m like'S%','-','')),0)))+1 from a group by g ||answer||

JavaScript (ES6), 36 байт

Принимает входные данные в виде массива [ориентация, расстояние] массивы, с 0123 = Новый Южный Уэльс. Возвращает логическое значение.

true true true true false false false

Результат по модулю в JS имеет тот же знак, что и делимое:

  • (0 - 1) % 2 == -1 (север)
  • (2 - 1) % 2 == 1 (юг)

.map() альтернатива, 36 байт

class M{ static boolean c(String[]a){int n=0,s=0,c,i;for(String x:a){c=x.charAt(0);i=new Short(x.substring(1));n+=c==78?i:0;s+=c==83?i:0;}return n==s;} public static void main(String[] a){ System.out.println(c(new String[]{ "S100", "E50", "N50", "W50", "N50" })); System.out.println(c(new String[]{ "S10", "E1000", "S30", "W400", "S10", "W10", "N50" })); System.out.println(c(new String[]{ "S30", "N30" })); System.out.println(c(new String[]{ "S10", "E50", "E50", "N10" })); System.out.println(c(new String[]{ "S100" })); System.out.println(c(new String[]{ "S10", "E314", "N5" })); System.out.println(c(new String[]{ "S300", "W135", "S10", "E35", "N290" })); } }

Тестовые случаи

boolean c(String[]a){ // Method with String-array parameter and boolean return-type int n=0, // North-sum s=0, // South-sum c,i; // Two temp integers to save bytes for(String x:a){ // Loop over the input-array c=x.charAt(0); // Set `c` to the first character i=new Short(x.substring(1)); // Set `i` to the actual number n+=c==78?i:0; // If `c` == 'N': increase the North-sum with `i` s+=c==83?i:0; // If `c` == 'S': increase the South-sum with `i` } // End of loop return n==s; // Return if the North- and South-sums are equal } // End of method ||answer||

Пакетный, 78 байт

boolean c(String[]a){int n=0,s=0,c,i;for(String x:a){c=x.charAt(0);i=new Short(x.substring(1));n+=c==78?i:0;s+=c==83?i:0;}return n==s;}

Принимает входные данные в виде аргументов командной строки в сложном формате (например, 0== ). Outputs 1> если Джилл вернется на полюс, 1>Im@Tr@#& if not.

 

Nioneika


Рег
14 Oct, 2019

Тем
73

Постов
188

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

Пиф, 3 байта

!es s # Sum e # Imaginary part ! # Not

Введите в виде списка комплексных чисел.

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

!es ||answer||

Математика, 10 байт

0

Чистая функция, принимающая список комплексных чисел (тот же формат и реализация, что и Ответ Денниса Джелли). 1 saves a byte over -100 50i 50 -50i 50 , и является действительным благодаря тому факту, что расстояния всегда будут целыми числами и вы не можете пойти на север от северного полюса.

 

K1ulqigi


Рег
16 Jan, 2007

Тем
70

Постов
200

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

Java 7, 135 байт

@set l=0 @for %%s in (%*)do @set t=%%s&call set/al+=%%t:i=*0%% @cmd/cset/a!l

Этот ограниченный формат ввода довольно раздражает, но я думаю, что это была основная часть проблемы.

Объяснение:

let f = a=>!a.reduce((p,[o,d])=>p+--o%2*d,0) // truthy console.log(f([[2,100], [1,50], [0,50], [3,50], [0,50]])) console.log(f([[2,10], [1,1000], [2,30], [3,400], [2,10], [0,50]])) console.log(f([[2,30], [0,30]])) console.log(f([[2,10], [1,50], [1,50], [0,10]])) // falsy console.log(f([[2,100]])) console.log(f([[2,10], [1,314], [0,5]])) console.log(f([[2,300], [3,135], [2,10], [1,35], [0,290]]))

Тестовый код:

Попробуйте здесь.

a=>a.map(([o,d])=>a=~~a+--o%2*d)&&!a

Выход:

a=>!a.reduce((p,[o,d])=>p+--o%2*d,0) ||answer||

Microsoft Sql-сервер, 94 байта

SĊṆ Main link. Argument: A (array of directions) S Take the sum of A. Ċ Get the imaginary part of the sum. Ṇ Take the logical NOT of the imaginary part.

Проверьте это.

 

Garuggenheim


Рег
03 Jun, 2007

Тем
69

Постов
211

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

Питон, 23 байта

SĊṆ

Введите в виде списка комплексных чисел.

 

Matlaber


Рег
02 Dec, 2013

Тем
79

Постов
201

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

Интересно